企业服务总线ESB已死! 服务网格上位

服务网格是企业服务总线ESB的一种云原生版本,在面向服务的体系结构(SOA)中,微服务不断在进化,已经涉及到传统SOA中企业服务总线(ESB)所处理的任务,所以现在需要的是一种ESB的云原生版本。

在精彩的软件容器世界中,新项目的出现不断解决你认为早已经解决的问题,可以感觉到脚下的地面不断在移动,现代云原生架构正在推动应用程序向比以前更大规模的方向去部署,这需要新的方法和工具产品。

微服务是这样一个基于云原生架构的新方法,它将传统的应用或服务分解为可独立部署的功能模块,这些模块可以彼此分开扩展和维护,并且链接在一起以提供整个应用程序或服务的全部功能。

现在需要的是一种基于云原生的产品架构,像ESB那样将所有微服务组合在一起,此前有Netflix和Spring Cloud提出的API Gateway概念,Zuul实现API代理和URL路由,Eureka实现服务发现,Ribbon负责负载平衡,这些算是第一代云原生ESB,缺点是这些配置被放入代码阶段,对于开发人员要求素质比较高。

开源项目Istio作为服务网格的概念推出是第二代云原生ESB,它有一部分会与基础设施一起分布部署在容器旁边,主要负责服务发现、负载平衡、消息路由,遥测和监控等要求,当然包括安全。

Istio是由IBM和Google共同推出,Istio由以下组件组成:

1.Envoy:也称边车代理,因为它作为代理部署在每个微服务实例旁边。
2.Mixer:它是一个核心组件,用于通过Envoy代理实施策略,并从中收集遥测指标。
3.Pilot:负责配置代理。
4.Citadel是负责颁发证书的集中组件,也有自己的每个节点代理。

Mixer、Pilot和Citadel都是中央集中的,类似API网关+Eureka,不过这些中央集中点不会成为单点风险点,因为不会所有微服务都会经过这些中央集中点,而是直接由边车Envoy负责,这就避免了第一代方式的单点风险,因为在Spring cloud中,所有微服务都是通过单个API网关路由,包括通过Eureka或Zoopkeeper进行服务发现,微服务之间的通讯都会依赖于Eureka或Zoopkeeper服务器,这些服务器的设计就只能在CAP定理中进行妥协选择,而Istio则不会出现这种情况,关键是边车sidecar代理的实现Envoy。


Envoy是由Lyft开发的组件,被描述为“非常小,是第4到第7层智能路由器”,它捕获来自与其配对的微服务的所有传入和传出通信,控制流量路由、应用策略和收集遥测。 Pilot是IBM提供的主要组件,可作为部署在基础架构中的所有Envoy代理的控制版。

如果你想象在一个服务网格中,你可能有几百个微服务,如果每个都有多个实例,你可能有数百或数千个这些智能路由器,你需要一种方法对它们进行全部编程,所以Istio引入了这个称为Pilot的东西。可以把它想象成程序员,所有这些路由器的控制版。所以你有一个地方可以通过它来编程这个服务网络,然后围绕数据收集进行遥测,实现围绕安全的证书管理,从根本上讲你依靠这个智能路由层和这个控制版来管理整个服务网格。

Istio还有自己的API,允许用户将其插入现有的后端系统,例如用于日志记录和遥测。

根据谷歌的说法,Istio的监控功能使用户能够测量服务之间的实际流量,例如每秒请求数,错误率和延迟,还可以生成依赖关系图,以便用户可以看到服务如何相互影响。

通过其Envoy边车代理,Istio还可以在每个服务调用上使用相互的TLS身份验证(mTLS),添加飞行加密并使用户能够授权跨基础架构的每个调用。

Istio的目的是,消除了开发人员如何保护实例之间通信的担心,控制哪个实例可以与哪些实例进行通信以及执行诸如金丝雀部署之类的运维能力,如果是发布特定微服务的新版本代码,最初只更新实例的一部分,直到您对新代码可靠运行感到满意才会全部更新。

服务网格只是网络管道上方的抽象层,因此假设前提是已经为每个容器实例配置了网络接口、IP地址和其他网络属性。这通常意味着,无论何时创建新的容器实例,部署微服务还将需要一个单独的工具来自动化网络配置,这是Docker和Kubernetes用武之地,因此,Docker+Kubernetes是使用Istio服务网格的前提。

Istio也获得了业内其他公司的支持,尤其是Red Hat,几年前它以Docker容器和Kubernetes为基础重新设计了OpenShift应用程序平台。

应该注意的是,其他服务网格平台已经存在,例如开源的Linkerd或Conduit,而微软有一项服务,它称之为Azure Service Fabric Mesh,目前作为其云平台的技术预览。

结束语
新技术的出发展不断解决你认为早已经解决的问题,如果说Istio是对SOA的ESB替代,那么Knative将可能是对SOA的BPM替代。

主要参考:
Istio Aims To Be The Mesh Plumbing For Containeriz

[该贴被banq于2018-08-17 22:12修改过]