妙啊!美团 OCTO 分布式服务治理系统,这描述也太清晰了

========

  • 命名服务 - 服务注册;服务自动发现

  • 服务管理 - 服务状态监测;服务启动、停止;服务负载均衡

  • 容错处理 - 实时屏蔽异常的服务,自动调配请求流量

  • 流量分发 - 灰度发布、节点动态流量分配等场景

  • 数据可视化 - 服务调用统计上报分析,提供清晰的数据图表展示,清晰了解服务间依赖关系

  • 服务分组 - 支持服务动态自动归组与不同场景下的自定义分组,解决在多机房场景下跨机房调用穿透、Sandbox等问题

  • 服务监控报警 - 支持服务与接口级别多指标、多维度的监控,支持多种报警方式

  • 统一配置管理 - 支持服务配置统一管理,灵活设置不同环境间差异,支持历史版本,配置项变更后实时下发

  • 分布式服务跟踪 - 轻松诊断服务访问慢、异常抖动等问题

  • 过载保护 - 灵活定义服务消费者的配额,当其调用量超出最大阀值时,基于不同服务消费者进行QoS区分,触发过载保护。

  • 服务访问控制

1.3 环境划分

========

服务提供者的环境分线上(IDC)和线下(办公云)两套系统,线下系统是对线上系统的模拟。 每套系统中都有 test/staging/prod 三个环境。

1.4 调用流程

========

妙啊!美团 OCTO 分布式服务治理系统,这描述也太清晰了

  • 各方(provider/consumer)在 OCTO 上注册自己专用的 appkey,比如 appkey-provider/appkey-consumer

  • provider 在 OCTO 上注册服务(标记为 appkey-provider),同一个 appkey 在三个环境中都有部署;

  • 假设在 staging 环境 的 consumer 在 OCTO 上请求服务(标记自己 appkey-consumer,目标 appkey-provider)

  • OCTO 查询 staging 环境的 appkey-provider 的服务列表,并发送给 consumer

  • consumer 通过 mtthrift 访问 IP:PORT 服务

1.5 理解 appkey

=============

以 Nginx 为参照来理解。 对于传统的配置方式,域名与物理服务器的映射关系由 Ngnix 维护,物理服务器的增减需要运维人员调整,无法动态完成:

妙啊!美团 OCTO 分布式服务治理系统,这描述也太清晰了

对于 appkey 的配置方式,新增了 appkey 一层:

  • 域名与 appkey 的映射关系由 Nginx 配置,以后无需调整;

  • 而 appkey 与物理服务器的映射关系,可以动态调整。

妙啊!美团 OCTO 分布式服务治理系统,这描述也太清晰了

Thrift 同理,对于客户端请求(appkey:port),Thrift Server 通过 appkey 找到物理服务器(IP:port)。

2 整体架构

======

妙啊!美团 OCTO 分布式服务治理系统,这描述也太清晰了

妙啊!美团 OCTO 分布式服务治理系统,这描述也太清晰了

2.1 MTransport(服务通信框架)

======================

MTthrift 是基于 Thrift(由 Facebook 来源为 Apache Thrift )二次开发,是一个分布式服务通讯框架,致力于提供高性能和透明化的RPC远程服务调用方案,是 OCTO 服务治理方案的核心框架,每天为4000+服务提供2000亿+次访问量支持,被广泛应用于新美大各个业务线。

MTransport 是多语言的服务通信框架,它屏蔽了底层高性能网络通信的实现细节, 从而实现简单高效的服务开发。MTransport 支持 Thrift/HTTP/pigeon 等协议。其中 Thrift 包括 MTthrift(Java)、PThrift(PHP)、CThrift(C/C++)、Turbo Thrift(NodeJS)等,Thrift 支持不同语言版本的代码实现, 保持通信协议的一致性,支持服务注册、服务自动发现、分布式服务调用跟踪等。HTTP 目前也支持JAVA、NodeJs以及C++。

MTthrift 提供服务模板管理, 代码生成引擎等高效工具.

2.2 HLB(弹性负载均衡器)

================

HLB 是 Hardware Load Balance 的缩写。 所有HTTP请求/应答流量都会穿过这个系统,类似amazon elb。

2.3 SG_agent(服务治理代理)

=====================

SG 是 Service Governance 的缩写。 SG_agent 部署在各服务节点(服务的提供者和消费者),通过与MNS进行通信,提供服务注册/发现、配置更新、访问控制、配额限制等功能,并将调用统计上报给性能监控平台。

2.4 MNS(美团命名服务)

===============

MNS 是 Meituan Naming Service 的缩写。 MNS 是服务注册路由中心,基于 ZooKeeper 构建,为公司各类分布式服务提供稳健可靠的命名服务管理组件, 快速实现服务注册、路由、服务自动发现。

妙啊!美团 OCTO 分布式服务治理系统,这描述也太清晰了

主要提供服务概要、节点IP/Port、节点权重、配额等信息的存储/访问,及服务健康状态检测等。

  1. 可靠性: (1)一致性:不论连接到集群的哪一台服务器节点,展示的都是一致的数据视图。 (2)原子性:节点的更新要么成功,要么失败。 (3)高可用性:在2n+1台机器组成的集群中,即使n台机器失败,仍不影响集群的高可用性。

  2. 去中心化:中心的MNS主要提供服务注册、发现、路由策略等功能,其他服务主要由在各服务节点的SG_agent提供。

2.5 Data-center(服务数据中心)

=======================

收集公司所有接入OCTO业务的上报日志数据,为各业务线提供系统的性能指标、健康状况、基础告警等

2.6 Scanner(健康检查系统)

===================

扫描各服务的健康状况,不可用时从 MNS 中剔除。

2.7 MCC(美团配置中心)

===============

MCC 是 Meituan Config Center 的缩写。 统一配置中心,提供统一配置管理服务, 实现配置与代码分离、配置信息实时更新、高可用性、版本控制, 提高服务开发效率,降低运维成本。 其原理是将 JSON 格式的配置文件存储在 ZooKeeper 目录下,当用户在 MSGP 更改配置时,由 MSGP 通知 SG_agent 进行数据拉取,将zk中的配置数据落地到本机的指定目录中。

2.8 MSGP(美团服务治理平台)

==================

MSGP 是 Meituan Service Governance PlatForm 的缩写。 目标:为公司各类服务提供注册、治理、诊断,配置,配额等功能的一站式管理平台。

3 接入方法

======

使用thrift 提供的@ThriftService、@ThriftMethod、@ThriftStruct、@ThriftField等注解,注解于普通的Java类,使其成为thrift的数据模型(model)和服务接口(service)。其使用模式与 Dubbo 非常相似:服务的提供者和消费者基于共同的一套接口定义。

下面基于 SpringBoot 创建

interface/provider/consumer 三个模块。 在本机上运行 provider,即可成功注册至 dev 环境的 OCTO 上。 在本机上运行 consumer,即可成功消费 provider 提供的服务。 本例已在美团内网跑通。

3.1 公用接口 service-interface

==========================

引入依赖包,并定义接口 DemoThriftService。 其中用到的参数 StudentParam / GenderEnum 必须用相关注解标注。

3.1.1 pom.xml

=============

com.meituan.service.mobile

mtthrift

1.8.5

com.meituan.mtrace

mtrace

1.1.14

3.1.2 StudentParam.java

=======================

/**

  • @author: kefeng.wang

  • @date: 2018-06-29 16:34

  • @description: 学生定义(作为输入参数)

**/

@ThriftStruct

public class StudentParam {

private Integer id;

private String name;

@ThriftConstructor

public StudentParam(Integer id, String name) {

this.id = id;

this.name = name;

}

@ThriftField

public Integer getId() {

return id;

}

@ThriftField(1)

public void setId(Integer id) {

this.id = id;

}

@ThriftField

public String getName() {

return name;

}

@ThriftField(2)

public void setName(String name) {

this.name = name;

}

}

3.1.3 GenderEnum.java

=====================

/**

  • @author: kefeng.wang

  • @date: 2018-06-29 16:41

  • @description: 性别定义(作为输出参数)

**/

@ThriftEnum

public enum GenderEnum {

GENDER_MALE(1, “male”, “男性”),

GENDER_FEMALE(2, “female”, “女性”),

GENDER_UNKNOWN(0, “unknown”, “未知性别”);

private Integer id;

private String value;

private String desc;

GenderEnum(Integer id, String value, String desc) {

this.id = id;

this.value = value;

this.desc = desc;

}

// @ThriftEnumValue

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getValue() {

return value;

}

public void setValue(String value) {

this.value = value;

}

public String getDesc() {

return desc;

}

public void setDesc(String desc) {

this.desc = desc;

}

}

3.1.4 DemoThriftService.java

============================

/**

  • @author: kefeng.wang

  • @date: 2018-06-29 16:19

  • @description: Thrift 接口定义

**/

@ThriftService

public interface DemoThriftService {

@ThriftMethod

String getVersion() throws TException;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

Ending

Tip:由于文章篇幅有限制,下面还有20个关于MySQL的问题,我都复盘整理成一份pdf文档了,后面的内容我就把剩下的问题的目录展示给大家看一下

如果觉得有帮助不妨【转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!(阿里对MySQL底层实现以及索引实现问的很多)

吃透后这份pdf,你同样可以跟面试官侃侃而谈MySQL。其实像阿里p7岗位的需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

制,下面还有20个关于MySQL的问题,我都复盘整理成一份pdf文档了,后面的内容我就把剩下的问题的目录展示给大家看一下**

如果觉得有帮助不妨【转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!(阿里对MySQL底层实现以及索引实现问的很多)

[外链图片转存中…(img-fbpJOdji-1712722552770)]

[外链图片转存中…(img-BN84jcnt-1712722552770)]

吃透后这份pdf,你同样可以跟面试官侃侃而谈MySQL。其实像阿里p7岗位的需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-4WcO5tFD-1712722552771)]

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值