查看下篇文章,点击这里。
一、服务网格简介
在云原生应用的早起,我们大多使用的是单体应用,将所有业务相关的应用部署、打包,然后进行发布,这种架构下,随着业务越来越复杂,应用之间越来越不可拆分,不同模块的可扩展性、伸缩性非常差。为了解决以上问题,我们提出了微服务架构,它是依据功能将服务划分成不同的应用单元和业务组件,组件之间通过API的方式相互调用,同时相互独立的组件可以做水平和垂直的扩容,提升了架构的可伸缩性。
然而,微服务架构带来了良好的伸缩性的同时也提升了运维的复杂性,进而诞生了容器与编排架构,容器技术可以自定义软件运行的基础环境,方便进行资源的隔离,而容器的编排技术可以将应用编排到不同的机器上,提供用于基于容器应用可扩展性的基本机制。在基于容器部署的软件环境基础上,我们需要一个基于容器的、用于服务治理的框架,于是诞生了服务网格。不同的服务有着各自的特点,各自的优劣对比如下图所示。
如果不使用网格服务而使用微服务架构,那么在容器环境下的微服务治理有多难呢?难点主要包括:
- 通信链路复杂,难以定位微服务问题;
- 一些服务功能难以实现,比如服务发现、负载均衡、故障容忍、端到端监测、动态路由等;
- 服务功能以代码库的方式紧耦合在应用程序本身中,容易引发版本冲突问题;
- 不同编程语言的解决方案差异大、缺少共性。
在服务网格中,通过Sidecar代理处理以上问题,堪称容器微服务流量管控“神器”,同时将这些功能标准化,应用程序开发人员可以专注于业务逻辑的实现。形象的来讲,Sidecar就像下图所示的摩托车的边车一样,服务去哪,Sidecar就去哪,比如在目前非常出名的服务网格Istio中,它的Sidecar就是一个C++编写的Envoy组件,服务网格通过这种方式,很好的实现了包括服务发现、可观测性、限流等各种服务功能。
通过第三方去做服务治理的传统方式与服务网格的区别如下图所示。在传统方式中我们通过Library或者其他方式将服务治理能力集成到应用中,但是如果Library的版本不同或者语言框架不同的时候服务治理能力就会出现参差不同的差异,给版本升级带来巨大的不便;而在服务网格中,我们用Sidecar代理的方式来解决这个问题,使得服务能力的提升或升级独立于应用本身。
此外,由于我们使用了Sidecar代理方式,方便了我们进行统一的管理。比如Istio中的Pilot组件不断地去读取用户提交到数据库中的规则配置,然后再和每个服务的Sidecar代理进行信息交互,实现整个平台的统一管理。通过服务网格,我们将这种服务治理的能力统一化、标准化,主要功能服务以及特性如下图所示。
二、阿里云服务网格(ASM)
(一)ASM简介
服务网格提供了强大的功能同时,也带来了如下图所示的更多复杂性,首要的是部署复杂性,而其复杂性也成为了一部分用户望而却步的原因。
为了解决其部署复杂性的问题,阿里云发布了相关产品:阿里云服务网格(Alibaba Cloud Service Mesh,简称 ASM)。阿里云服务网格提供了一个全托管式的服务网格平台,兼容于社区 Istio 开源服务网格,用于简化服务的治理,包括服务调用之间的流量路由与拆分管理、服务间通信的认证安全以及网格可观测性能力,从而极大地减轻开发与运维的工作负担。从下图可以看到阿里云的容器团队之前已经提供了ACK、ASK和ACR等服务,ASM是这些服务之上的一个流量治理的平台。
ASM的架构如下图所示,它其实是一个托管式的、统一的流量管理和服务治理的平台,百分百兼容社区的Istio,接入了阿里云的一些能力,比如安全能力、日志能力、分布式追踪能力等,并且接入了云企业网,做到了不同网络之间的相互打通。
(二)ASM适用场景及优势
ASM有着强大、便捷的功能,那么ASM适用于哪些场景呢?当前,ASM适用的场景主要有:
- 多集群应用统一流量管理:对于部署在多地域、混合云多云、不同类型的K8s集群,提供一致的可见性和流量管理。
- 端到端可观测性:提供跟踪、监控和日志记录功能的优化整合,帮助用户深入分析网络及应用服务的性能表现和运行状况。
- 服务安全加固与灵活授权:通过mTLS以渐进方式逐步实现服务之间通信的安全,提供简单易用、基于角色的访问权限控制与自定义授权能力,支持所有变更操作可审计追踪。
- 应用容器化平滑上云:将线下环境存量应用迁移上云,通过部署和配置服务网格,将流量动态路由到线下旧版环境或线上新版环境,处理无状态服务迁移。
服务网格ASM与ACK Istio addon、云上自建Istio相比,三种方式在管控平面、用户成本、安全性等方面的对比如下图所示:
(三)ASM流量管理
如下图所示,ASM首先将数据分成控制面和数据面,数据面支持不同的代理服务,在控制层面可以为用户托管API Server访问入口、ETCO、Istio Operator等,实现流量和服务的统一管理。
并且在流量管理的策略上,ASM完全兼容Istio社区API,为用户提供更加便捷的服务。