阿里巴巴的微服务开源之路
![](https://img.haomeiwen.com/i2509688/942de3581798146a.png)
侠之大者,为国为民。
在金庸小说中,郭靖和黄蓉是“侠之大者,为国为民”的典范,他们以布衣之身帮助宋军守护襄阳十余年。
技术的世界里,并无大小之分。
但当一群程序员由服务公司内部转变为社会的程序员,将技术以开源的方式与社区的开发者一同协作、改进和使用时,他们便被赋予了更大的责任和期待。
阿里云智能中间件的程序员们正和社区的开发者们一起,用键盘敲下国内微服务开源项目的过去和未来。
![](https://img.haomeiwen.com/i2509688/9af792d194c828ea.png)
国内首个非 Hadoop 生态体系的 Apache 社区顶级项目
2016年的那届双11,RocketMQ 团队首次将低延迟存储解决方案应用于双11的支撑,经受住了流量的大考,整个大促期间,99.996%的延迟落在了10ms以内,完成了保障交易稳定的既定目标。
对于读写比例几乎均衡的分布式消息引擎来说,这一技术上的突破,即便是放在全球范围内,也绝对是值得称赞的。
![](https://img.haomeiwen.com/i2509688/76f0d14a815a7e23.png)
另一边,在历时3个月的开源重塑后,RocketMQ 团队启动了向 Apache 软件基金会的捐赠之路,但迈出这一步并不容易。
“当时国内的开源氛围还没有现在那么活跃,开源之后,很多设计文档、代码质量,以及社区建设还不够理想。我们一直期待,国内的开源项目和开源社区也可以在世界的开源舞台上发挥让人瞩目的价值,希望更多“中国智造”的开源项目成为世界级的开源项目。”阿里云智能高级技术专家冯嘉回忆道。
经过近一年的努力,在2017年9月25日,Apache软件基金会官方宣布,阿里巴巴捐赠给 Apache 社区的开源项目 RocketMQ 从 Apache社区正式毕业,成为 Apache 顶级项目(TLP),这是国内首个非 Hadoop 生态体系的 Apache 社区顶级项目。
值得一提的是,根据项目毕业前的统计,RocketMQ 有百分八十的新特性与生态集成来自于社区的贡献。
毕业一年多后,RocketMQ 已经覆盖互联网金融等领域60%以上的消息场景,并被应用到金融、电力、物流、游戏、电子商务、共享出行等十几个行业。然而,随着云计算、大数据、人工智能等技术在全球范围的深入推进,催生出了如IoT、区块链、AI、边缘计算等新的应用场景,架构上如何进一步演进以更好的适应新的场景,服务好下一个十年,这是即将到来的 RocketMQ 5.0 要解决的问题。
消息领域的里程碑事件
RocketMQ 从 Apache 社区正式毕业的同时,消息领域出现了另一件里程碑事件,分布式消息领域的国际标准 OpenMessaging 开源项目正式入驻Linux基金会,这是国内首个在全球范围发起的分布式计算领域的国际标准。
消息通信已经成为现代数据驱动架构的关键环节,但在全球范围内,消息领域仍然存在两大问题:
一是,缺乏供应商中立的行业标准,导致各种消息中间件的高复杂性和不兼容性,相应地造成了公司的产品低效、混乱和供应商锁定等问题。
二是,目前已有的方案框架并不能很好地适配云架构,即非云原生架构,因此无法有效地对大数据、流计算和物联网等新兴业务需求提供技术支持。
这也是 RocketMQ 开源过程中,开发者和合作伙伴经常会提到的问题:“在消息领域,市场上出现了各类不同的开源解决方案,这导致了用户更高的接入和维护成本,为了确保各个消息引擎间能正常通信,还要投入大量的精力去做兼容。”
这时候,建立一套供应商中立,和语言无关的消息领域的事实标准,成为各社区成员共同的诉求。
![](https://img.haomeiwen.com/i2509688/08f100eda2d75937.png)
此后,阿里巴巴发起 OpenMessaging 项目,并邀请了雅虎、滴滴出行、Streamlio 共同参与,一年后,参与OpenMessaging 开源标准社区的企业达20家之多,包括阿里巴巴、Datapipeline、滴滴出行、浩鲸科技、京东商城、科大讯飞、青云QingCloud、Streamlio、VIPKID、微众银行、Yahoo、中国移动苏州研发中心等(按首字母排序),此外,还获得了 Apache RocketMQ、Apache Pulsar 等顶级消息开源厂商的支持。
相比于开源一个分布式消息项目,一套开源标准能被各家厂商所接受,对整个国内开源领域而言,是更具有里程碑意义的事件。
从微服务框架到微服务生态
Dubbo 是阿里巴巴于2012年开源的分布式服务治理框架,是国内影响力最大、使用最广泛的开源服务框架之一。在2016年、2017、2018年开源中国发起的最受欢迎的中国开源软件评选中,连续三年进入 Top10 名单。2019年2月 Dubbo 发布了2.7.0,这一版本将用于 Apache 基金会的正式毕业。(已进入 Near Graduation 阶段)
![](https://img.haomeiwen.com/i2509688/206e00cbd94c20b6.png)
从 Apache 孵化器毕业,除了有个名誉,对项目之后的维护、发展有什么影响?
“从孵化器毕业是一种荣誉,但这并不是结束,而是另一种开始。这有点像求学,毕业并不意味着学习上的中断,而是发挥更大社会价值的开始。毕业也更像是一个成人礼,意味着Dubbo 团队已经符合Apache对一个成熟开源项目的要求,并开始具备独立发展的能力。”阿里云智能高级技术专家北纬在接受媒体采访时回答道。
![](https://img.haomeiwen.com/i2509688/b75915c43aaefda6.png)
截至目前,Dubbo 已收获 2.5w+ star,在 GitHub 所有 Java 项目中排名前十,并有越来也多的企业用户选择 Dubbo 作为自己的微服务治理框架。但是,随着微服务化的逐渐深入,Dubbo 提供的能力逐渐无法满足微服务各个方面的需求。
阿里云智能技术专家望陶在一次直播中分享道:“Dubbo 是一个微服务框架,帮助开发者快速构建高性能的微服务应用。但在 API Gateway,熔断限流,分布式监控,分布式事务等方面,缺乏一套比较完整的围绕 Dubbo 的解决方案,基本上是各个公司自研,或者需要调研外面开源的各种框架进行调研选型,花费了比较大的时间和精力在这上面,却无法形成一套体系化的方案。”
因此,我们做了进一步的演进,即从微服务框架演进到微服务生态。
通过和成熟的开源方案做集成,形成一个完整的微服务生态,组成 Dubbo Ecosystem,开发者无需为现有的系统做出过多的修改,就能快速开发微服务应用。
Dubbo Ecosystem 的概念得以提出,离不开 2018 年夏天开源的两大微服务组件。
技术人的仲夏之夜
2018年夏天,国内开源领域,迎来了两位新成员。
作为微服务和云原生生态下的两款重要开源组件,Nacos 主打云原生应用中的动态服务发现、配置和服务管理,Sentinel 则是聚焦在限流和降级两个方面。
Nacos 和 Sentinel 均是在阿里近10年的核心业务场景下沉淀所产生的,他们的开源是对微服务和元原生领域开源技术方案的有效补充,同时也非常强调融入开源生态,除了兼容 Dubbo,也支持 SpringCloud 和 Kubenetes 等生态,以增强自身的生命力。
“阿里巴巴早在 2007 年进行从 IOE 集中式应用架构升级为互联网分布式服务化架构的时候,就意识到在分布式环境中,诸如分布式服务治理,数据源容灾切换、异地多活、预案和限流规则等场景下的配置变更难题,因为在一个大型的分布式系统中,你没有办法把整个分布式系统停下来,去做一个软件、硬件或者系统的升级。”阿里云智能高级技术专家坤宇在 QCon 的现场分享道。
![](https://img.haomeiwen.com/i2509688/f0b887c29146923d.png)
相比其他服务配置中心开源方案,Nacos 的起步虽然晚了点,但除了配置中心,他还提供了动态服务发现、服务共享与管理的功能,在大规模场景下具备更优秀的性能,在易用性上更便捷,分布式部署上更灵活。
Nacos 支持多种启动模式,用户可以根据业务场景自由选择,将各个功能模块,如注册中心和配置中心,分开部署或者合并部署,从而能够完整支持小型创业公司成长到大型企业,微服务全生命周期的演进。
截止到目前,已经有40多家企业将 Nacos 部署到生产环境中,例如 虎牙直播 就是最早一批将 Nacos 大规模引入到生产环境的典型用户。
![](https://img.haomeiwen.com/i2509688/2d9c2403694d340f.png)
“虎牙关注 Nacos 是从v0.2 开始的,我们也参与了社区的建设,可以说是比较早期的企业用户。引入Nacos前,我们也对比了Spring Cloud Config Server、ZooKeeper 和 ectd ,总体评估下来,基于我们微服务体系现状以及业务场景,决定使用 Nacos 作为服务化改造中服务注册和服务发现的方案。使用过程中,我们发现,随着社区版本的不断更新和虎牙的深入实践,Nacos 的优势远比调研过程中发现的多。”虎牙基础保障部中间件团队负责人张波在一次开发者活动上分享道。
巧的是,一边是 Nacos宣布开源,并被列入 CNCF 云原生全景图,另一边是 Spring Cloud 生态下的服务注册和发现组件 Netflix Eureka 宣布停止开源投入,勇敢者的游戏充满了变数,但在 Nacos 团队看来,这场游戏自己可以走到最后,因为我们并不是一个人在战斗,Nacos 只是阿里众多开源项目中的一员,随后还会有更多的开源项目反哺给社区,形成生态,例如轻量级限流降级组件 Sentinel。
![](https://img.haomeiwen.com/i2509688/cbc47d483d6e8e6f.png)
2018年7月29日,AliwareOpen Source•深圳站现场,只能容纳400人的场地,来了700多位开发者。阿里云智能高级技术专家子矜在现场宣布了轻量级限流降级组件 Sentinel 的开源。
Sentinel 经历了10年双11的考验,覆盖了阿里的所有核心场景,也因此积累了大量的流量归整场景以及生产实践。Sentinel 的出现,离不开阿里历届高可用架构团队的共同努力。
“在双11备战中,容量规划是最重要也是最具挑战的环节之一。从第一年开始,双11的0点时刻就代表了我们的历史最高业务访问量,它通常是日常流量的几十倍甚至上百倍。因此,如何让一个技术和业务持续复杂的分布式站点去更平稳支撑好这突如其来的流量冲击,是我们这10年来一直在解的题。”阿里云智能高可用架构团队资深技术专家游骥在一次双11备战结束后分享道。
这10年,容量规划经历了人工估算、线下压测、线上压测、全链路压测、全链路压测和隔离环境、弹性伸缩相结合的5个阶段。2013年双11结束后,全链路压测的诞生解决了容量的确定性问题。作为一项划时代的技术,全链路压测的实现,对整个集团而言,都是一件里程碑事件。
![](https://img.haomeiwen.com/i2509688/fee55f87070e9c56.png)
随后,基于全链路压测为核心,打造了一系列容量规划相关的配套生态,提升能力的同时,降低了整个环节的成本、提升效率。随着容量规划技术的不断演进,2018年起,高可用架构团队希望可以把这些年在生成环境下的实践,贡献给社区,之后便有了 Sentinel 的开源。
Sentinel 开源后仅两个月,便被列入云原生全景图谱,位于编排和管理模块象限中,同时被列入云原生全景图谱的还有提供应用架构自动探测、故障注入式高可用能力演练和一键应用限流降级等功能的应用高可用服务 AHAS。
近期,Sentinel 贡献的spring-cloud-circuitbreaker-sentinel
模块正式被社区合并至Spring Cloud Circuit Breaker,由此,Sentinel 也加入了 Spring Cloud Circuit Breaker 俱乐部,成为 Spring Cloud 官方的主流推荐选择之一。
Spring Cloud 官方推荐的微服务方案不止 Sentinel 一个,还有 Spring Cloud Alibaba.
2018年,中国的 Java 圈发生了一件大事。
Spring Cloud 联合创始人 Spencer Gibb 在 Spring 官网的博客页面宣布:阿里巴巴开源 Spring Cloud Alibaba,并发布了首个预览版本。随后,Spring Cloud 官方 Twitter 也发布了此消息。
![](https://img.haomeiwen.com/i2509688/4008841a7918fe9b.png)
可能是受到 Spring Cloud Netflix 减少开源投入的影响,Spring Cloud Alibaba 开源后的热度超出了阿里巴巴高级技术专家姬望的预期。
在接受开源中国采访的过程中,姬望认为“Spring Cloud Alibaba 是中国 Java 开发者的福音,弥补了 Spring Cloud 原生实现在大规模集群场景上的局限性。Spring Cloud 规范的实现目前有很多,比如 Netflix 有自己的一整套体系,Consul 支持服务注册和配置管理,ZooKeeper 支持服务注册等。但每套实现或多或少都有各自的优缺点,或许大多数 Spring Cloud 用户很难体会到 Netflix OSS 等实现的局限性,无论是服务发现、分布式配置,还是服务调用和熔断都不太适合大规模集群场景,比如我们内部也遇到 Eureka 性能问题。因此,我们将自身的超大规模集群经验与强大的 SpringCloud 生态整合,实现强强联合,希望能对业界会产生一些积极的化学变化。”
夏天过后,开源的热度仍在延续
效率的好处在于,我们可以把自己的注意力和时间聚焦在更需要创造力的事情上,做更有成就感的事情。对于工作在工程领域的开发者们而言,他们的效率意识更强。
2018年9月,阿里将内部广泛使用的 Java 线上诊断工具进行开源,取名 Arthas (阿尔萨斯)。也许是击中了开发者线上排查问题的痛点,Arthas 在距离开源后的第一个 Release 版发布仅 147 天,就获得了超过 1w 的 star 数,并有40多位 Contributors 参与开源贡献。
![](https://img.haomeiwen.com/i2509688/56c0cc50ff533707.png)
从中,我们不仅看到 Arthas 在开发者群体中的受欢迎程度,也发现越来越多的国内开发者开始擅于使用开源技术加速业务发展,更是不禁畅想起将来会有更多国内的优质开源项目获得全球开发者的关注和喜爱。
技术领域,一切 里程碑 的达成,都源于一份技术情怀。
阿里云智能技术专家断岭回忆到:“Arthas 在阿里巴巴内部起源于2015年,当时微服务方兴未艾,我们团队一方面专注 Spring Boot 的落地,提高开发效率。另外一方面,希望可以提高技术团队线上排查问题的能力和效率。当时,我们经过选型讨论,选择基于 Greys (Greys 是阿里巴巴杜琨@oldmanpushcart 开发的),一款 Java 开源在线问题诊断工具来开发,以提供更好的应用诊断体验。”
我们在用户体验上做了大量的改进:彩色UI、Web Console 和内网一键诊断等。慢慢的,Arthas 成为阿里巴巴很多技术同事线上诊断问题的必备工具。尽管 Arthas 在阿里内部广受好评,但只是一个自用的工具。取之开源,用之开源,因此我们在2018年9月28日,正式开源了 Arthas,希望可以帮助 Java 开发人员提升诊断效率。
随着越来越多的开发者开始使用 Arthas,众多开发者效率工具将 Arthas 内置到自己的产品中,丰富了 Arthas 的接入和打开方式,例如 IDE 插件 Cloud Toolkit。
时间来到2019年。
阿里云智能高级开发工程师煊檍在内网分享到:分布式事式问题一直是应用开发过程中的技术痒点。不敢说是痛点,因为长久以来,大家普遍对分布式事务问题的应对策略还是:能不用就不用,尽量绕开。但在微服务架构普遍落地的今天,分布式事务问题越来越绕不开,解决方案不是没有,但要么性能差,要么侵入性高,不容易落地。总之,是有点“不爽”。
![](https://img.haomeiwen.com/i2509688/d831d76a83995a15.png)
而这种“不爽”集中反映在了分布式事务开源中间件 Fescar 上。当阿里云智能高级开发工程师清铭在2019年1月 RocketMQ Meetup 上宣布分布式事务中间件 Fescar 正式开源后的一周内,Fescar 便收获了3000+ star,社区讨论的 issue 达58个。随后,Fescar 项目组整理并回答了开发者们集中关心的13个问题,例如 Fescar 的诞生背景、适用场景,和其他开源分布式事务方案之间的差别等。
阿里巴巴中间件团队于2014年发布 TXC(Taobao Transaction Constructor),开始为集团内应用提供分布式事务服务。2016年,TXC 经过产品化改造,以 GTS(Global TransactionService)的身份上线阿里云,成为当时业界唯一一款云上分布式事务产品,以阿里云公有云和专有云解决方案的形式,交付给众多外部客户,并得到了客户的一致认可。2019 年,基于 TXC 和 GTS 的技术积累,中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback, FESCAR),和社区一起共建分布式事务解决方案。
TXC/GTS/Fescar 一脉相承,为解决微服务架构下的分布式事务问题交出了一份与众不同的答卷。而Fescar 的愿景是让分布式事务的使用像本地事务的使用一样简单和高效。最终的目标是希望可以让 Fescar 适用于所有的分布式事务场景。
阿里巴巴的开源之路仍在延续。
恰逢其时,阿里云峰会·北京的开发者专场现场,阿里云智能资深技术专家李三红宣布,阿里开源 Open JDK 长期支持版本 Alibaba Dragonwell,作为 JCP 最高执行委员会唯一的中国企业,将更主动的参与到 Java 生态的维护工作中。
Dragonwell 意为龙井,象征着中国的茶文化。
本文作者:中间件小哥
本文为云栖社区原创内容,未经允许不得转载。