如何应对高并发
![如何应对高并发](http://www.isolves.com/d/file/p/2020/03-18/9306f9216248cc1143eccd87adf3f16b.jpg)
什么是高并发
高并发是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时处理很多请求。高并发相关的一些指标有响应时间、吞吐量、每秒查询率QPS、并发用户数等。
- 响应时间: 系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。
- 吞吐量: 单位时间内(年月日时分秒)处理的请求数量。
- QPS: 每秒响应请求数。
- 并发用户数: 同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。
如何提升系统的并发能力
互联网分布式架构设计,提高系统并发能力的方式,方法论上主要有两种:垂直扩展(Scale Up),水平扩展(Scale Out)
垂直扩展
提升单机处理能力。垂直扩展的方式又分为两种:
- 增强单机硬件性能。例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G;
- 提升单机架构性能。例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间;
水平扩展
只要增加服务器数量,就能线性扩充系统性能。水平扩展对系统架构设计是有要求的。
典型的互联网封层架构
![如何应对高并发](http://www.isolves.com/d/file/p/2020/03-18/088801f083da9648102f5bbd1350ef5a.jpg)
- 客户端层: 典型调用方是浏览器或手机App
- 反向代理层: 系统入口(Ingress)、反向代理(Nginx)
- 站点应用层: 实现核心应用逻辑,返回html、JSON
- 服务层: 微服务体现在这一层
- 数据缓存层: 缓存加速访问缓存
- 数据库层: 数据库持久化数据存储
水平扩展分层架构
反向代理层的水平扩展
![如何应对高并发](http://www.isolves.com/d/file/p/2020/03-18/d47bd53ab3af73befd6fe3b210045d4c.jpg)
反向代理层的水平扩展,是通过DNS轮询实现的:DNS Server对于一个域名配置了多个解析IP,每次DNS解析请求来访问DNS Server,会轮询这些IP。
当Nginx成为瓶颈的时候,只要添加服务器的数量,新增Nginx服务器的部署,增加一个外网IP,就能扩展反向代理层的性能,做到理论上的无限高并发。
站点应用层的水平扩展
![如何应对高并发](http://www.isolves.com/d/file/p/2020/03-18/469edef6ec07643f723c3f68d45bbd54.jpg)
站点层的水平扩展,是通过Nginx实现的。通过修改nginx.conf,可以设置多个Web后端。
当Web后端成为瓶颈时,只要增加服务器的数量,新增Web服务器的部署,在Nginx配置中配置上新的web后端,就能扩展站点层的性能,做到理论上的无限高并发。
服务层的水平扩展
![如何应对高并发](http://www.isolves.com/d/file/p/2020/03-18/9f3f55bac26eb0d0e37f8968bc398f37.jpg)
![如何应对高并发](http://www.isolves.com/d/file/p/2020/03-18/9022623c7e35b610b22ec3e248577742.jpg)
数据层的水平扩展
在数据量很大的情况下,数据层(缓存,数据库)涉及数据的水平扩展,将原本存储于一台服务器的上的数据水平拆分到不同服务器上,已达到扩充系统性能的目的。
按照范围水平拆分
![如何应对高并发](http://www.isolves.com/d/file/p/2020/03-18/d7a19229725d3ed5a1bb49884c8aa482.jpg)
![如何应对高并发](http://www.isolves.com/d/file/p/2020/03-18/e63aa4c30696c78a8ffc6bfd09147036.jpg)
按照哈希水平拆分
![如何应对高并发](http://www.isolves.com/d/file/p/2020/03-18/63338d04b20be47d6816863c4d36ffbb.jpg)
![如何应对高并发](http://www.isolves.com/d/file/p/2020/03-18/829e24c8bc63488a2b3ed179100e274c.jpg)
水平拆分与主从同步
这里需要注意的是,通过水平拆分来扩充系统性能,与主从同步读写分离来扩充数据库性能的方式有本质的不同
![如何应对高并发](http://www.isolves.com/d/file/p/2020/03-18/ed60b4c76121607dc0030f1a39eda6ff.jpg)
注意: 缓存层的水平拆分和数据库层的水平拆分类似,也是以范围拆分和哈希拆分的方式居多
上一篇:RAID原理分析总结