本文共 3172 字,大约阅读时间需要 10 分钟。
2018年初,淘宝开始尝试对整体架构进行升级,经过近一年的探索,实现了全面异步化,这一架构升级在部分应用中取得了40%以上的性能提升,同时也为后续的回压推进打下了基础。负责该项架构升级的是淘宝技术专家许泽彬,他在2018领域驱动设计中国峰会上做了《淘宝应用架构升级——反应式架构的探索与实践》的分享,InfoQ也趁此机会对他进行了采访,了解了更多细节。
2018领域驱动设计中国峰会(DDD2018)是ThoughtWorks发起的技术会议,旨在给国内的DDD实践者们提供一个互相交流、分享自己团队的成功经验的机会的平台。
许泽彬是淘宝技术专家,目前负责淘宝应用架构升级。曾参与淘宝用户增长设施与平台建设,负责过分布式调用链跟踪框架和系统“鹰眼”,曾经是阿里分布式数据库中美异地机房数据同步的核心开发,也是阿里旗下开源项目otter和canal的核心开发者。
淘宝此次架构升级,重点在于将同步的架构改为异步、面向流的开发,以便为后续的回压方案打下基础, 这里所说的回压方案要解决的问题是:应用在突发流量下的稳定性保证,以及最大化提升资源利用率。 许泽彬将其称为反应式架构。
经过近一年的推进,反应式架构已经在生产环境落地,在2018年双11万亿级大规模处理量下,架构升级对多个核心应用进行了验证落地,取得了超出预期的效果:
在淘宝内部,这仅仅是回压——突发流量下的稳定性以及最大化提升资源利用率方案 —— 刚刚迈出的第一步。
反应式架构里的反应式,就是Reactive,国内对这个词的翻译并不统一,有的叫响应式,有的叫反应式。许泽彬认为,这里将其称为反应式更为准确,响应式更多用于前端的界面中,对应的英文是Responsive。
反应式架构与一般架构相比,其反应体现在:
第一个,对用户有反应,对用户有反应我们才说响应,一般我们说的响应,基本上都说得针对跟用户来交互。
第二个,要对失败有反应,应用失败了系统不能无动于衷,等着它挂掉,要有反应。
第三个,要对容量和压力变化有所反应,比如说淘宝的秒杀,系统需要反应来保证对用户的响应性,再如那个当流量降下来,将系统缩容,可以节约成本,这也是一种反应。
第四个,对输入有反应,响应系统的输入,也可以叫做消息驱动。
要做到反应式,需要做到三点:
反应式架构中的核心概念是“流”,流就是面向数据的顺序串行执行的一系列操作组合,它同传统的编程相比,将业务逻辑导致数据改变,变成了操作改变数据,反过来影响业务逻辑的改变。面向流编程就是面向数据编程。
面向流的开发的优势主要体现在:
淘宝之所以要做架构升级,是因为现有架构存在一系列问题:
而经过调研后,淘宝架构团队认为使用反应式架构是当前可行的一个方案。原因包括,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并即将开源。
最后,改造后的架构如图:
实施反应式架构的难点
反应式架构在各个模块上基本都有成熟的方案,除了个别领域如数据库,基本没有特别的瓶颈。实施反应式架构的难点主要在于工程师的思维转换,因为之前工程师主要使用同步式的思维写程序,突然要换成以流的方式编写,思维必须要做转换。
因此,要做到全面异步化,组织必须从上到下全力支持。淘宝的做法是,成立虚拟小组,在每个业务线里挑选能力比较强的同学统一进行异步式的培训和指导,之后由他们在团队内部推广。
同时,要让业务方有动力去做异步化的改造,需要让他们认识到这么做的好处,因此异步化改造首先要做出一些标杆性的成绩出来。这中间的策略包括选择面临瓶颈的地方,业务逻辑简单的, 以及业务压力不大的应用来进行试点,一旦做出成绩,就可以给其它团队以信心和动力。
目前,淘宝的异步化改造在技术上已经大部分完成,后续的规划主要包括:
淘宝的回压方案,目前正在推进和实施的过程当中,后续他们也将会有更多的经验分享出来,欢迎关注。
转载地址:http://bgjax.baihongyu.com/