随着微服务的日渐流行以及容器基础架构的逐步成熟,服务网格Service Mesh 正在吸引越来越多的架构师的关注,成为当下最炙手可热的技术之一,在Service Mesh的各种实现当中,Istio受到的关注最多。
阿里云基于Istio提供了ASM(阿里云服务网格服务),支持对多个K8S集群的统一管理。
(上图来自阿里云官网有关ASM的介绍)
除了支持阿里云上的K8S集群外,还支持对云下IDC的集群的统一管理。
(上图来自阿里云官网有关ASM的介绍)
这样一来通过ASM即可实现一个统一的混合云管控平台,在这样一个混合云中,ASM到底能够做哪些事情,能够做到什么程度还要去看ASM背后的Istio,Istio主要的功能包括:
- 流量管理、流量管理是Istio最重要的功能,包括服务的路由、流量的转移、服务限流降级等。
- 安全、安全方面的功能包括认证和授权。
- 控制策略、包括限流、黑白名单等。
- 观测、包括指标、日志、链路追踪等。
ASM/Istio实现流量控制的核心原理是通过容器组(POD)的Sidecar容器对服务的流量进行透明的代理和接管,从而将与业务逻辑无关的服务路由、请求、重试等功能从服务的代码中剥离。
和网络设备的实现类似,在服务网格中用于承载数据通信的部分被称为服务网格的数据平面,用于整体协调控制的部分被称为服务网格的控制平面。
在上图中有两个微服务,服务器A要调用服务B,服务A所在的容器通过同一个容器组(POD)中的Sidcar容器发起调用请求(这里的容器组可以看作一台服务器,容器组内的每一个容器可以看作是服务器上运行的一个进程),请求被路由到服务B所在的容器组,该请求被容器组的Sidecar容器接受后再转发给服务B所在的容器,这两个Sidecar容器可以看作我们经常使用的Nginx代理服务器,只不过更轻量和高效,Sidecar容器的控制和管理无需我们操心,由服务网格的控制平面自动完成,我们在部署服务A和服务B时也无需关注Sidecar容器的部署,部署也是Istio通过Kubernetes的自动注入机制自动完成。
透过控制平面和数据平面的相互协作,服务网格有关于流量管理、安全、控制、观测方面的功能都能够一一实现。
在Istio和服务网格出现之前,实现上述功能的方案还有类似于Spring Cloud这样的框架,而且Spring Cloud的成功案例多如牛毛,相对而言Istio的优势主要是能够使用除Java之外的语言来实现微服务,服务的实现语言可以根据需要自由选择。假如希望在一个项目中同时使用Spring Cloud和Istio则可以联合使用阿里云ASM和MSE(微服务引擎),通过相互的服务注册发现和路由来打通SpringCloud和Istio两个微服务治理体系。
(上图来自阿里云官网有关ASM的介绍)
以上就是阿里云ASM和服务网格的概要介绍,希望对大家有所帮助。