本文整理自阿里云高级技术专家王夕宁撰写的《Istio服务网格技术解析与实战》一书以及阿里云服务网格产品ASM最新发布内容,针对服务网格的未来发展、服务网格技术带来的优势以及对业内首个全托管Istio兼容服务网格产品ASM进行了详细的介绍。
云计算已成为企业应用程序的主要范式。随着企业使其计算和网络架构现代化,云原生架构是主要的目标环境。云原生开源技术圈流行一句话:“infrastructure should be boring”,即IT基础设施相关技术逐渐趋于稳定。Open Container Initialitive(简称OCI)组织的出现,以及以containerd/runc为代表的基础容器运行时参考实现的广泛采用,标志着云原生时代的第一层基础设施的稳定化。而Kubernetes在容器编排领域的胜出,则代表了云原生时代的第二层技术设施的稳定化。
这些底层技术的稳定使得生态系统内的其他厂商有信心在相关技术上继续投入,同样也使得终端用户有信心尝试和采用云原生、微服务技术,更为重要的是为云原生生态内上层技术的繁荣带来强大的助推作用。
以Kubernetes API为基础,在CNCF社区中出现了大量Kubernetes-Native的上层技术,包括Service Mesh类的Istio、服务无计算/函数计算类的Knative项目、快速部署管理深度学习框架的KubeFlow项目、复杂应用定义与管理类的Ksonnet、Helm项目等。这些上层技术的出现使得云原生可以被应用到更为广泛的场景中,除了常见的无状态/有状态应用之外,也包括无服务器、AI、大数据等多种场景,并反过来推进了Kubernetes等云原生技术的进一步推广。
在云原生行业服务网格Service Mesh计划的进展中,最值得注意的是,Istio、Envoy和LinkerD将提升这些项目在企业多云(multi-cloud)计算中的显著性。到2020年,许多企业将开始把服务网格纳入其努力的核心,即在其分布式计算环境中,在容器化本地资源和越来越多的公有和私有云结构之间搭建灵活的桥梁。云提供商将加强对托管服务的支持,这些托管服务简化了通过网格和中心辐条架构对数千个虚拟私有云和内部网络的互联和管理。毫无疑问,服务网格将成为多云领域中最主要的网络管理底板。
服务网格与微服务框架
针对“服务网格”这个相对比较新的技术术语,很多人以为它就是一个新的微服务框架,譬如说以当前最为流行的社区开源服务网格Istio为例,它与已经存在的微服务框架如Dubbo、Spring Cloud等相比,服务网格其实是一种不同的架构体系。虽然两者所解决的问题有些是类似的,譬如都会去解决服务架构中分布式特点带来的复杂性问题,但是两者解决这些问题的方式手段是不同的。
具体来说,当前服务网格技术包含了以三个特点:
服务治理能力Sidecar化通过Sidecar机制将服务治理功能标准化、统一化服务治理能力的可扩展性服务治理能力Sidecar化
在服务网格技术使用之前,把一个单体应用程序向分布式的微服务架构进行改造,通常来说,服务治理逻辑的实现往往是以代码库的方式构建在应用程序本身中,代码库中包括了服务发现、熔断、限流等功能,在不同的应用程序中的代码库的版本也可能不同,不同的情况下也可能会带来冲突问题。此外,代码库的版本一旦变更,即使应用逻辑并没有任何变化,整个应用也要随之全部变更。而通过把这些服务治理的能力Sidecar化,就能够把服务治理的能力与应用程序本身进行解耦,可以较好地支持多种编程语言、并且不需要依赖于某种特定技术框架。一方面,针对Sidecar代理的生命周期管理和针对应用程序本身的生命周期管理可以独立,提升了应用管理和运维管理的灵活性;另一方面,与传统的SOA架构相比,这种去中心化的架构,有利于提升系统的可伸缩性。
通过Sidecar机制将服务治理功能标准化、统一化
随着Sidecar代理功能的增强,原本在代码库中包含的功能逐渐地下沉到Sidecar代理中,这些功能包含了服务治理中需要的诸如流量管理、熔断、重试、客户端负载均衡的能力、安全以及可观测性能力等。这些能力的标准化、统一化,可以解决复杂系统中微服务实现面临的差异大、缺少共性的问题,可以很好地支持不同的编程语言实现应用服务的治理。
与此同时,容器编排技术的更加成熟,加速了Sidecar代理的普及与使用的便捷性。试想一下,如果每一个Sidecar代理都需要手工去维护注入、去管理它的生命周期,那它的价值与带来的复杂性相比,就显得比较单薄。Kubernetes是一个出色的容器部署和管理平台,提供了一系列的API可以支持很自然的扩展,通过这些机制,Sidecar代理可以在应用程序的容器启动时自动注入到对应的Pod中。
服务治理能力的可扩展性
尽管Sidecar代理已经把服务治理过程中常用的一些功能进行了封装实现,但它的可扩展能力必须具备,譬如如何与已有的后端系统做对接,如何与日志系统、监控系统、授权系统对接,如何解决用户的一些特定需求。这个时候,一个Sidecar代理的可扩展性显得尤为重要,而且在一定程度上会影响Sidecar代理的普及。
在Istio1.5之前的架构中,对Sidecar能力的扩展主要集中在Mixer组件上。注入了Sidecar代理的每个服务到服务的连接都需要经过Mixer,以进行指标metrics数据的上报和授权检查,这样一来会导致服务之间的调用延迟更长,伸缩性也变差。同时,Envoy要求使用代理程序的编程语言C++编写,然后编译为代理二进制文件。对于大多Istio用户而言,这种扩展能力具有一定的挑战性。
而在采用了新架构之后,Istio使用WebAssembly技术将其扩展模型与Envoy进行了合并。WebAssembly支持几种不同语言的开发,然后将扩展编译为可移植字节码格式。这种扩展方式既简化了向Istio添加自定义功能的过程,又通过将决策过程转移到代理中而不是将其种植到Mixer上,减少了延迟。这里面的一个典型例子就是原本在Mixer telemetry v1中的prometheus扩展插件,在Istio 1.5新的架构下,Istio标准指标由Envoy代理直接导出,遥测组件被实现为Proxy-wasm插件。
服务网格下的控制平面与数据平面
在云原生模型中,一个应用程序可能会包含数若干个服务,每个服务又有数百个实例构成,那么这些成百上千应用程序的Sidecar代理如何统一管理,这就是服务网格中定义的控制平面部分要解决的问题。作为代理,Envoy非常适合服务网格的场景,但要发挥Envoy的最大价值,就需要使它很好地与底层基础设施或组件紧密配合。Envoy构成了服务网格的数据平面,Istio提供的支撑组件则是创建了控制平面。
这些Sidecar代理形成一个网状的数据平面,通过该数据平面处理和观测所有服务间的流量,数据平面扮演了一个用来建立、保护和控制通过网格流量的角色。控制平面就是负责数据平面如何执行的管理组件,是服务网格的大脑,并为服务网格使用人员提供公开API,以便较容易地操纵网络行为。
如何简化这些复杂的配置管理、支持不同类型的基础设施?
服务网格技术的确带来很多优势,那么它使用起来的情况如何呢?下图中描述了Istio的架构和组件关系,无论是从控制平面还是数据平面来说,它的复杂配置是用户经常遇到的一些挑战。特别是在支持多集群、如何支持用户自建的IDC内的集群、如何支持非容器化应用的统一管理,这些基本成为了用户使用服务网格技术的阻碍。
为了解决这些问题,阿里云服务网格产品ASM通过全部托管控制平面的组件,来降低用户使用的复杂度,用户只需要专注于业务应用的开发部署。在托管模式下,保持与Istio的兼容,支持声明式API定义灵活的路由规则,支持多个Kubernetes集群的统一流量管理。在安全方面,可以灵活启用或者禁用双向TLS认证,整个网格内的安全配置可以动态生效;在多集群模式下,用户也不需要去自行管理配置,这些事情都会交给托管平台来管理。
服务网格ASM产品架构
作为业内首个全托管Istio兼容的服务网格产品ASM,一开始从架构上就保持了与社区、业界趋势的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立。ASM产品是基于社区开源的Istio定制实现的,在托管的控制面侧,Istio的核心组件Pilot组件和安全citadel组件继续保留使用,用于支撑精细化的流量管理和安全管理。Mixer组件由于前面提到的一些性能问题就没有引入,而是采用了在数据面侧直接对接的方式来支持这些能力,这也是跟新的Istio架构吻合的一点。通过托管模式,解耦了Istio组件与所管理的K8s集群的生命周期管理,使得架构更加灵活,提升了系统的可伸缩性。在深入分析服务网格方面,提供了网格诊断能力,把过去一年多来客户遇到的问题以及如何解决这些问题的手段变成产品能力。
在扩展与集成方面,ASM产品整合阿里云服务包括可观测性服务、网络互连CEN能力等,同时也优化整合了社区开源软件包括OPA的支持、授权服务的定制化能力等。此外,随着Isito1.5新架构的优化,将WebAssembly技术引入服务网格,集合WebAssembly技术的优势,使得ASM架构成为:托管的高可用弹性控制平面 + 可扩展的插件式的数据平面。
在数据平面的支持上,ASM产品可以支持多种不同的计算基础设施,这包括了阿里云ACK 集群、后续跟进ASK集群、ECS虚拟机的支持,此外,ASM也很快就推出一个支持多云混合云的能力,能够针对外部的K8s集群进行支持,不论这个集群是在用户自建的IDC机房,还是在其他的公有云之上,都可以通过ASM进行统一的服务治理。
更多关于服务网格Istio技术内容,推荐阅读《Istio服务网格技术解析与实战》。
作者简介:
王夕宁 阿里云高级技术专家,阿里云服务网格产品ASM及Istio on Kubernetes技术负责人,专注于Kubernetes、云原生、服务网格等领域。曾在IBM中国开发中心工作,担任过专利技术评审委员会主席,作为架构师和主要开发人员负责或参与了一系列在SOA中间件、云计算、IoT等领域的开发工作,拥有40多项相关领域的国际技术专利。
举报/反馈

科技观察说

7.9万获赞 95.6万粉丝
观察科技,体验精彩!
关注
0
0
收藏
分享