Web项目,尤为是面向C端的项目,作到中后期每每要解决高并发的问题。本文经过对三种架构的并发性能分析,为这一阶段的开发和重构提供参考。web
基本概念数据库
并发:在操做系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。服务器
并发访问:同一时间对系统的访问。网络
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并发。在考虑集群以前,应先作好代码和数据库层面的性能提高,也就是作到服务器硬件所能容纳并发的极限。
在代码和数据库层面作了足够的优化,用户数接近单服务器支撑极限时,考虑负载均衡加集群的架构进一步提高并发性能,固然有实力的团队能够直接考虑分布式架构。