论文部分内容阅读
摘 要:随着信息化时代的不断发展,但是随着规模的不断壮大,面临的问题也随之出现。其中最主要的问题就是随着用户访问量的增加,面对大量高并发、高负载的访问,系统难免出现无法支撑的局面,导致系统性能下降,系统响应时间过长,甚至导致系统崩溃的后果,在本文主要围绕高并发的问题,对服务器集群中的session存储问题进行了分析与设计,并且对系统后端数据库进行了改进。
关键词:高并发;session存储;读写分离;服务器集群
1.session存储问题分析
当应用服务器从单机变为集群时,可以显著提高系统整体的并发能力,但是会面临session一致性的问题。当用户访问系统前端页面时,所有的请求都会经过负载调度器,负载调度器通过负载均衡算法,将用户请求分配给一个后端服务器节点,然后在该服务器中创建session,将处理后的数据返回给用户。当用户再次访问系统时,负载均衡器很可能将请求分配给另外一台服务器,还需重新创建session,所以在服务器集群化部署过程中,最重要的就是session同步问题。把各个应用服务器做成无状态的应用节点。用户访问系统时,集群内的应用服务器对等,任意一台服务节点处理请求的结果都是一样的。
2.session数据存储设计
Session复制方案是由Web容器提供的会话复制功能,在集群中各个服务节点存储所有用户的会话信息,使得应用服务器中session数据保持同步。该方案的局限性是,每当会话数据发生变化时,都要进行数据同步,当服务器数量庞大的情况下,同步数据必然导致网络带宽开销变大,并且每台服务器都要保存所有的会话数据,当访问量变大时,session数据消耗内存非常严重。
根据上述分析结果,将session数据存储方案做出了改进,将session数据统一存储到数据库中,应用服务器从后端数据库中获取session。这样无论哪条session数据发生变化,最终的数据都集中存储到数据库中,各个服务器节点不必消耗资源来同步会话数据。
该方案相比于session复制方案,不需要消耗服务器内存来保存session数据。但是对数据库进行读写session数据引入了网络操作,相对于本机同步session可能存在時延,但是这种数据传递过程发生服务器集群内部,且网络环境处于局域网中,对通信的影响甚微。面对大量服务器集群session较多的情况下,该方案优势比较明显。
负载均衡器按照负载均衡算法将请求转发给集群内部的应用服务器,此时应用服务器在后端Redis缓存服务器中创建一个session,当同一个session中有多次请求时,即使将请求分配给其他服务器,该服务器也可以从Redis缓存中读取session,所以集群内任何一台处理请求的结果都是相同的。
Session统一存储采用Redis作为缓存服务器,为了保证应用的可靠性采用主从备份的方式。Master(主)库进行写操作,Slave(从)库进行读操作。并且Master库与Slave库数据保持同步。当主库出现问题时,从库的心跳监测机制会将从库升级为主库。
3.数据库集群设计
在高并发的情况下,系统响应时间过长甚至系统瘫痪大多数原因都是由于数据库瓶颈造成的[1]。解决了应用服务器请求分配的问题之后,应用服务器需要从数据库请求数据,此时数据库的瓶颈会暴露出来。根据木桶原理,那么数据库成为系统的短板,所以说解决高并发问题,需要从整体进行优化。下面讨论对数据库集群进行设计,来提高后端数据库的承载能力。
4.数据库读写分离
读写分离方案主要应用于读写比很大的系统[2],从业务角度分析对数据库的操作读大于写,所以说后端数据库采用读写分离进行优化是提高数据库承载能力的有效办法[3]。
首先在数据层面实现读写分离,采用一个Master数据库,多个Slave数据库设计方案,根据自身业务的需求,将Master库与Slave库中的数据保持同步。应用程序对数据进行编译,将数据传递到数据库层,Master库负责对数据完成insert/update/delete操作,Slave主要读取非实时性的数据,完成数据的select操作。在数据库读写操作中,读的频率远远大于写,并且读取操作所占用的资源和耗时也更多,当Master库出现问题之后,Slave库替代Master库的角色,来完成写操作,系统的读写分离的设计结构如图1所示。
5.优化后的系统并发测试
测试环境的搭建
测试系统系统由Nginx负载均衡服务器,测试终端PC机,五台应用服务器组成。部署相同的数据库系统,根据配置文件将数据库分为读写不同的角色。为了方便测试,将该测试系统搭建在同一局域网里,通过两层交换机连接起来,终端测试机通过Jmeter生成并发连接数,访问负载均衡服务器,负载均衡器将请求分发给后端应用服务器。
在测试机中运行Jmeter中发送模拟用户请求,并且在两次测试中设定相同的并发用户数量和测试脚本。向负载均衡器发送的并发连接数为100、300、500、1000、1500、2000、2500、3000。为了防止单次测量出现的误差,在相同并发量的基础上分为10次测量,计算出平均值。如表一所示
在本文主要针对高并发场景常用的技术进行了架构设计,并提出了设计方案,包括服务器集群所用到的session同步技术和数据库架构方案,最后使用Apache-Jmeter压测软件对系统进行并发测试,在不同的并发连接数量下请求系统,通过性能测试与数据对比整合分析表明,当并发连接数达到一定程度时,本文优化后的系统架构服务器集群性能有所提升,可以应用于高并发场景下。
参考文献
[1]龚卫华.数据库集群系统的关键技术研究[Dl.武汉:华中科技大学,2006, 53-61.
[2]沙光华.读写分离技术在运营支撑系统中的应用[J].计算机工程与应用,2015.12:107-110.
[3] 徐清德.Oracle读写分离系统在采油厂数据中心中的应[J].信息系统工程,2015.11.21-22.
作者简介:张淇 1994-08-12男,汉,河北唐山,硕士研究生,研究方向:计算机网络与信息安全技术,063000
关键词:高并发;session存储;读写分离;服务器集群
1.session存储问题分析
当应用服务器从单机变为集群时,可以显著提高系统整体的并发能力,但是会面临session一致性的问题。当用户访问系统前端页面时,所有的请求都会经过负载调度器,负载调度器通过负载均衡算法,将用户请求分配给一个后端服务器节点,然后在该服务器中创建session,将处理后的数据返回给用户。当用户再次访问系统时,负载均衡器很可能将请求分配给另外一台服务器,还需重新创建session,所以在服务器集群化部署过程中,最重要的就是session同步问题。把各个应用服务器做成无状态的应用节点。用户访问系统时,集群内的应用服务器对等,任意一台服务节点处理请求的结果都是一样的。
2.session数据存储设计
Session复制方案是由Web容器提供的会话复制功能,在集群中各个服务节点存储所有用户的会话信息,使得应用服务器中session数据保持同步。该方案的局限性是,每当会话数据发生变化时,都要进行数据同步,当服务器数量庞大的情况下,同步数据必然导致网络带宽开销变大,并且每台服务器都要保存所有的会话数据,当访问量变大时,session数据消耗内存非常严重。
根据上述分析结果,将session数据存储方案做出了改进,将session数据统一存储到数据库中,应用服务器从后端数据库中获取session。这样无论哪条session数据发生变化,最终的数据都集中存储到数据库中,各个服务器节点不必消耗资源来同步会话数据。
该方案相比于session复制方案,不需要消耗服务器内存来保存session数据。但是对数据库进行读写session数据引入了网络操作,相对于本机同步session可能存在時延,但是这种数据传递过程发生服务器集群内部,且网络环境处于局域网中,对通信的影响甚微。面对大量服务器集群session较多的情况下,该方案优势比较明显。
负载均衡器按照负载均衡算法将请求转发给集群内部的应用服务器,此时应用服务器在后端Redis缓存服务器中创建一个session,当同一个session中有多次请求时,即使将请求分配给其他服务器,该服务器也可以从Redis缓存中读取session,所以集群内任何一台处理请求的结果都是相同的。
Session统一存储采用Redis作为缓存服务器,为了保证应用的可靠性采用主从备份的方式。Master(主)库进行写操作,Slave(从)库进行读操作。并且Master库与Slave库数据保持同步。当主库出现问题时,从库的心跳监测机制会将从库升级为主库。
3.数据库集群设计
在高并发的情况下,系统响应时间过长甚至系统瘫痪大多数原因都是由于数据库瓶颈造成的[1]。解决了应用服务器请求分配的问题之后,应用服务器需要从数据库请求数据,此时数据库的瓶颈会暴露出来。根据木桶原理,那么数据库成为系统的短板,所以说解决高并发问题,需要从整体进行优化。下面讨论对数据库集群进行设计,来提高后端数据库的承载能力。
4.数据库读写分离
读写分离方案主要应用于读写比很大的系统[2],从业务角度分析对数据库的操作读大于写,所以说后端数据库采用读写分离进行优化是提高数据库承载能力的有效办法[3]。
首先在数据层面实现读写分离,采用一个Master数据库,多个Slave数据库设计方案,根据自身业务的需求,将Master库与Slave库中的数据保持同步。应用程序对数据进行编译,将数据传递到数据库层,Master库负责对数据完成insert/update/delete操作,Slave主要读取非实时性的数据,完成数据的select操作。在数据库读写操作中,读的频率远远大于写,并且读取操作所占用的资源和耗时也更多,当Master库出现问题之后,Slave库替代Master库的角色,来完成写操作,系统的读写分离的设计结构如图1所示。
5.优化后的系统并发测试
测试环境的搭建
测试系统系统由Nginx负载均衡服务器,测试终端PC机,五台应用服务器组成。部署相同的数据库系统,根据配置文件将数据库分为读写不同的角色。为了方便测试,将该测试系统搭建在同一局域网里,通过两层交换机连接起来,终端测试机通过Jmeter生成并发连接数,访问负载均衡服务器,负载均衡器将请求分发给后端应用服务器。
在测试机中运行Jmeter中发送模拟用户请求,并且在两次测试中设定相同的并发用户数量和测试脚本。向负载均衡器发送的并发连接数为100、300、500、1000、1500、2000、2500、3000。为了防止单次测量出现的误差,在相同并发量的基础上分为10次测量,计算出平均值。如表一所示
在本文主要针对高并发场景常用的技术进行了架构设计,并提出了设计方案,包括服务器集群所用到的session同步技术和数据库架构方案,最后使用Apache-Jmeter压测软件对系统进行并发测试,在不同的并发连接数量下请求系统,通过性能测试与数据对比整合分析表明,当并发连接数达到一定程度时,本文优化后的系统架构服务器集群性能有所提升,可以应用于高并发场景下。
参考文献
[1]龚卫华.数据库集群系统的关键技术研究[Dl.武汉:华中科技大学,2006, 53-61.
[2]沙光华.读写分离技术在运营支撑系统中的应用[J].计算机工程与应用,2015.12:107-110.
[3] 徐清德.Oracle读写分离系统在采油厂数据中心中的应[J].信息系统工程,2015.11.21-22.
作者简介:张淇 1994-08-12男,汉,河北唐山,硕士研究生,研究方向:计算机网络与信息安全技术,063000