斗鱼开源首秀——基于 Go 的微办事框架 Jupiter

伊红-美蓝 发布于 06/16 19:05
浏览 11K+
收藏 59

精选30+云产品,助力企业轻松上云!>>>

6 月 1 日,斗鱼将基于 Go 说话的微办事框架 Jupiter 开源。作为国际有名的互联网直播公司,这也是斗鱼初次以公司的名义正式推出开源项目。 

近年来,得益于日渐增长的高并发营业需求,微办事架构开端在国际逐步普及。同时,专为高并发而生的 Go 说话及其相干生态在国际的生长也突飞大进。今朝,市情上主流的微办事架构包含 Spring cloudDubbo 等,并且都有团队为之专门推出了对应的 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 还不是最完美的框架,但倒是基于斗鱼多年的实际营业经历积聚起来的,是今朝最合适斗鱼的微办事架构。  

为甚么选择 Go

Go 说话是由谷歌于 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 的更多信息,可以检查:http://www.aledoyoga.com/p/jupiter

项目地址: https://github.com/douyu/jupiter

文档地址http://jupiter.douyu.com

加载中
1
fuwu360
fuwu360

微办事照样用java靠谱,go不敢用,也很难用,出了成绩小公司是弄不定的

xzlzx
xzlzx
要看公司的技巧栈,团队善于哪个用哪个
bkkkd
bkkkd
Java套路太深
橙汁儿
橙汁儿
没那么夸大,小公司不会出现大年夜成绩,出了大年夜成绩曾经是大年夜公司了
Mark哥是我
Mark哥是我
答复 @半仙w : 不论是 go照样 java 其实都不难用...要学会拥抱说话的特点,要不然太 low 了
下一页
0
Soutv
Soutv

作为国际第一家上市的搜集直播平台

难道不是虎牙先上市的么?

0
micheal_ll
micheal_ll

୧(๑•̀◡•́๑)૭凶猛了

0
MarvinGuo
MarvinGuo

go的成绩是轮子太多,java根本上同一是轮子

0
丶凡尘
丶凡尘
go出来干吗的
0
noyugo
noyugo

必须给赞!go就是这么简便好用

必须给赞!go就是这么简便好用
0
3爷
3爷

go节约办事器

0
爱吃玻璃鱼的汤姆猫

java在并发上的性能确切不如go, java强就强在社区资本强大年夜,稳定,框架大年夜多是最好实际。

前往顶部
顶部