QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

三年打磨,几百线上服务验证,斗鱼开源 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:063280

评论 2 条评论

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

字节前端面试题总结

buchila11

前端面试

《数字经济 科技向善》大咖对谈干货来啦

易观分析

金融科技

Gartner 权威预测未来4年网络安全的8大发展趋势

SEAL安全

安全 趋势 预测

YonBuilder赋能创新,用友第四届开发者大赛“金键盘奖”开启竞逐!

科技热闻

什么是私域流量?

源字节1号

软件开发

尚硅谷Elasticsearch8.X视频教程

小谷哥

web前端技术前景如何?

小谷哥

程序员培训学习后好找工作吗

小谷哥

初学者入门:使用WordPress搭建一个专属自己的博客

hum建应用专家

数据库 Wordpress 博客部署 WordPress

湖仓一体电商项目背景与架构介绍及基础环境准备

Lansonli

大数据项目 7月月更 签约计划第三季 湖仓一体电商项目

Java 多商户外贸版 PC 端功能,出场就是这么硬核!

CRMEB

在web前端培训机构应该如何学习前端

小谷哥

Go语言系列:如何搭建Go语言开发环境?

小黑豆豆

后端 安装 教程 Go 语言 签约计划第三季

Redis总结:缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级

程序员啊叶

Java 编程 程序员 架构 java面试

华硕无双,这可能是屏幕最好的平价高刷轻薄笔记本

科技热闻

深入理解MySQL主从复制原理以及集群部署过程

jiangxl

MySQL 数据库 运维 dba 签约计划第三季

学习Java开发技术建议

小谷哥

以科技传递温度,vivo亮相数字中国建设峰会

Geek_2d6073

通过14个入门实战案例教大家快速学习Python编程语言

小院里的霍大侠

Python Python初学者 程序员‘ 编程入门 兴趣编程

延迟队列DelayQueue性能测试

FunTester

Seata 在蚂蚁国际银行业务的落地实践

SOFAStack

开源项目 seata 项目实践 多编程语言 蚂蚁国际

阿里经典30道Java面试题,看完记得收藏保存

程序员啊叶

Java 编程 程序员 架构 java面试

WEB服务如何平滑的上下线

转转技术团队

nginx Java web

Java——AOP案例之测量业务层接口执行效率

王小凡

Java 程序员 apo

责任链模式在转转精准估价中的应用

转转技术团队

设计模式 责任链

2022 秋招 Java 岗面试高频问题总结

程序员啊叶

Java 编程 程序员 架构 java面试

OpenAtom OpenHarmony分论坛,今天14:00见!附大事记精彩发布

OpenHarmony开发者

OpenHarmony

面试官常问:如何手撸一个“消息队列”和“延迟消息队列”?

程序员啊叶

Java 编程 程序员 架构 java面试

阿里P8熬了一个月肝出这份32W字Java面试手册,在Github标星31K+

程序员啊叶

Java 编程 程序员 架构 java面试

常见分布式理论(CAP、BASE)和一致性协议(Gosssip、Raft)

程序员啊叶

Java 编程 程序员 架构 java面试

腾讯云联合中国工联院发布工业AI质检标准化研究成果加速制造业智能化转型

科技热闻

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