服务网格 ASM 年终总结:最终用户如何使用服务网格?

简介:本文不打算回顾 Istio 或是阿里云服务网格 ASM 的变化或趋势,我们来聊一聊阿里云 ASM 服务网格,它的最终用户是如何使用服务网格的。

作者:叶剑宏

背景

阿里云服务网格 ASM 于 2020 年 2 月公测,近 2 年的时间,已有大量用户采用其作为生产应用的服务治理平台。阿里云服务网格 ASM 基于开源 Istio 构建。同时,Istio 仍然年轻,2021 年我们看到 Istio 不少新的进展,eBPF、Multi-buffer、Proxyless 等,每一次 Istio 的变化都牵动人们的神经——是时候采用服务网格了吗?

本文不打算回顾 Istio 或是阿里云服务网格 ASM 的变化或趋势,我们来聊一聊阿里云 ASM 服务网格,它的最终用户是如何使用服务网格的。

为什么采用服务网格

服务网格的理念是将服务治理能力下沉到基础设施,让业务更加专注于业务逻辑。我们可以很轻松地举出服务网格带来的服务治理能力,比如流量管理、可观测性、服务安全通信、策略增强如限流和访问控制等。但是,最终用户真的需要这些功能吗?Istio 的这些能力真的满足生产要求吗?为了一两个功能引入服务网格是否值得大费周章? 

比如说流量管理,最受关注的是 Traffic Splitting,常用于灰度发布或者 A/B 测试。Istio 的功能设计非常简洁,但是默认无法实现全链路流量管理。如果没有在所有微服务拓扑节点里透传自定义的 Header 或标签,具有关联性的服务流量切割则完全不可能。 

比如是安全能力,采用传统手段进行大量微服务 TLS 认证几乎是 Impossible Mission,而 Envoy 提供的 mTLS 加密则非常轻松地完成了服务间加密通信,或者说零信任安全。但是,用户是否真的关心服务间安全,毕竟这些微服务大多运行在云上的一个 VPC 的一个 Kubernetes 集群里。 

比如可观测性,Istio 将 Metrics、Logging、Tracing 统一起来,可以很方便地获取微服务拓扑结构,快速地定位微服务问题。但是,Sidecar 无法深入进程级别,相关的 Metrics 和 Tracing 相比经典的 APM 软件实在相形见绌,无法真正有效地定位代码级别问题。 

最后策略增强比如限流能力,Istio 提供 Global Rate Limit 和 Local Rate Limit 限流能力,确实是大量面向 C 端用户应用的强需求。但是它真的能满足复杂的生产应用限流降级需求吗?

真正的生产环境各式各样,服务网格在落地过程中又会遭遇各种各样的挑战。最终用户最关心的服务网格的能力是什么,在落地过程中又有怎么的实践经验?

用户主要采用服务网格什么能力?

我先暂时不回答上面提出的疑问。我们来看看阿里云服务网格 ASM 用户主要使用服务网格的哪些能力,我相信读者会形成自己的答案。

流量管理

首先当然是流量管理,这是 Istio 最显著地提升应用发布幸福感的能力。阿里云服务网格 ASM 大部分的用户出于流量管理的需求选择了 ASM 服务网格。而流量管理主要应用在灰度发布或 A/B 测试。最常见的应用场景如下:

上图的灰度流量切换发生在 Ingress 网关上,服务内部在各自的 Namespace 里闭环,方案简单有效。缺点是每次灰度需要在灰度的 Namespace 里部署全量微服务。 另外一种朴素的想法是希望实现全链路灰度发布,我有时候喜欢称之为 Dark Release。什么是全链路灰度发布?如下图所示:

可以任意地灰度其中的一个或多个服务而不需要高成本地部署全量微服务。基于社区 Istio 的 Header-based traffic routing,可以实现全链路灰度发布,前提是在全链的每一个服务中,开发透传规定的自定义 Header。

这种方式显得稍费工夫,每个服务都需要侵入式的修改,落地过程中往往只有新的项目和应用能在一开始便如此设计。有没有替代方案?阿里云服务网格 ASM 提供了一种基于 Tracing 的全链路灰度发布方案。原理并不复杂,既然全链微服务需要有一个 header 或标签将服务请求关联性串联起来,traceid 显然是个现成的“连接器”。

这跟自定义 header 透传相比似乎有点显得“换汤不换药”,Tracing 接入一样需要代码侵入。但 Tracing 有开源的标准,实现 Tracing 的同时赋能了全链路流量管理能力,这是开源标准的力量。另外,如果是 Java 应用,阿里云 ARMS 提供了无代码浸入的 Tracing 接入能力,与 阿里云服务网格 ASM 配合即可实现完全无代码修改的全链路灰度发布。

我们再回到落地场景,ASM 用户里常常是中小规模的企业或应用能够建立完整的 Tracing 跟踪,反而是大公司应用众多,Tracing 链路断得稀碎,实在让人头疼。好在关联服务的灰度往往发生在“局部”内,局部内的服务链路完整已经可以满足灰度的要求。

南北流量管理

我们在上面讨论的主要还是东西向流量管理,而南北向流量管理是一个具有更丰富生态的领域。Solo 公司在这一领域的 Gloo Edge 和 Gloo Portal 堪称楷模,国内也有不少的基于 Envoy 或面向 Mesh 的 API 网关。Istio-ingressgateway 与 Lagacy API Gateway 有什么区别和联系?社区有非常多的讨论,我个人的观点是,原子能力上没有明显差别,只是面向的操作界面不同和目前生态不同。

有些用户采用阿里云服务网格ASM的原因其实并不是需要服务治理,而是借用 Istio-ingressgateway 的增强能力。Istio 的 Gateway、VirtualService 和 DestinationRule 定义显然比 Kubernetes Ingress 模型更加清晰,分层明确,再加上 Envoy 强大的扩展能力,Envoy 和 Istio-ingressgateway 在网关选型中逐渐受到青睐。举个简单的例子—— gRPC 负载均衡,Envoy/Istio 轻而易举实现,很多用户的 Istio 选型则由此出发。例如对 AI Serving 推理服务场景,服务链路不长,Sidecar 带来的延迟几可忽略。

Istio/Envoy 在网关上的扩展目前大多基于 Lua 或者 WASM,通过 Envoyfilter 可以实现非常多的自定义能力扩展。落地挑战也非常简单直接,用户说,臣妾不会写 Lua,更不会写 WASM 啊。云厂商说没关系,我来写啊,根据场景的扩展的东西写多了,就可以放在一块做个插件市场,按需选择。从今年的用户视角来看,WASM 知道的颇多,但应用起来仍然比较复杂。

举一个常见的应用场景——入口流量打标,或者流量染色。根据入口流量的特征,比如来源的私网或互联网、登录用户信息等进行流量打标。打标后的再进行流量分流或灰度发布。

还有一个场景值得补充,Egress 流量控制,不少对应用安全要求高的用户采用 Istio Egress 网关来控制应用七层可访问的范围。Network Policy 三四层易做,七层控制可考虑采用服务网格。

多语言服务治理

我们上面聊了一通 Istio 流量管理,似乎问题已经基本解决。但是人们经常忽略了一个潜藏的前提 —— 流量管理能力生效是需要服务采用 Kubernetes 服务发现的,或者说,服务间调用需要带上 Host 的 Header 或访问 Kubernetes clusterIP。现实世界中,ACK 上运行着大量采用注册中心作为服务发现的微服务应用,并且存在多语言。我们发现多语言越来越普遍,而这往往是业务快速发展的结果。为了快速满足需求,不同项目不同团队选择了不同的语言开发,服务治理需求随后才提上日程。这些微服务可能是采用 ZK、Eureka、Nacos 的 Dubbo 或 Spring Cloud 微服务,或者是采用 Consul、ETCD 和 Nacos 的 Go、C++ 、Python 和 PHP 微服务应用。这些服务从注册中心获取实例 Pod IP 列表,通过 Envoy是成为 PassthroughCluster,直接绕过了 Envoy filter chain,流量管理和其他 Istio 能力则无从谈起。

于是,Istio 从诞生之日起许诺的多语言无侵入微服务治理在现实世界中落地之路中布满荆棘。不同注册中心的微服务和注册到 Kubernetes 和 Pilot 的微服务如何能愉快地玩耍?

一个简单朴素的方案是,把注册中心拆掉,采用 Kubernetes CoreDNS 服务发现,全面用 Service Mesh。ASM 用户中采用这种方案的常常是新开发的应用或者老应用重构、服务链路较短的应用。但非常多的应用如果采用这种方案,将要考虑开发的侵入修改,应用的平滑迁移等挑战,在实际推行中会面临较多的阻碍。

应该保留原来的应用架构还是面向 Kubernetes 设计?向左走,向右走?It’s a Question。

对于需要保留注册中心的场景,阿里云设计了 2 个方案:服务发现同步和服务发现拦截

什么是服务发现同步?既然问题根源在同时存在 Nacos/Consul 注册中心和 Pilot 注册,那就把它们互相同步一下就好了嘛,Nacos/Consul 通过 MCP over xDS 同步到 Pilot,让 Mesh 侧服务能发现左侧的服务。如果左侧的服务希望以保持原来的方式访问 Mesh 服务,再增加同步组件将 Pilot 注册信息同步到 Nacos。这个方案稍显复杂,好处是尽量保持原有的架构和开发方式。结合阿里云 MSE 可以实现对 Java 侧微服务的服务治理。 

我们再来看另外一个方案——服务注册拦截,或者称之为全 Mesh 方案。

原理非常简单,将如 Nacos 的返回注册实例 IP 信息由 Sidecar 拦截篡改为 Kubernetes clusterIP,使得 Envoy filter 链重新生效。或者可以总结为 “Keep it, But ignore it”。全 Mesh 方案好处也显而易见,通过统一的 Mesh 技术栈(包括数据面和控制面)管理所有的微服务,方案清晰,对开发无感。 

目前这 2 个方案都在阿里云用户中获得了落地实践,到底哪一个更适合你的应用,可能就得具体分析了。

服务安全

提到 Istio 提供的安全能力,首先便是 mTLS 证书加密。Istio 默认 Permissive 策略下,同一个网格内的所有服务都自动获得 mTLS 加密能力(有些用户似乎没有意识到已经默认开启了)。国内用户几乎不太关注这项能力,但 ASM 海外用户对 mTLS 却是强需求。一位海外用户的理解是,一个 Istio 或 Kubernetes 集群的节点可能分布在云上多个 AZ 中,而公有云的 AZ 分布在不同机房中,跨机房流量就可能暴露在非云的管理者里而被嗅探到,同时也可能面临来自机房管理者和运维人员的窃取风险。海外用户普便更重视安全,这也算是中外的“文化”差异了。

另外一个被较多用户提及的是自定义外部授权。Istio 默认支持的认证授权比较简单,比如基于 sourceIP、JWT 等,更复杂的授权则通过 Istio 的自定义外部授权能力进行扩展支持。入口网关处的认证授权容易理解,Mesh 范围内任意服务的授权这项复杂的工程在 Istio 的条件下轻松简化了很多。

多集群服务网格

Istio 原生支持多 Kubernetes 集群,阿里云服务网格 ASM 产品在多集群上做了简化接入。为什么采用多集群?从目前 ASM 用户来看,主要是 2 种:一是多个业务中台的统一 Mesh 管理,业务中台分别部署在不同的 Kubernetes 集群,相对来说比较独立,业务中台之间存在直接相互调用。通过 Mesh 能进行跨业务中台的服务治理;其二是跨 AZ 或 Region 的双集群应用容灾。通过 Istio 的 Locality Load Balancing 可以实现跨 AZ 或 Region 的容灾切换。

可观测性

可观测性指涉监控,当然可观测性在云原生语境下含义更加丰富,更强调提前感知和主动干预。Istio 对可观测性的增强主要在提供了丰富的协议层 metrics 和服务 sidecar 日志。举个例子,circuit breaking,有用户会觉得网格的 sidecar 是个黑盒,里面发生了什么也不太清楚,但其实 Envoy 对熔断过程都透出了清晰的指标。不过我们发现大量用户对 Istio 和 ASM 提供的丰富的 metrics 感知不多,也经常没有很好地利用起来。这可能是用户 Istio 采用阶段或功能优先级导致的,更可能的原因是作为云厂商没有把产品可观测性做好。我们仍需努力。

另外,Mesh 在应用层面统一了 Metrics、Logging 和 Tracing,越来越多用户采用 Grafana 接入这 3 类数据源进行统一的可观测性分析。

策略增强

策略增强部分我们主要来看看限流能力。社区 Istio 提供 Global Rate Limit 和 Local Rate Limit,Global Rate Limit 需要提供统一的 Rate Limit Server,Local Rate Limit 则通过 EnvoyFilter 下发到 Sidecar 本地配置。Global Rate Limit 的问题在于依赖集中式限流服务,并在每一个服务 Sidecar 拦截过程中引入新的延迟,而 Local Rate Limit 则缺乏全局判断,并且配置 EnvoyFilter 不便。我们认为 EnvoyFilter 在生产环境的引入是应该非常谨慎的,Envoy 版本更新很容易造成不兼容。

阿里云服务网格 ASM 基于 Envoy filter 机制集成了 sentinel filter,sentinel 本是阿里巴巴开源的限流熔断项目,如今被集成到 Envoy 中,提供了更加丰富且面向生产的性能和策略增强。支持流控,排队等待,熔断,降级,自适应过载保护,热点流控和可观测能力。

服务网格生产实践

从生产化应用来看,Envoy 和 Pilot 的性能都不错,在中小规模场景(1000 pod)下问题不大。中大规模(1000 pod 以上)则对相应配置细节需要做相应的优化。可观测性的接入,Envoy Sidecar logging 对性能消耗不大,metrics 开启在大规模下可能引发 Sidecar 内存升高,tracing 采样率在生产环境中需要有一定控制。

大规模下的 xDS 配置加载需要有一定的手段控制,开源有一些方案,ASM 也提供了基于访问日志分析自动推荐的 Sidecar 配置方案,使对应工作负载上的 Sidecar 将仅关注与自己有调用依赖关系的服务信息。 

在 Istio 的一些功能性配置上,也有一些需要注意的内容,比如重试策略的 timeout 和 backoff delay 的关系,以及惊群效应的避免。

另外一些需要注意的是 Istio-ingressgateway 在高并发场景下的专有部署和配置优化,Sidecar 的优雅上线和下线等。这里就不再细述。

服务网格的未来?

阿里云服务网格 ASM 作为托管服务网格的先行者,已经收获了大量的用户落地,这些用户更加坚定了我们做这个产品的信心。服务网格不再是成堆的 buzzword,而是真真实实的生产化应用,处理一个又一个的琐碎的技术问题。回到本质,服务网格还是要解决业务问题。

服务网格社区在蓬勃发展,ASM 产品仍有需要完善的地方,但它已经在市场验证中获得了前行的力量。服务网格的史诗故事才刚刚开始。

原文链接

本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 nginx 轻松管理 kubernetes 资源文件

作者 | 江小南来源 | 江小南和他的小伙伴们引言nginx在传统的使用中,一般是作为反向代理或者负载均衡。但是它还有一个很优秀的能力常被人们所忽略。在kubernetes部署应用的过程中,会有大量的yaml等资源需要维护。集群内部维护起来不太方便,特…

Dubbo-go 优雅上下线设计与实践

简介:在分布式场景下,微服务进程都是以容器的形式存在,在容器调度系统例如 k8s 的支持下运行,容器组 Pod 是 K8S 的最小资源单位。随着服务的迭代和更新,当新版本上线后,需要针对线上正在运行的服务进行替换…

华为鸿蒙网络,这回真翻脸了?被谷歌“除名”,官宣鸿蒙手机版,华为:走着瞧...

与电脑系统类似,手机操作系统如今也已经被安卓和苹果的iOS瓜分殆尽,根据数据,安卓和iOS已经占据了手机操作系统99%以上的市场份额。不过由于iOS是苹果自研的封闭系统,所以在智能手机这么多年发展下来,也就自然地形成了…

SaaS服务的私有化部署,这样做最高效|云效工程师指北

简介:为了能够有效且高效地同时管理SaaS版本和私有化版本的发布过程,云效团队也结合云原生的基础设施和标准化工具(比如helm)进行了一系列的探索和实践,并将其中一些通能的能力进行了产品化。本文从问题本身出发&#…

阿里 BladeDISC 深度学习编译器正式开源

简介:随着深度学习的不断发展,AI模型结构在快速演化,底层计算硬件技术更是层出不穷,对于广大开发者来说不仅要考虑如何在复杂多变的场景下有效的将算力发挥出来,还要应对计算框架的持续迭代。深度编译器就成了应对以上…

浪潮“源”AI大模型如何求解数学应用题

编辑 | 宋慧 供稿 | 浪潮 “源1.0”大模型是浪潮信息发布的中文巨量模型,参数量高达2457亿,在中文语言能力理解和生成评测基准CUGE总榜中取得榜首,并获得语言理解(篇章级)、语言生成、对话交互、多语言、数学推理等5…

Quick BI产品核心功能大图(五)移动端:让数据在更多业务场景中流通

简介:将数据更好的融入日常工作中,一个重要的前提条件就是多端多渠道的数据触达和办公协同能力。 Quick BI凭借移动端交互体验,帮助用户随时随地便捷查看报表,并通过在线协同方式,追踪策略的执行落地。让数据在企业中流…

html5点击切换选项卡,简单纯js实现点击切换TAB标签实例

一个不需要jQuery实现的tab选项卡切换效果,代码简洁易用。默认是鼠标悬停显示tab效果,可将其中的onmouseover 修改为 onclick 点击效果使用方法:1、将附件中的index.html中的css样式以及代码部分拷贝到你需要的地方即可相关链接:几…

Dataphin产品核心功能大图(六)发布中心:生产和开发隔离模式下的保护伞

简介:Dataphin,用中台方法论打造企业级好数据。Dataphin是阿里巴巴集团OneData数据治理方法论内部实践的云化输出,一站式提供数据采、建、管、用全生命周期的大数据能力,以助力企业显著提升数据治理水平,构建质量可靠、…

当英特尔 OpenVINO 遇上微软 Azure,AI在边云协同的新方案

作者 | 宋慧 出品 | CSDN云计算 数字化浪潮下,越来越多的终端 IoT 设备接入网络,边缘的数据量与分析需求也随之增加。根据 Eclipse 对边缘负载的分析显示,人工智能是边缘计算中占比最高的负载之一,高于控制逻辑、数据分析等负载所…

工程设计论——如何写好工程代码

简介:设计是在对需求的认知不完整的情况下,对被设计对象进行求解的一个过程。这就迫使我们需要一边认识被设计对象,一边进行求解。为了并行化地进行这一过程,也为了使得对被设计对象地认识有初步的研究工具和基础,我们…

阿里云能耗宝即将发布,助力中小企业绿色升级,参与碳中和万亿市场

阿里云能耗宝新品发布会由阿里云-企业云服务-能耗云团队主办,将于2022年2月23号举行,本期发布会将为企业呈现“双碳”背景下的一站式服务。通过阿里云能耗宝,企业如何更加高效便捷地核算碳排放量、制定节能降碳方案、规划碳中和路径。 2020年…

鸿蒙关键技术研究,鸿蒙内核源码分析(静态链接篇) | 完整小项目看透静态链接过程 | 百篇博客分析HarmonyOS源码 | v54.02...

百篇博客系列篇.本篇为:下图是一个可执行文件编译,链接的过程.本篇将通过一个完整的小工程来阐述ELF编译,链接过程,并分析.o和bin文件中各区,符号表之间的关系.从一个崭新的视角去看中间过程,阅读之前建议先看准备工作先得有个小工程,麻雀虽小,但五脏俱全,标准的文件夹和Makefi…

敏捷研发项目,我们该如何度量?

简介:作为项目负责人,我们如何及时获悉当前项目的最新进展和问题,了解项目的整体状况?作为项目管理人员,我们如何跟进和推进项目的正常进行?如何借助云效效能洞察平台 Insight,帮助项目管理者及…

iofsstat:帮你轻松定位 IO 突高,前因后果一目了然 | 龙蜥技术

简介:磁盘被打满到底是真实的业务需求量上来了呢?还是有什么野进程在占用 IO? iofsstat 帮你精准定位。 编者按:sysAK(system analyse kit),是龙蜥社区系统运维 SIG 下面的一个开源项目&#x…

html视频标签不显示,HTML视频标签无法正确显示视频

这里是我的JS:function video() {navigator.device.capture.captureVideo(onSuccess, onFail,{limit: 1,duration: constants.MAX_DURATION_OF_VIDEO});function onSuccess(mediaFiles) {console.log("MEDIA FILE");console.log(mediaFiles);var i, path,…

晋中计算机专业对口大学,山西晋中计算机专业好就业吗?,计算机专业

【山西大众技工学校】将学生的日常管理、学习成绩、操行考核融为一体,结合校园全封闭管理形成一套完整的学生管理办法,做到每个环节都有标准与要求,每个过程都有管理和考核。山西晋中计算机专业好就业吗?另一种称为“编译”&#…

实战 Kubectl 创建 Deployment 部署应用

作者 | 洲的学习笔记来源 | CSDN博客本篇文章主要是实战 Kubectl 创建 Deployment 部署应用。通过本期文章:我们将学习创建在 Kubernetes 集群上运行应用程序的 Deployment 所需的最常见的 Kubectl 命令。用 Kubectl 创建 Deployment当运行 Kubernetes 集群&#xf…

性能提升一倍,云原生网关支持 TLS 硬件加速

简介:业界在优化 HTTPS 的性能上也做了诸多探索,传统的软件优化方案有 Session 复用、OCSP Stapling、False Start、dynamic record size、TLS1.3、HSTS 等, 但软件层面如何优化也无法满足流量日益增长的速度,加上 CPU 摩尔定律已入暮年&…

Linux 中如何检查开放的端口

作者 | 刘光录来源 | TIAP无论你的服务器是用的Linux还是桌面系统,了解系统开放的端口,和正在使用的端口,在各种情况下都会有所帮助。比如,如果你的服务器中正在运行着 Apache或者Nginx,那么其端口应该为80或者443&…