邓秀辉,李 民,方 惠
(昆明理工大学,昆明 650500)
当今互联网技术在物流、仓储、财务等多领域均得到广泛运用,能有效提高企业的信息化和自动化水平[1]。由于现代化企业员工数量和数据量的急剧增加,传统信息系统在并发性和扩展性等方面,存在难以逾越的瓶颈。若查询数据缓慢或服务器节点一旦发生宕机,则无法为企业员工正常地提供服务,影响工作进程,使得信息系统的可靠性和稳定性无法得到保障。为避免发生类似情况产生,本文提出了分布式集群高可用系统设计。其流程主要含括三个部分,分布式Client;Nginx前端服务器;DataBase及Redis缓存数据库集群架构。该信息系统能够实现多用户并发访问资源,同时利用Redis集群实现热点数据缓存,提升查询响应速度和系统灵活性,增强系统的高可用性。
Nginx是一个轻量、性能高的HTTP和反向代理服务器。与传统的服务器不同,它可在较低的资源使用率下提供大量的并发请求处理能力(C语言编写),具有抗击高并发、响应速度快等特点。一般情况下,Nginx服务器的并发能力在3万/秒高于Tomcat服务的150/秒。同时,Nginx服务器可以实现动态和静态资源的分离。一方面,Nginx可以用于前端作反向代理服务器,处理静态资源,如HTML、CSS等;另一方面,Nginx提供负载均衡技术,该技术可以发挥集群性能,分流动态请求链路到后端服务器集群。其负载均衡策略主要有:轮询(RR)、权重、IPHASH、最小连接(LC)等策略[2,4]。
Redis是一种高性能分布式的非关系型数据库[5],其数据是以Key-Value键值对的形式存储,支持多种数据结构的存储,如链表(List)、字符串(String)、集合(Set)等,可实现对热点数据的快速增删查改操作。Redis缓存数据库是基于内存存储数据的方式,具有读写性能高、支持不定期半持久化模式(RDB),通过异步方式将数据保存到磁盘上和实时持久化模式(AOF)保障数据安全等操作,并且Redis具有分片机制、哨兵机制、心跳检测机制、主从复制等特点,在提高存储效率的同时,能保障数据集群的高可用等特点。
随着企业不断发展,信息系统中的功能也在随之增加。在大型信息系统设计中要把一个大系统拆分为多个单独的子系统,如生产、物流、采购等子系统,分别存放在不同的服务器。一方面,可以降低信息系统在同时间内多人访问时的数据库访问压力;另一方面,可以降低系统中各个功能模块的耦合度,便于后期企业的扩张新增功能模块。
在项目部署到服务器时,为提高系统的并发能力,通常根据项目功能模块的不同,将项目进行垂直拆分,把不同的项目模块拆分到不同的服务器中,可以提高整个系统的并发能力,不会因一个模块功能服务器的宕机,而引发整个系统不能使用的现象,具体部署如图1所示。
图1 功能模块垂直拆分
大型信息系统在设计时为了后期维护与新增功能模块的需求,根据业务代码的层级进行项目功能的水平拆分,可以拆分为Web/viwe层、Controller层、Service层、接口、Vo层、Pojo层等,从而实现代码的高内聚,低耦合。
图2 项目功能水平拆分
该系统为抗击高并发,采用Nginx前端服务器和Redis缓存数据库的形式搭建并发访问机制。首先,通过Nginx前端服务器的轮询负载均衡策略,以用户端的逻辑事务请求的域名地址,链路到后端服务器集群。后端服务器集群根据具体的域名地址效解析相关的逻辑业务请求。针对相关的内容进行相对应的处理,实现动态业务资源信息的实时写入操作。其次,Tomcat服务器在处理相关逻辑业务的同时,会先查找Redis服务器集群中是否缓存有需要的数据信息,如果有则直接返回给业务逻辑层进行相对应的逻辑处理;若Redis服务器集中中没有相对应的缓存数据信息,则从数据库中查询对应信息,返回给业务逻辑进行处理。最后,通过业务逻辑的处理,把从数据库查找到的数据信息备份到Redis缓存数据中,以便下次执行相同的业务逻辑时,可以提高响应速度。
图3 高并发服务器集群设计
为提高员工查询数据时的响应速度,通常会把热点数据保存在内存中。但是由于内存大小有限,在缓存数据时需要搭建Redis数据库集群[6]。为保证数据能够分散存储和数据存储的一致性;同时,也能满足用户的正常访问需求,实现服务故障的自动迁移。因此采用Redis哨兵机制,提升缓存数据的高可用性,并且对Redis服务器集群节点做主从复制,从节点对主节点进行复制备份,实现数据同步[7]。
若内存占用大,会导致Redis效率下降,搭建Redis分片机制可以实现内存的扩容。为尽可能使Redis服务器不出现 机情况,采用Redis哨兵工作原理,哨兵通过心跳检测检测机制向主机发出心跳检测PING-PONG,如果连续三次没有收到主机的回执,则发现主机宕机,开始进行故障迁移,从从机中推选主服务器。最后,配置Redis主从复制结构服务器集群,具体Redis数据库集群架构如图5所示。
图4 Redis集群服务器设计
本文将Tomcat服务集群和Redis缓存数据库集群部署到Vmware虚拟机Linux系统中,因为项目在Lixun系统中运行,具有更稳定,更安全,更有效率等特点。在集群搭建过程中,需要把Tomcat服务器集群和Redis数据库集群部署到Linux虚拟机中,同时开放Linux系统的防火墙设置。与此同时,在Windows系统中,开放Mysql数据的访问权限和防火墙,使用xshell工具实现Linux系统与Windows系统进行通信,具体如图5所示。
图5 集群搭建
本实验在Wmware虚拟机Linux系统中分别部署Tomcat服务器三台,将项目打包复制到三个Tomcat服务中进行部署,具体步骤如下:
步骤一:分别运行Tomcat服务器,检测项目是否能够正常启动;
步骤二:使用超级管理员启动Nginx;
步骤三:Nginx启动检查(主进程和守护进程);
步骤四:编写Nginx.conf文件,包括监听端口号、域名;编写轮询策略、集群连接信息等;
步骤五:编辑Windows系统中Host文件,添加IP与域名映射关系;
步骤六:Windows系统Web页面中打开信息系统,进行增、删、查、改等测试操作,检测Windows系统与Linux系统能否进行正常的数据通信。
在本实验中Redis主从划分规则为3台主机和3台从机共6台服务器部署到Vmware中Linux系统中。
1)检测Redis节点是否能正常启动
图6 Redis节点启动
2)搭建Redis集群
从图7中可以看出Redis节点为主机的分别是:节点7000、7001、7002;从机节点分别是:7003、7004、7005。
图7 Redis主从节点
3)Redis集群高可用测试
步骤一:关闭Redis主机节点7000,检测是否自动实现故障迁移[8];
步骤二:再次启动关闭的主机,检测是否能够实现自动挂载。
图8 故障迁移
为了验证系统架构在并发处理能力和读取数据方面的性能,选择运用PostMan工具和JMeter插件进行测试。实验测试环境为:i7/8G内存、Windows10系统、JDK1.8、Mysql8.0、Redis4.0、Tomcat8.5。
实验测试方案:
1)使用PostMan工具进行数据读取操作测试,比较有无Redis缓存数据库的情况下的读取速度;从图9可以看出添加Redis缓存数据库的响应速度为32.37ms要明显高于没有添加Redis缓存数据库的读取速度,且添加Redis缓存数据库的其他性能指标也要高于没有添加Redis缓存的性能。
图9 有无Reids缓存读取速度比较
2)使用Jemeter插件工具,比较员工数量在500、1000、2000数量时传统信息系统与本文设计的信息系统的并发能力比较。从表1平均响应时间来看,Nginx+Redis系统的性能要优于传统的信息系统。
表1 平均响应时间
本文运用Nginx前端服务器与Redis缓存的方式构建了基于分布式集群高可用的信息系统,通过Nginx前端服务器负载均衡策略链路后端服务器集群,缓解服务器在同一点内的访问压力,提高并发能力;采用高可用Redis哨兵、分片、主从复制机制对热点数据进行缓存,提高数据库读写能力,并防止因服务器因 机出现数据丢失现象。由实验对比表明,相比传统的信息系统,该系统并发能力和数据读取方面都有。明显的提升,满足企业发展需求,提升企业的运行效率和经济效益。