跳到主要内容
黯羽轻扬每天积累一点点

异步机制_系统设计笔记14

付费2020-04-05#Back-End#利特尔法则#asynchronous#消息队列与任务队列的区别#消息队列的作用#利特尔定律#消息队列与利特尔法则

消息队列与漏斗模型

写在前面

对于 Web 服务而言,提升可扩展性的主要途径是将耗时的同步工作改成异步处理,从而允许将这些工作“外包”给多个 Worker 去做,或者提前完成能够预知的部分

(摘自Scalability_系统设计笔记 1

那么,异步机制与可扩展性有什么关系?

这要从(异步)并行处理的优势说起

一.串行、并发与并行

可扩展性,意味着能通过向系统添加资源的方式应对不断增加的工作量

对于多个任务,一般有 3 种执行策略:

  • 串行:一个接一个地同步执行,总耗时为所有任务之和

  • 并发:多 CPU/多核并发执行,总耗时取决于最慢的任务耗时

  • 并行:异步并行执行,总耗时同样取决于最慢的任务耗时

试想,如果工作量持续增长,串行模式的延迟将会越来越大,而且无法通过加资源来解决,可扩展性无从谈起

并发模式虽然可以通过加 CPU 来应对更多的工作量(即纵向扩展),但很快就会遭遇瓶颈,要么达到顶配,要么耗光预算,可扩展性也不是很好

并行模式下,由于任务能够异步执行,我们可以加任意多的 Worker 来分担工作量,可扩展性良好。并且,与并发模式相比,异步处理是非阻塞的(无需等待执行结果,单 CPU/单核就足够了),意味着在(Worker)执行任务的同时,系统仍然能够轻松响应用户请求

因此,相比之下异步(并行)可扩展性最高

二.异步的意义

除了可扩展性方面的优势外,异步更多的意义在于:

  • 可打断/可暂停:允许分片执行,而不必一次做完

  • 可调度:允许更细粒度的时间管理,比如闲时主动执行、甚至离线执行

  • 并行的可能性:异步返回结果,意味着可以交给别人、甚至交给一支军队来做

  • 解耦生产者和消费者:把 Worker 分离出去,使之能够独立扩展,比如只加 Woker 不加 Web Server,类似于分离 Web 层和应用层

所以,React 从同步的 Stack reconciler 改为 Fiber reconciler,也具有这些意义:

既然任务可拆分(只要最终得到完整 effect list 就行),那就允许并行执行(多个 Fiber reconciler + 多个 worker),首屏也更容易分块加载/渲染(vDOM 森林)

(摘自[完全理解 React Fiber](/articl


(试读结束,购买后阅读全文)

继续阅读需要购买
本文为付费文章,登录后可自动解锁已购买内容。
立即购买

评论

暂无评论,快来发表你的见解吧

提交评论