高并发技术的核心是分流;分别针对请求的各个环节,根据具体场景和业务特点采用不同的分流方案,逐层逐级的分担系统压力,从而达到高并发能力。
常见的高并发技术有:动静分离、缓存、异步并发、水平扩展等。分流简单来说就是:一台服务器承担不了的流量,就让多台服务器共同分担;DB承担不了流量就让缓存来帮忙分担;等等。接下来讨论的所有内容都是围绕着分流来实现的。
客户端优化技术主要指的是客户端通过缓存数据,减少访问服务端的次数,以实现降低服务端压力,达到支持更多并发量的需求。
常见的处理方式是:缓存不经常变动的内容,每隔一定时间更新一次,或者除非修改了否则较长时间不更新;如:更新微信公众账号的头像时,手机端不会立即看到这个更新。另外,根据业务场景可以限制不必要的请求;如:点击一个按钮,发送一次请求到服务端时,禁用按钮,避免因用户多次点击,而发送不必要的请求。
网络优化的核心目标是:将资源缓存到距离用户最近的网络节点上,这样除了可以省下大量网络带宽外,还可以达到最快的请求速度;一般针对静态资源。 通过静态化技术(将不经常变动的内容生成静态文件)或动静分离技术(例如H5+ajax),将静态的内容存储在CDN上,当用户查看一个页面时,只让少数的动态请求落到服务器端,其他内容从CDN上直接获取,这样就可以极大的减少服务器端的流量。
高性能的IO通信模型可以给系统带来巨大的性能提升。目前就较为成熟、高效的IO通行模型是NIO(也叫IO多路复用、异步阻塞IO)。
例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G。
不管是提升服务硬件性能,还是提升单机架构性能,都有一个致命的不足:单机性能总是有极限的。所以互联网分布式架构设计高并发终极解决方案还是水平扩展。
反向代理层的水平扩展,是通过“DNS轮询”实现的:dns-server对于一个域名配置了多个解析ip,每次DNS解析请求来访问dns-server,会轮询返回这些ip。
当nginx成为瓶颈的时候,只要增加服务器数量,新增nginx服务的部署,增加一个外网ip,就能扩展反向代理层的性能,做到理论上的无限高并发。
站点层的水平扩展,是通过“nginx”实现的。通过修改nginx.conf,可以设置多个web后端。
当web后端成为瓶颈的时候,只要增加服务器数量,新增web服务的部署,在nginx配置中配置上新的web后端,就能扩展站点层的性能,做到理论上的无限高并发。
负载均衡的核心是让每台服务器以一个合适的负载来分担所有的请求。
常见的负载均衡方案有:随机、轮询、hash、一致性hash。当然在这些基础上有很多扩展,例如在负载均衡的机器中设置不同的权重;根据key的范围不同调用不同的服务器等等
缓存的结构一般都是key-value结构,通过key直接寻址,时间复杂度为O(1),这比DB的遍历比较来快了非常多;另外,不少的缓存中间件通过在内存中存储数据,不用从磁盘中获取数据,性能也就会非常高. 分布式缓存 优点是:集群部署,不用考虑容量问题,数据支持持久化,支持高可用。 缺点是:因为服务器和缓存数据交换时存在一次网络交互,如果数据结构选择不合理或者并发量非常大或者每次交互的数据量较大时,可能会引起io阻塞等问题,需谨慎。
原文:https://www.cnblogs.com/wjohh/p/10884270.html