点个关注👆跟腾讯工程师学技术
高并发的说明和背景
高并发解决的核心问题是在同一时间上有大量的请求过来,然后我们的系统要怎么抗住这些请求带来的压力。比如在线直播服务,同时有上百万甚至上千万人观看。比如秒杀品,同时有大量用户涌入。
高并发架构设计经验
(一)基础设施层:这个是最基础的依赖,主要是一些服务的部署。针对大公司而言,一般都有成熟的系统和基础设施来承载,可能针对业务开发的同学来看,平时关注的的细节并不深入,但是不妨碍我们从全局角度来剖析高并发的设计。
(三)服务应用层:这个主要是针对我们写的代码来进行优化改进。从代码架构、代码性能等方便去抗并发。
(一)基础设施层
-
部署:多 IDC + 异地多活
-
多 IDC 部署。比如服务同时在广州、上海两地部署。这个依赖我们的服务是无状态的。
-
其他的参考下异地多活架构等相关部署。
-
监控:可观测性
(二)服务端架构层
-
系统分层设计:分层、分割、分布式
-
架构分层
-
应用层:网站首页,用户中心,商品中心,购物车,红包业务,活动中心等,负责具体业务和视图展示
-
服务层:订单服务,用户管理服务,红包服务,商品服务等,为应用层提供服务支持
-
数据层:关系数据库,nosql数据库 等,提供数据存储查询服务
-
将系统在横向维度上切分成几个部分,每一层的功能职责要足够单一,然后通过上层对下层的依赖和调度组成一个完整的系统
-
比如把电商系统分成:应用层,服务层,数据层。(具体分多少个层次根据自己的业务场景)
-
业务分割
-
在纵向方面对业务进行切分,将一块相对复杂的业务分割成不同的模块单元,对应的是模块的划分,通过合理的模块划分,使得每个模块都能可以满足 高内聚低耦合 的设计要求,这样不同的模块可以分布式部署,也能提高并发处理能力和功能扩展
-
比如用户中心可以分割成:账户信息模块,订单列表模块,充值模块,优惠券模块等
-
分布式
-
分布式应用和服务,将分层或者分割后的业务分布式部署,独立的应用服务器,数据库,缓存服务器,当业务达到一定用户量的时候,再进行服务器均衡负载,数据库,缓存主从集群
-
集群架构设计:应用集群、数据集群
-
应用服务器集群
-
nginx 反向代理
-
slb
-
LVS …
-
数据集群(关系/nosql数据库)
-
主从分离,一主多从
-
数据读写分离
-
数据库设计:读写分离+分库分表+冷热分离
-
读写分离。互联网系统大多数都是读多写少,因此读写分离可以帮助主库抗量。一般我们都是一主多从的架构,可以抗量,也可以保证数据不丢。分库分表只能解决 QPS 高,但是无法解决 TPS 高,比如写入的量足够大的话(TPS 高),就得读写分离。
-
分库分表。数据存储量大的时候,就需要通过分库分表来存储。先分,避免后期要拆,后期拆的话,就面临洗数据的问题,就需要采用双写模式来搞定。
-
分库分表模式虽然能显著提升数据库的容量,但会增加系统复杂性,而且由于只能支持少数的几个维度读写,从某种意义上来说对业务系统也是一种限制,因此在设计分库分表方案的时候需要结合具体业务场景,更全面地考虑。
-
冷热分离。针对业务场景而言,如果数据有冷热之分的话,可以将历史冷数据与当前热数据分开存储,这样可以减轻当前热数据的存储量,可以提高性能。
-
缓存设计:多级缓存架构和本地缓存
-
首先要考虑的,就是必须在数据库之上,增加一层分布式缓存,比如 Redis 或者 Memcached。
-
这里需要考虑一下缓存和数据库一致性的问题。
-
其次需要考虑的是多级缓存架构。分几级缓存设计,同时设计热点缓存架构。
-
在分布式缓存之上,还可以加一个本地缓存,来缓存最热的数据
-
采用多个分布式缓存来搭建多级缓存。
-
消息队列设计:MQ 抗量和削峰
-
服务治理设计:超时、熔断、降级、限流等
-
资源隔离设计:SET 部署
-
多线程、线程同步、协程
-
异步化
-
预处理:预加载、预热
点击下方空白 ▼ 查看明日开发者黄历
本文来自微信公众号“腾讯云开发者”(ID:QcloudCommunity)。大作社经授权转载,该文观点仅代表作者本人,大作社平台仅提供信息存储空间服务。