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


也正是为了提高Go应用的开发效率 , 斗鱼的团队开发了Jupiter 。 “随着应用规模的增大 , Jupiter也非常关注治理效率 。 服务化做的差不多的时候 , 也开始承担多机房建设、云化、容器化、混沌工程等基础建设的一些工作 , 以保障业务逻辑与这些基建的无缝对接 。 当然这里更多的是需要治理平台和运维的PaaS平台的支持 , 幸运的是 , 我们的服务治理平台Juno也开源了 。 通过Jupiter和Juno , 可以实现比较完整的服务治理体验 。 ”
与其它微服务框架的区别
由于Go语言支持高并发特性 , 一些已经比较成熟的微服务架构也在近期推出了Golang重构版本 , 比如我们前段时间报道的DubboGo 。 吕超表示 , 他们的团队也一直在关注DubboGo这个项目 , 同时也很乐见Golang生态里有这样优秀的RPC框架 。 实际上 , Jupiter与DubboGo等这些优秀的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和DubboGo基于应用注册方面的进展 , 我们对此非常期待 , 也在研究怎么把Jupiter和DubboGo做一个结合 , 从而优雅的与Dubbo互通 。 ”吕超表示 , 让Jupiter与Dubbo架构更好的互通 , 是团队下一步要努力解决的问题 。
微服务架构的意义
分布式的微服务架构从诞生之日起就受到不少争议 , 网上也有人认为很多企业继续沿用统一部署的传统架构即可 , 无需盲目追求新技术 。 吕超结合斗鱼的业务经验 , 分享了他对于微服务架构应用前景的看法:“我觉得技术架构都是一个演进过程 , 遵从康威定律:组织架构决定技术架构 。 ”
斗鱼是随着业务的发展 , 组织架构的变迁 , 导致原有的单体应用架构在维护和治理上存在一定问题 , 因此逐步迁移到微服务 。 微服务帮斗鱼解决了以下问题:
服务的可维护:子系统的内聚性 , 明确了子系统的职责和边界 , 可以有效降低各个系统的沟通成本和对接成本 , 架构上可以更加合理高效
服务的高可用:子系统的SLA划分 , 根据不同SLA等级 , 能够对核心服务做优化和灾备 , 提升服务可用性
服务的可伸缩:子系统的QPS划分 , 根据不同QPS量级 , 能够对服务的容量进行估算 , 服务做到可伸缩


推荐阅读