SOA
(Service-Oriented Architecture
)。它是指在分布式环境下,系统或者其组件可以在网络上通过通用协议调用另一个系统,使得多个系统彼此协作,它是令被调用系统成为调用者的服务SOA
架构中的各个子系统通过企业服务总线(Enterprise Service Bus
,ESB
)实现了松散耦合。ESB
是构建SOA
时所使用的关键技术,可以简单地理解为它是一个通信系统,为各个应用提供交互能力SOA
体系结构API
网关发送请求,业务数据被拆分到不同的数据库,只能由对应的服务进行访问UNIX
的设计哲学,某个服务只做一件事,是一种可以独立开发和部署的无状态服务Library
)而用服务来构建组件以便于独立部署A/B
测试、灰度发布、限流、熔断和访问控制等一系列与网络相关的功能,这是多么复杂的一件事情。开发和运维人员在转型到微服务架构时不得不面对这一新的挑战Circuit Breaker
)这样的网络层功能和业务代码封装在一起,使服务具备了网络控制能力,Sidecar
模式Sidecar
的方式进行网络代理,对应用服务没有侵入性,不会受到应用服务的语言和技术限制,而且可以做到控制层和业务逻辑的分开升级和部署。Sidecar
在逻辑上和应用服务部署在同一个结点(如Pod
)中,它们拥有相同的生命周期。每个服务都配备了一个Sidecar
代理。Sidecar
可以迅速方便地为应用服务提供扩展,而不需要应用服务的改造。它的主要功能如下Sidecar
可以帮助服务注册到相应的服务发现系统,并对服务做相关的健康检查。如果服务不健康,则可以从服务发现系统中移除服务实例Sidecar
可以帮助从服务发现中找到相应外部服务的地址,然后进行服务路由Sidecar
接管了进出的流量,这样我们就可以进行相应的日志监视、调用链跟踪、流控熔断等操作,这些都可以在Sidecar
中实现Sidecar
来控制应用服务,如流控、下线等应用服务终于可以做到专注于业务逻辑
Sidecar
代理应用于一个大型的系统,其中包括很多个相互通信的服务,那么每个服务都将有一个配套的Sidecar
代理,服务之间通过Sidecar
代理进行通信,最终得到一个如下图的网络拜年结构,这就是服务网格Sidecar
模式Sidecar
模式应用于多服务的系统,服务之间相互连接形成了网状拓扑结构,最终演变成了服务网格Sidecar
的网络拓扑形态,Mesh
这个词也由此而来Staging
)环境?路由到本地还是云?是测试版本还是运行版本?Netflix
有一个非常著名的故障测试系统Chaos Monkey
,它会故意切断不同范围的网络环境来测试服务的容错能力。在服务网格中我们可以通过故障注入特性模拟基本的网络传输问题来验证系统的健壮性TLS
加解密和授权),不但可以在不同的服务上对其进行重用,而且很容易在整个基础设施层更新安全机制,甚至无须对系统做任何操作Visibility
):运行时指标遥测、分布式跟踪Manage Ability
):服务发现、负载均衡、运行时动态路由Resilience
):超时、重试、熔断等弹性能力Security
):服务间访问控制、TLS
加密通信Linkerd
Twitter
的两位工程师William Morgan
和Oliver Gould
组建了一个小的创业公司Buoyant
,开发出了Linkerd
并在GitHub
上发布了0.0.7版本。这是业界公认的第一个Service Mesh
。2017年年初Linkerd
加入CNCF
,同年4月1.0版本发布Envoy
Lyft
公司的Matt Klein
宣布Envoy
在GitHub
开源并发布了1.0.0版本。2017年Envoy
加入CNCF
成为第二个服务网格项目,并于2018年底孵化毕业。Envoy
是一个高性能的C++语言实现的分布式代理,它也是一个通信总线。Envoy
基于对Nginx
、HAProxy
、硬件负载均衡器和云负载均衡器等解决方案的了解,与每个应用服务一起运行,并以与平台无关的方式提供公共的网络特性Envoy
具有以下功能特性Envoy
是一个自包含的高性能服务器,内存占用很小,可以与任何应用程序语言或框架一起运行HTTP/2
和gRPC
支持:Envoy
对HTTP/2
和gRPC
的传入和传出连接都提供支持,它是一个透明的HTTP/1.1
到HTTP/2
的代理API
配置管理:Envoy
为动态管理其配置提供了健壮的API
L7
流量的深度可观测性,分布式跟踪的本地支持,MongoDB
和DynamoDB
数据层面的支持Istio
Istio
的0.1版本发布,这标志着服务网格第二代产品的诞生,2018年7月Istio
又发布了1.0版本。Istio
是Google
、IBM
和Lyft
联合发布的产品,靠着这3家公司的强大支持,它很可能成为继Kubernetes
之后的另一个重量级产品。在0.1版本发布的时候各个厂商就开始积极响应,Envoy
成为Istio
默认的数据平面,Linkerd
、Nginmesh
也放弃了竞争,选择与其集成Istio
,就几乎可以再需要其他的微服务框架,也不需要自己去实现服务治理,只要客户端和服务端互联互通,把网络层委托给Istio
,它就能帮助完成这一系列的功能Istio
主要功能HTTP
、gRPC
、WebSocket
和TCP
流量的自动负载均衡API
支持访问控制、速率限制和配额请求SOFAMesh
SOFAMesh
由蚂蚁金服发起,控制面板克隆了Istio
的开源库并进行了符合自身要求的改进,MOSN
是基于Golang
开发的全新数据面板,用以替换Envoy
SOFAMesh
除了具有服务网格的基本功能外,还有一些自身的特色MOSN
实现了多协议支持,同时提供了自定义协议以方便扩展MOSN
在I/O
、协议、内存、协程、网络处理等多方面进行了优化,保证了生产环境的需求mTLS
、双向链路加密等