2018年初,淘宝开始尝试对整体架构进行升级,经过近一年的探索,实现了全面异步化,这一架构升级在部分应用中取得了40%以上的性能提升,同时也为后续的回压推进打下了基础。负责该项架构升级的是淘宝技术专家许泽彬,他在2018领域驱动设计中国峰会上做了《淘宝应用架构升级——反应式架构的探索与实践》的分享,InfoQ也趁此机会对他进行了采访,了解了更多细节。

2018领域驱动设计中国峰会(DDD2018)是ThoughtWorks发起的技术会议,旨在给国内的DDD实践者们提供一个互相交流、分享自己团队的成功经验的机会的平台。

许泽彬是淘宝技术专家,目前负责淘宝应用架构升级。曾参与淘宝用户增长设施与平台建设,负责过分布式调用链跟踪框架和系统“鹰眼”,曾经是阿里分布式数据库中美异地机房数据同步的核心开发,也是阿里旗下开源项目otter和canal的核心开发者。

淘宝此次架构升级,重点在于将同步的架构改为异步、面向流的开发,以便为后续的回压方案打下基础, 这里所说的回压方案要解决的问题是:应用在突发流量下的稳定性保证,以及最大化提升资源利用率。 许泽彬将其称为反应式架构。

经过近一年的推进,反应式架构已经在生产环境落地,在2018年双11万亿级大规模处理量下,架构升级对多个核心应用进行了验证落地,取得了超出预期的效果:

  • 其中『猜你喜欢』应用上限 QPS 提升96%,即只需一半的机器就能支撑现有业务;
  • 而另一核心应用『我的淘宝』实际线上响应时间下降了 40% 以上,意味着用户可以更快得到响应。

在淘宝内部,这仅仅是回压——突发流量下的稳定性以及最大化提升资源利用率方案 —— 刚刚迈出的第一步。

什么是反应式架构

反应式架构里的反应式,就是Reactive,国内对这个词的翻译并不统一,有的叫响应式,有的叫反应式。许泽彬认为,这里将其称为反应式更为准确,响应式更多用于前端的界面中,对应的英文是Responsive。

反应式架构与一般架构相比,其反应体现在:

第一个,对用户有反应,对用户有反应我们才说响应,一般我们说的响应,基本上都说得针对跟用户来交互。

第二个,要对失败有反应,应用失败了系统不能无动于衷,等着它挂掉,要有反应。

第三个,要对容量和压力变化有所反应,比如说淘宝的秒杀,系统需要反应来保证对用户的响应性,再如那个当流量降下来,将系统缩容,可以节约成本,这也是一种反应。

第四个,对输入有反应,响应系统的输入,也可以叫做消息驱动。

要做到反应式,需要做到三点:

  • 适应性,也就是发生失败能恢复回来,无论是系统、网络、代码出现了问题都能恢复。
  • 弹性,这点主要是应对流量的变化,弹性的前提是做到可伸缩性Scalability,从软件设计上,要做到去中心化;同时,在运行时,要感知节点当前的系统负载,将压力往上游进行反馈,做到系统可以感知链路级别的节点压力,使得系统可以针对整体压力进行有目的地扩容缩容。这样才能够做到真正的弹性,根据系统负载进行扩容或缩容,这也是淘宝的回压方案在后续所需要支撑的场景。
  • 消息驱动,有了消息驱动才能比较好的做到上面两个点。在反应式架构里,以前这点叫做事件驱动,后来改为消息驱动,消息驱动强调无阻塞、无callback,所以不会有线程挂在那里,不会有持续的资源消耗。同时,事件驱动或消息驱动都是异步化,而异步化会将操作系统中的队列情况显式地提升到了应用层,使得应用层可以显式根据队列的情况来进行压力负载的感知,这对于淘宝后续的回压方案非常重要,而要做到这点,就需要异步了。

反应式架构中的核心概念是“流”,流就是面向数据的顺序串行执行的一系列操作组合,它同传统的编程相比,将业务逻辑导致数据改变,变成了操作改变数据,反过来影响业务逻辑的改变。面向流编程就是面向数据编程。

面向流的开发的优势主要体现在:

  • 提供大量强大的操作符,包括创建、过滤、转换等。声明式表达比过程式编程更加完备、高级、快捷。
  • 在并发控制方面,不同的流之间无依赖,通过切换Scheduler就可以自动多流并发,而业务按照语义编写,可以更友好的并发控制,更优的维护性和性能。
  • 更高的资源利用率。通过更少的上下文切换、更低的竞争,可以降低负载,提升资源的有效利用率。
  • 流可以加强分布式架构的治理能力。流引用可被远程化,从而实现系统级的流式贯通,而流提供的更好的回压、三角模式透传,以及天然的截面编程能力等,可以给架构治理提供更好的帮助。目前淘宝正在推进回压的方案,就是为了给系统在稳定性和资源利用率上提供更高级的治理手段。

淘宝反应式架构实践

淘宝之所以要做架构升级,是因为现有架构存在一系列问题:

  • 同步等待造成资源浪费,现有的同步模型线程多负载高,导致资源利用率较低。
  • 架构的并行度有限,无法实现纯业务依赖并发,微服务化让问题更加凸显,服务增加造成响应时间累积。
  • 而响应时间累积又带来一些连锁反应,包括为了降低响应时间而过早的引入cache,每个服务都需要设置超时来解决长时间无响应问题,而这些带来维护成本的提升,也提高了业务实现的复杂度。
  • 同时,在应用系统无事先准备的情况下,面对突发大流量时,很容易被打挂,造成稳定性问题,导致用户体验严重下降。

而经过调研后,淘宝架构团队认为使用反应式架构是当前可行的一个方案。原因包括,Java 8已经逐渐普及,因为它包含对Lambda的支持,这让开发者对Lambda的接受度大大提高;同时Reactive相关的业务框架在业界已有成熟的实现,RxJava已经广泛在大小公司中应用;最后,包括Java 9(引入Reactive Sreams规范API)、Spring 5(引入Reactor/WebFlux)、Spring Boot 2都开始拥抱Reactive,说明反应式编程的确是趋势。

整个方案对业务架构的升级主要包括编程框架、中间件,以及业务方的升级。中间件的升级,包括服务框架(RPC)、网关、缓存、消息(MQ)、DB(JDBC)、限流组件、分布式跟踪系统、移动端Rx框架。

这其中值得注意的包括,对服务框架的升级,流式实现将在Dubbo 3中放出;DB中的异步集成使用Ali JVM协程或用线程池实现;移动端为了支撑已有的 iOS 应用,淘宝开发了AliRxObjc并即将开源。

最后,改造后的架构如图:

实施反应式架构的难点

反应式架构在各个模块上基本都有成熟的方案,除了个别领域如数据库,基本没有特别的瓶颈。实施反应式架构的难点主要在于工程师的思维转换,因为之前工程师主要使用同步式的思维写程序,突然要换成以流的方式编写,思维必须要做转换。

因此,要做到全面异步化,组织必须从上到下全力支持。淘宝的做法是,成立虚拟小组,在每个业务线里挑选能力比较强的同学统一进行异步式的培训和指导,之后由他们在团队内部推广。

同时,要让业务方有动力去做异步化的改造,需要让他们认识到这么做的好处,因此异步化改造首先要做出一些标杆性的成绩出来。这中间的策略包括选择面临瓶颈的地方,业务逻辑简单的, 以及业务压力不大的应用来进行试点,一旦做出成绩,就可以给其它团队以信心和动力。

淘宝应用架构升级后续规划

目前,淘宝的异步化改造在技术上已经大部分完成,后续的规划主要包括:

  • 回压的实现

    • 分布式上下游的联动回压,解决高并发压力下的响应时间、有效请求数、系统自恢复、链路短板自发现等问题,解决系统在突发流量下的稳定性问题,以及提高资源利用率。
    • 自适应回压解决静态配置无法应对系统波动变化问题
  • 实现全异步/流式为核心的服务框架,让业务方做到异步优先;
  • 考虑引入Kotlin协程,它的异步设计符合过程式的编程习惯。

淘宝的回压方案,目前正在推进和实施的过程当中,后续他们也将会有更多的经验分享出来,欢迎关注。

全面异步化:淘宝反应式架构升级探索相关推荐

  1. 淘宝开放平台架构整理资料

    一.淘宝开放平台在架构方面的特点.在系统稳定和数据安全性方面用到的技术 淘宝开放平台架构关键词:透明,核心模块小,按需简化设计,多层次设计配合(js,client,server),服务模式创新. 系统 ...

  2. 淘宝十年资深架构师吐血总结淘宝的数据库架构设计和采用的技术手段。

    淘宝十年资深架构师吐血总结淘宝的数据库架构设计和采用的技术手段. 文章目录 淘宝十年资深架构师吐血总结淘宝的数据库架构设计和采用的技术手段. 本文导读 1.分库分表 2.数据冗余 3.异步复制 4.读 ...

  3. SN-TOP架构的初步探讨——谈淘宝TOP平台的升级

    SN-TOP架构的初步探讨 --谈淘宝TOP平台的升级 文章全文将于12月10日发布,敬请关注!

  4. 以太坊去中心化淘宝智能合约案例

    这篇文章我们来介绍一个简易的区块链电商系统的核心功能,10多年来,我们习惯了淘宝的电商模式,淘宝为电商在中国普及做出了突出贡献,值得肯定,也完成了历史使命. 淘宝模式的核心是什么? 免费是一方面,我认 ...

  5. 拉拢中小网站 淘宝百度暗战升级...

    拉拢中小网站 淘宝百度暗战升级... 重庆晚报 讯 近日,大量淘宝联盟站长反映其网站在百度搜索结果大幅缩水,疑遭集体封杀.百度的理由是"清扫垃圾页面".迟迟未表态的淘宝近日对前者进 ...

  6. 淘宝 APP 网络架构演进与弱网破障实践

    作者:沈良炜 阿里大淘宝终端体验平台团队 面对移动互联网络下复杂多变的网络环境,如何提供更稳定可靠的请求性能,保障用户的加载浏览体验?本文将为大家分享淘宝APP统一网络库的演进. 一.引言 自2013 ...

  7. 手机淘宝的客户端架构探索之路

    本文转自:http://blog.csdn.net/licaomengrice/article/details/49253255 主讲人:冯森林(无锋/ Oasis Feng) 产品挑战 淘宝手机客户 ...

  8. 万字长文 | 淘宝 10年架构演进

    图片来源:pexels.com 分享一篇讲解大型网站的架构演进过程的文章,相信看完会有所收获. 文章在介绍一些基本概念后,按照以下过程阐述了整个架构的演进过程: 单机架构 第一次演进:Tomcat与数 ...

  9. 太牛了!淘宝十年架构变迁

    最近发现了一篇介绍高并发架构演进的好文,收获良多,所以分享给大家,相信大家看了肯定有收获 1. 概述 本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会 ...

最新文章

  1. svm rbf人脸识别 yale_实操课——机器学习之人脸识别
  2. hdu-1003 or 最大子序列和(四种解题方法)
  3. 对话科大讯飞刘聪:深度学习在中国是否“过火”?
  4. Python编程专属骚技巧1
  5. 2020年11月全国程序员工资,新出炉!
  6. mysql记录当前表数据的数据条数据类型_mysql的表的操作 数据类型
  7. setw()(转载)
  8. raspberry pi_如何为Raspberry Pi编写SD卡
  9. 献给时尚男女的61句最酷口语(转)
  10. 6.11 如何在Excel自选图形中显示公式的数值 [原创Excel教程]
  11. JS判断当前浏览器是否为IE内核
  12. python异步和进程_浅谈python异步IO,同步IO,线程与进程~
  13. 【前端】跨域 问题 原理 + 解决方案 下
  14. C# 实现解答数独功能
  15. 使用Sinc卷积从原始音频数据进行轻量级的端到端语音识别
  16. 计算机备课组小结,计算机备课组工作总结
  17. 充分利用 cpu_充分利用设计学校(已更新)
  18. 深入php redis pconnect
  19. 读稻盛先生的《活法和干法》的十点灵感
  20. 《财富》杂志评选的75本必读的最睿智的图书

热门文章

  1. Android零基础入门第30节:两分钟掌握FrameLayout帧布局
  2. Android -- TouchDelegate
  3. Unrecognised tag: #39;encoding#39; (position: START_TAG seen ...lt;/versiongt;\r\n\t\t\t\tlt;en...
  4. Leetcode: Maximal Rectangle
  5. CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
  6. Clusterware 和 RAC 中的域名解析的配置校验和检查 (文档 ID 1945838.1)
  7. 简单比较搜索引擎与推荐系统
  8. 使用HTML5的canvas做一个会动的时钟
  9. 【全栈React】第6天: 状态
  10. 分享一个开源博客-Jackblog