美团分布式服务通信框架及服务治理系统OCTO

简介: 美团分布式服务通信框架及服务治理系统OCTO

一、什么是OCTO


定义:


   OCTO是美团的分布式服务通信框架及服务治理系统,属于公司级基础设施(octo已经开源,https://github.com/Meituan-Dianping


octo-rpc, octo-portal,octo-ns 都是octo的一部分)。


目标:


   为公司所有业务提供统一的服务通信框架,使业务具备良好的服务运营能力,轻松实现服务注册、服务自动发现、负载均衡、容错、灰度发布、调用数据可视化等,持续提升服务高可用性、服务运维效率。


类比:


   美团点评内部类似的框架还有pigeon。OCTO是octopus(章鱼)的缩写,pigeon是鸽子的意思,一个水里游,一个天上飞,目标大体一致。


   业界同类产品有Dubbo。OCTO的功能因为主要内部用,功能要丰富的多。

 

规模:


   千亿级别


   静儿的老领导17年时做过一个QCon分享,叫《OCTO:千亿规模下的服务治理挑战与实践》。里面提到了16年OCTO日调用量已经超过千亿,目前这个数字还在高速增长。


 

二、产生背景


阶段1 - 垂直应用阶段


   这个阶段大体相当于目前运用最广泛的「分层架构」。把业务按照领域划分(垂直拆分),将一个大应用分成几个互不相干的小应用。

 

阶段2 - 早期分布式阶段


   随着规模的扩大,系统之间需要进一步拆分。将相同的操作抽象出来走服务化来实现复用和整合。这时候就需要使用RPC技术,初期使用HTTP+JSON来实现分布式。

 

这个阶段后期问题日益显现:


- 规范化和标准化差:缺乏强schema约束、需要较多的编码、调用方的学习和沟通成本高


- 效率低:HTTP协议头比较重;内部要走CDN、nginx等服务才最终实现端到端的交互;数据传输效率低(数据传输格式是json,它是文本格式的,比方说一个数字用二进制只占1个字节,用文本实际上存的是字符串,占3个字节)。


- 运维成本高:缺乏服务自动注册发现、依赖人工运维

 

阶段3 - 服务治理阶段


   这个阶段使用了基于thrift的高性能的RPC框架和基于zookeeper(zk)的服务自动注册发现。引入这些技术带来的问题:


- 可用性问题:强依赖zk,使用临时节点,网络抖动会导致不稳定,正常服务被下线;zk出现大规模故障不易进行隔离。


- 未实现全生命周期自动化运维:缺乏数据采集分析、监控报警等运维机制;难以推进规范化、标准化;路由策略单一

 

   为了解决上述问题,OCTO应运而生。

 

三、服务治理系统设计特点


整体架构图如下:


1112728-20190219123310183-832887104.png


特点1 - 代理模式优化服务注册发现


   整体架构图中的SG_agent(服务治理代理Service Governance Agent)是直接安放在业务(使用OCTO的服务)服务器上的代理,也就是本地进程。实际承担服务注册、服务发现、动态路由解析、负载均衡、配置管理等功能及调用统计上报的应用代理程序。

 

代理模式带来的好处:


- 标准化:用thrift IDL(接口描述语言Interface description language)提供标准接口,美团技术人人都知道的appkey(服务标识)的概念正是由此而普及。这也是美团内部统一配置中心MtConfig的基础。


- 策略下移:将原来直接打成jar包让业务引用的策略放到代理层来实现,可方便的进行策略热更新,业务代码不再感知。


- 提升可用性:代理缓存解决了zk挂业务就挂的问题。自身又采用了基于冗余的高可用设计,整体大幅度提高了可用性。

 

特点2 - 状态检查提高可用性


   数据一致性问题一直是分布式系统的要点和难点。对服务注册发现来说,最重要的数据就是服务的状态。是否在假死(进程还活着,但是不处理请求,比如正在fullgc)?


   很多团队是通过「keepalive探针」(心跳)来解决这个问题的。这种技术好处是准确,缺点是高消耗。因为这是业务端主动发起的探测,很多场景下keepalive的IO消耗可能比服务自身还要大。


   OCTO采用的集中式的探测,早期是基于Akka Actor(用于远程通信的工具,特点是高效)的,通过热备、数据分析自动水平扩展、Double Check、熔断等机制,可用性和准确性都在6个9以上。

 

特点3 - 数据驱动


   美团内部非常注重的一点就是「用数据说话」。OCTO的主要数据包括:调用数据、异常调用、调用链路信息、全链路参数传递。数据展示形式包括:监控报警、数据报表、数据视图。

 

特点4 - 全生命周期


1112728-20190219123354880-1403459435.png


美团内部的服务从在“妈妈肚子里”就开始和OCTO打交道。服务注册、机器申请的信息都要先同步到OCTO。因为OCTO全周期性,所以可以对服务的各个阶段数据提供监控和优化方案。比如在发布部署阶段,OCTO利用先禁用节点摘掉流量,让流量打到别的机器上再下掉此节点,启动后做服务状态检查,检查通过,再接收流量来实现平滑发布。

 

特点5 - 周边生态


   OCTO非常强大,强大在于它不是孤军奋战,是各个团队间的跨团队合作。这也是它被叫做“八爪鱼”的原因之一。


1112728-20190219123432786-1119148794.png


 和内核团队,OCTO进行深度定制,比如链接复用、链接保护、原生异步支持。和HULK(容器团队,参见:欧阳老师的美团点评容器平台HULK的调度系统)团队的合作也是日渐紧密。静儿就是HULK团队的一员。合作的重要一点就是业界常提到的「流动计算架构」。解决的问题主要是提升业务可用性、资源利用率、深度devOps高效运维。

 

四、总结


用服务进行设计


总是为并发进行设计


--《程序员修炼之道》


1112728-20190219123510648-1874167885.png

相关文章
|
14天前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
30 2
|
15天前
|
存储 人工智能 PyTorch
基于PyTorch/XLA的高效分布式训练框架
基于PyTorch/XLA的高效分布式训练框架
25 2
|
1月前
|
人工智能 算法 PyTorch
TorchAcc:基于 TorchXLA 的分布式训练框架
阿里云研究员、阿里云人工智能平台 PAI 技术负责人--林伟在GTC 2024 大会 China AI Day 线上中文演讲专场上介绍了TorchAcc,这是一个基于 PyTorch/XLA 的大模型分布式训练框架。
|
1月前
|
SQL 弹性计算 分布式计算
TiDB计算层详解:分布式计算框架与查询优化机制
【2月更文挑战第26天】本文将深入剖析TiDB的计算层,详细解析其分布式计算框架和查询优化机制。通过了解计算层的核心组件和工作原理,我们可以更好地理解TiDB如何高效处理SQL查询和计算任务。本文将从计算层的架构、任务分发、查询优化等方面展开介绍,帮助读者全面掌握TiDB计算层的关键技术和优势。
|
2月前
|
监控 负载均衡 Dubbo
|
28天前
|
消息中间件 算法 Java
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
186 0
|
1月前
|
NoSQL Java Redis
分布式锁框架Lock4j简单使用
最近项目中使用到了Lock4j的分布式锁组件,小编今天就带大家学习一下该框架,以及如何在我们项目中进行集成使用。
|
1月前
|
运维 监控 Java
推荐一款好用的Java分布式任务调度框架!
推荐一款好用的Java分布式任务调度框架!
168 0
|
1天前
使用JWT的服务分布式部署之后报错:JWT Check Failure:
使用JWT的服务分布式部署之后报错:JWT Check Failure:
7 1
|
2天前
|
Dubbo Java 应用服务中间件
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架

热门文章

最新文章