Web项目,尤其是面向C端的项目,做到中后期往往要解决高并发的问题。本文通过对三种架构的并发性能分析,为这一阶段的开发和重构提供参考。
基本概念
并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
并发访问:同一时间对系统的访问。
QPS:每秒请求数。平常所谓的高并发是指QPS值。
PV:综合浏览量(PageView),即页面浏览量或者点击量,一个访客在24小时内访问的页面数量。
UV:独立访客(UniqueVisitor),即一定时间范围内相同访客多次访问网站,只计算为1个独立访客。
系统容量预估
预估步骤:
(1) 注册用户数-日均UV量-每日的PV量-每天的并发量;
(2) 峰值预估:平常量的2~3倍;
(3) 根据并发量(并发,事务数),存储容量计算系统容量。
项目需求:3~5年用户数达到1000万注册用户;
每秒并发数预估:
(1) 每天的UV为200万(二八原则);
(2) 每日每天点击浏览30次;
(3) PV量:200*30=6000万;
(4) 集中访问量:24*0.2=4.8小时会有6000万*0.8=4800万(二八原则);
(5) 每分并发量:4.8*60=288分钟,每分钟访问4800/288=16.7万(约等于);
(6) 每秒并发量:16.7万/60=2780(约等于);
(7) 假设:高峰期为平常值的三倍,则每秒的并发数可以达到8340次。
(8) 1毫秒=1.3次访问;
结论:按一台web服务器,支持每秒1000个并发访问计算。平常需要3台服务器, 高峰期需要9台服务器(不过多考虑硬件和网络条件)。
几种Web系统架构模式
(一) 单体式架构
打包、部署后,运行在同一台服务器的同一进程中,功能、代码和数据集中,这样的应用称为单体式架构应用。
单体式架构应用,应从代码以及数据库层面提升并发性能。
(二) 集群架构
计算机集群简称”集群”,是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,工作站或超级计算机性能价格比要高得多。
为了提高性能,当单体式架构应用达到当前服务器硬件极限时,应考虑增加服务器的方式,也就是构建服务器和数据库集群,来提升并发性能。这种架构,在原有的单体式架构基础上增加负载均衡层,将原有的代码部署在多台服务器上,通过负载均衡层分发请求。单体式架构的项目可以平滑升级为集群架构。另外,集群架构还具有以下几个优秀特性。
性价比:几台普通服务器可以胜任价格高昂的单台高性能服务器的工作
可伸缩性:集群系统中的结点数目可以增长到几千个,乃至上万个,其伸缩性远超过单台超级计算机。当服务器负载压力增长的时候,系统能够扩展来满足需求,且不降低服务质量。
高可用性:在硬件和软件上都有冗余,通过检测软硬件的故障,将故障屏蔽,由存活结点提供服务,可实现高可用性。
技术门槛低:相比分布式架构,集群架构的不用考虑多进程通讯、分布式事务等棘手问题,技术门槛较低
(三) 分布式(微服务)集群架构
分布式(微服务)架构可以实现将整个项目按业务拆分成独立的多个服务(子项目),多个服务可以独立部署。这种架构虽然美好,但结构复杂、技术门槛高、开发运维难度大,不适合中小型项目。
另外,大部分分布式相关技术解决方案和技术文档,包括分布式框架、多进程通信和分布式事务等,都是亲Java的。虽然不能说其他语言不能做分布式,但是如果你用的不是Java,而且还没有大佬带,还是不要考虑这种架构了。
小结:
根据上面的系统容量预估分析,单体式架构项目运行在一台普通的服务器上,可以支撑一百万注册用户的1000并发。在考虑集群之前,应先做好代码和数据库层面的性能提升,也就是做到服务器硬件所能容纳并发的极限。
在代码和数据库层面做了足够的优化,用户数接近单服务器支撑极限时,考虑负载均衡加集群的架构进一步提升并发性能,当然有实力的团队可以直接考虑分布式架构。