美团大规模微服务通信框架及治理体系OCTO核心组件开源

640?wx_fmt=png

总第347篇

2019年 第25篇

微服务通信框架及治理平台OCTO作为美团基础架构设施的重要组成部分,目前已广泛应用于公司技术线,稳定承载上万应用、日均支撑千亿级的调用。业务基于OCTO提供的标准化技术方案,能够轻松实现服务注册/发现、负载均衡、容错处理、降级熔断、灰度发布、调用数据可视化等服务治理功能。

现在我们将OCTO的核心组件OCTO-RPC、OCTO-NS、OCTO-Portal开源,欢迎大家使用和共建。

背景

OCTO项目始于2014年底,当时美团正处在新业务拓展期,服务数量不断增长,服务间调用拓扑日益复杂,逐渐暴露出了一些典型的问题:

  • 研发效率低:缺乏标准的服务治理框架和组件,不少团队“重复造轮子”造成资源浪费,研发质量参差不齐,系统整体可用性不高。
  • 运维成本高:缺乏完善、便捷的体系化运维手段,难以进行准确的监控告警,难以对涉及多级链路的故障快速定位。
  • 服务运营难:服务指标数据收集困难,缺乏自动化深度分析,难以满足业务快速对指标进行评估决策的要求。

针对这些痛点问题,提升研发效率和质量,降低运营成本,对于支撑业务快速稳定发展显得尤为重要。因此,基础架构团队研发了公司级统一的分布式微服务通信框架及治理平台——OCTO。OCTO是英文单词章鱼(Octopus)的缩写,章鱼众多的触手表征OCTO平台能触达治理海量的服务,涵盖服务治理领域的各个部分,因此取名。自平台推出以来,在全公司各业务线被广泛进行使用,显著提升了全公司的技术研发效率与运营质量,稳定支撑着美团业务的高速发展。

有别于传统的开源服务治理组件,OCTO提供了体系化的服务治理方案,从通信框架到注册中心、从文件配置到埋点告警、从灰度链路到数据报表,立体化的提升微服务运营能力、赋能业务。此外,奉行“策略下沉”的设计思想,OCTO剥离传统通信框架具备的服务治理策略功能,下沉到代理组件实现,有效提升通信框架的稳定性、降低业务系统额外开销。历经海量调用验证的OCTO,依托低耦合、模块化、单元化系统架构,能够有效满足各类复杂业务场景需求,实现异地多活等容灾目标。

功能特性

针对暴露出的问题,OCTO围绕包括定义、开发、测试、部署、运维、优化、下线在内的服务的全生命周期,打造了一系列组件和系统,方便研发同学专注于自身业务逻辑开发的同时,又能享受完善的服务治理功能。例如,我们在开发阶段提供了高性能、高可用、功能模块化的通信框架供业务便捷使用;在测试阶段提供了SET化、泳道、服务分组等各种灰度策略供业务无损试错;在运维阶段提供机器级、框架级、业务级等层级分明的监控告警供业务快速定位问题;在优化阶段提供了详尽的服务指标供业务自定义分析改进。

OCTO主要功能特性包括但不限于:

  • 命名服务:服务注册/发现。
  • 服务管理:服务状态监测;服务启动、停止;服务负载均衡。
  • 容错处理:实时屏蔽异常的服务,自动调配请求流量。
  • 流量分发:灰度发布、节点动态流量分配等场景。
  • 数据可视化:服务调用统计上报分析,提供清晰的数据图表展示,直观定位服务间依赖关系。
  • 服务分组:支持服务动态自动归组与不同场景下的自定义分组,解决在多机房场景下跨机房调用穿透、沙盒测试等问题。
  • 服务监控报警:支持服务与接口级别多指标、多维度的监控,支持多种报警方式。
  • 统一配置管理:支持服务配置统一管理,灵活设置不同环境间差异,支持历史版本,配置项变更后实时下发。
  • 分布式服务跟踪:轻松诊断服务访问慢、异常抖动等问题。
  • 过载保护:灵活定义分配给上游服务消费者的配额,当服务调用量超出最大阀值时,基于不同服务消费者进行QoS区分,触发流控进行过载保护。
  • 服务访问控制:支持多粒度、多阶段的鉴权方式。

OCTO整体架构

640?wx_fmt=jpeg

  • OCTO-RPC(开源Java/C++):分布式RPC通信框架,支持Java、C++、Node.js等多种语言。
  • SGAgent:部署在各服务节点,承担服务注册/发现、动态路由解析、负载均衡、配置传输、性能数据上报等功能。
  • Oceanus(待开源):HTTP定制化路由负载器,具体可参考《Oceanus:美团HTTP流量定制化路由的实践》一文。
  • OCTO-NS:包括SDK(Java/C++)、基础代理SGAgent、命名服务缓存NSC、健康检查服务Scanner等组件,提供命名服务,服务注册等信息的存储,服务状态检测的扫描等功能。
  • Watt(待开源):统计链路信息,计算服务各类指标作为监控报警依据。
  • MCC(待开源):统一配置中心,可进行服务配置的管理下发。
  • OCTO-Portal:服务注册、管理、诊断、配置、配额等功能的一站式管理平台。

OCTO开源组件

OCTO首批开源的核心组件包括:分布式服务通信框架(OCTO-RPC)、服务注册中心(OCTO-NS)、服务治理平台(OCTO-Portal)。未来,我们还将持续开源更多的组件与功能。

分布式服务通信框架(OCTO-RPC)

分布式服务通信框架是OCTO的重要组成部分,具备高性能、高可用、易扩展、易接入等特点,已覆盖美团90%以上的服务(Java/C++),支撑每天千亿级别的调用量。目前Java和C++版本已经开源,更多技术实现详见:OCTO-RPC。

服务注册中心(OCTO-NS)

服务注册中心基于服务描述信息,实现服务注册/发现、配置管理、路由分组、负载均衡、健康检测等功能,搭配服务治理平台能够更便捷地进行服务节点数据的可视化运营。目前开源出来的子模块包括SDK(Java/C++)、基础代理SGAgent、命名服务缓存NSC、健康检查服务Scanner。更多技术实现详见: OCTO-NS。

服务治理平台(OCTO-Portal)

服务治理的一站式平台,为服务关注方提供服务节点管理、性能数据分析、全链路跟踪诊断等服务治理核心能力。更多技术实现详见: OCTO-Portal。

640?wx_fmt=png

关于开源

在过去四年中,OCTO是美团在架构中间件领域研发的一个重要技术项目,在复杂多元业务、大规模并发调用的场景下已被充分验证。目前OCTO支撑了美团大规模微服务每天千亿级的调用,接口调用成功率达到了99.999%,是全公司SOA、服务治理的核心基础。我们期望通过将其开源,不断反馈给社区、贡献给行业。同时,我们希望在行业优秀工程师的帮助下,OCTO平台能得到更快地升级更新迭代。欢迎大家多提宝贵意见和建议。

未来规划

为了进一步支撑美团业务飞速发展的需求,同时对标业界先进的服务治理理念与实践,未来一段时间内,OCTO将在以下几方面规划演进:

  1. 命名服务AP化:弱化强一致性,聚焦异常状态下注册中心的可用性。
  2. 框架反应式编程:RPC框架提供反应式编程支持,帮助业务构建高性能异步无阻塞的服务。
  3. Service Mesh:将现有命名服务等功能与控制面/数据面结合,以服务网格的思路进一步演进OCTO服务治理体系。

作者简介

舒超、张翔,美团OCTO服务治理团队研发成员。

About 团队

OCTO服务治理团队负责整个公司的服务治理底层设施建设,包括命名服务、配置服务、RPC通信框架、ServiceMesh/Serverless演进等。 语言栈包括Java、C++、Node.js、Scala、Golang等,工作内容覆盖前后端各项技术,承载外卖,酒旅等集团各业务线的日均千亿级别的调用需求,是美团核心研发组织。

引言 代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到,并或多或少会思考过这一问题。随着前端应用的大型化和复杂化,越来越多的前端工程师和团队开始重视 JavaScript代码规范 ...