互联网|你看得上瘾的斗鱼,首次开源了自家项目( 二 )


也正是为了提高 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 等级 , 能够对核心服务做优化和灾备 , 提升服务可用性


推荐阅读