产业气象站|首次开源了自家项目,你看得上瘾的斗鱼

上个月 , 斗鱼将基于Go语言的微服务框架Jupiter开源 。 作为国内知名的互联网直播公司 , 这也是斗鱼首次以公司的名义正式推出开源项目 。
近年来 , 得益于日渐增长的高并发业务需求 , 微服务架构开始在国内逐渐普及 。 同时 , 专为高并发而生的Go语言及其相关生态在国内的发展也突飞猛进 。 目前 , 市面上主流的微服务架构包括Springcloud、Dubbo等 , 并且都有团队为之专门推出了对应的Go版本 , 以充分发挥Go在微服务架构中的高并发优势 。
而网络直播正是一项高并发的业务 , 斗鱼的分布式业务模型一直让我们颇为好奇 。 为进一步了解斗鱼的Jupiter与其他主流微服务框架的区别 , 以及斗鱼内部技术栈的发展 , 我们第一时间邀请到了斗鱼Go团队研发工程师吕超 , 一起回顾了Jupiter的开源历程 , 以及斗鱼近几年的技术栈变化 。
产业气象站|首次开源了自家项目,你看得上瘾的斗鱼
文章图片
Jupiter的诞生
据悉 , Jupiter脱胎于斗鱼内部的Golang微服务框架 , 经过三年打磨、几百个服务的线上验证 , 并历经多机房建设、云化、容器化等多次基础架构演进 。 目前 , Jupiter发布了0.5.0版本 , 基本涵盖了内部框架的主要功能 。 但因为内部框架含有许多定制的特性以及一些历史包袱 , 许多功能并没有完整释放出来 。 “我们也在整理 , 尽快把这部分功能释放出来 。 ”
那么斗鱼在搭建微服务架构的过程中 , 为什么不采用现成的微服务框架 , 而是选择自己“造轮子” , 重新创造了Jupiter呢?吕超告诉我们 , 斗鱼是在2016年底开始启用微服务架构的 , 也是在当时引入了Go技术栈 。
Jupiter也不是一开始就构思好的 。 “刚开始 , 我们大量使用开源的类库来攒应用 。 开源类库的功能不足 , bug没法及时修复 , 我们就二开 。 为了满足内部多技术栈通信的需求 , 我们开始编写统一的RPC框架 , 逐渐形成了早期的Jupiter 。 ”随着服务规模的增长 , 基础架构的演进 , Jupiter也在不断成长为支持多应用场景、关注开发效率和治理效率 , 并能从容应对基础架构演进的微服务框架 。
作为一个成长中的开源项目 , Jupiter与市面上的SpringCloud、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应用的重构和迭代成本是非常低的 , 这一定程度上降低了迁移的难度 。 ”