2020年没写过啥内容,做一下知识回顾吧,标题可能有点“标题党”,见谅。
高并发的简易理解:保证系统能够同时并行处理的很多的请求。
高并发,高可用,高效率三个名词是个有侧重。简称“三高”,是系统架构设计的高级要求。今天侧重讲一下《高并发》。
高并发四大要素:
1-》响应时间:系统对进来的请求反应的时间,比如你打开一个页面需要1秒,那么这1秒就是响应时间。
2-》吞吐量:单位时间内处理的请求数量。好比你吃饭,每秒能吃下多少颗米饭。
3-》秒查询率:秒查询率是指每秒响应请求数,和吞吐量差不多(互联网领域)。
4-》并发用户数:同时承载正常使用系统功能的用户数量。最明显的应用案例是 即时通讯系统、多人联机游戏系统。
常见的互联网系统架构分层图:
提高并发能力的两种主要方法:垂直扩展(单兵升级SOLO),水平扩展(组团群殴)。
垂直扩展:
(1)硬件升级:CPU不够加CPU,内存不够加内存,磁盘空间不足加磁盘,机械磁盘换固态等。
(2)网络升级:网络带宽拉满,域名、静态资源使用CDN加速。
(3)软件升级:优化代码算法,减少逻辑处理循环,使用Cache代替实时查询,使用异步增加吞吐量,少用锁减少响应时间等。
(4)数据库升级:本地数据库换云数据库,增加数据库连接数,优化索引,优化sql,提升配置等。
在互联网领域由于时间重要性,在预算够的话,优先采用此类方法。业务快速发展重要性远超服务器升级费用。
无论怎么垂直扩展,终究会有极限的。(人是有极限的,所以我不做人了JOJO!不要问为什么会有这句话。)单兵升级在后期总会有瓶颈,同时费用与性能开始不具备线性增长了。所以水平扩展是高并发的终极方案。
有个实际案例:阿里云扩容以应对钉钉业务暴增。
实践证明,阿里云作为国内技术大佬。方法就是水平扩容。下面介绍一下我们在常见的互联网结构设计中,如何提高系统的并发数。本文会在多个层级提供水平扩展思路。
域名层:
这个属于我自己理解的,名字可能有些不妥。大家理解下。拿国民级应用APP《微信》的域名:mp.weixin.qq.com举例。依据业界公开数据,微信日活超10亿用户,这个并发能力世界顶尖。先看下域名这一块的处理(个人理解,远达不到专家水平。)
首先微信域名的解析到了多个IP地址上。其中还包含IPV6地址 。从源头将流量进行了初步拆分,同时访问网络也有优化,请求发起者会转交至最近的应用服务器处理,提高处理效率,减少网络请求时长。
2.web服务容器:
由于DNS解析已做了分流。这里不难看出,如果对应的IP地址是负载均衡地址或者是集群地址,负载均衡内部可无限水平扩容,使用一样的软件代码,系统配置,(可能涉及到session或者支付、授权等IP白名单问题,根据业务处理)就可线性增加并发量。同时还可根据设置优化nginx的线程配置,增加处理线程。也可设置代理服务器的端口配置,增加处理服务端口。
3.web应用及业务层:
使用微服务思路进行业务拆分,或者将业务板块集群化,通过统一的服务调度将业务分散到不同集群处理。本质上是在多个服务器上配置相同的业务模块然后,流量拆分到不同的服务器上。同时还可搭配使用消息队列和使用缓存进一步扩大接受容量(但不是同实时处理)。
4.数据库层:
这里就老生常淡的主从处理,读写分离。通过水平的添加只读实例快速提高大量的读请求。还可通过分库分表,将按地域或者按用户拆分不同的水平库,然后增对日益上涨的数据量采用水平分库。这里就十分考验数据库的设计和查询逻辑。这里会是重点,相比于用户访问是短平快,但是数据库的增长是不断累积的。后续将会专门在这个环节细讲。