知识库介绍:企业级知识库管理系统。
全文检索(基于Lucene的全文索引):
知识详情页(使用FreeMark静态化技术,用户直接访问静态化页面,由于Tomcat不适合作为静态资源的web容器,采用Nginx作为静态资源的容器,而Nginx能处理并发的请求为4万左右,大大增加了我们服务器的性能。当用户创建知识条目后,通过MQ发送给页面静态化服务,生成静态页面):
附件文件预览(基于openoffice, 将主流的文档格式转化成可在线预览的html, 附件要生成全文索引,方便供搜索服务检索):
项目架构,可以根据业务的体量选择合适的架构:
分布式SOA服务架构,其中每个服务都可以单独部署在Tomcat等web容器中,每个服务都可以做集群。
集群架构:
要特别注意搭建集群后某些业务并发的问题,比如现在有一个业务需求:需要5分钟统计一次各个知识条目的热度,比如下载量,好评率做一个统计分析的定时任务,但这个定时任务在好几台机器上都发布了,我们不能说让每台机子都去执行一下这个定时任务,解决这个问题可以采用分布式锁。
在这里,我只只按最小单位部署,不搭集群,搭个单体架构。但为了项目的可扩展性,能比较方便地从单体架构向集群架构向微服务分布式架构演进,项目根据业务模块进行了划分,单个业务之间“高内聚”,不同业务之间“低耦合”。
众所周知,像Dobbo这种消息中间件采用的是RPC,即远程过程调用(Remote Procedure Call, RPC)可以用于一个进程调用另一个进程(很可能在另一个远程主机上)中的过程,从而提供了过程的分布能力。Java 的 RMI 则在 RPC 的基础上向前又迈进了一步,即提供分布式对象间的通讯。这里我采用原生实现了三个web之间通过RMI的调用。
wda-web调用了wcp-web相关接口,rmi协议暂定为:rmi://wcp-web部署的机子的ip地址:8701/luyuanwcpapi
wda-tag调用了wda-web的相关接口,rmi协议暂定为:rmi://wda-web部署的机子的ip地址:8702/luyuanwdaapi
云服务部署流程
◆ 云服务器(申请,配置)
建议:安全组策略全部开放,我们通过防火墙和ip接口进行安全控制。不然,安全组策略和防火墙的配置出现重复劳动。
◆ 域名(申请、备案、配置)
DNS解析:我们可以配置多个二级域名,可以通过Nginx对ServerName进行判断从而对服务进行转发。
◆ 源配置
◆ 用户权限配置
企业开发中,由于root管理员账号权限太高,为了安全考虑,会分配给不同的开发组具有不同权限的普通账号,比如后端开发人员,数据库开发人员,测试人员,运维人员,不同分工的人员所分配的账号权限不一样。
◆ 线上环境——单体系统架构(后期可以根据业务体量,扩展到“集群架构", "分布式SOA架构",服务直接通过RPC,MQ调用)
▪ JDK1.7
▪ Tomcat7
▪ Maven3.5.4
▪ Vsftpd2.2
▪ Nginx1.10.2
▪ Mysql5.7(注意: Linux下Mysql安装完后默认:区分表名的大小写,不区分列名的大小写; Windows下数据库名、表名、列名、别名都不区分大小写)
▪ Git2.8 (业内一般:分支提交,主干发布)
◆ 防火墙的配置(很重要)
◆ 自动化发布脚本
◆ 线上验证
源配置
1、备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/,这里我用的是CentOS6.8,所以选择Centos-6.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
如果是CentOS7及以上版本:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
3、之后运行yum makecache生成缓存。
用户权限配置
新建一个具有sudo权限的普通用户,以后都用该账号进行连接(模拟企业真实开发的环境)。
这样该用户操作非/usr/wujie其他目录时,比如该用户想删除/developer/目录下的一个文件,此时由于没有该文件夹的权限,必须用sudo来删除,这样管理员就可以跟踪sudo日志来查看每个开发人员在服务器上的相关操作。
后面会创建一个账号,有登陆ftp服务的权限,但没有登陆云服务器的权限。
给登录名wujie创建一个主目录/usr/wujie, 然后重置一下新创建的账号的密码