近年来,得益于日渐增长的高并发业务需求,微做事架构开始在海内逐渐遍及。同时,专为高并发而生的 Go 措辞及其干系生态在海内的发展也突飞年夜进。目前,市情上主流的微做事架构包括 Spring cloud、Dubbo等,并且都有团队为之专门推出了对应的 Go 版本,以充分发挥 Go 在微做事架构中的高并发上风。
而网络直播正是一项高并发的业务,斗鱼的分布式业务模型一贯让我们颇为好奇。为进一步理解斗鱼的 Jupiter 与其他主流微做事框架的差异,以及斗鱼内部技能栈的发展,我们第一韶光约请到了斗鱼 Go 团队研发工程师吕超,一起回顾了 Jupiter 的开源进程,以及斗鱼近几年的技能栈变革。
Jupiter 的出身据悉,Jupiter 脱胎于斗鱼内部的 Golang 微做事框架,经由三年打磨、几百个做事的线上验证,并历经多机房培植、云化、容器化等多次根本架构演进。目前,Jupiter 发布了 0.5.0 版本,基本涵盖了内部框架的紧张功能。但由于内部框架含有许多定制的特性以及一些历史包袱,许多功能并没有完全开释出来。“ 我们也在整理,尽快把这部分功能开释出来。”
那么斗鱼在搭建微做事架构的过程中,为什么不采取现成的微做事框架,而是选择自己“造轮子”,重新创造了 Jupiter 呢?吕超见告我们,斗鱼是在 2016 年底开始启用微做事架构的,也是在当时引入了 Go 技能栈。Jupiter 也不是一开始就构思好的。“ 刚开始,我们大量利用开源的类库来攒运用。开源类库的功能不敷,bug 没法及时修复,我们就二开。为了知足内部多技能栈通信的需求,我们开始编写统一的 RPC 框架,逐渐形成了早期的 Jupiter。” 随着做事规模的增长,根本架构的演进,Jupiter 也在不断发展为支持多运用处景、关注开拓效率和管理效率,并能从容应对根本架构演进的微做事框架。
作为一个发展中的开源项目, Jupiter 与市情上的 Spring Cloud、Dubbo 这类成熟的框架比较,并不算完美。“ 在功能上, Jupiter 还有许多不敷。但 Jupiter 是 Go 原生的,采取的许多方案也都是 Go 生态里大家喜闻乐见的,比如 gRPC、ETCD、Prometheus、Jaeger 等。同时,Jupiter 是面向做事管理的框架,对一些模块的处理比较开放,比如 echo、gin 这些都很随意马虎集成进来,当然也包括各公司自研的 RPC 框架。” 吕超表示,虽然目前的 Jupiter 还不是最完美的框架,但却是基于斗鱼多年的实际业务履历积累起来的,是目前最适宜斗鱼的微做事架构。
为什么选择 GoGo 措辞是由谷歌于 2009 年推出的一门相比拟较新的编程措辞,因其原生支持高并发的特性,被誉为云原生时期的容器措辞。但 Go 在海内的起步较晚,目前 Go 干系的生态在海内还并不完善,乃至还有很多开拓者仍对这门所谓的云原生时期新措辞持不雅观望态度。在与吕超的互换中我们得知,成立于 2014 年的斗鱼最开始利用的也不是 Go 。
“ 斗鱼 Web 部门一开始利用的是 PHP,一贯到 2016 年底,为应对业务规模的快速增长,逐步引入 Go、Java 从而形成了多技能栈的局势。” 吕超先容说,“ 引入 Go 也是看中了 Go 在高并发运用开拓和容器化上的上风,事实上在随后两年的做事化工程中,Golang 确实也展现了这种上风。”
然而迁移到 Go 的过程并不随意马虎。据吕超回顾,“ 由弱类型措辞转向强类型措辞,类库的匮乏,以及 Go 在包管理功能上的混乱都给我们造成了不少的困难。但 Go 措辞机制比较大略和直不雅观,没有那么多花里胡哨的东西,这也带来一个潜在上风便是 Go 运用的重构和迭代本钱是非常低的,这一定程度上降落了迁移的难度。”
也正是为了提高 Go 运用的开拓效率,斗鱼的团队开拓了 Jupiter 。“ 随着运用规模的增大,Jupiter 也非常关注管理效率。做事化做的差不多的时候,也开始承担多机房培植、云化、容器化、混沌工程等根本培植的一些事情,以保障业务逻辑与这些基建的无缝对接。当然这里更多的是须要管理平台和运维的 PaaS 平台的支持,幸运的是,我们的做事管理平台 Juno 也开源了。通过 Jupiter 和 Juno,可以实现比较完全的做事管理体验。”
与其他微做事框架的差异由于 Go 措辞支持高并发特性,一些已经比较成熟的微做事架构也在近期推出了 Golang 重构版本,比如我们前段韶光宣布的 Dubbo Go 。吕超表示,他们的团队也一贯在关注 Dubbo Go 这个项目,同时也很乐见 Golang 生态里有这样精良的 RPC 框架。实际上,Jupiter 与 Dubbo Go 等这些精良的 RPC 框架比较,更多的是一种互补的关系。
首先,比较于 RPC 框架,Jupiter 更侧重于微做事管理。斗鱼内部的 Jupiter 深度定制了 echo, gRPC 框架,并支持公司内部自研的 RPC 框架。一方面是为理解决公司内部多技能栈 (php/Go/java/cpp) 的数据通信,另一方面也是为理解决早期一些开源框架功能不敷的问题。但是随着公司内部 RPC 框架的整合,以及开源框架的持续完善,这两个问题得到了很大的缓解。 “ 以是我们也在逐步简化 RPC 框架,专注于做事管理。开源的 Jupiter 也延续了这个理念,通过大略的适配,gin/Goframe 等精良框架都可以很方便的集成进来,这里的适配紧张指一些基于管理和管理须要的必要封装。”
其次,Jupiter 不但是一个 RPC 框架。Jupiter 关注的是运用的做事管理,除了 RPC,运用还有缓存、存储、行列步队、任务编排等。这些都是须要管理的,除了可不雅观测性的三驾马车: 日志埋点、指标采集、链路追踪外,Jupiter 还支持统一缺点码、在线profiling、开拓模式、动态配置等根本功能,管理精度更高,维度更丰富。
我们知道,微做事架构中的一个关键点是做事之间的通信,特殊是多技能栈场景下的跨措辞通信。在斗鱼内部,Java 团队采取的便是 Dubbo 框架,为了实现 Go 运用与 Java 运用通信,团队采取了一种折中的办法是:
Java 团队的 Dubbo 框架采取 Dubbo-gRPC 作为通信协议,实现通信协议上的互通。Go 团队的 Jupiter 框架通过多注册键的办法,支持 Dubbo 基于接口的注册协议,实现做事注册和创造上的互通。“ 这个方法虽然能用,但不那么优雅。真正要办理问题,还是须要打通做事注册协议。我们把稳到了 Dubbo 和 Dubbo Go 基于运用注册方面的进展,我们对此非常期待,也在研究怎么把 Jupiter 和 Dubbo Go 做一个结合,从而优雅的与 Dubbo 互通。” 吕超表示,让 Jupiter 与 Dubbo 架构更好的互通,是团队下一步要努力办理的问题。
微做事架构的意义分布式的微做事架构从出身之日起就受到不少争议,网上也有人认为很多企业连续沿用统一支配的传统架构即可,无需盲目追求新技能。吕超结合斗鱼的业务履历,分享了他对付微做事架构运用前景的意见:“ 我以为技能架构都是一个演进过程,屈服康威定律:组织架构决定技能架构。”
斗鱼是随着业务的发展,组织架构的变迁,导致原有的单体运用架构在掩护和管理上存在一定问题,因此逐步迁移到微做事。微做事帮斗鱼办理了以下问题:
做事的可掩护:子系统的内聚性,明确了子系统的职责和边界,可以有效降落各个别系的沟通本钱和对接本钱,架构上可以更加合理高效做事的高可用:子系统的 SLA 划分,根据不同 SLA 等级,能够对核心做事做优化和灾备,提升做事可用性做事的可伸缩:子系统的 QPS 划分,根据不同 QPS 量级,能够对做事的容量进行估算,做事做到可伸缩总的来说,微做事在业务规模、组织架构达到一定程度的时候,有很多不错的掩护和管理上风。“ 换言之,不是我们选择将单体换成微做事,而是业务发展到一定程度须要微做事。评价一个企业是否须要微做事架构有个最大略的办法,便是两个披萨的理论。如果掩护一个单体运用代码,超过了两个披萨的团队,就有可能人数太多导致沟通问题,这个时候,我们可能就须要做一些拆分。”
拥抱开源的斗鱼海内大厂拥抱开源的例子不在少数。作为一家海内有名的网络直播平台,斗鱼在开源界尚属新面孔。我们请吕超为我们分享了斗鱼的技能团队对付开源的意见。
“ 在开源 Jupiter 之前,我的许多同事也都在不同程度的参与到开源社区,贡献代码。早期参与开源社区的目的,紧张是由于由于内部须要,我们二开了很多开源类库。如果及时的把改动反馈到社区,能极大减轻我们的掩护本钱。随着参与次数的增多,逐渐产生了开源的想法。同时,Go 原生的面向微做事管理的集成方案比较匮乏。非原生的、从其他措辞生态搬过来的框架又有一定的理解本钱。各类缘故原由匆匆使我们考虑把微做事框架 Jupiter 和管理平台 Juno 同时开源,为微做事架构方案贡献一点点力。”
通过开源 Jupiter,吕超和他的团队全面的梳理了根本框架的架构设计,总结了做事管理的履历,“ 这对未来我们内部的做事架构和管理体系都有非常大的帮助。” 同时,开源社区的积极反馈也给斗鱼的团队带来了很多有代价的见地和建议。
“ 贡献者的反馈也还是比较多的,有谈论做事管理方案的、有讯问架构设计的,乃至还有谈论到详细某行代码的。作为一个刚刚开源的新项目,这些反馈对我们都无比宝贵。” 间隔项目开源短短半个月的韶光,目前 Jupiter 已经得到了 1066 个 Star 。同时,随着 Jupiter 社区的持续完善,以及与其它开源社区的互动,吕超相信这一定会让 Jupiter 和斗鱼内部的管理体系更加健壮。
“ 之前更多的是个人参与,项目也比较分散。借着这次开源的机会,我们会整合一些开拓资源,瞄准我们正在利用或将要利用的一些开源项目,参与进去。然后,推动这些项目在我们内部的利用,形成一个良性的互动。”
吕超总结了自己对参与开源的意见。从个人的角度来讲,参与开源能有效提升个人的代码质量。从公司的角度来讲,能更有效的利用共享资源提升效率。总体上,是一件非常有益的事情。
关于未来斗鱼未来是否还会开源更多的项目?
吕超向我们透露,目前团队操持是环绕微做事框架 Jupiter 和做事管理平台 Juno,持续的推动开源。过去两年,斗鱼内部积累了许多类库,比如基于内存的工具存储 bigmap,高并发的 redis 客户端 redix,对全链路压测的支持等,由于含有一些内部定制的特性,暂时没有开源。但之后团队会进一步整理,逐步通过 Jupiter 把这些内部的项目开释出来。
“ 作为 Jupiter 配套的后台系统 Juno,我们后续操持会持续完善配置中央、注册中央、监控中央、管理中央等等,Juno 不仅会兼容 Jupiter,也会兼容其他开源的框架,为 Go 微做事生态添砖加瓦。”
斗鱼 Go 团队先容
目前斗鱼 Go 团队有 60 多人,分布在武汉和北京两个城市,支持了斗鱼线上大量高并发 IO 做事、CPU 密集型打算排序,CGo 识别,K8S 运维等多种业务类型,成为了斗鱼里面比较有影响力的团队。同时斗鱼 Go 团队还积极在社区中生动,在 Gocn、Go 夜读均有分享文章和视频。
关于 Jupiter 的更多信息,可以查看:https://www.oschina.net/p/jupiter
项目地址: https://github.com/douyu/jupiter
文档地址:http://jupiter.douyu.com转载自开源https://www.oschina.net/news