高并发系统设计 40 问
唐扬
美图公司技术专家
49013 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
高并发系统设计 40 问
15
15
1.0x
00:00/00:00
登录|注册

29 | Service Mesh:如何屏蔽服务化系统的服务治理细节?

通过配置的方式将调用服务的请求发送给Sidecar
流量透明的转发
Mixer、Pilot和Istio-auth
工作量巨大
Protobuf、Thrift
轻量级客户端
使用iptables的方式
控制平面负责服务治理策略的执行
代理程序称为"Sidecar(边车)"
Service Mesh的核心思想
实现"关注点分离"
代理层使用单一的语言实现
需要重新实现服务治理的策略
选择合适的序列化方式
分享使用Service Mesh解决跨语言的服务治理问题的经验
微博、蚂蚁金服
通过轻量级客户端来实现流量转发
使用iptables实现流量的劫持
控制平面用来控制服务治理策略的植入
数据平面主要负责数据的传输
如何将流量转发到Sidecar中
数据平面和控制平面
服务之间的通信从之前的客户端和服务端直连变成通过Sidecar
在应用程序同主机上部署一个代理程序
将服务治理的细节从RPC客户端中拆分出来,形成一个代理层单独部署
新语言开发的微服务无法使用之前积累的服务治理策略
服务之间通信协议要对多语言友好
一课一思
Service Mesh在实际项目中的落地实践
Sidecar的植入方式
Service Mesh分为数据平面和控制平面
Service Mesh的实现
什么是Service Mesh
如何屏蔽服务化架构中服务治理的细节
跨语言体系带来的挑战
课程小结
Service Mesh是如何工作的
解决跨语言服务治理的问题
Service Mesh

该思维导图由 AI 生成,仅供参考

你好,我是唐扬。
在分布式服务篇的前几节课程中,我带你了解了在微服务化过程中,要使用哪些中间件解决服务之间通信和服务治理的问题,其中就包括:
用 RPC 框架解决服务通信的问题;
用注册中心解决服务注册和发现的问题;
使用分布式 Trace 中间件,排查跨服务调用慢请求;
使用负载均衡服务器,解决服务扩展性的问题;
在 API 网关中植入服务熔断、降级和流控等服务治理的策略。
经历了这几环之后,你的垂直电商系统基本上已经完成了微服务化拆分的改造。不过目前来看,你的系统使用的语言还是以 Java 为主,之前提到的服务治理的策略,和服务之间通信协议也是使用 Java 语言来实现的。
那么这会存在一个问题:一旦你的团队中,有若干个小团队开始尝试使用 Go 或者 PHP 来开发新的微服务,那么在微服务化过程中,一定会受到挑战。

跨语言体系带来的挑战

其实,一个公司的不同团队,使用不同的开发语言是比较常见的。比如,微博的主要开发语言是 Java 和 PHP,近几年也有一些使用 Go 开发的系统。而使用不同的语言开发出来的微服务,在相互调用时会存在两方面的挑战:
一方面,服务之间的通信协议上,要对多语言友好,要想实现跨语言调用,关键点是选择合适的序列化方式。我给你举一个例子。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Service Mesh是一种解决跨语言微服务调用和服务治理策略复用问题的有效方案。它通过在应用程序主机上部署代理程序(Sidecar)来实现服务之间的通信,将业务代码和服务治理策略隔离开,实现了服务治理策略的复用和统一管理。文章介绍了Service Mesh的工作原理和核心思想,以及主要的实现形式和工作方式,包括使用iptables实现流量透明转发和轻量级客户端方式。此外,还提到了国内大厂开源的Service Mesh方案,借鉴了Istio的思路,并将服务治理策略做到了Sidecar中,以提高性能。总的来说,Service Mesh能够屏蔽服务化架构中服务治理的细节,实现跨语言服务治理策略的复用,是解决多语言微服务调用和服务治理策略复用问题的有效方案。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《高并发系统设计 40 问》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(21)

  • 最新
  • 精选
  • Keith
    API网关和Service Mesh有什么区别与联系呢? (它们都可以植入了服务治理策略)

    作者回复: 标准答案是,API网关是南北向的,service mesh是东西向的

    2019-12-07
    8
    13
  • Corner
    老师,您好。请问您在文中说的"轻量级客户端"目前有哪些开源的SeverMesh框架有实现呢?

    作者回复: 据我了解微博和蚂蚁金服都采用了这种方案

    2019-11-29
    3
    11
  • 电光火石
    老师,请问一下: 1. 如果全栈都是java,那么service mesh就不是那么重要,是吗? 2. 文中看到iptable的性能会比rpc框架的性能要查,我以为iptable是走第三层或者第四层协议,而且只是转发,性能会很高,而rpc框架走第四层协议,而且需要解析协议内容,性能会更差一些。不知道老师能否讲解一下我理解的错误 谢谢了

    作者回复: 1. 也不是,service mesh还可以解决中间件升级难的问题 2. 不是的,高并发下iptables对性能还是有影响的,尤其规则比较多的时候

    2019-12-07
    8
  • 本质上感觉是又多了一层中间层,这个中间层来处理服务调用相关的事情,进一步的将业务逻辑和服务处理逻辑耦合的更松散一些,多加一层距离更远了一些,所以,性能上也会损耗更多一些。 目前还未接触实际方案,理解上大概这样。

    作者回复: 性能损耗实测可接受

    2020-05-07
    6
  • 往事随风,顺其自然
    istio 中需要使用Kubernetes 这个,必须这样?

    作者回复: 现在是的

    2019-11-29
    6
  • 芳菲菲兮满堂
    涨姿势 envoy lisio之前都还是懵懵的

    作者回复: 现在是大趋势了

    2020-03-19
    3
  • Keith
    关于服务治理策略, "负载均衡、熔断降级、流量控制、打印分布式追踪日志等等,这些服务治理的策略都需要重新实现": 1. 熔断降级、流量控制这些不是在API网关中实现吗? 这些需要每个RPC客户端单独实现? 2. 服务治理策略是应用于外部客户端对系统的访问, 还是也包括内部RPC客户端之间的相互访问?

    作者回复: 1. 服务之间调用,治理策略是集成在客户端中的 2. 包括RPC之间互相访问

    2019-11-30
    2
  • L响
    老师,Sidecar收到iptables转发的消息后,是否还要理解rpc协议呢?如果理解,那么Sidecar能够处理不同rpc协议吗?如果不理解,是否我们在rpc客户端和服务端要使用Sidecar的协议?

    作者回复: 不需要得,sidecar的协议可以对于使用方是透明的

    2020-06-06
    1
  • 阿土
    轻量级客户端一般怎么实现?有现成例子可参考么?另外,少量改造是改造些什么地方呢?

    作者回复: 可以看看sofa mesh的代码

    2019-12-04
    1
  • 阿卡牛
    istio 和spring boot有联系和区别吗

    作者回复: 他们应该不是一个东西,istio是service mesh的实现,spring boot是开发框架

    2019-11-29
    1
收起评论
显示
设置
留言
21
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部