一、什么是OCTO

定义:

OCTO是美团的分布式服务通信框架及服务治理系统,属于公司级基础设施,目前尚未开源。

目标:

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

类比:

美团点评内部类似的框架还有pigeon(已开源,https://github.com/dianping/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应运而生。

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

整体架构图如下:

 

特点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 - 全生命周期

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

特点5 - 周边生态

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

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

四、总结

用服务进行设计

总是为并发进行设计

--《程序员修炼之道》

相关阅读:

《程序员修炼之道》解读1

到底多大才算高并发?

美团分布式服务通信框架及服务治理系统OCTO的更多相关文章

  1. (五):C++分布式实时应用框架——微服务架构的演进

    C++分布式实时应用框架--微服务架构的演进 上一篇:(四):C++分布式实时应用框架--状态中心模块 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法律 ...

  2. 【Java】分布式RPC通信框架Apache Thrift 使用总结

    简介 Apache Thrift是Facebook开源的跨语言的RPC通信框架,目前已经捐献给Apache基金会管理,由于其跨语言特性和出色的性能,在很多互联网公司得到应用,有能力的公司甚至会基于th ...

  3. 美团分布式ID生成框架Leaf源码分析及优化改进

    本文主要是对美团的分布式ID框架Leaf的原理进行介绍,针对Leaf原项目中的一些issue,对Leaf项目进行功能增强,问题修复及优化改进,改进后的项目地址在这里: Leaf项目改进计划 https ...

  4. 美团分布式定时调度框架XXL-Job基本使用

    一:XXL JOB 基本使用 1.官方中文文档:https://www.xuxueli.com/xxl-job/ 2.基本环境: 2.1:git下载项目, 执行xxl-job数据库初始化脚本 2.2: ...

  5. 美团 OCTO 分布式服务治理系统

    OCTO 是美团千亿调用量的分布式服务通信框架及服务治理的系统,可实现服务注册.服务自动发现.服务管理.容错处理.数据可视化.服务监控报警.服务分组等.本文总结了 OCTO 架构原理.Java 应用的 ...

  6. 成熟的C#网络通信框架介绍——ESFramework通信框架

    (转自:http://www.cnblogs.com/zhuweisky/archive/2010/08/12/1798211.html) ESFramework通信框架是一套性能卓越.稳定可靠.强大 ...

  7. 分布式服务通讯框架XXL-RPC

    <分布式服务通讯框架XXL-RPC>    一.简介 1.1 概述 XXL-RPC 是一个分布式服务通讯框架,提供稳定高性能的RPC远程服务调用功能.现已开放源代码,开箱即用. 1.2 特 ...

  8. silky微服务框架的服务治理介绍

    目录 服务治理的概念 服务注册与发现 负载均衡 超时 故障转移(失败重试) 熔断保护(断路器) 限流 RPC限流 HTTP限流 1. 添加配置 2. 注册服务 3.启用 AspNetCoreRateL ...

  9. TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端

    目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的使用 框架源码结构 补充说明 源码地址 说明 之前有好几篇博客在讲TCP/UDP通信方 ...

随机推荐

  1. Maven常识

    maven下面通常有四个文件夹: src/main/java -- 用来存放业务代码 src/test/java -- 用来存放测试代码 另有两个名为resource的文件夹,通常用来放置前两个文件夹 ...

  2. golang 通过exec Command启动的进程如何关闭的解决办法 以及隐藏黑色窗口

    golang 通过exec Command启动的进程如何关闭的解决办法 在用exec包调用的其他进程后如何关闭结束,可以使用context包的机制进行管理,context包的使用详见:https:// ...

  3. 从一个例子了解window.onload、$(function(){})、$(window).load(function(){})的加载顺序

    最近遇到一个轮播需求: 1. ajax请求服务器,返回json,判断json数据里每一项中isFix属性是0还是1,0表示不轮播,1表示需要轮播. 2. 当isFix属性为0的时候,表示该图片不轮播, ...

  4. h5仿微信聊天(高仿版)、微信聊天表情|对话框|编辑器

    之前做过一版h5微信聊天移动端,这段时间闲来无事就整理了下之前项目,又重新在原先的那版基础上升级了下,如是就有了现在的h5仿微信聊天高仿版,新增了微聊.通讯录.探索.我四个模块 左右触摸滑屏切换,聊天 ...

  5. 【STM32H7教程】第13章 STM32H7启动过程详解

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第13章       STM32H7启动过程详解 本章教 ...

  6. Javapoet源码解析

    Javapoet:是生成.java源文件的开源API  github:https://github.com/square/javapoet   以生成一个HelloWrold.java文件为例: pa ...

  7. 前端利用百度开发文档给的web服务接口实现对某个区域周边配套的检索

    最近项目需要实现地图功能,以便于实现对房源周边配套设施的检索.内容如下 其实百度官方有对应的api,但是对于一个网站来说这样的样式难免有些难看 这样的结果显然不能满足当下的需求,所以我决定利用官方给的 ...

  8. 神奇的Scala Macro之旅(二)- 一个实例

    优化的日志方式 package macros_demo import scala.language.experimental.macrosimport org.slf4j._import scala. ...

  9. (翻译)W3C的Turtle文档

    主要翻译如下页面,https://www.w3.org/TR/turtle/,对该页面中Turtle的内容部分进行翻译,希望对使用Turtle的朋友们有所帮助. 1 简介 2 Turtle语言 2.1 ...

  10. 基于ko-easyui实现的PC前端模板功能完善

    上一篇博客我向大家介绍了基于ko-easyui实现的开发模板,博客地址:https://www.cnblogs.com/cqhaibin/p/9825465.html#4095185.但在还遗留三个问 ...