您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

服务网格如何简化微服务可观察性

时间:2022-08-26 10:43:37  来源:网易  作者: qaseven

可观察性是一把覆盖多个移动部件的宽伞。服务网格覆盖了很多领域,无需我们编写一行代码。

服务网格和可观察性是微服务社区中的热门话题。在本趋势报告中,我们将详细探讨服务网格以及良好的可观察性堆栈如何帮助我们克服使用微服务时面临的一些最紧迫的挑战。

常见的微服务挑战

采用微服务很难。调试并确保它们继续运行更加困难。微服务以第 2 天操作的形式引入了大量开销。让我们深入探讨使使用微服务变得困难的几个方面。

在分布式系统中调试错误是一场噩梦

微服务的分布式特性使得调试错误变得困难。在单体应用中,只需查看日志和堆栈跟踪就足以确定错误的根本原因。当涉及到微服务时,事情就不是那么简单了。在出现错误的情况下,挖掘微服务的日志可能无法直接指出确切的问题。相反,它可以简单地提及从依赖微服务收到的请求和/或响应中存在的错误。

换句话说,我们必须跟踪整个网络跟踪以确定哪个微服务是问题的根本原因。这是一个非常耗时的过程。

识别系统中的瓶颈并不容易

在单体应用中,识别性能瓶颈就像分析我们的应用程序一样容易。分析通常足以确定代码库中哪些方法最耗时。这有助于您将优化工作集中在一小段代码上。不幸的是,找出导致整个系统变慢的微服务是一项挑战。

单独测试时,每个微服务似乎都表现出色。但在现实世界的场景中,每项服务的负载可能会有很大差异。可能存在一些其他微服务所依赖的核心微服务。在孤立的测试环境中复制此类场景非常困难。

维护微服务依赖树很困难

微服务的全部意义在于我们可以发布新软件的敏捷性。话虽如此,重要的是要注意发布微服务时可能会产生多种下游影响。某些经常破坏功能的事件是:

 

  1. 在上游依赖之前释放依赖的微服务
  2. 删除遗留系统仍然依赖的已弃用 API
  3. 发布破坏 API 兼容性的微服务

 

当微服务之间没有明确的依赖树时,这些事件变得难以避免。依赖树可以更轻松地通知适当的团队并更好地计划发布。

可观察性:微服务问题的解决方案

我上面提到的所有问题都可以通过可观察性来解决。根据 Jay Livens 的说法,可观察性是一种根据系统生成的指标和日志捕获系统当前状态的做法。它是一个系统,可以帮助我们监控应用程序的健康状况,生成故障警报,并在问题发生时捕获足够的信息来调试问题。

图 1:具有开源示例的可观察性堆栈组件

任何可观察性堆栈都将具有以下组件:

 

  1. 指标/日志的来源——我们用来生成数据的代理或库
  2. Metric/log shipper——将数据传输到存储引擎的代理;通常嵌入在度量源中
  3. 收集器/存储- 负责存储生成的数据的有状态服务
  4. 仪表板——精美的图表,使我们易于解释和消化数据
  5. 警报管理器——负责触发通知的服务

 

对我们来说幸运的是,有一些强大的开源工具可以帮助简化设置可观察性堆栈的过程。

介绍服务网格

可观察性的一个主要方面是捕获网络遥测,拥有良好的网络洞察力可以帮助我们解决我们最初谈到的许多问题。通常,生成此遥测数据的任务由开发人员来实现。这是一个极其繁琐且容易出错的过程,并不会真正以遥测结束。开发人员还负责实施安全功能并使通信能够抵御故障。

理想情况下,我们希望我们的开发人员编写应用程序代码,而不是别的。微服务网络的复杂性需要下推到底层平台。实现这种解耦的更好方法是使用服务网格,如Istio、Linkerd或Consul Connect。

服务网格是一种用于控制和监控微服务网络和通信的架构模式。

让我们以 Istio 为例来了解服务网格是如何工作的。

图 2:典型的服务网格架构

来源:图片改编自 Istio 文档

服务网格有两个主要组件:数据平面和控制平面。数据平面负责管理我们的微服务将产生的所有网络流量。为了实现这一点,服务网格会在我们的每个微服务旁边注入一个 sidecar 代理。这个 sidecar,通常是 Envoy,负责透明地拦截流过服务的所有流量。另一方面,控制平面仅负责配置代理没有应用程序流量到达控制平面。

如图 2 所示,服务网格架构可帮助您抽象出我们之前谈到的所有复杂性。最好的部分是我们可以开始使用服务网格,而无需编写任何代码。服务网格帮助我们管理基于微服务的架构的多个方面。一些显着的优势包括:

 

  1. 全面了解流量如何流动
  2. 控制网络流量
  3. 保护微服务通信
全面了解流量如何流动

 

在图 3 中,应用 A 正在向应用 B 发出请求。由于位于每个应用旁边的 Envoy 代理正在拦截请求,因此它们对流经这两个微服务的流量具有完全的可见性。代理可以检查此流量以收集信息,例如发出的请求数和每个请求的响应状态代码。

换句话说,服务网格可以帮助我们回答以下问题:

 

  1. 哪个服务正在与哪个对话?
  2. 每个微服务观察到的请求吞吐量是多少?
  3. 每个 API 的错误率是多少?

 

图 3:服务网格可以帮助收集指标

控制网络

服务网格不仅仅是一个沉默的旁观者。它可以积极参与塑造所有网络流量。用作 sidecar 的 Envoy 代理是 HTTP 感知的,并且由于所有请求都流经这些代理,因此可以将它们配置为实现几个有用的功能,例如:

 

  1. 自动退出——在遇到网络错误时重放请求的能力
  2. 断路——将已停止响应的上游微服务的不健康副本列入黑名单
  3. 请求重写——在满足某些条件时设置标头或修改请求 URL 的能力

 

图 4: 服务网格可以塑造网络流量

它并没有在这里结束。代理还可以根据一定的权重分割流量。例如,我们可以将代理配置为将 95% 的传入流量发送到服务的稳定版本,而其余的可以重定向到金丝雀版本。这可以通过支持金丝雀部署等高级实践来帮助我们简化发布管理流程。

保护微服务通信

使用服务网格的另一个巨大优势是安全性。我们的 sidecar 代理可以配置为使用双向 TLS。这可确保所有网络流量在传输过程中自动加密。管理和轮换 mTLS 所需证书的任务由服务网格控制平面完全自动化。

服务网格还可以通过选择性地允许哪个服务与哪个服务进行通信来协助访问控制。所有这些都可以帮助我们彻底消除诸如中间人攻击等一整套安全漏洞。

图 5:服务网格可以保护网络流量

服务网格如何帮助提高可观察性?

我们刚刚看到了服务网格如何捕获遥测数据。让我们更深入地了解这些数据可以支持什么样的用例。

分布式跟踪

我们已经讨论了调试微服务有多么困难。解决这个可调试性问题的一种方法是通过分布式跟踪——捕获请求生命周期的过程。仅一张图表就可以更容易找出问题的根本原因。

大多数服务网格会自动收集网络跟踪并将其发送到 Jaeger 等工具。您需要做的就是在应用程序代码中转发一些 HTTP 标头。而已!

流量指标

服务网格可以帮助我们收集必须监控的四个黄金信号中的三个,以确定服务的健康状况:

 

  1. 请求吞吐量——每个微服务正在服务的请求数
  2. 响应错误率——失败请求的百分比
  3. 响应延迟——微服务响应所需的时间;这是一个直方图,您可以从中提取n 个百分位数的延迟

 

服务网格收集的指标还有很多,但这些是迄今为止最重要的指标。这些指标可用于支持几个有趣的用例。其中一些包括:

 

  1. 根据请求吞吐量等高级参数启用扩展
  2. 启用高级流量控制功能,例如速率限制和断路
  3. 执行自动化 Canary 部署和 A/B 测试
网络拓扑结构

 

服务网格可以帮助我们自动构建网络拓扑,可以通过将跟踪数据与流量指标相结合来构建。如果你问我,这是一个真正的救星。网络拓扑可以帮助我们一目了然地可视化整个微服务依赖树。此外,它还可以突出我们集群的网络健康状况。这对于识别我们的应用程序中的瓶颈非常有用。

结论

可观察性是一把覆盖多个移动部件的宽伞。对我们来说幸运的是,像服务网格这样的工具覆盖了很多领域,而不需要我们编写一行代码。简而言之,服务网格通过以下方式帮助我们:

 

  1. 生成分布式跟踪数据以简化调试
  2. 充当关键指标的来源,例如微服务监控的黄金信号
  3. 生成网络拓扑


Tags:微服务   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  Search: 微服务  点击:(5)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  Search: 微服务  点击:(115)  评论:(0)  加入收藏
九条微服务最佳实践,你学会了哪条?
微服务之间连贯一致的代码库对于可维护性至关重要。保持代码成熟度相似,可确保系统统一演进,防止服务间出现性能、安全性和功能差异。在开发微服务时,我们需要遵循哪些最佳实践...【详细内容】
2024-01-05  Search: 微服务  点击:(99)  评论:(0)  加入收藏
Go微服务入门到容器化实践
Go微服务入门到容器化实践Go 是一门高效、现代化、快速增长的编程语言,非常适合构建 Web 应用程序。而 Docker 是一种轻量级的容器化技术,能够使得您的应用程序在任何地方运行...【详细内容】
2024-01-01  Search: 微服务  点击:(63)  评论:(0)  加入收藏
微服务全做错了!谷歌提出新方法,成本直接降为1/9!
2023,微服务“水逆”之年。长期以来,不管大厂还是小厂,微服务都被认为是云原生服务应用程序架构的事实标准,然而2023,不止那位37signals的DHH决心下云,放弃微服务,就连亚马逊和谷歌...【详细内容】
2023-12-29  Search: 微服务  点击:(121)  评论:(0)  加入收藏
微服务架构中的数据一致性
在微服务中,一个逻辑上原子操作可以经常跨越多个微服务。即使是单片系统也可能使用多个数据库或消息传递解决方案。使用多个独立的数据存储解决方案,如果其中一个分布式流程参...【详细内容】
2023-12-27  Search: 微服务  点击:(143)  评论:(0)  加入收藏
监控 Spring Cloud 微服务的实践方案
一、简介Spring Cloud是一个基于Spring Boot实现的微服务框架,它提供了丰富的微服务功能,如分布式配置、服务注册与发现、服务熔断、负载均衡等。为了更好地管理和监控这样复...【详细内容】
2023-12-19  Search: 微服务  点击:(145)  评论:(0)  加入收藏
聊聊微服务链路服务
微服务架构图片如果有用户反馈某个页面很慢,我们知道这个页面的请求调用链是 A -----> C -----> B -----> D(图片有误),怎么来定位是由哪个服务引起的问题呢? 更进一步,如果...【详细内容】
2023-12-15  Search: 微服务  点击:(127)  评论:(0)  加入收藏
选择适合微服务的编程语言,让你的工作事半功倍!
讨论编程语言就像是一场政治辩论。每个开发者都会过分捍卫他/她所使用的编程语言。然而,编程语言应该被看作是它们真正是的东西,即一种工作工具。每种编程语言都有特定的目的...【详细内容】
2023-12-14  Search: 微服务  点击:(178)  评论:(0)  加入收藏
Eureka: 微服务架构中不可或缺的服务治理工具
Eureka是Netflix开源的一款用于服务治理的工具,它是NetflixOSS(OpenSourceSoftware)项目的一部分,主要用于实现微服务架构中的服务注册与发现。在当今庞大而复杂的微服务系统中,E...【详细内容】
2023-12-14  Search: 微服务  点击:(193)  评论:(0)  加入收藏
▌简易百科推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  步步运维步步坑    Tags:架构   点击:(5)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27    InfoQ  Tags:架构模式   点击:(13)  评论:(0)  加入收藏
哈啰云原生架构落地实践
一、弹性伸缩技术实践1.全网容器化后一线研发的使用问题全网容器化后一线研发会面临一系列使用问题,包括时机、容量、效率和成本问题,弹性伸缩是云原生容器化后的必然技术选择...【详细内容】
2024-03-27  哈啰技术  微信公众号  Tags:架构   点击:(10)  评论:(0)  加入收藏
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能扛...【详细内容】
2024-03-27  dbaplus社群    Tags:DDD   点击:(12)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13    阿里云开发者  Tags:高并发   点击:(6)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  二进制跳动  微信公众号  Tags:架构设计   点击:(36)  评论:(0)  加入收藏
详解基于SpringBoot的WebSocket应用开发
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30  ijunfu  今日头条  Tags:SpringBoot   点击:(18)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  547蓝色星球    Tags:架构   点击:(115)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11    王建立  Tags:Spring Boot   点击:(124)  评论:(0)  加入收藏
Spring Boot虚拟线程的性能还不如Webflux?
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10  互联网架构小马哥    Tags:Spring Boot   点击:(118)  评论:(0)  加入收藏
站内最新
站内热门
站内头条