如何做好高并发系统设计,我总结了三点

开发 架构
大家在面试中是不是经常被问到一个问题:“如果你系统的流量增加 N 倍你要怎么重新设计你的系统?”

[[428498]]

本文转载自微信公众号「架构精进之路」,作者张张。转载本文请联系架构精进之路公众号。

大家在面试中是不是经常被问到一个问题:“如果你系统的流量增加 N 倍你要怎么重新设计你的系统?”

这个高并发的问题可以从各个层面去解,主要包括以下几点。

1、代码层面

锁优化(采用无锁数据结构),主要是 concurrent 包下面的关于 AQS 锁的一些内容

数据库缓存设计(降低数据库并发争抢压力),这里又会有缓存、DB 数据不一致的问题,在实际使用中,高并发系统和数据一致性系统采用的策略会截然相反。

数据更新时采用合并更新,可以在应用层去做更新合并,同一个 Container 在同一时间只会有一个 DB 更新请求。

其他的比如基于 BloomFilter 的空间换时间、通过异步化降低处理时间、通过多线程并发执行等等。

2、数据库层面

根据不同的存储诉求来进行不同的存储选型,从早期的 RDBMS,再到 NoSql(KV 存储、文档数据库、全文索引引擎等等),再到最新的 NewSql(TiDB、Google spanner/F1 DB)等等。表数据结构的设计,字段类型选择与区别。

索引设计,需要关注聚簇索引原理与覆盖索引消除排序等,至于最左匹配原则都是烂大街的常识了,高级一点索引消除排序的一些机制等等,B+树与 B 树的区别。

最后的常规手段:分库分表、读写分离、数据分片、热点数据拆分等等,高并发往往会做数据分桶,这里面往深了去说又有很多,比如分桶如何初始化、路由规则、最后阶段怎么把数据合并等等,比较经典的方式就是把桶分成一个主桶+N 个分桶。

3、架构设计层面

  • 分布式系统为服务化
  • 无状态化支持水平弹性扩缩容
  • 业务逻辑层面 failfast 快速失败
  • 调用链路热点数据前置
  • 多级缓存设计
  • 提前容量规划等等

总结

所谓高并发,常常意味着大流量,需要运用技术手段抵抗流量的冲击,这些手段好比操作流量,能让流量更平稳地被系统所处理,带给用户更好的体验。

高并发确实是一个复杂且系统性的问题,由于篇幅有限,诸如分布式Trace、全链路压测、柔性事务都是要考虑的技术点。另外,如果业务场景不同,高并发的落地方案也会存在差异,但是总体的设计思路和可借鉴的方案基本类似。

高并发设计同样要秉承架构设计的3个原则:简单、合适和严谨。不能脱离业务的实际情况,更不要过度设计,合适的方案就是最完美的。

 

责任编辑:武晓燕 来源: 架构精进之路
相关推荐

2022-02-22 09:58:09

搜索设计交互互联网

2022-07-01 10:56:25

移动互联网B 端产品设计

2022-03-01 15:23:02

设计师创新互联网

2021-04-27 10:02:40

股票数组代码

2011-05-16 15:26:52

功能测试

2009-11-11 14:58:15

ADO.NET好处

2021-12-03 11:05:24

人工智能AI智能交通

2021-03-12 17:52:45

比特币去中心化货币

2019-08-19 09:01:54

项目管理

2015-11-16 10:50:35

产品设计步骤后台

2023-03-21 08:41:09

结构设计数据库高性能

2022-03-30 15:53:18

标签页用户设计

2019-04-29 09:52:46

容器安全漏洞网络安全

2021-07-19 11:03:26

Windows 7操作系统微软

2011-05-26 16:27:24

SEO

2020-07-22 07:00:00

微服务架构

2023-02-06 21:58:23

2022-04-11 09:15:00

前端开发技术

2015-07-17 10:02:11

三消游戏怎么做

2017-05-10 09:13:24

DevOpsDevOps转型
点赞
收藏

51CTO技术栈公众号