如何设计高并发系统,我总结了三点本文转载请联系架构改进之路公众号。你是否经常在面试中被问到一个问题:“如果你的系统流量增加了N倍,你如何重新设计你的系统?”这个高并发问题可以从各个层面来解决,主要有以下几点。1.代码级锁优化(使用无锁数据结构),主要是并发包下AQS锁的一些内容数据库缓存设计(减轻数据库并发争用压力),这里会出现缓存和DB数据的问题不一致性,在实际使用中,高并发系统和数据一致性系统采用的策略会完全相反。合并更新用于数据更新,可以在应用层合并更新。同一个Container在同一时间只会有一个DB更新请求。其他的,比如基于BloomFilter的空间换时间,通过异步减少处理时间,通过多线程并发执行等等。2、数据库层面,根据不同的存储需求选择不同的存储类型,从早期的RDBMS,到NoSql(KV存储、文档数据库、全文索引引擎等),再到最新的NewSql(TiDB、Google扳手/F1DB)等等。表数据结构设计、字段类型选择与区分。对于索引设计,我们需要注意聚类索引和覆盖索引消除排序等原则,至于最左匹配原则,是街上的常识,高级索引消除和排序的一些机制等,B+树和B树的区别。最后常规手段:分库分表,读写分离,数据分片,数据热切分等,高并发经常做数据分桶,这里面还有很多,比如分桶怎么初始化,路由规则,最后阶段如何合并数据等等,比较经典的方式是把bucket分成一个主bucket+N个子bucket。3、在架构设计层面,分布式系统是面向服务、无状态的,支持横向弹性伸缩。在业务逻辑层面,failfast调用链接热点数据,预先多级缓存设计,提前进行容量规划。综上所述,所谓高并发,往往意味着对于大流量,需要通过技术手段来抵御流量的冲击。这些方式就像运营流量一样,可以让流量更顺畅的被系统处理,给用户带来更好的体验。高并发确实是一个复杂的系统性问题。限于篇幅,分布式溯源、全链路压测、灵活交易等技术点均需考虑。另外,如果业务场景不同,高并发的实现方案也会有所不同,但总体设计思路基本类似,可以参考的方案。高并发设计也必须坚持架构设计的三个原则:简单、适当、严谨。离不开业务的实际情况,更不能过度设计,合适的方案才是最完美的。
