架构师必知必会系列:微服务治理与服务网格

发布于:2023-10-25 ⋅ 阅读:(101) ⋅ 点赞:(0)

作者:禅与计算机程序设计艺术

1.背景介绍

1.1 什么是微服务?

微服务是一种新的软件开发架构模式,它将单体应用拆分成一组小型服务,服务间通过轻量级通信机制互相通讯,每个服务独立部署运行、伸缩性良好且易于管理。由于服务之间耦合度低、独立部署、可组合等特点,可以更好的满足业务需求。2014年,微服务架构已经成为云计算领域的热门话题。

1.2 为什么要进行微服务治理?

微服务架构带来的最大改变之一就是服务治理难度增加了,因为它将应用拆分为多项任务,每项任务都需要单独进行服务治理。因此,我们需要制定一整套流程、工具和方法对微服务进行管理,包括服务注册发现、服务配置中心、健康检查、限流熔断降级、日志监控等。

1.3 服务网格的价值

随着微服务架构的兴起,服务治理也逐渐进入“云原生时代”,服务网格(Service Mesh)作为新一代服务网格技术出现。

服务网格解决了服务之间的调用复杂问题。它是一个分布式的基础设施层,位于应用程序和服务之间,用于处理服务间的通信,提供服务发现、负载均衡、安全、指标收集等功能。它不仅能让应用间的通信变得简单,而且还可以实现零信任的安全通信、自动化运维和弹性伸缩等能力。

另一方面,服务网格在整体架构上也提供了统一的观察视图。基于服务网格的监控数据中可以看到整个微服务系统的运行状态和性能指标,而无需单独关注各个服务的内部状况。这使得整个系统的运行状态更加清晰、全面。

总结一下,微服务架构的崛起带来了新的 challenges 和 opportunities,而服务网格技术则为管理微服务提供了一整套的解决方案。本文将从以下三个方面阐述微服务治理与服务网格的关系、价值、差异及融合。

2.核心概念与联系

2.1 服务发现与注册中心(Service Discovery & Registration)

2.1.1 什么是服务发现和注册?

服务发现与注册是微服务框架中的一个重要组成部分。

服务发现和注册的主要作用是用来帮助客户端(比如微服务消费者)找到服务提供者并进行RPC调用。服务消费者调用服务提供者的方法有很多种,包括远程过程调用(Remote Procedure Call,简称 RPC),其中服务消费者在调用时需要知道服务提供者的位置信息,也就是IP地址和端口号。服务发现就是用来帮助消费者获取服务提供者位置信息的组件。

服务发现一般由两个阶段组成:服务注册阶段和服务发现阶段。

  • 服务注册阶段: 服务提供者把自身信息注册到注册中心上,以备服务消费者查询。比如,服务提供者启动后向注册中心发送自己的IP地址、端口号、可用服务列表等元数据。

  • 服务发现阶段: 服务消费者查询注册中心以获得服务提供者的位置信息,然后就可以直接调用该服务提供者。比如,服务消费者通过注册中心获得服务提供者的IP地址和端口号,然后直接通过这些信息进行RPC调用。

目前,主流的服务发现和注册中心产品有Consul、Etcd、ZooKeeper、Nacos等。

2.2 配置中心(Configuration Management)

2.2.1 什么是配置中心?

配置中心也是微服务框架中的一个重要组成部分。配置中心用来存储和管理微服务相关的配置信息。例如,服务的路由规则、服务的访问策略、数据库连接信息、缓存配置等等。

配置中心的作用主要有两点:

  • 服务配置中心作为集中式存储、管理微服务配置信息的入口,各个微服务节点都可以从配置中心获取配置信息。这样的话,如果某个服务的配置发生变化,只需要修改配置中心上的配置,其它所有依赖该服务的微服务节点都会收到通知并更新自己的配置信息,实现配置的动态更新。

  • 服务配置中心还可以控制访问权限,只有授权的用户才可以查看或修改配置信息。同时,服务配置中心还可以提供配置的版本控制功能,能够帮助用户回滚到之前的某一版本的配置。

目前,主流的配置中心产品有Spring Cloud Config、Apollo、Apache Zookeeper、HashiCorp Consul Key/Value store、AWS Parameter Store等。

2.3 服务网格(Service Mesh)

2.3.1 什么是服务网格?

服务网格(Service Mesh)是专门用于处理服务间通信的基础设施层。其核心功能是服务发现和请求路由、流量控制、熔断保护、可观测性、安全认证等。下图展示了一个微服务系统中的服务间调用示意图:

上图左侧为微服务集群,右侧为非服务集群。微服务集群中的多个服务彼此通过API接口通信,服务消费者向服务提供者发出请求,需要先找到提供者的位置信息。但是,对于非服务集群来说,就没有这样的位置信息,所以如何解决这个问题呢?

服务网格就是为了解决这个问题而产生的。服务网格通过sidecar代理方式运行在每个微服务节点上,监听和管理微服务之间的网络流量。通过注入网格内置的中间件,可以实现服务注册与发现、负载均衡、熔断、认证、监控、限流等功能,最终达到微服务集群与非服务集群之间建立统一的通信管道。如下图所示:

如上图所示,服务网格包括控制平面和数据平面两部分。

控制平面负责管理数据平面的行为,包括服务发现、路由、负载均衡、故障转移、限流熔断等功能。数据平面则是一个独立的进程,作为Sidecar代理注入到服务容器中,接收微服务之间的网络流量,并根据路由规则、策略和配置执行相应的操作。

为了建立微服务集群与外部世界的通信,服务网格还引入了Ingress Gateway。Ingress Gateway是一个运行在边缘位置的服务,用来接收外部流量并转发到指定的微服务。Ingress Gateway可以使用反向代理(如Nginx Ingress)、API Gateway(如Kong API Gateway)或者其他第三方软件,也可以自己编写适配器。

除此之外,服务网格还有一些其他特性,如服务鉴权、流量加密、配额管理、 observability等,这些特性都是通过在数据平面中注入不同的中间件来实现的。

2.4 健康检查与容错机制(Health Check and Fault Tolerance)

2.4.1 什么是健康检查?

健康检查是微服务架构中的重要组成部分。它用于检测微服务节点是否正常工作,并帮助微服务框架快速定位故障源。

健康检查一般包括两种类型:

  • 探针(Probe):探针是在微服务节点上执行的一段代码,用于检测微服务节点是否正在运行。常用的探针包括HTTP Get请求、TCP连接、执行命令、Ping等。

  • 外部检查(External Checks):外部检查是指通过与外部系统的交互来检测微服务节点是否正常工作。常用的外部检查手段包括调用其他微服务、访问数据库或存储系统、调用第三方服务的API等。

2.4.2 什么是容错机制?

容错机制是微服务架构中的重要组成部分。它用于处理微服务节点故障引起的问题,保证微服务节点的高可用。

常见的容错机制有:

  • 超时重试(Retry with Timeout):当微服务节点响应超时时,会自动重试。

  • 隔离策略(Isolation Policy):当微服务节点发生故障时,会将其隔离,防止其影响其它微服务的正常运行。

  • 恢复策略(Recovery Policy):当微服务节点发生故障时,会触发恢复策略,重新启动微服务节点。

  • 熔断(Circuit Breaker):当微服务节点异常响应时,会触发熔断机制,使其短路,避免对整体系统造成太大的影响。

除此之外,服务网格还支持跨越多个微服务节点的事务传播,即一次完整的请求在多个微服务节点之间进行调度和协作,确保事务的一致性。

3.核心算法原理和具体操作步骤以及数学模型公式详细讲解

3.1 服务发现与注册中心

3.1.1 心跳检测机制

一般情况下,微服务架构中的节点通常是一个长期运行的进程,它们往往需要长时间地保持生命周期。因此,服务发现与注册中心需要设计一个健康检查机制,以便检测节点是否存活。

在服务发现与注册中心中,健康检查主要依赖于心跳检测机制。心跳检测是一种简单的检查机制,由服务节点定期发送给服务发现与注册中心,表明当前节点仍然处于存活状态。服务发现与注册中心通过接收到的心跳信息来判断节点的存活情况,并对失联的节点进行快速处理。

3.1.2 一致性哈希

一致性哈希(Consistent Hashing)是一种服务发现算法。它通过将节点映射到环形空间中,使服务消费者通过节点的唯一标识符(比如IP地址)可以有效地找到目标节点。具体做法是:

  1. 创建一个大小为2^32的虚拟节点环。

  2. 将微服务节点按照哈希算法映射到环形空间的不同位置。

  3. 服务消费者通过唯一标识符查找目标节点。

其中,哈希函数将服务消费者的唯一标识符映射到环形空间中不同的位置,目的是使相同服务消费者的请求落在同一个位置上。这样,就可以将请求均匀分配到集群中的所有节点上。

3.1.3 软删除机制

软删除机制(Soft Delete)是微服务架构中常用的服务治理手段。在服务发现与注册中心中,如果某个微服务节点停止提供服务,可以通过设置软删除标记的方式保留服务信息,以供后续查找。

假设微服务B发生故障,服务提供者把其服务信息从注册中心删除,微服务消费者仍然可以通过调用服务B的IP地址和端口号,向其发起请求。通过软删除机制,可以保留服务B的信息,直到服务B真正宕机。这种方式既可以防止服务过多占用注册中心的资源,又可以快速查找宕机节点并进行处理。

3.2 服务网格

3.2.1 sidecar代理

在服务网格架构中,sidecar代理作为数据平面服务的一个组成部分,共同承担了服务发现、负载均衡、监控、限流熔断等功能。sidecar代理的存在可以简化服务网格的部署和维护,让服务网格拥有更高的弹性、扩展性和可靠性。

下图展示了服务网格的基本结构:

如上图所示,服务网格由数据平面和控制平面两部分组成。数据平面包括服务注册发现、配置管理、流量控制、安全、流量调度等模块,侧重于微服务之间的通信;控制平面则是一个独立的服务,提供基于微服务元数据的配置和治理功能。

在sidecar代理模式下,数据平面会被注入到每个微服务容器中,作为一个独立的进程运行。服务消费者可以通过本地的RPC调用或者服务发现机制向其它服务发起请求。sidecar代理会接收服务消费者的请求、解析路径、选择负载均衡策略、路由流量到目标服务、执行流量控制、记录指标和日志,并返回结果给消费者。

除了微服务之间的数据平面功能,控制平面还可以提供基于微服务元数据的配置和治理功能,包括服务路由、限流熔断、监控和追踪等。

3.2.2 可观测性

在服务网格中,可观测性是指微服务集群和整个云平台的运行状况的可视化表示。微服务集群内部的节点运行状态可以通过日志、指标和分布式跟踪系统来观测,整个云平台的运行状况则可以通过日志、仪表盘、警报和告警系统来观测。

服务网格的数据平面往往采用分布式追踪系统OpenTracing来进行追踪,它提供统一的链路跟踪能力,将服务请求在整个分布式系统中的位置梳理出来,便于定位和排查问题。

服务网格控制平面也采用分布式跟踪系统OpenTracing来收集微服务之间的调用链路,并将数据记录到分布式日志系统Logstash中。Logstash可以实时地对接各种开源和私有日志分析系统,并提供丰富的查询语言和分析工具,帮助用户洞察微服务集群的运行状况。

服务网格还可以通过Prometheus和Grafana等开源软件来搭建微服务集群的监控系统,实时地收集微服务集群的运行指标和状态,并通过可视化界面呈现。Prometheus是一个开源的服务监控系统,它采用pull模式拉取采集微服务集群的指标数据,并通过PushGateway模块来对接其它第三方监控系统。Grafana是一个开源的可视化组件,它提供了丰富的图表模板和图表编辑器,可以帮助用户构建基于微服务指标的自定义视图,提升用户的运营效率。

3.2.3 服务编排

在服务网格架构中,服务编排是指将多个微服务组织成一个应用,提供完整的业务逻辑的抽象。服务编排主要包括服务注册、发现、配置、路由、负载均衡、限流熔断、监控和追踪等功能。

在微服务架构中,每个微服务通常有其对应的注册中心、配置中心、健康检查、服务编排框架等功能,这些功能往往是相互独立的。服务网格则通过单个的服务网格控制器(SMG)来集成这些功能,将其编排起来,提供统一的观测和管理能力。SMG可以通过声明式API来编排微服务集群,包括服务路由、服务熔断、微服务流量监控、灰度发布、版本管理等。通过标准化的接口和协议,服务网格可以轻松与多种服务发现、配置中心、消息队列、API网关等组件集成,实现统一的服务治理能力。

3.2.4 分布式事务

分布式事务(Distributed Transaction)是指涉及到多个事务操作的业务操作。在微服务架构中,需要考虑分布式事务的容错机制和最终一致性。

服务网格通过分布式事务总线(DTM)来实现分布式事务,它是一个独立的组件,专门用来管理微服务之间的事务,包括事务注册、协调、提交和回滚等。DTM会监控微服务集群中的事务事件,并在每个事务参与方之间引入一个全局事务管理器TM,实现分布式事务的原子性、一致性、持久性和容错性。DTM通过一站式架构,简化微服务架构中的分布式事务处理。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到