作者:aerox@斗鱼
项目开源地址:https://github.com/douyu/jupiter
Jupiter 是斗鱼开源的,面向服务治理的Golang微服务框架,以开发效率和治理效率为核心目标,从统一开发规范、完善监控埋点、降低开发难度等多个维度来帮助Gopher开发高性能、高可靠性的微服务框架。
Jupiter在斗鱼内部经过三年打磨、几百个服务的线上验证,在多种应用场景中适配、历经多次基础架构迭代,有效地保障了服务应用的快速迭代、精确监控,并在异地多活、容器云、混沌工程等基础建设中,支撑服务的平滑迁移、平稳变更。近期,Jupiter Go v0.5.0 正式发布,与之同步发布的还有治理平台Juno。两者相得益彰,帮助开发者快速落地、并具备服务治理能力的微服务架构。我们致力于将Go微服务框架标准化,统一错误码、日志、监控、注册、流控的Schema。做到微服务的各个模块可观测、可治理,管理微服务研发侧的全套生命周期。以下是Jupiter的架构图。
现代微服务架构是分布式的,业务逻辑被拆分到不同的服务中,服务之间通过RPC相互调用。随着业务规模的增大,服务的数量也随之增加,当增加到一定程度的时候,开发和运维效率将面临严重挑战。
斗鱼Web服务在服务化过程中为应对这种挑战,逐步形成了以Jupiter为核心的基础框架和以Juno为核心的治理平台。Jupiter是作为面向服务治理的微服务基础框架,有四个核心关注点:
开发效率是Web框架的核心关注点,好的Web框架融合了代码规范、最佳实践和安全编码,并能显著提高编码效率。如果是自研的框架,还承担着把组织内部的知识,进行抽象和提取,形成公共知识的责任。
同时,Golang作为一门“新”语言,生态相对也较“新”,实际使用还将面临一些“额外”风险:
开源类库的质量和维护力度参差不齐,如果有bug或者不兼容问题,其修复难度较大。
Jupiter是伴随斗鱼服务化一步步实践而来,经历了go1.7到go1.14既平滑(完美向前兼容)又剧烈(生态、依赖管理)的成长。针对业务的开发效率以及“额外”风险,Jupiter有一些基本的认识:
当然,上述很多问题不能仅仅依赖于基础框架来解决,并且随着Golang语言和生态的发展,一些问题也在不断缓解。但核心的需求还在,即通过整合基础框架,降低风险,提高效率。
除了针对主要开发环境的效率提升外,Jupiter针对调试、测试、CI流程等方面也做了一些工作,以提高整个软件周期的效率。
治理效率是微服务架构的关键需求。微服务架构中,应用数总是不断上升,人均应用维护数增加到一定数目以后,维护效率将大幅度下降。如果碰到突发事件,将产生严重后果。因此,微服务架构非常强调服务治理能力和应用管理能力。一般来说,微服务治理包括:
微服务治理是一项基础能力,需要代码规范、治理平台、基础框架甚至组织架构等多个方面协作,才能达到比较好的效果。
我们近期还会将治理平台juno开源部分微服务治理能力,未来还将整理和开源更多的治理能力,并与社区共建,进一步完善微服务治理。这部分,我们将在单独的文档中进行更详细说明。
在基础框架的部分,我们认为基础框架是沟通业务与治理平台的关键,一定程度上也定义了服务治理流程。在Jupiter中,针对服务治理,有几个关键点:
支持多应用场景前,需要准确的识别应用场景,而识别的过程就是一个规范代码、探索实践的过程。应用场景的定义可以很宽泛,这里举几个例子简单说明:
类似的例子在Jupiter中还有很多,如任务编排、流程编排、redis的并发pipeline、在线压测的mysql影子流量等。
应用场景的识别是形成公共知识、加速团队开发效率的重要手段。
Web开发和运维技术在不断的发展,短短几年已涌现出了非常多的计算形态,如云计算、边缘计算、容器化、网格化、Serverless等。服务保障技术方面,异地多活、混沌工程也在不断发展。语言栈方面,很多公司也在从早期单一的PHP、Java栈扩大到多语言栈并存的局面,特别是近年来Golang因在容器化和运维效率上的优势,越来越多的被应用到Web服务开发。但每次技术迭代,享受效率提升的同时,也在不断经历应用改造和迁移的痛苦。
从应用的角度来看,面对的是一个不断变化的外部环境,新的问题不断产生。以斗鱼Web服务部为例,可以通过一个时间线管中窥豹:
总体上,基础架构的变更将对整个治理体系产生影响,特别是治理平台。正视变化,并前瞻性和针对性的优化,将有助于减少外部环境变化对业务逻辑的影响,并享受整个生态进步带来的效率提升。
以上是Jupiter对微服务架构实践的一些核心关注点和功能的介绍。详细的介绍,欢迎大家访问https://github.com/douyu/jupiter来了解。
Jupiter Go正在快速迭代,v0.5.0包含了基本的架构骨架,更多的功能也在逐步整理,并将尽快开源出来。我们非常欢迎感兴趣的开发者参与贡献,一起来丰富Jupiter的功能、推动未来版本的演进。
最后我们这里有个小活动,在6月8日24点前,可以在我们地址https://github.com/douyu/jupiter,提有关jupiter或者微服务的建议和意见,我们会挑选有建设性的issue,发放我们的斗鱼周边礼物。
钉钉
微信
鉴于治理平台开源Juno还在做开源前的整理准备,这里放上几张截图供大家提前了解。