当下流行的微服务运动让软件服务越做越小的同时,服务与服务之间的相互发现、依赖和调用成为了一个亟待治理的领域,在Java和多语言的世界中分别诞生出了很多的解决方案,在Java的世界里基于Spring Cloud和Dubbo框架的方案占据主流地位,而在多语言的世界中基于K8s的Istio是毫无疑问的明星,MSE和ASM是阿里云在Java和多语言领域的微服务治理解决方案。
微服务引擎(Microservice Engin)是一个面向业务主流开源微服务框架Spring Cloud和Dubbo的一站式微服务平台。MSE主要包括四部分功能:
- 服务治理、提供服务目录、服务测试、服务限流降级、无损下线、流量控制等能力,支持五年内的Spring Cloud和Dubbo版本的“零”改造接入。
- 服务注册、可在Zookeeper/Nacos/Eureka三种引擎中任选,相对于自建服务注册中心具有更高的可用性保障。
- 服务配置、提供全托管的Nacos服务,支持配置查询和版本管理,相对于自建具有更高的可用性保障。
- 服务网关、提供全托管的Zuul、Kong、Spring Cloud Gateway服务网关服务,可按需选择开通。
服务网格ASM(Alibaba Cloud Service Mesh)是一个全托管的服务网格平台,与社区Istio兼容,支持对混合云环境下的K8S集群进行应用服务流量统一管理,包括阿里云ACK(阿里云托管或专有Kubernetes集群)、ASK(阿里云Serverless Kubernetes集群)、ECS或IDC上的自建Kubernetes集群、第三方云上的Kubernetes集群等,和社区版Istio一样,ASM支持包括流量管理、安全审计、监控诊断等功能。
ASM将Istio的控制平面组件全部托管,从而降低使用和维护的复杂度,通过一个托管的ASM实例可以管理来自多个kubernetes集群的应用服务、还可以借助于ASM VM Proxy接管非kubernetes集群下应用。
Istio使用Kubernetes来存储配置数据,因此导致对Kubernetes环境的强依赖,为了让Istio的应用场景扩展到更广阔的领域,Istio社区提出了MCP(Mesh Configuration Protocal),定义了向Istio控制平台下发配置数据的标准协议。
基于MCP,MSE与ASM进行了打通,可以使用MSE对ASM下的非Java应用编写的服务进行服务治理,且无需修改现有应用代码,只要通过在目标集群安装MSE服务治理组件并提供AMS的实例ID,该集群下的应用即可接入MSE治理中心进行治理,目前支持对ASM下的服务进行查询和为其配置标签路由。
标签路由通过标签将一个或多个服务的提供者划分到同一个分组,从而约束流量只在指定分组中流转,实现流量隔离的目的。标签路由可以作为蓝绿发布、灰度发布等场景的能力基础。