01 | 高并发系统:它的通用设计方法是什么?


高并发代表着高流量,高并发系统的魅力就在于我们可以凭借自己的聪明才智设计巧妙的方案,从而抵抗住流量的

冲击,带给用户更好的使用体验,让流量可以平稳的被系统中的服务或组件平稳的处理。

而我们在应对高并发大流量时也会采用类似“抵御洪水”的方案,归纳起来共有三种方法。

异步调用在高并发大流量系统中被大量使用,比如我们熟悉的12306网站。当我们订票时,页面会显示系统正在排队,这个提示代表着系统在异步处理我们的订票请求,在12306系统中查询余票、下单和更改余票状态都是比较耗时的操作,可能涉及多个内部系统中间的调用,如果是同步调用就会像12306初期上线那样,高峰期永远不可能下单成功。

而采用异步的方式,后端处理时会把请求丢到队列里,同时快速响应用户,告诉用户正在排队处理,然后释放出来资源处理更多的请求。

订票处理完之后,再通知用户订票成功或者失败。

处理逻辑后移到异步处理程序中,web服务的压力减小了,资源占用少了。自然就能接受更多的用户订票请求,系统承受高并发的能力也就提升了。

01 | 高并发系统:它的通用设计方法是什么?

既然我们理解了这三种方法,那是不是意味着我们开发一个高并发系统时候,这三种方法都用上呢?

当然不是,系统的设计是不断演进的。

罗马不是一天建成的,系统的设计也是如此。不同量级的系统有不同的痛点,也就有不同的架构设计侧重点。如果按照百万、千万标准来设计系统,电商一律向淘宝看起,IM一律向微信、QQ看齐,那这些系统的命运就是走向灭亡。

我之前也踩过一些坑,参与过一个创业项目,在初始阶段就采用微服务架构。但由于当时人力有限,团队技术积累不足,因此在实际项目开发中,发现无法驾驭如此复杂的架构,出现问题难以定位,系统整体性能下降等多方面问题。最后不得不回归到单体的架构中。

所以我的建议:

以淘宝为例,当时在业务从 0 到 1 的阶段是通过购买的方式快速搭建了系统。而后,随着流量的增长,淘宝做了一系列的技术改造来提升高并发处理能力,比如数据库存储引擎从 MyISAM 迁移到 InnoDB,数据库做分库分表,增加缓存,启动中间件研发等。

当这些都无法满足时,就考虑整体架构的大规模重构,比如著名的五彩石”项目让淘宝的架构从单体演进为服务化架构。 正是通过逐步的技术演进,淘宝才进化出如今承担过亿 QPS 的技术架构。

总结

归根结底一句话:高并发系统的演进应该是循序渐进的,以解决实际业务中问题为驱动力。

本节主要介绍三种高并发系统的设计思路:scale-out(横向扩展)、缓存、异步

至于具体采取哪一种方式,还是全部采用还要根据你自己的系统来考量。

高并发系统是一个渐进的过程,并非一蹴而就。

martin fowler 说过,能用单体解决的问题,就不用分布式。不能为了技术而技术,采用分布式固然可以分流用户请求,提高系统的响应能力,但同样也带来了复杂性。如果单体能解决的问题,就不要想着诗和远方,因为系统内部进程间的调用,肯定比不同物理机的进程之间调用的更快。

高并发除了横向扩容,缓存和异步化,系统还要做好保护,比如限流降级,过载保护。

展开阅读全文

页面更新:2024-05-23

标签:系统   分布式   淘宝   订票   横向   缓存   架构   组件   流量   能力   方式   业务   方法   更多   用户   技术   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top