低复杂度 - 服务网格的下一站

20c824d3ae031c37af0f4e3cb7afc411.gif

作者 | Addo Zhang

来源 | 云原生指北

译者:

作为一个曾经在新造车公司的基础架构团队任职,为支持公司的“互联网基因”和“数字化转型”落地了云原生基础设施平台,并在尝试采用服务网格未成的我来说,看到这篇文章深有感触。尤其是文中所说的“人少,问题多,需要快速输出价值”,直戳到了痛处。有限的人手有限的时间,我们需要将大部分精力集中在解决成熟度曲线较低的基本问题上,要想很好的运行复杂的系统是非常困难的。

服务网格是一个新的基础设施层,可以承载很多的功能,未来还会有更大的想象空间和光明的未来。

以上的种种原因,也促使我后来选择进入一家提供服务网格的产品企业,也希望服务网格可以被更简单的使用。

“道阻且长,行则将至!”

本文翻译自 Chris Campbell 的 How Unnecessary Complexity Gave the Service Mesh a Bad Name[1]


关键要点

•采用服务网格有巨大的价值,但必须以轻量级的方式进行,以避免不必要的复杂性。•在实施服务网时,要采取务实的方法,与技术的核心功能保持一致,并小心干扰(译者:注意力的分散)。•服务网格的一些核心特性包括标准化监控、自动加密和身份识别、智能路由、可靠的重试和网络可扩展性。•服务网格可以提供强大的功能,但这些功能会分散本应对核心优势的关注,并且这些功能也不是实施服务网格的主要原因。•在初始实施服务网格时没有必要去关注那些明显会分散注意力的功能,比如复杂的控制平面、多集群支持、Envoy、WASM 和 A/B 测试。


服务网格是 Kubernetes 世界中的一个热门话题,但许多潜在的采用者已经有些失望了。服务网格的落地受到压倒性的复杂性和看似无穷无尽的供应商解决方案的限制。在我亲自浏览了这个领域之后,我发现采用服务网格具有巨大的价值,但它必须以轻量级的方式完成,以避免不必要的复杂性。尽管普遍存在幻灭感,但服务网格的未来依然光明。

在工作中学习

我进入服务网格的世界始于我在一家老牌的财富 500 强技术公司担任云计算架构师的角色。在开始我们的服务网格之旅时,我身边有许多强大的工程师,但大多数人几乎没有云计算开发经验。我们的组织诞生于云计算之前,完全实现云计算的价值需要时间。我们的传统业务线主要集中在技术栈的硬件元素上,云计算的决策最初是由为运送硬件或为该硬件提供固件和驱动程序而开发的流程驱动的。

随着该组织经历其“数字化转型”,它越来越依赖于提供高质量的软件服务,并逐渐开发出更好的方法。但作为云计算架构师,我仍在为优先考虑硬件的业务流程,以及具有不同技能、流程和信念的工程团队导航。随着时间的推移,我和我的团队在将 .NET 应用程序迁移到 Linux、采用 Docker、迁移到 AWS 以及与之相关的最佳实践(如持续集成、自动化部署、不可变基础设施、基础设施即代码、监控等)方面变得熟练并成功。但挑战依然存在。

在此期间,我们开始将我们的应用程序拆分为一组微服务。起初,这是一个缓慢的转变,但最终这种方法流行起来,开发人员开始更喜欢构建新的服务而不是添加到现有服务。我们这些基础设施团队的人把这看作是一种成功。唯一的问题是与网络相关的问题数量激增,开发人员正在向我们寻求答案,而我们还没有准备好有效地应对这种冲击。

服务网格的援救

我第一次听说服务网格是在 2015 年,当时我正在研究服务发现工具并寻找与 Consul 集成的简单方法。我喜欢将应用程序职责卸载到“sidecar”容器的想法,并找到了一些可以帮助做到这一点的工具。大约在这个时候,Docker 有一个叫做“链接”的功能,让你可以将两个应用程序放在一个共享的网络空间中,这样它们就可以通过 localhost 进行通信。此功能提供了类似于我们现在在 Kubernetes pod 中所拥有的体验:两个独立构建的服务可以在部署时进行组合以实现一些附加功能。

我总是抓住机会用简单的方案来解决大问题,因此这些新功能的力量立即打动了我。虽然这个工具是为了与 Consul 集成而构建的,但实际上,它可以做任何你想做的事情。这是我们拥有的基础设施层,可以用来一次为所有人解决问题。

这方面的一个具体例子出现在我们采用过程的早期。当时,我们正致力于跨不同服务的日志标准化输出。通过采用服务网格和这种新的设计模式,我们能够将我们的人的问题——让开发人员标准化他们的日志——换成技术问题——将所有流量传递给可以为他们记录日志的代理。这是我们团队向前迈出的重要一步。

我们对服务网格的实现非常务实,并且与该技术的核心功能非常吻合。然而,大部分营销炒作都集中在不太需要的边缘案例上,在评估服务网格是否适合你时,能够识别这些干扰是很重要的。

核心功能

服务网格可以提供的核心功能分为四个关键责任领域:可观察性、安全性、连接性和可靠性。这些功能包括:

标准化监控

我们取得的最大胜利之一,也是最容易采用的,是标准化监控。它的运营成本非常低,可以适应你使用的任何监控系统。它使组织能够捕获所有 HTTP 或 gRPC 指标,并以标准方式在整个系统中存储它们。这控制了复杂性并减轻了应用程序团队的负担,他们不再需要实现 Prometheus 指标端点或标准化日志格式。它还使用户能够公正地了解其应用程序的黄金信号[2]

自动加密和身份识别

证书管理很难做好。如果一个组织还没有在这方面进行投入,他们应该找到一个网格来为他们做这件事。证书管理需要维护具有巨大安全隐患的复杂基础设施代码。相比之下,网格将能够与编排系统集成,以了解工作负载的身份,在需要时可以用来执行策略。这允许提供与 Calico 或 Cilium 等功能强大的 CNI 提供的安全态势相当或更好的安全态势。

智能路由

智能路由是另一个特性,它使网格能够在发送请求时“做正确的事”。场景包括:

1.使用延迟加权算法优化流量2.拓扑感知路由以提高性能并降低成本3.根据请求成功的可能性使请求超时4.与编排系统集成以进行 IP 解析,而不是依赖 DNS5.传输升级,例如 HTTP 到 HTTP/2

这些功能可能不会让普通人感到兴奋,但随着时间的推移,它们从根本上增加了价值

可靠的重试

在分布式系统中重试请求可能很麻烦,但是它几乎总是需要实现的。分布式系统通常会将一个客户端请求转换为更多下游请求,这意味着“尾巴”场景的可能性会大大增加,例如发生异常失败的请求。对此最简单的缓解措施是重试失败的请求。

困难来自于避免“重试风暴”或“重试 DDoS”,即当处于降级状态的系统触发重试、随着重试增加而增加负载并进一步降低性能时。天真的实现不会考虑这种情况,因为它可能需要与缓存或其他通信系统集成以了解是否值得执行重试。服务网格可以通过对整个系统允许的重试总数进行限制来实现这一点。网格还可以在这些重试发生时报告这些重试,可能会在你的用户注意到系统降级之前提醒你。

网络可扩展性

也许服务网格的最佳属性是它的可扩展性。它提供了额外的适应性层,以应对 IT 下一步投入的任何事情。Sidecar 代理的设计模式是另一个令人兴奋和强大的功能,即使它有时会被过度宣传和过度设计来做用户和技术人员还没有准备好的事情。虽然社区在等着看哪个服务网格“生出”,这反映了之前过度炒作的编排战争,但未来我们将不可避免地看到更多专门构建的网格,并且可能会有更多的最终用户构建自己的控制平面和代理以满足他们的场景。

服务网格干扰

平台或基础设施控制层的价值怎么强调都不为过。然而,在服务网格世界中,我了解到入门的一个主要的挑战是,服务网格解决的核心问题通常甚至不是大多数服务网格项目交流的焦点!

相反,来自服务网格项目的大部分交流都围绕着听起来很强大或令人兴奋但最终会让人分心的功能。这包括:

强(复)大(杂)的控制平面

要很好地运行复杂的软件是非常困难的。这就是为什么如此多的组织使用云计算来使用完全托管的服务来减轻这一点的原因。那么为什么服务网格项目会让我们负责操作如此复杂的系统呢?系统的复杂性不是资产,而是负债,但大多数项目都在吹捧它们的功能集和可配置性。

多集群支持

多集群现在是一个热门话题。最终,大多数团队将运行多个 Kubernetes 集群。但是多集群的主要痛点是你的 Kubernetes 管理的网络被切分。服务网格有助于解决这个 Kubernetes 横向扩展问题,但它最终并没有带来任何新的东西。是的,多集群支持是必要的,但它对服务网格的承诺被过度宣传了。

Envoy

Envoy 是一个很棒的工具,但它被作为某种标准介绍,这是有问题的。Envoy 是众多开箱即用的代理之一,你可以将其作为服务网格平台的基础。但是 Envoy 并没有什么内在的特别之处,使其成为正确的选择。采用 Envoy 会给你的组织带来一系列重要问题,包括:

•运行时成本和性能(所有这些过滤器加起来!)•计算资源需求以及如何随负载扩展•如何调试错误或意外行为•你的网格如何与 Envoy 交互以及配置生命周期是什么•运作成熟的时间(这可能比你预期的要长)

服务网格中代理的选择应该是一个实现细节,而不是产品要求。

WASM

我是 Web Assembly (WASM) 的忠实拥趸,已经成功地使用它在 Blazor[3] 中构建前端应用程序。然而,WASM 作为定制服务网格代理行为的工具,让你处于获得一个全新的软件生命周期开销的境地,这与你现有的软件生命周期完全正交!如果你的组织还没有准备好构建、测试、部署、维护、监控、回滚和版本代码(影响通过其系统运行的每个请求),那么你还没有准备好使用 WASM。

A/B 测试

直到为时已晚,我才意识到 A/B 测试实际上是一个应用程序级别的问题。在基础设施层提供原语来实现它是很好的,但是没有简单的方法来完全自动化大多数组织需要的 A/B 测试水平。通常,应用程序需要定义独特的指标来定义测试的积极信号。如果组织想要在服务网格级别投入 A/B 测试,那么解决方案需要支持以下内容:

1.对部署和回滚的精细控制,因为它可能同时进行多个不同的“测试”2.能够捕获系统知道的自定义指标并可以根据这些指标做出决策3.根据请求的特征暴露对流量方向的控制,其中可能包括解析整个请求正文

这需要实现很多,没有哪个服务网格是开箱即用的。最终,我们的组织选择了网格之外的特征标记解决方案,其以最小的努力取得了巨大的成功。

我们在哪里结束

最终,我们面临的挑战并不是服务网格独有的。我们工作的组织有一系列限制条件,要求我们对解决的问题以及如何解决问题采取务实的态度。我们面临的问题包括:

•一个拥有大量不同技能的开发人员的大型组织•云计算和 SaaS 能力普遍不成熟•为非云计算软件优化的流程•碎片化的软件工程方法和信念•有限的资源•激进的截止日期

简而言之,我们人少,问题多,需要快速输出价值。我们必须支持主要不是 Web 或云计算的开发者,我们需要扩大规模以支持有不同方法和流程的大型工程组织来做云计算。我们需要将大部分精力集中在解决成熟度曲线较低的基本问题上。

最后,当面对我们自己的服务网格决策时,我们决定建立在 Linkerd 服务网格[4]上,因为它最符合我们的优先事项:低运营成本(计算和人力)、低认知开销、支持性社区以及透明的管理——同时满足我们的功能要求和预算。在 Linkerd 指导委员会工作了一段时间后(他们喜欢诚实的反馈和社区参与),我了解到它与我自己的工程原则有多么的契合。Linkerd 最近在 CNCF 达到毕业状态[5],这是一个漫长的过程,强调了该项目的成熟及其广泛采用。

关于作者

d7bcceed3458baa3152356263d001e04.png

Chris Campbell 担任软件工程师和架构师已有十多年,与多个团队和组织合作落地云原生技术和最佳实践。他在与业务领导者合作采用加速业务的软件交付策略和与工程团队合作交付可扩展的云基础架构之间分配时间。他对提高开发人员生产力和体验的技术最感兴趣。

引用链接

[1] How Unnecessary Complexity Gave the Service Mesh a Bad Name: https://www.infoq.com/articles/service-mesh-unnecessary-complexity
[2] 黄金信号: https://sre.google/sre-book/monitoring-distributed-systems/#xref_monitoring_golden-signals
[3] Blazor: https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor
[4] Linkerd 服务网格: https://linkerd.io/
[5] 在 CNCF 达到毕业状态: https://www.cncf.io/announcements/2021/07/28/cloud-native-computing-foundation-announces-linkerd-graduation/

1343ea4f38b7719430d8d3a93465853f.gif

往期推荐

数据在网络中是如何传输的?

如何优雅保护 Kubernetes 中的 Secrets

Redis 内存满了怎么办?这样置才正确!

云原生的本手、妙手和俗手

37f8ee33168e9591ade3a042f04764fd.gif

点分享

38758bddb8fdcae36fb76d45a62c7db1.gif

点收藏

4bd134842bcd281ef71c60bbe3f065bc.gif

点点赞

0df1d74f17084156d398c05f97d010be.gif

点在看

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

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

相关文章

ADBPGGreenplum成本优化之磁盘水位管理

简介:本文我们将通过一个实际的磁盘空间优化案例来说明,如何帮助客户做成本优化。 作者 | 玉翮 来源 | 阿里技术公众号 一 背景描述 目前,企业的核心数据一般都以二维表的方式存储在数据库中。在核心技术自主可控的大环境下,政企…

阿里云图数据库GDB V3引擎发布,加速开启“图智”未来

简介:无论是学术界还是产业界,都对图数据库有比较高的预期。Gartner发布的《2021年十大数据和分析技术趋势》中提到:“到2025年图技术在数据和分析创新中的占比将从2021年的10%上升到80%。”应用需求推动着技术的发展,在GDB V3的引…

阿里云EMR Remote Shuffle Service在小米的实践

简介:阿里云EMR自2020年推出Remote Shuffle Service(RSS)以来,帮助了诸多客户解决Spark作业的性能、稳定性问题,并使得存算分离架构得以实施,与此同时RSS也在跟合作方小米的共建下不断演进。本文将介绍RSS的最新架构,在…

Spring Boot Serverless 实战系列 | 性能调优

简介:Spring Boot Serverless 实战系列第四篇来啦,本文将向大家介绍如何对 Serverless 应用进行性能调优。 SpringBoot 是基于 Java Spring 框架的套件,它预装了 Spring 的一系列组件,让开发者只需要很少的配置就可以创建独立运行…

消息队列 RocketMQ 遇上可观测:业务核心链路可视化

简介:本篇文章主要介绍 RocketMQ 的可观测性工具在线上生产环境的最佳实践。RocketMQ的可观测性能力领先业界同类产品,RocketMQ 的 Dashboard 和消息轨迹等功能为业务核心链路保驾护航,有效应对线上大规模生产使用过程中遇到的容量规划、消息…

30人的产研团队如何高效协同?

简介:工具选型及使用建议对于中小企业,基本都不会自己搭建服务器和机房进行部署,而是选择各大云平台,选择一款SaaS项目管理工具可以极大的降低运维成本。 作者介绍:以诺行CTO 刘自强 团队使用云效3年 团队协作需求 …

从 Flink Forward Asia 2021,看Flink未来开启新篇章

简介:本文将对FFA Keynote议题作一些简单的归纳总结,感兴趣的小伙伴们可以在FFA官网[2]找到相关主题视频观看直播回放。 作者 | 梅源(Yuan Mei) 来源 | 阿里技术公众号 律回春晖渐,万象始更新,这句诗用来形…

从需求到开源,如何做到刮目相看?

作者 | 👽来源 | 前端Sharing一、一切根源都从无厘头需求开始最近在开发业务项目的时候,产品小姐姐突然来到我身边,然后就对着电脑一顿操作,具体场景大致是这样的。场景一:如上图所示,当在数万级别的数据中…

如何高效完成ECS多环境部署?

简介:通过本文,你可以了解到,如何通过云效流水线有效拉通开发与运维,打破二者之间的壁垒墙,让开发与运维高效联动。在软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行,例如&…

技术探秘: 360数科夺得ICDAR OCR竞赛世界第一

ICDAR(国际文档分析与识别会议)是OCR识别领域最权威的会议之一。近期,360数科在ICDAR2019-SROIE(Results - ICDAR 2019 Robust Reading Challenge on Scanned Receipts OCR and Information Extraction - Robust Reading Competition) 榜单上…

云原生时代,软件交付有何不同 | 研发效能提升36计

简介:从今天起,我们将开启一个新的专栏:《研发效能提升36计_持续交付篇》。专栏将通过10-20篇文章,系统分享云原生时代,企业如何落地持续交付。 编者按:从今天起,我们将开启一个新的专栏&#…

php 获取字符串完整拼音,PHP 获取中文字符串的首字符拼音字母

class"php"><?php header(Content-Type: text/html; charsetutf-8);$str"阅谁问君诵&#xff0c;水落清香浮";echo getFirstCharCode($str);function getFirstCharCode($str){$str iconv("UTF-8","gb2312", $str);$targetChar*…

IT人的年夜饭,也太香了吧

简介&#xff1a; 平时的IT人&#xff0c;奋战在修复bug前线&#xff0c;起早与贪黑齐飞&#xff0c;调休共假期待定。到了新春佳节&#xff0c;对于IT人来说&#xff0c;没有什么是比一顿年夜饭更让人熨贴肺腑的了。为了让废寝忘食编程序、闻机起早保运维的IT人过一个安稳的好…

小红书消息中间件的运维实践与治理之路

简介&#xff1a;近年来&#xff0c;消息领域的全面云原生化逐渐走向深入&#xff0c;比如 RocketMQ 5.0 版本的存算分离设计和 raft 模式&#xff0c;再比如 Kafka3.0 引入了分层设计的方式&#xff08;tiered storage&#xff09;和 raft 模式&#xff0c;以及近年来新崛起的…

爆测一周,22年必看最细致代码托管工具测评

简介&#xff1a;网上代码托管选型的文章不少&#xff0c;不过大多内容有点久远&#xff0c;很多最新的平台没有包括进来&#xff0c;个人花了大概一个星期的时间&#xff0c;把目前市面上比较火的代码托管平台&#xff08;开源托管平台&#xff1a;Github、Gitee&#xff1b;企…

read 文件一个字节实际会发生多大的磁盘IO?

作者 | 张彦飞allen来源 | 开发内功修炼在日常开发中一些看似司空见惯的问题上&#xff0c;我觉得可能大多数人其实并没有真正理解&#xff0c;或者理解的不够透彻。不信我们来看以下一段简单的读取文件的代码&#xff1a;上图中的代码仅仅只是对某个文件读取了一个字节&#x…

【指标需求思考】如何做好指标类需求建设

简介&#xff1a;大家一直所说的【需求】究竟有哪些&#xff1f;用户需求、业务需求、系统需求...... 但是今天我要给大家介绍一种我自认为一种别出心裁的需求&#xff01;【指标类需求】在庞大的需求体系里&#xff0c;一个完整的系统设计流程是非常必要的&#xff0c;好则效率…

oracle 12c 低版本,oracle高版本迁移数据到低版本(12c至11g)方法

1.12c版本信息&#xff1a;2.11g版本信息&#xff1a;3.查看12c的字符集编码&#xff1a;select userenv(language) from dual;要迁移的两个数据库字符集编码要保持一致。如果不一致请手工修改&#xff0c;修改方法另行百度。4.查看11g数据库字符集编码&#xff1a;5.查看12c数…

构建信创产业生态,移动云立足全栈自主创新连放大招

信创&#xff0c;即信息技术应用创新&#xff0c;它是数据安全、网络安全的基础&#xff0c;也是“新基建”的重要内容。在国际信息安全形势严峻、国家安全需要和数智时代新要求三重因素作用下&#xff0c;信创生态应运而生。进入2022年&#xff0c;云计算将成为信创主要落地方…

游戏行业搜索实践

简介&#xff1a;本文通过游戏行业客户案例带大家了解游戏内容&#xff0c;游戏论坛等场景搜索特性&#xff0c;以及如何通过开放搜索游戏增强版解决方案轻松快速接入,实现高质量搜索效果,提升业务指标和用户体验。 客户背景 国内知名的文化社区和视频平台&#xff0c;其游戏…