高并发入门

一、高并发的几个指标

1、响应时间:  系统对请求做出响应的时间,例如系统处理一个HTTP请求需要200ms, 这就是系统的响应时间

2、吞吐量: 单位时间内处理的请求数量

3、QPS:  每秒响应请求数

4、并发用户数: 同时承载正常使用系统功能的用户数量。

 

二、提升系统的并发能力常见方法

1、垂直扩展

1) 增强单机硬件性能: 例如增加CPU核数,升级更好的网卡、升级更好的硬盘、扩充硬盘容量、扩充系统内存

2) 提升单机架构性能: 例如,使用cache来减少IO次数,使用异步来增加单服务吞吐量

 

2、水平扩展

如何在架构各层进行可水平扩展的设计

 

三、常见的互联网分层架构

1、客户端层: 典型调用方法是浏览器browser或者手机APP

2、反向代理层: 系统入口,反向代理

3、站点应用层: 实现核心应用逻辑,返回HTML或者json

4、服务层: 实现服务化

5、数据-缓存层: 缓存加速访问存储

6、数据-数据库层: 数据库固化数据存储

 

四、分层水平扩展架构实践

1、反向代理层的水平扩展

反向代理层的水平扩展,是通过DNS轮询实现的。 DNS-server对于一个域名配置了多个解析IP,每次DNS解析

请求来访问DNS-server,会轮询返回这些IP。  当Nginx成为瓶颈的时候,只要增加服务器数量,新增Nginx服务

的部署,增加一个外网IP,就能扩展反向代理层的性质,做到理论上的无限高并发

 

2、站点层的水平扩展

站点层的水平扩展,是通过Nginx实现的。通过修改Nginx.conf可以设置多个web后端。

 

3、服务层的水平扩展

服务层的水平扩展,是通过服务连接池实现的。 站点层通过RPC-client调用下游的服务层RPC-server, RPC-client 

的连接池会建立与下游服务多个连接,多服务成为瓶颈的时候,只要增加服务器数量,新增服务部署,在RPC-client处

建立新的下游服务连接,就能扩展服务层性能。 如果要优雅的进行服务层自动扩容,这里可能需要配置中心里服务自动

发现功能的支持

 

4、数据层的水平扩展

在数据量很大的情况下,数据层涉及数据的水平扩展,将原本存储在一台服务器上的数据水平拆分到不同服务器上,以

达到扩充系统性能的目的。 常见的几种数据层水平拆分方式

 

1)按照范围水平拆分:  每一个数据服务,存储一定范围的数据。 比如user0库存储UID1-1k user1库存储UID 1k-2k

好处: 规则简单、数据均衡性较好、比较容易扩展

不足: 请求的负载不一定均衡,一般来说,新注册的用户会比老用户更活跃,大range的服务请求压力会更大

 

2)按照哈希水平拆分: 每一个数据库,存储某个key值hash后的部分数据。 例如user0存储UID为偶数的数据,user1则

为UID是奇数的数据

好处: 规则简单、数据均衡较好、请求均衡性较好

不足: 不容易扩展,扩展一个数据服务,hash方法改变的时候,可能需要进行数据迁移。 通过水平拆分来扩充系统性能,

与主从同步读写分离来扩充数据库性能的方式不同。

 

3) 通过水平拆分扩展数据库性能

每个服务器上存储的数据量是总量的1/n,所以单机的性能也会有提升; n个服务器上的数据没有交集,那个服务器上数据的

并集是数据的全集; 

 

4) 通过主从同步读写分离扩展数据库

每个服务器上存储的数据量是和总量相同; n个服务器上的数据都一样,都是全集; 

 

5、缓存层的水平拆分

同数据库层的水平拆分类似,也是以范围拆分和哈希拆分的方式居多

 

posted @ 2018-06-14 10:29  秋水秋色  阅读(299)  评论(0编辑  收藏  举报