59 | 透明通讯的涅槃(上):通讯的成本
周志明
你好,我是周志明。接下来这三节课,我们来学习目前最新的服务通讯方案:服务网格。
Kubernetes 为它管理的工作负载提供了工业级的韧性与弹性,也为每个处于运行状态的 Pod 维护其相互连通的虚拟化网络。不过,程序之间的通信不同于简单地在网络上拷贝数据,一个可连通的网络环境,仅仅是程序间能够可靠通信的必要但非充分的条件。
作为一名经历过 SOA、微服务、云原生洗礼的的分布式程序员,你必定已经深谙路由、容错、限流、加密、认证、授权、跟踪、度量等问题在分布式系统中的必要性。
在“远程服务调用”这个小章节里,我曾以“通信的成本”为主题,给你讲解了三十多年的计算机科学家们,对“远程服务调用是否可能实现为透明通信”的一场声势浩大的争论。而今天,服务网格的诞生在某种意义上,就可以说就是当年透明通信的重生,服务网格试图以容器、虚拟化网络、边车代理等技术所构筑的新一代通信基础设施为武器,重新对已经盖棺定论三十多年的程序间远程通信中,非透明的原则发起冲击。
今天,这场关于通信的变革仍然在酝酿发展当中。最后到底会是成功的逆袭,还是会成为另一场失败,我不敢妄言定论,但是作为程序通信发展历史的一名见证者,我会丝毫不吝啬对服务网格投去最高的期许与最深的祝愿。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
服务网格作为一种新的通讯方案,通过容器、虚拟化网络、边车代理等技术构建了新一代通信基础设施,重新挑战了三十多年来程序间远程通信中的非透明原则。文章深入探讨了服务网格作为一种新的通讯方案的技术特点和发展前景,对读者快速了解服务网格的重要性和影响具有一定的参考价值。服务网格的出现为程序通信带来了重要影响,尤其是边车代理模式的出现,使得通信变得更加透明、可靠、可观测。同时,也提到了服务网格的不足之处,为了解决这些问题,服务网格框架应运而生。通过分离数据平面与控制平面,服务网格实现了程序与网络的解耦,创造了一种“完美可靠”的假象,使应用之间可以简单交互,不必过多考虑异常情况,同时也能够实现平稳迁移和统一的访问控制。文章提出了关于远程通讯性能与透明性的问题,引发了业界对于实现透明远程服务的讨论。文章内容深入浅出,对服务网格的技术特点和影响进行了全面阐述,为读者提供了深入了解服务网格的重要参考。
该试读文章来自《周志明的软件架构课》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(7)
- 最新
- 精选
- zhanyd陈皓老师的专栏里有一篇文章也提到了边车模式:https://time.geekbang.org/column/article/5909 摘录部分内容如下: 边车模式设计具体来说,你可以理解为,边车就有点像一个服务的 Agent,这个服务所有对外的进出通讯都通过这个 Agent 来完成。这样,我们就可以在这个 Agent 上做很多文章了。 但是,我们需要保证的是,这个 Agent 要和应用程序一起创建,一起停用。边车模式有时候也叫搭档模式,或是伴侣模式,或是跟班模式。就像我们在《编程范式游记》中看到的那样,编程的本质就是将控制和逻辑分离和解耦,而边车模式也是异曲同工,同样是让我们在分布式架构中做到逻辑和控制分离。 对于监视、日志、限流、熔断、服务注册、协议转换等等这些功能,其实都是大同小异,甚至是完全可以做成标准化的组件和模块的。一般来说,我们有两种方式。 一种是通过 SDK、Lib 或 Framework 软件包方式,在开发时与真实的应用服务集成起来。 另一种是通过像 Sidecar 这样的方式,在运维时与真实的应用服务集成起来。 PS:很喜欢老师把技术发展的历史,娓娓道来的这种方式,让我们的视角足够大,不会迷失在细节里。2021-04-0912
- 樊野远程通信与本地访问相比,有一个特点是增加了服务调用的“不确定”结果,为了处理这种不确定的结果,是需要一定程度侵入业务逻辑来处理的,比如幂等,重试等。所以我理解完全的透明远程通信是无法达成的。不知理解对不对,请老师指点。2021-04-1324
- neohope服务网格可以实现透明,很大程度上是服务网格的整个网络环境是相对可控的。远程通讯,如果在网络可控的环境下,其实完全可以和服务网格采用同样的方式。但在互联网环境下,无法实现网络的可控,运维工程师、网络工程师是无法把程序员的大部分工作都做掉的,也就是程序员不能只关心数据,不关心网络。 何时能实现这种透明呢?个人认为,需要网络设备更新换代才行,要华为、思科支持这种透明,并能将透明能力,一定程度上开放给开发应用的厂商,才有可能实现一定程度上的透明。2021-05-301
- 大力水手Jerry一课一思:远程和本地在虚拟化范畴内是一个相对的概念,比如同一个node中不同pods之间的通讯,如果用经典意义的视角看就是远程,但如果启用hostIPC,就可以使用Unix Domain socket或者共享内存,本质上就是本地通讯。 另外通过缓存技术,提升业务设计的局部特性(比如应用网关按属地路由,数据分片sharding等),可以进一步提升经典意义上远程通讯的性能。 其实透明与否的关键是性能是否满足业务需求。即便采用本地调用,一般性的方案可能也行不通,必须进行专业深入的研究,采用高超的技巧才能提升性能从而满足业务需求,从这个角度说,本地访问并非就是“透明”程序设计的保证。 所以更高的CPU速度,更快的网络,更优秀的数据结构和算法,更精巧的数据通讯模式和技术架构,这些都有助于提升远程服务调用的性能,从而影响到上层开发者的“透明“感觉。2021-05-111
- Jxin我的观点是不可能实现。远程调用只要无法解决“不确定”的访问现状(超时已成功,最终一致的至少成功一次),就会有业务侧需要做对应处理的必要诉求,进而应用侧就无法透明使用远程调用。2021-05-051
- 蔚蓝如果在网络可靠并且性能高效的情况下,是可以实现透明远程调用的。2022-02-06
- 大力水手Jerry突然想到一点,”分布式程序回归到传统的本地程序调用,只关心调用和参数传递(包括入参和出参),而不关心怎么传递参数,在之前单机情况下是通过ABI实现的,现在微服务分布式架构下则是通过服务网格实现的。“,周老师看是否可以这么理解?2021-05-11
收起评论