原文:http://www.infoq.com/cn/news/2017/12/why-service-mesh

摘要:

对 Service Mesh 的理解?它的出现最终是为了解决什么问题?

Service Mesh 这个词本身出现的时间确实不长,但是它所描绘的事情存在的时间可不短,其本质就是分布式系统的动态链接过程,眼下最大众化的分布式系统就是微服务,所以可以简单地说,Service Mesh 就是微服务的动态链接器(Dynamic Linker)。

让我们回忆一下单机程序的运作方式,源代码被编译器编译为一系列目标文件,然后交由链接器将这些目标文件组装成一个可执行文件,链接过程就是将各个目标文件之间对符号(方法、变量、函数、接口等)的引用转化为对内存地址的引用,由于这个过程在生成可执行文件时就完成了,所以被称为静态链接。

后来为了程序的模块化和功能上的解耦与共用,开始把一些常见的公共程序剥离出来,制作成库文件供其他程序使用,在引用这些库文件的程序运行时,操作系统上的动态链接器会在库文件中查询到被引用的符号,然后将这些符号的内存地址映射到该程序的虚拟内存空间之中,由于这个过程是在程序运行时完成的,所以被称为动态链接。

再后来出现了分布式系统,程序被散布在网络中的不同主机上,那么如何链接这些程序呢?业界走过了和链接单机程序类似,但是却艰难得多的一段历程。因为这个访谈是在微服务的大背景下进行的,为了叙述方便,我们从现在开始把这些程序称为服务。业界最开始是把这些服务的网络地址写在配置文件中,这个方案显然问题太多、很不靠谱。所以接下来自然而然地出现了服务注册中心来统一记录这些服务的网络地址并维护这些地址的变化,服务通过注册中心提供的客户端 SDK 与注册中心通信并获得它们所依赖的服务的网络地址。由于网络通信远没有内存通信稳定,为了保证可靠的服务调用,又出现了用于流量控制的 SDK,提供流量监控、限流、熔断等能力。

在大型系统中,被依赖的服务往往以多实例的方式运行在多个主机上,有多个网络地址,所以又出现了用于负载均衡的SDK。现在问题貌似是解决了,但是我们手里多了一堆 SDK,我们手上已有的应用,必须用这些 SDK 重新开发,这显然可行度不高,而对于新开发的应用,我们又发现这些 SDK 体积过大,以 Netflix OSS 提供的 SDK 为例,依赖包动辄上百兆,在做微服务开发时,经常发现 SDK 的体积比程序本身还大很多倍,如果你使用容器技术,你会发现你的程序和基础容器的体积加起来还没 SDK 大,所以经常有人吐槽说现在的这些所谓的微服务框架实际上不是为微服务设计的。另外,SDK 还会带来性能伸缩性的问题,在性能要求较高的系统中,SDK 往往成为了性能瓶颈。再回头看一下单机上动态链接过程的顺畅,这种基于 SDK 的微服务动态链接方案简直是难用的不得了。

这时业界才开始关注已经存在了一段时间的 Service Mesh 方案,Service Mesh 的基础是一个网络代理,这个网络代理会接管微服务的网络流量,通过一个中央控制面板进行管理,将这些流量转发到该去的地方,并在这个代理的基础之上,扩展出一系列的流量监控、限流、熔断甚至是灰度发布、分布式跟踪等能力,而不需要应用本身做出任何修改,让开发者摆脱了SDK 之苦,也避免了由于 SDK 使用不当造成的一系列问题,同时这个代理工作在网络层,一般情况下也不会成为性能瓶颈。怎么样,是不是有一些单机上动态链接过程的感觉了?

Service Mesh 的开源解决方案

主要就是由 Buoyant 公司推出的 Linkerd 和 Google、IBM 等厂商牵头的 Istio。Linkerd 更加成熟稳定些,Istio 功能更加丰富、设计上更为强大,社区相对也更加强大一些。

未来展望

在我看来,在三到五年之后,Kubernetes 会成为服务器端的标准环境,就像现在的 Linux,而 Service Mesh 就是运行在 Kubernetes 上的分布式应用的动态链接器,届时开发一个分布式应用将会像开发单机程序一样简单,业界在分布式操作系统上长达三十多年的努力将以这种方式告一段落。

Service Mesh扫盲的更多相关文章

  1. 五分钟了解 Service Mesh

      1 背景   1.1 多语言   微服务理念是提倡不同业务使用最适合它的语言开发,现实情况也确实如此,尤其是AI的兴起,一般大型互联网公司存在 C/C++.Java.Golang.PHP.Pyth ...

  2. 解读2017之Service Mesh:群雄逐鹿烽烟起

    https://mp.weixin.qq.com/s/ur3PmLZ6VjP5L5FatIYYmg 在过去的2016年和2017年,微服务技术得以迅猛普及,和容器技术一起成为这两年中最吸引眼球的技术热 ...

  3. 深入解读Service Mesh的数据面Envoy

    在前面的一篇文章中,详细解读了Service Mesh中的技术细节,深入解读Service Mesh背后的技术细节. 但是对于数据面的关键组件Envoy没有详细解读,这篇文章补上. 一.Envoy的工 ...

  4. 深入解读Service Mesh背后的技术细节

    在Kubernetes称为容器编排的标准之后,Service Mesh开始火了起来,但是很多文章讲概念的多,讲技术细节的少,所以专门写一篇文章,来解析Service Mesh背后的技术细节. 一.Se ...

  5. 微服务(Microservices)和服务网格(Service Mesh)架构概念整理

    注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ...

  6. Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh

    本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于Kubernetes的教程仿佛不是亲儿子,写得非常随便,不仅缺 ...

  7. Service Mesh 数据平面 SOFAMosn

    https://mp.weixin.qq.com/s/DJ_IeDswGGFQiWqJ75pmig 开源 | Service Mesh 数据平面 SOFAMosn 深层揭秘 朵晓东 蚂蚁金服科技 20 ...

  8. 大规模微服务架构下的Service Mesh探索之路

    小结: 1. 第一.二代Service Mesh meetup-slides/敖小剑-蚂蚁金服-大规模微服务架构下的Service Mesh探索之路.pdf https://github.com/se ...

  9. 微服务架构基础之Service Mesh

    ServiceMesh(服务网格) 概念在社区里头非常火,有人提出 2018 年是 ServiceMesh 年,还有人提出 ServiceMesh 是下一代的微服务架构基础. 那么到底什么是 Serv ...

随机推荐

  1. 在Angular中定义共享的Providers

    转自:https://segmentfault.com/a/1190000010700308 有时,你需要在 Angular 应用中创建一个共享模块,该模块定义了功能模块和lazy-loaded模块可 ...

  2. Linux 最好是禁用IPV6

    看着不爽, 还容易出事. 编辑文件 – /etc/sysctl.conf $ sudo gedit /etc/sysctl.conf 在文件的最后加入下面的行. # IPv6 disabled net ...

  3. vscode的keybindings.json 和 AHK 脚本映射Win键

    vscodehotkey.ahk https://github.com/m2nlight/AHKVSCodeLikeMac ; Shortcuts like mac ; Written by Bob ...

  4. Mac下安装pcl-1.8.0

    更新,官方有Homebrew安装教程: http://pointclouds.org/documentation/tutorials/installing_homebrew.php#installin ...

  5. 003PHP文件处理——目录操作:rename scandir

    <?php //目录操作:rename scandir /** * 修改目录名字: * rename('旧名字','新名字') 改变文件夹或者文件的名称 */ //var_dump(rename ...

  6. Docker ENTRYPOINT

    entrypoint: 在启动镜像的时候会执行这个命令下的脚本,在docker run 和docker start情况下都会触发. 好比这个脚本是对某一个文件追加数据,每次start的时候都会追加,文 ...

  7. java中break,continue,标签实现goto效果(编程思想)

    goto 编程语言中一开始就有goto关键词了.事实上,goto起源于汇编语言的程序控制:“若条件A成立,则调到这里:否则跳到那里”. goto语句时在源码级别上的跳转,这导致了其不好的名誉.于是go ...

  8. 重构 demo篇

    本文背景为学习重构一书中的一些信息的记录. 该篇以一个影片租赁为背景.通过一层层的重构,最终实现相对来说比较完美的代码. 文中经典语句摘要: “如果它没有坏,就不要动它 .” 用来形容我们工作中一些比 ...

  9. 第十一次作业 - Alpha 事后诸葛亮

    拖鞋旅游队团队事后诸葛亮会议 前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10054510.html 时间:2018-12-1 20:00 地 ...

  10. 利用DotNetZip服务端压缩文件并下载

    public void DownFile() {              string filePath = Server.MapPath("/Files/txt/bb.txt" ...