Service Mesh实践指南
周晶
微博平台研发技术专家,高性能OpenResty开发框架Vanilla作者。
立即订阅
6496 人已学习
课程目录
已更新 6 讲 / 共 6 讲
01 | 我们高呼的下一代微服务 Service Mesh 到底是什么?
02 | 从单体应用到 Service Mesh 的曲折历程
03 | 异构系统跨语言服务化初探
04 | 详解 Service Mesh 的事实规范
05 | Service Mesh 的请求路由流程分析
06 | 面向未来的思考:泛服务化与 Service Mesh
Service Mesh实践指南
登录|注册

05 | Service Mesh 的请求路由流程分析

周晶 2018-03-21

内容概要

本文主要分析 WeiboMesh 在运行阶段请求路由的实现,对比现有的通用 Service Mesh (比如 Istio )在这方面的不同。
前面我们对 WeiboMesh 的演化、实现以及 Service Mesh 规范等做了简要分析和解读,希望能帮助你基于 WeiboMesh 更好地理解 Service Mesh 的架构理念。
这里我们从实践的角度来体会下当前最受关注的 Service Mesh 实现 Istio 和 WeiboMesh 在服务调用和请求路由方面的一些异同,希望对你入坑 Service Mesh 有所帮助。
WeiboMesh 源自于 Weibo 内部对异构体系服务化的强烈需求以及对历史沉淀的取舍权衡,它没有把历史作为包袱而是巧妙地结合自身实际情况完成了对 Service Mesh 规范的实现,与同时期的其他 Service Mesh 实现相较而言,WeiboMesh 以最接地气的 Service Mesh 实现著称并不无道理。
如果你的团队拖着繁重的技术债务,又想尝试 Service Mesh 理念带来的诸多好处,那 WeiboMesh 应该能为你带来些许灵感。下面就让我们一起来体验一下。

WeiboMesh 的服务注册与发现

由微博开源 Motan RPC 框架演化而来的 WeiboMesh 服务注册与发现功能扩展自 Motan 相关功能,机制和用法基本不变,流程同样是服务启动的时候将自己的分组、服务名称、版本等等注册到注册中心。
稍微有点区别的可能在于扩展了具体执行注册和发现操作的角色,WeiboMesh 的服务由 Server Agent 完成注册,而通过 Client Agent 完成对依赖服务的订阅与发现。Mesh 层接管了服务进出的流量,那请求又是如何在 WeiboMesh 中流转的呢?

请求在 WeiboMesh 中的流转

我们以 WeiboMesh 的示例项目(github.com/motan-ecosystem/motan-examples)中各语言的 HelloWorldService 作为服务网格中的各种相互依赖的异构服务,基于 zookeeper 注册中心,看下一个请求是如何在 WeiboMesh 中流转的。假定我们有个 Test 业务(motan-examples/php/motan.php),它依赖由 OpenResty 提供的一个 HTTP 服务 (http://10.211.55.3:9900/http_server)。
作为服务提供方,HTTP 服务一侧的 Server Agent 将 HTTP 接口导出为 WeiboMesh 集群中的 HelloWorldService,并将其注册到 zookeeper,而依赖此服务的 Test 业务一侧的 Client Agent 订阅了这个 HelloWorldService 服务作为自己的一个 referer,并将服务的节点实时发现回来,Test 业务只需要对本地的 Client Agent 发起调用即可完成对 HelloWorldService 的依赖,而由 Client Agent 与对端的 Server Agent 发起点对点通信,下面我们通过抓包来演示请求的流转。
图中 z2.shared 为 Test 业务部署的节点,而所依赖的 HTTP 服务 http://10.211.55.3:9900/http_server 部署于 z.shared 节点,可以看出 Test 直接请求本机的 9981 Mesh 端口(Client Agent),Client Agent 又对远端的 Mesh 端口(Server Agent:9990)发起直连调用。
下面是将 HTTP 服务导出为 Motan RPC 服务,并暴露到 WeiboMesh 集群 的相关 Server Agent 配置,可以看到其将 HTTP 接口导出为 motan2 协议 的 Motan RPC 服务,并在 9990 端口提供服务。
http-mesh-example-helloworld:
path: com.weibo.motan.HelloWorldService
export: "motan2:9990"
provider: http
registry: "zk-registry" # registry id
HTTP_URL: http://10.211.55.3:9900/http_server
basicRefer: mesh-server-basicService
WeiboMesh 又是如何实现控制面板来对请求进行精细控制的呢?
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Service Mesh实践指南》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(5)

  • 您好,客户端代码是如何调用client agent这一块儿没看懂~是直接发localhost的http请求吗?
    2018-06-24
    1
  • Edward佃存
    注册中心挂了怎么玩
    2018-05-18
    1
  • Justin Huang
    Agent是用Go实现的?Agent需要解码传输协议么?Agent按应用来部署,还是一台机器上部署一个?当Client调用的服务增多或减少时,Agent也需要变更配置么?

    作者回复: Agent 是 Go 实现的,如果请求的是 motan 协议是不需要编解码的,其他的协议根据需求需要做一些转换,Agent 目前是按单机部署的,目前的实现需当 client 调用的服务变更时需要 Agent 配置同步变更的,但是我们正在考虑如何不需要做这个变更而自动转发请求,这部分目前正在开发中

    2018-03-19
    1
  • Panda
    除了SideCar模式 Service Mesh 还有其他的模式吗
    2018-12-20
  • SunShine
    目前这套Weibomesh是只用于微博体系,还是也会用于其他与微博无强关联的应用系统一起?在这套网格中会有多个服务注册中心吗?

    作者回复: 微博以外的应用也可以用,注册中心是可扩展的,微博有自己的注册中心,开源版我们默认实现了 zk,一套里面只需要一个注册中心。

    2018-03-20
收起评论
5
返回
顶部