写点什么

三年打磨,几百线上服务验证,斗鱼开源 Go 微服务框架 Jupiter

  • 2020-06-01
  • 本文字数:3201 字

    阅读完需:约 11 分钟

三年打磨,几百线上服务验证,斗鱼开源Go微服务框架Jupiter

Jupiter 是斗鱼开源的,面向服务治理的 Golang 微服务框架,以开发效率和治理效率为核心目标,从统一开发规范、完善监控埋点、降低开发难度等多个维度来帮助 Gopher 开发高性能、高可靠性的微服务框架。


Jupiter 在斗鱼内部经过三年打磨、几百个服务的线上验证,在多种应用场景中适配、历经多次基础架构迭代,有效地保障了服务应用的快速迭代、精确监控,并在异地多活、容器云、混沌工程等基础建设中,支撑服务的平滑迁移、平稳变更。近期,Jupiter Go v0.5.0 正式发布,与之同步发布的还有治理平台 Juno。两者相得益彰,帮助开发者快速落地、并具备服务治理能力的微服务架构。我们致力于将 Go 微服务框架标准化,统一错误码、日志、监控、注册、流控的 Schema。做到微服务的各个模块可观测、可治理,管理微服务研发侧的全套生命周期。以下是 Jupiter 的架构图。


微服务基础框架

现代微服务架构是分布式的,业务逻辑被拆分到不同的服务中,服务之间通过 RPC 相互调用。随着业务规模的增大,服务的数量也随之增加,当增加到一定程度的时候,开发和运维效率将面临严重挑战。


斗鱼 Web 服务在服务化过程中为应对这种挑战,逐步形成了以 Jupiter 为核心的基础框架和以 Juno 为核心的治理平台。


Jupiter 是作为面向服务治理的微服务基础框架,有四个核心关注点:


  • 开发效率: 提升开发效率、加速软件生命周期的迭代。

  • 治理效率: 提升治理效率,实现规模化治理。

  • 多场景应用: 识别通用场景,形成公共知识,持续提升团队开发效率。

  • 演进式架构: 保证服务在自建机房、容器云、网格化等基础架构变更和基础设施变更过程中的平滑迁移。

开发效率

开发效率是 Web 框架的核心关注点,好的 Web 框架融合了代码规范、最佳实践和安全编码,并能显著提高编码效率。如果是自研的框架,还承担着把组织内部的知识,进行抽象和提取,形成公共知识的责任。


同时,Golang 作为一门“新”语言,生态相对也较“新”,实际使用还将面临一些“额外”风险:


  • 开源类库的质量和维护力度参差不齐,如果有 bug 或者不兼容问题,其修复难度较大。

  • Golang 去中心化的依赖管理会导致类库管理困难,开发人员可以随意“引入”或“升降级”依赖库。

  • 不同类库的代码风格差异大,有一定使用成本。

  • Golang 历经了多种包管理方式,对国内的开发者而言,俨然一部血泪史。目前 gomod 大有改善,但仍有个别老旧类库存在问题。


Jupiter 是伴随斗鱼服务化一步步实践而来,经历了 go1.7 到 go1.14 既平滑(完美向前兼容)又剧烈(生态、依赖管理)的成长。针对业务的开发效率以及“额外”风险,Jupiter 有一些基本的认识:


  • 以 monorepo 的方式整合核心框架、自研类库并包装第三方类库。长期看,这将极大减少维护成本。

  • 利用语言机制如 type alias/type embedding 等,封装常用的第三方类库,尽量减少直接引用第三方类库。这提供了一种缓冲机制,避免依赖被随意“升降级”,第三方 bug 也可以被方便管控。

  • 通过包装,一些关键类库万不得已的时候可以切到自研,也可以由自研切换到开源,降低维护成本。

  • 统一所有包的使用方式,包括配置驱动、统一错误码、统一日志埋点、指标埋点等,减少开发人员心智负担。


当然,上述很多问题不能仅仅依赖于基础框架来解决,并且随着 Golang 语言和生态的发展,一些问题也在不断缓解。但核心的需求还在,即通过整合基础框架,降低风险,提高效率。


除了针对主要开发环境的效率提升外,Jupiter 针对调试、测试、CI 流程等方面也做了一些工作,以提高整个软件周期的效率。

治理效率

治理效率是微服务架构的关键需求。微服务架构中,应用数总是不断上升,人均应用维护数增加到一定数目以后,维护效率将大幅度下降。如果碰到突发事件,将产生严重后果。因此,微服务架构非常强调服务治理能力和应用管理能力。一般来说,微服务治理包括:


  • 服务注册与发现: 服务注册、负载均衡等

  • 可观测性: 拓扑关系、指标、日志、链路等

  • 流量管理: 流量特征识别、流量导向等,以及基于此的灰度、蓝绿发布、A/B Test 等细分应用

  • 安全策略: 访问控制、限流熔断等

  • 生命周期: 发布、下线管理,版本控制等


微服务治理是一项基础能力,需要代码规范、治理平台、基础框架甚至组织架构等多个方面协作,才能达到比较好的效果。


我们近期还会将治理平台 juno 开源部分微服务治理能力,未来还将整理和开源更多的治理能力,并与社区共建,进一步完善微服务治理。这部分,我们将在单独的文档中进行更详细说明。


在基础框架的部分,我们认为基础框架是沟通业务与治理平台的关键,一定程度上也定义了服务治理流程。在 Jupiter 中,针对服务治理,有几个关键点:


  • 增强核心模块可观测性:完善的日志、指标、链路埋点,并形成规范,从而实现报表、报警直出。

  • 统一错误码: 规范的错误码和错误收敛机制,能够极大的提升错误定位和排查速度。

  • 拦截器支持: 针对 http/grpc 的 server/client 以及 redis/mysql/mongo/rocketmq 等 IO,全部支持拦截器机制,以进一步支持更丰富的治理策略。

  • 安全策略内置: 主要模块内置限流熔断、访问控制、慢查询监测等安全策略。

  • 流量路由和管理: 提供多种负载均衡和流量路由策略,以及针对 A/B Test、影子流量等细分场景的流量策略。

多应用场景

支持多应用场景前,需要准确的识别应用场景,而识别的过程就是一个规范代码、探索实践的过程。应用场景的定义可以很宽泛,这里举几个例子简单说明:


  • 缓存策略。缓存的策略有很多种,在 Web 开发领域也经常使用。我们注意到业务实现中,经常会有数据过期时,一个请求穿透、多个请求原地 block 的场景。通过引入滑动窗口和半衰期,让一个请求穿透、多个请求正常返回,从而实现更高效的缓存策略。

  • 与 Java Dubbo 流量互通。dubbo 支持 gRPC 协议,因此在协议层,dubbo 与 grpc-go 是可以流量互通的。Jupiter 通过增加一个基于接口(dubbo 的默认注册方式)的服务注册键,从而实现服务注册与发现层面上的流量互通。


类似的例子在 Jupiter 中还有很多,如任务编排、流程编排、redis 的并发 pipeline、在线压测的 mysql 影子流量等。


应用场景的识别是形成公共知识、加速团队开发效率的重要手段。

演进式架构

Web 开发和运维技术在不断的发展,短短几年已涌现出了非常多的计算形态,如云计算、边缘计算、容器化、网格化、Serverless 等。服务保障技术方面,异地多活、混沌工程也在不断发展。语言栈方面,很多公司也在从早期单一的 PHP、Java 栈扩大到多语言栈并存的局面,特别是近年来 Golang 因在容器化和运维效率上的优势,越来越多的被应用到 Web 服务开发。但每次技术迭代,享受效率提升的同时,也在不断经历应用改造和迁移的痛苦。


从应用的角度来看,面对的是一个不断变化的外部环境,新的问题不断产生。以斗鱼 Web 服务部为例,可以通过一个时间线管中窥豹:


  • 应用开始服务化: 这个阶段开始构建大量的基础治理平台,包括发布中心、监控中心、注册中心及各个管理细分平台。 同时,一些新的基础设施开始引入,如 etcd,prometheus、jaeger 等。

  • 语言栈从单一的 PHP 扩展为 Golang、Java、PHP 的多语言栈。API 规范、服务互通在这个阶段凸显。

  • 多机房建设: 流量管控、服务质量、安全策略的要求凸显。

  • 容器化: 传统基于 IP/Port 的治理方式、流量管理和分发、服务监控需要做出相应改变。

  • Service Mesh: 基于 SDK 的服务注册、发现,监控需要适配。


总体上,基础架构的变更将对整个治理体系产生影响,特别是治理平台。正视变化,并前瞻性和针对性的优化,将有助于减少外部环境变化对业务逻辑的影响,并享受整个生态进步带来的效率提升。

治理后台展示

关于治理平台开源 Juno,这里放上几张截图供大家了解。




结语

以上是 Jupiter 对微服务架构实践的一些核心关注点和功能的介绍。详细的介绍,欢迎大家访问https://github.com/douyu/jupiter来了解。


Jupiter Go 正在快速迭代,v0.5.0 包含了基本的架构骨架,更多的功能也在逐步整理,并将尽快开源出来。我们非常欢迎感兴趣的开发者参与贡献,一起来丰富 Jupiter 的功能、推动未来版本的演进。


2020-06-01 15:063477

评论 2 条评论

发布
用户头像
666666
2020-06-01 15:40
回复
没有更多了
发现更多内容

等保测评:差距测评

等保测评

通义灵码带你玩转 MCP 最佳实践(合辑,持续更新中)

阿里巴巴云原生

通义灵码 MCP

打造多模态交互新范式|彩讯股份中标2025年中国移动和留言平台AI智能体研发项目

彩讯股份300634

ETL中图表统计分析模版组件使用

RestCloud

数据处理 ETL 数据集成 图表统计

AI+制造:用友BIP智能裁切,突破造纸行业效率革命

用友BIP

AI

Techub News Web3小科普:什么是稳定币

TechubNews

揭秘:AI Agent落地难在哪,产品又咋样?

Techinsight

智能体 AI 智能体

Dify实战案例:MySQL查询助手!嘎嘎好用

王磊

商品中心—B端建品和C端缓存的技术文档

电子尖叫食人鱼

架构

2025 深度洞察:AI Agent 落地的短板有哪些

Techinsight

KubeCon China 2025 | 与KubeEdge畅聊毕业经验与创新未来

华为云原生团队

云计算 容器 云原生

全议程硬核公布!龙蜥邀您共同探索面向泛在智算场景的操作系统技术

OpenAnolis小助手

AI 操作系统 龙蜥社区 龙蜥meetup

亚马逊宣布投资100亿美元在北卡罗来纳州建设数据中心以支持AI扩展

PowerVerse

人工智能 AI 数据 去中心化云算力

三类不同身份的“开发者”,在昇腾CANN的土壤上种下了繁荣之花

Alter

技术视角:AI Agent 落地局限与产品实现

Techinsight

智能体 Agents AI 智能体 智能体评估

秒懂 AI Agent:落地局限与产品解析

Techinsight

智能体 agent 智能体评估

五分钟搭建属于你的AI助手:Ollama+DeepSeek+AnythingLLM深度整合教程

量贩潮汐·WholesaleTide

人工智能 DeepSeek

立足数字人文,深化历史叙事|科学智能赋能人文社科领域研究

ModelWhale

科学智能 人文社科 山东大学 AI4S

西南会议 | 2025 Altair 区域技术交流会即将在成都盛大举行!

Altair RapidMiner

人工智能 AI HPC 数字孪生 CAE

鸿蒙 NEXT 应用签名机制有何变化?如何生成并配置签名证书?

巴库一郎

鸿蒙 开发工具 HarmonyOS HarmonyOS NEXT 实践分享

假如给你1亿的Redis key,如何高效统计?

不在线第一只蜗牛

数据库 redis

通义灵码带你玩转 MCP 最佳实践(合辑,持续更新中)

阿里云云效

通义灵码 MCP

龙蜥开发者说:我的龙蜥开源之旅 | 第 32 期

OpenAnolis小助手

龙蜥社区 龙蜥开发者说

NJet Portal 应用门户管理介绍

通明湖

等保备案证明更新

等保测评

商品中心—B端建品和C端缓存的技术文档(二)

电子尖叫食人鱼

架构

华为仓颉语言初识:并发编程之同步机制(下)

IT小码哥

鸿蒙 HarmonyOS HarmonyOS NEXT

一体系数据平台的进化:基于阿里云 EMR Serverless Spark的持续演进

阿里云大数据AI技术

云计算 Serverless 数据分析 数据处理 数据库 大数据

单据流那些事儿之手工生单串讲

inBuilder低代码平台

指标体系建设的本质与落地逻辑——从战略到执行的闭环管理

Aloudata

数据分析 指标体系 指标管理 指标平台 指标开发

你了解Java线程池原理吗?

不在线第一只蜗牛

Java 算法

三年打磨,几百线上服务验证,斗鱼开源Go微服务框架Jupiter_开源_aerox@斗鱼_InfoQ精选文章