当前位置: 首页 > 科技观察

互联网架构中到底什么是“高并发”

时间:2023-03-20 23:40:06 科技观察

1、什么是高并发高并发是互联网分布式系统架构设计必须考虑的因素之一。它通常是指确保系统可以同时并行处理许多请求。与高并发相关的一些常用指标包括响应时间(ResponseTime)、吞吐量(Throughput)、每秒查询率QPS(QueryPerSecond)、并发用户数。响应时间:系统响应请求所花费的时间。比如系统处理一个HTTP请求需要200ms,这200ms就是系统的响应时间。吞吐量:单位时间内处理的请求数。QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量的区别不是那么明显。并发用户数:同时承载正常系统功能的用户数。例如,在即时通信系统中,同时在线用户数在一定程度上代表了系统的并发用户数。2、如何提高系统的并发能力在互联网分布式架构设计中,提高系统的并发能力主要有两种方式:垂直扩展(ScaleUp)和水平扩展(ScaleOut)。纵向扩展:提高单机处理能力。纵向扩展有两种方式:(1)提升单机硬件性能,例如:增加CPU核心数如32核,升级更好的网卡如10G,升级更好的硬盘如SSD,并扩展硬盘容量如2T,扩展系统内存如128G;(2)提高单机架构的性能,例如:使用Cache减少IO次数,使用异步增加单个服务的吞吐量,使用无锁数据结构减少响应时间;在互联网业务高速发展的初期,如果预算不是问题,强烈推荐使用“增强单机硬件性能”的方式来提升系统的并发能力,因为现阶段,公司的战略往往是为业务发展抓紧时间,而“提升单机硬件的性能”往往是最快的方法。无论是提升单机硬件的性能,还是单机架构的性能,都有一个致命的缺点:单机性能总是有极限的。因此,高并发的互联网分布式架构设计的最佳解决方案是水平扩展。横向扩展:只要增加服务器数量,系统性能就可以线性扩展。横向扩展对系统架构设计有要求。如何设计架构各层的水平扩展以及互联网公司架构各层常见的水平扩展实践是本文讨论的重点。3.常见的互联网分层架构常见的互联网分布式架构如上,分为:(1)客户端层:典型的调用者是浏览器浏览器或手机应用APP(2)反向代理层:系统入口,反向代理(3)站点应用层:实现核心应用逻辑,返回html或json(4)服务层:如果实现了服务,就会有这一层(5)数据-缓存层:缓存加速访问存储(6)数据-数据库层:数据库固化数据存储整个系统各个层次的水平扩展,又是如何实现的?四、分层水平扩展架构的实践1.反向代理层的水平扩展反向代理层的水平扩展是通过“DNS轮询”实现的:dns-server为一个域名配置了多个解析ip,每个当一个DNS解析请求访问dns-server时,它会轮询并返回这些ips。当nginx成为瓶颈时,只要增加服务器数量,增加nginx服务的部署,增加一个外网ip,就可以扩展反向代理层的性能,达到理论最高并发。2、站点层的水平扩展站点层的水平扩展是通过“nginx”实现的。通过修改nginx.conf,可以设置多个web后端。当web后端成为瓶颈时,只要增加服务器数量,增加部署新的web服务,在nginx配置中配置新的web后端,就可以扩展site层的性能,从而实现理论上的最大并发。3、服务层的水平扩展服务层的水平扩展是通过“服务连接池”来实现的。当站点层通过RPC-client调用下游服务层RPC-server时,RPC-client中的连接池会与下游服务建立多个连接。当服务成为瓶颈时,只需增加服务器数量并添加新的服务部署即可。通过在RPC-client建立新的下游服务连接,可以扩展服务层的性能,达到理论上的最高并发。如果需要优雅地自动扩展服务层,可能需要配置中心服务自动发现功能的支持。4、数据层水平扩展在数据量大的情况下,数据层(缓存、数据库)涉及到数据的水平扩展,将原本存放在一台服务器上的数据(缓存、数据库)水平拆分到不同的serversUp,以达到扩展系统性能的目的。互联网数据层有几种常见的水平分割方式。以数据库为例:(1)将各个数据服务按照范围水平拆分,存储一定范围的数据。上图举例:user0库,存储uid范围1-1kwuser1库,存储uid范围1kw-2kw这种方案的优点是:规则简单,只需要判断就可以将服务路由到对应的存储服务uid范围;数据平衡更好;扩展比较容易,随时可以增加一个Uid[2kw,3kw]数据服务;缺点是:请求负载不一定均衡,一般来说,新注册用户会比老用户更活跃,大范围的服务请求压力会更大;(2)根据Ha的要求,希望将各个数据库进行水平拆分,存储一些经过一定key-valuehash后的数据。上图是一个例子:user0库存储偶数uid数据user1库存储奇数uid数据。uid的hash可以路由到对应的存储服务;数据平衡更好;要求统一性更好;缺点是:不易扩展,扩展一个数据服务,当hash方法发生变化时,可能需要进行数据迁移;这里需要注意的是,通过水平拆分来扩展系统性能与通过主从同步读写分离来扩展数据库性能有着本质的区别。通过水平拆分扩展数据库性能:每台服务器存储的数据量是总量的1/n,因此单机性能也会得到提升;n台服务器上的数据不重叠,那台服务器上数据的并集就是完整的数据集;数据水平拆分到n台服务器,理论上读性能扩展n倍,写性能也扩展n倍(实际上远不止n倍,因为单机的数据量变成了原件的1/n);通过主从同步读写分离扩展数据库性能:每台服务器存储的数据量与总量相同;n台服务器上的数据都是一样的,都是完整的集合;理论上读性能提升了n倍,写性能还是单点,写性能不变;缓存层的水平拆分与数据库层的水平拆分类似,多为range拆分和hash拆分,不再展开。五、小结高并发是互联网分布式系统架构设计必须考虑的因素之一。通常是指保证系统可以同时并行处理很多请求的设计。提高系统并发性的方式主要有两种:垂直扩展(ScaleUp)和水平扩展(ScaleOut)。前者的垂直扩展可以通过提高单机硬件的性能或者单机架构的性能来提高并发,但是单机性能总是有一个限度的。高并发的互联网分布式架构设计最好的解决方案是后者:水平扩展。在互联网分层架构中,每一层水平扩展的做法是不同的:(1)反向代理层可以通过“DNS轮询”进行水平扩展;(2)站点层可以通过nginx进行水平扩展;(3)服务层可以通过服务连接池进行水平扩展;(4)数据库可根据数据范围或数据哈希进行水平扩展;每层实现水平扩展后,可以通过增加服务器数量来提高系统的性能,达到理论上的最大性能。【本文为专栏作者《58神剑》原创稿件,转载请联系原作者】点此阅读更多该作者好文