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