互联网三高架构:高并发、高性能、高可用技术
0 引言
当下时代发展下业务场景的迅速变化,对于系统架构的要求针对高并发,高可用,高性能的要求更是越来越高本文针对“三高”展开叙述。
1 高并发
1.1.1高并发的关心的问题
高并发是现在互联网分布式框架设计必须要考虑的因素之一,它是可以保证系统能被同时并行处理很多请求,对于高并发来说,它的指标有:响应时间及吞吐量。
1.1.1.1 响应时间
系统对进来的请求反应的时间,比如你打开一个页面需要1秒,那么这1秒就是响应时间。
1.1.1.2 吞吐量
吞吐量是指每秒能处理多少请求数量,好比你吃饭,每秒能吃下多少颗米饭。秒查询率:秒查询率是指每秒响应请求数,和吞吐量差不多。并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。
1.1.2高并发的宏观⽬标
⾼并发绝不意味着只追求⾼性能。从宏观角度看,⾼并发系统设计的⽬标有三个:⾼性能、⾼可⽤,以及⾼可扩展。就是所谓的“三⾼”,三⾼不是孤⽴的,⽽是相互⽀撑的。⾼性能:性能体现了系统的并⾏处理能⼒,在有限的硬件投⼊下,提⾼性能意味着节省成本。同时,性能也反映了⽤户体验,响应时间分别是100毫秒和1秒,给⽤户的感受是完全不同的。⾼可⽤:表⽰系统可以正常服务的时间。另外,如果系统只能做到90%可⽤,也会⼤⼤拖累业务。⾼扩展:表⽰系统的扩展能⼒,流量⾼峰时能否在短时间内完成扩容,更平稳地承接峰值流量,⽐如双11活动、明星离婚等热点事件。
2 常见的互联网分层架构
常见互联网分布式架构如上,分为:客户端层:典型调用方是浏览器browser或者应用APP。反向代理层:系统入口,反向代理。站点应用层:实现核心应用逻辑,返回HTML或者JSON。服务层:如果实现了服务化,就有这一层。数据-缓存层:缓存加速访问存储。数据-数据库层:数据库固化数据存储。
2 分层水平扩展架构实现高并发架构
2.1.1 反向代理层的水平扩展
反向代理层的水平扩展,是通过“DNS轮询”实现的:dns-server对于一个域名配置了多个解析ip,每次DNS解析请求来访问dns-server,会轮询返回这些ip。当nginx成为瓶颈的时候,只要增加服务器数量,新增nginx服务的部署,增加一个外网ip,就能扩展反向代理层的性能,做到理论上的无限高并发。
2.1.2 站点层的水平扩展
站点层的水平扩展,是通过“nginx”实现的。通过修改nginx.conf,可以设置多个web后端。当web后端成为瓶颈的时候,只要增加服务器数量,新增web服务的部署,在nginx配置中配置上新的web后端,就能扩展站点层的性能,做到理论上的无限高并发。
2.1.3 服务层的水平扩展
服务层的水平扩展,是通过“服务连接池”实现的。站点层通过RPC-client调用下游的服务层RPC-server时,RPC-client中的连接池会建立与下游服务多个连接,当服务成为瓶颈的时候,只要增加服务器数量,新增服务部署,在RPC-client处建立新的下游服务连接,就能扩展服务层性能,做到理论上的无限高并发。
如果需要优雅的进行服务层自动扩容,这里可能需要配置中心服务自动发现功能的支持。
2.1.4 数据层的水平扩展
在数据量很大的情况下,数据层(缓存,数据库)涉及数据的水平扩展,将原本存储在一台服务器上的数据(缓存,数据库)水平拆分到不同服务器上去,以达到扩充系统性能的目的。
这里需要注意的是,通过水平拆分来扩充系统性能,与主从同步读写分离来扩充数据库性能的方式有本质的不同。
通过水平拆分扩展数据库性能:每个服务器上存储的数据量是总量的1/n,所以单机的性能也会有提升;n个服务器上的数据没有交集,那个服务器上数据的并集是数据的全集;数据水平拆分到了n个服务器上,理论上读性能扩充了n倍,写性能也扩充了n倍(其实远不止n倍,因为单机的数据量变为了原来的1/n)。 通过主从同步读写分离扩展数据库性能:每个服务器上存储的数据量是和总量相同;n个服务器上的数据都一样,都是全集;理论上读性能扩充了n倍,写仍然是单点,写性能不变。
4 结束语
并发量,是一个容量的概念,服务可以接受的最大任务数量,动态的看待它,还需要把性能考虑进去。性能,是一个速度的概念,单位时间内可以处理的任务数量。高并发和高性能是紧密相关的,提高应用的性能,是肯定可以提高系统的并发能力的。应用性能优化的时候,对于计算密集型和IO密集型还是有很大差别,需要分开来考虑。
增加服务器资源(CPU、内存、服务器数量),绝大部分时候是可以提高应用的并发能力和性能(前提是应用能够支持多任务并行计算,多服务器分布式计算才行),但也是要避免其中的一些问题,才可以更好的更有效率的利用服务器资源。