一、高并发常用的指标:
1、响应时间:
例如系统处理一个HTTP请求需要300ms,这个300ms就是系统的响应时间。
2、吞吐量:
例如在1秒内处理的请求数量
3、QPS:
每秒的响应请求数
4、并发用户数:
同时承载正常使用系统功能的用户数量
二、如何提升系统的并发能力:
1、垂直扩展
a、增强单机硬件性能:
增加CPU核数,更好的硬盘等等。
b、提升单机架构性能:
使用Cache来减少IO次数,使用异步来增加单服务吞吐量。
2、水平扩展
增加服务器数量,就能线性扩充系统性能。
三、水平扩展架构实践
1、反向代理层的水平扩展
反向代理层的水平扩展,是通过“DNS轮询”实现的:dns-server对于一个域名配置了多个解析ip,每次DNS解析请求来访问dns-server,会轮询返回这些ip。
当nginx成为瓶颈的时候,只要增加服务器数量,新增nginx服务的部署,增加一个外网ip,就能扩展反向代理层的性能,做到理论上的无限高并发。
2、站点层的水平扩展
站点层的水平扩展,是通过“nginx”实现的。通过修改nginx.conf,可以设置多个web后端。
当web后端成为瓶颈的时候,只要增加服务器数量,新增web服务的部署,在nginx配置中配置上新的web后端,就能扩展站点层的性能,做到理论上的无限高并发。
3、服务层的水平扩展
服务层的水平扩展,是通过“服务连接池”实现的。
站点层通过RPC-client调用下游的服务层RPC-server时,RPC-client中的连接池会建立与下游服务多个连接,当服务成为瓶颈的时候,只要增加服务器数量,新增服务部署,在RPC-client处建立新的下游服务连接,就能扩展服务层性能,做到理论上的无限高并发。如果需要优雅的进行服务层自动扩容,这里可能需要配置中心里服务自动发现功能的支持。
4、数据层的水平扩展
a、安装范围水平拆分
不足是:
(1) 请求的负载不一定均衡,一般来说,新注册的用户会比老用户更活跃,大range的服务请求压力会更大;
b、安装哈希水平拆分
不足是:
(1)不容易扩展,扩展一个数据服务,hash方法改变时候,可能需要进行数据迁移;
四、水平拆分和主从同步的对比
1、水平拆分
通过水平拆分扩展数据库性能:
(1)每个服务器上存储的数据量是总量的1/n,所以单机的性能也会有提升;
(2)n个服务器上的数据没有交集,那个服务器上数据的并集是数据的全集;
(3)数据水平拆分到了n个服务器上,理论上读性能扩充了n倍,写性能也扩充了n倍(其实远不止n倍,因为单机的数据量变为了原来的1/n);
2、主从同步
通过主从同步读写分离扩展数据库性能:
(1)每个服务器上存储的数据量是和总量相同;
(2)n个服务器上的数据都一样,都是全集;
(3)理论上读性能扩充了n倍,写仍然是单点,写性能不变;