什么是服务网格?

服务网格是一个软件层,用于处理应用程序中服务之间的所有通信。该层由容器化微服务组成。随着应用程序的扩展和微服务数量的增加,监控服务的性能变得越来越困难。为了管理服务之间的连接,服务网格提供了监控、记录、跟踪和流量控制等新功能。它独立于每项服务的代码,这使它能够跨网络边界和多个服务管理系统工作。

为什么需要服务网格?

在现代应用程序架构中,您可以将应用程序作为可独立部署的小型微服务的集合来构建。不同的团队可以构建单独的微服务并选择其编程语言和工具。但是,微服务必须进行通信,应用程序代码才能正常运行。

应用程序性能取决于服务之间通信的速度和弹性。开发人员必须跨服务监控和优化应用程序,但由于系统的分布性质,他们很难获得可见性。随着应用程序的扩展,管理通信变得更加复杂。

服务级别的可观测性

随着部署的工作负载和服务越来越多,开发人员发现很难理解所有服务是如何协同工作的。例如,服务团队想知道他们的下游和上游依赖关系是什么。他们希望更清楚地了解服务和工作负载在应用程序层的通信方式。

服务级别控制

管理员希望控制哪些服务相互通信,以及它们执行哪些操作。他们希望对微服务架构中服务的行为、策略和交互进行精细的控制和治理。强制执行安全策略对于监管合规至关重要。

服务网格有哪些优势?

服务网格提供了一个集中的专用基础设施层,用于处理分布式应用程序中复杂的服务到服务通信。

服务发现

服务网格提供自动服务发现,可以减少管理服务端点的运维负担。它们使用服务注册表来动态发现和跟踪网格中的所有服务。无论服务位于何处或底层基础设施如何,都可以无缝地相互查找和通信。您可以根据需要部署新服务来快速扩展。

负载均衡

服务网格使用各种算法(例如循环算法、最少连接或加权负载均衡)在多个服务实例之间智能地分配请求。负载均衡可提高资源利用率并确保高可用性和可扩展性。您可以优化性能并防止出现网络通信瓶颈。

流量管理

服务网格提供高级流量管理功能,可对请求路由和流量行为进行精细控制。下面是几个示例。

流量分割

您可以将传入流量划分到不同的服务版本或配置中。网格将一些流量引导到更新后的版本,从而以受控方式逐步推出变更。这样可以实现平稳过渡,并最大限度地降低变更的影响。

请求镜像

您可以将流量复制到测试或监控服务进行分析,而不影响主请求流。镜像请求时,您可以深入了解服务如何在不影响生产流量的情况下处理特定请求。

金丝雀部署

您可以将一小部分用户或流量引导到新的服务版本,而大多数用户则继续使用现有的稳定版本。在有限的接触范围内,您可以在现实环境中试验新版本的行为和性能。

安全性

服务网格提供安全通信功能,例如双向 TLS(mTLS)加密、身份验证和授权。双向 TLS 支持服务间通信中的身份验证。它通过加密流量来帮助确保数据的机密性和完整性。您还可以强制执行授权策略,以控制哪些服务访问特定端点或执行特定操作。

监控

服务网格提供全面的监控和可观测性功能,可深入了解服务的运行状况、性能和行为。监控还支持故障排除和性能优化。以下是您可以使用的监控功能示例:

  • 收集延迟、错误率和资源利用率等指标,以分析整体系统性能

  • 执行分布式跟踪,查看多个服务中请求的完整路径和时间

  • 在日志中捕获服务事件,用于审计、调试和合规目的

服务网格是如何工作的?

服务网格从单个服务中移除控制服务间通信的逻辑,并将通信抽象到自己的基础设施层。它使用多个网络代理来路由和跟踪服务之间的通信。

代理充当组织网络和微服务之间的中间网关。所有进出该服务的流量都通过代理服务器路由。单个代理有时被称为 sidecar,因为它们是分开运行的,但在逻辑上位于每个服务旁边。这些代理一起构成了服务网格层。

服务网格架构中有两个主要组成部分:控制面板和数据面板。

数据面板

数据面板是服务网格的数据处理组件。它包括所有 sidecar 代理及其功能。当一个服务想要与其他服务通信时,sidecar 代理会采取以下操作:

  • sidecar 拦截请求

  • 它将请求封装在单独的网络连接中

  • 它在源代理和目标代理之间建立安全的加密通道

sidecar 代理处理服务之间的低级消息传递。它们还会实施断路和请求重试等功能,以增强弹性并防止服务降级。服务网格功能(例如负载均衡、服务发现和流量路由)在数据面板中实施。

控制面板

控制面板充当服务网格的中央管理和配置层。

使用控制面板,管理员可以在网格内定义和配置服务。例如,他们可以指定服务端点、路由规则、负载均衡策略和安全设置等参数。定义配置后,控制面板将必要信息分发到服务网格的数据面板。

代理使用配置信息来决定如何处理传入的请求。它们还可以接收配置更改并动态调整其行为。您可以实时更改服务网格配置,而无需重新启动或中断服务。

服务网格实现通常在控制面板中包括以下功能:

  • 用于跟踪网格内所有服务的服务注册表

  • 自动发现新服务并删除非活动服务

  • 收集和聚合遥测数据,例如指标、日志和分布式跟踪信息

什么是 Istio?

Istio 是一个开源服务网格项目,设计为主要与 Kubernetes 配合使用。Kubernetes 是一款开源容器编排平台,用于大规模部署和管理容器化应用程序。

Istio 的控制面板组件本身作为 Kubernetes 工作负载运行。它使用 Kubernetes 容器组(一组共享一个 IP 地址的紧密耦合的容器)作为 sidecar 代理设计的基础。

Istio 的第 7 层代理在与主服务相同的网络环境中作为另一个容器运行。从这个位置,它可以拦截、检查和操作所有通过容器组的网络流量。但是,主容器不需要任何改动,甚至不需要知道这种情况正在发生。

开源服务网格实施面临哪些挑战?

以下是与 Istio、Linkerd 和 Consul 等开源平台相关的一些常见服务网格挑战。

复杂性

服务网格引入了其他基础设施组件、配置要求和部署注意事项。它们的学习曲线很陡峭,这要求开发人员和操作人员获得使用特定服务网格实施方面的专业知识。培训团队需要时间和资源。组织必须确保团队具备必要的知识,以了解服务网格架构的复杂性并对其进行有效配置。

运维管理费用

服务网格会带来部署、管理和监控数据面板代理和控制面板组件的额外开销。例如,您必须执行以下操作:

  • 确保服务网格基础设施的高可用性和可扩展性

  • 监控代理的运行状况和性能

  • 处理升级和兼容性问题

必须仔细设计和配置服务网格,以最大限度地减少对整个系统的性能影响。

集成挑战

服务网格必须与现有基础设施无缝集成,才能执行其所需的功能。这包括容器编排平台、网络解决方案和技术堆栈中的其他工具。

在复杂多样的环境中,要确保与其他组件的兼容性和顺利集成可能具有挑战性。要更改 API、配置格式和依赖关系,需要进行持续的规划和测试。如果您需要在堆栈中的任何位置升级到新版本,也是如此。

服务网格 Service Mesh的更多相关文章

  1. Emoji.voto,Linkerd 服务网格(service mesh)的示例应用程序

    一个微服务应用程序,允许用户为他们最喜欢的表情符号(emoji)投票,并跟踪排行榜上收到的投票.愿最好的 emoji 获胜. 该应用程序由以下 3 个服务组成: emojivoto-web:Web 前 ...

  2. 浅谈服务治理、微服务与Service Mesh(三) Service Mesh与Serverless

    作为本系列文章的第三篇(前两篇<浅谈服务治理.微服务与Service Mesh(一)Dubbo的前世今生>,<浅谈服务治理.微服务与Service Mesh(二) Spring Cl ...

  3. Service Mesh服务网格新生代--Istio(转)

    万字解读:Service Mesh服务网格新生代--Istio  官网地址:https://preliminary.istio.io/zh/docs/concepts/security/ Servic ...

  4. 服务网格istio概念应知应会

    一.背景 最近架构组基于istio开发了服务网格(Service Mesh)平台,借此机会把相关的背景知识做一次学习和记录,方便回头查看. 初版的效果: 二.istio 官方手册:https://is ...

  5. Linkerd 2:5 分种厘清 Service Mesh 相关术语

    API Gateway(API 网关) API gateway 位于应用程序的前面,旨在解决身份验证和授权.速率限制以及为外部消费者提供公共访问点等业务问题. 相比之下,service mesh 专注 ...

  6. 微服务(Microservices)和服务网格(Service Mesh)架构概念整理

    注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ...

  7. Service Mesh服务网格:是什么和为什么

    Service Mesh服务网格:是什么和为什么 - 好雨云帮 CSDN 博客 - CSDN博客 https://blog.csdn.net/zyqduron/article/details/8043 ...

  8. Service Mesh(服务网格)

    Service Mesh(服务网格) 什么是Service Mesh(服务网格)Service mesh 又译作 "服务网格",作为服务间通信的基础设施层.Buoyant 公司的 ...

  9. 微服务(Microservices)和服务网格(Service Mesh)的架构概念

    注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ...

  10. 下一代微服务 ~ Service Mesh

    微服务(Microservices) 微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服 ...

随机推荐

  1. crm--纯后端部署

    博客地址:https://www.cnblogs.com/zylyehuo/ 技术栈:supervisor + nginx + uwsgi + django + virtualenv + mariad ...

  2. Go学习笔记3

    九.错误处理 1.defer+recover机制处理异常错误 展示错误: 发现:程序中出现错误/恐慌以后,程序被中断,无法继续执行. 错误处理/捕获机制: 内置函数recover: 2.自定义错误 需 ...

  3. 比 nvm 更好用的 node 版本管理工具

    什么是 Volta Volta 是一种管理 JavaScript 命令行工具的便捷方式. volta 的特点: 速度 无缝,每个项目的版本切换 跨平台支持,包括 Windows 和所有 Unix sh ...

  4. 文心一言 VS 讯飞星火 VS chatgpt (95)-- 算法导论9.2 4题

    四.用go语言,假设用RANDOMIZED-SELECT 去选择数组 A=(3,2,9,0,7,5,4,8,6,1)的最小元素,给出能够导致 RANDOMIZED-SELECT最坏情况发生的一个划分序 ...

  5. fepk文件格式说明

    1  卫星影像金字塔分块原理说明 通常我们在工作中使用的卫星影像数据,轻则几百M,重则几百个G甚至上TB级.影像数据太大,是大家经常会遇到的一个问题,尤其是想下载一个省以上数据的时候该问题尤为突出.那 ...

  6. ARM开发板学习

    ARM开发板学习 1.蜂鸣器配饰和时间函数开发 #include <stdio.h> #include <wiringPi.h> #include <unistd.h&g ...

  7. oj练习题程序编程题

    打印图形Description按要求输出由*组成的图案Input无需输入Output输出下面由"组成的图案卡 11 print('*') print("***") pri ...

  8. Go方法特性详解:简单性和高效性的充分体现

    本文深入探讨了Go语言中方法的各个方面,包括基础概念.定义与声明.特性.实战应用以及性能考量.文章充满技术深度,通过实例和代码演示,力图帮助读者全面理解Go方法的设计哲学和最佳实践. 关注[TechL ...

  9. Skywalking APM监控系列(二、Mysql、Linux服务器与前端JS接入Skywalking监听)

    前言 上篇我们介绍了Skywalking的基本概念与如何接入.Net Core项目,感兴趣可以去看看: Skywalking APM监控系列(一丶.NET5.0+接入Skywalking监听) 本篇我 ...

  10. 为.NET打开新大门:OpenVINO.NET开源项目全新发布

    为.NET打开新大门:OpenVINO.NET开源项目全新发布 在AI的应用越来越广泛的今天,优化深度学习模型并进行推理部署已经成为了一门必要的技术.Intel开发的OpenVINO工具包(Open ...