三、服务网格
从整个系统来看,如果以 Sidecar 方式来部署服务治理以及服务的话,最终形成的系统如图。能看到通过 Sidecar 进行相互连接,形成一个网络,这也是服务网格名字的由来。每一个节点上面都相当于具体的网格,和多年之前提的网格计算有点类似。
服务网格如果站在更抽象的层次来看是什么样子?把服务治理相关的东西抽象来看的话,服务网格也算是一种基础设施,它和具体的业务无关。不管是 PaaS 的发展,还是服务网格的发展,都是将与业务无关的内容的共同点提取出来,然后形成独立的一套平台或者方案。另外,服务网格之间要形成可靠传递,刚才提到的重试等功能都应该具备。
服务网格是轻量级的网络代理,不能太重,不能喧兵夺主,服务才是整个系统中最重要的东西,而这些基础设施并不应该取代服务最重要的价值地位。
更关键的一点是要对应用程序透明。对于服务而言是看不到 Sidecar、看不到代理的,服务如果要发消息出去,它知道是发给这个代理的,那对于我们的业务来说同样也是一种污染。服务网格最终不再强调代理作为单独的组件,不再孤立的来看代理,而是从全局的角度来看待代理所形成的网络。
1、服务网格定义
服务网格的定义是 Willian Morgan 提出来的,他是最早做服务网格的人。如图,文字加粗的是服务网格一些关键技术点。右边图是最新发展的服务网格,在最上层还会加一个控制面板,通过控制面板来管理这些代理,这些代理是需要被管理的。如果我们的运维环境没有控制面板,可能就没办法运维了。
2、服务网格的基本构成
服务网格必须要具备数据面板和控制面板,如果新开发一个服务网格只有数据面板,它肯定不是一个完整的服务网格。
数据面板是用来接收系统中的每一个包或者请求,提供服务发现、健康检查等服务治理相关的,都是由数据面板来完成。数据面板的一些典型代表有 Linked、Envoy、和 Nginx 公司开发的 Nginmesh,以及硬件服务的代理厂商F5开发的 Aspen Mesh。目前主要的、成熟的是 Linked 和 Envoy,这两者都在生产环境上面真实部署过,实战过。而且Linked的采用会更广泛一些,因为它出现的时间最早。
对于控制面板来说,是为了在网格中运营的数据面板提供策略和配置,负责一些管理工作,它不会接收系统中的任何包或者请求。这里的包和请求应该是业务相关的包和请求,和具体的业务是完全没关系的。本来做微服务应该做去中心化的事情,但是又有一个控制点在那里,要强调的是那个控制点和具体的业务没什么关系。控制面板的典型代表,包括 Istio、Conduit、Nleson、SmartStack,目前最新的是 Istio 和 Conduit。
3、数据面板对比
左边是 Linked(Scala编写),右边是 Envoy(C++编写),它们最大的区别就是实现语言的区别。同时,Linkerd 和 Envoy 都是在生产环境已经验证过的两个系统,功能上都没问题,都比较强大,它们唯一的区别就是对于硬件资源的要求,Linked 是非常高的,它可能就会造成喧兵夺主的感觉,所以目前 Envoy 在这块是比较火的,Envoy 是由C++开发的。
4
控制面板对比
两个最新的控制面板,一个是 Istio,是由 Google、IBM、Lyft 开发的,而 Conduit 是由 Buoyant 公司开发的,跟刚才所说的性能不太好的数据面板Linkerd是同一家公司,Buoyant 在 Linkerd 之后又重新开发了 Conduit,专门来解决性能上的问题,所以在性能上面来看,Conduit 的性能指标已经出来了,就是微秒级,并且是P99延迟。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-66285-2.html
真恶心