微服务

微服务

微服务基本策略

降级 (Fallback)

原理

降级是在服务出现异常或资源紧张时,主动关闭或简化某些功能,以保证系统的核心功能依然可用。通过预先定义的降级规则,当触发条件满足时,会调用备用逻辑或返回预设的响应。

使用方法

  • 在 go-chassis 中,可以通过配置文件定义降级规则,例如配置当服务响应时间超过某个阈值时触发降级。
  • 开发者需要为可能需要降级的服务编写备用处理逻辑。
  • 在服务启动时,go-chassis 会根据配置的规则对服务进行降级处理。

降级过程

配置阶段

  • 在配置文件中定义降级规则,包括触发条件(如响应时间超过500ms)和降级策略(如返回缓存数据或预设的默认响应)。

运行时监测

  • 服务在运行时,框架会实时监控服务的性能指标,如响应时间、错误率等。
  • 当监控指标达到降级规则预设的触发条件时,框架将启动降级流程。

触发降级

  • 框架将不再调用正常的业务逻辑处理请求,而是执行降级策略。
  • 降级策略可能包括返回一个预定义的响应、调用备用逻辑(如返回缓存数据)或直接拒绝服务。

恢复

  • 当监控指标恢复正常,框架会关闭降级策略,服务恢复正常调用流程。

熔断 (Circuit Breaker)

原理

熔断机制通过监控服务调用的失败率或响应时间,一旦达到设定的阈值,熔断器就会打开,后续的请求会自动失败而不会发送到下游服务,从而避免因一个服务的故障导致整个系统雪崩。

使用方法

  • 熔断功能可以通过配置文件来设置熔断策略,如失败率或响应时间。
  • 例如 使用 go-chassis 提供的熔断器组件, circuit breaker
  • 定义熔断器的三种状态:关闭、打开和半开,以及状态转换的逻辑。

熔断过程

配置阶段

  • 在配置文件中定义熔断规则,包括失败率阈值、响应时间阈值以及熔断器状态转换的逻辑。

运行时监测

  • 框架会跟踪服务的调用情况,包括成功、失败和超时等状态。
  • 当失败率或响应时间超过预设的阈值时,熔断器进入“打开”状态。

触发熔断

  • 在熔断器打开的状态下,对下游服务的调用会被自动失败,不会真正发送请求。
  • 熔断器通常会有一个时间窗口,在这段时间内所有请求都会被熔断。

半开状态

  • 经过一段时间后,熔断器会进入“半开”状态,允许部分请求尝试调用下游服务。
  • 如果这些请求成功,熔断器将关闭,服务恢复正常;如果失败,熔断器重新进入“打开”状态。

限流 (Rate Limiting)

原理

限流是限制系统处理请求的速率,防止系统因请求过多而超负荷运作。通过设置每秒请求数 (QPS) 或每分钟请求数 (TPS) 来控制请求量。

使用方法

  • 通过配置文件设定限流规则,例如每秒允许的最大请求数。
  • 使用不同的限流算法,如令牌桶、漏桶等。
  • 开发者可以针对不同服务或API设置不同的限流策略。

限流过程

配置阶段

  • 在配置文件中定义限流规则,如每秒允许的最大请求数(QPS)或每分钟允许的最大请求数(TPS)。

运行时控制

  • 框架会根据配置的限流规则,使用限流算法(如令牌桶、漏桶)来控制请求的通过速率。
  • 每个请求在处理之前需要从限流器获取一个令牌,如果没有获取到,则请求被拒绝。

处理请求

  • 获取到令牌的请求可以正常处理。
  • 如果请求超过了限流器的限制,则根据配置的规则进行处理,如直接拒绝、排队等待等。

动态调整

  • 在服务运行过程中,可以根据实际情况动态调整限流规则,以应对不同的负载情况。

注册中心

什么是注册中心

注册中心分发过程

1.服务注册

  • 服务启动时注册:当一个微服务实例启动时,它会向注册中心注册自己,提供其网络位置(如IP地址和端口号)和其他元数据。
  • 健康检查:注册中心通常会定期对已注册的服务实例进行健康检查,以确保它们仍然可用。

2. 服务发现

  • 服务消费者查询:当一个服务消费者需要调用另一个服务时,它会向注册中心查询可用服务的列表。
  • 获取服务列表:注册中心返回一个可用服务实例的列表给消费者。

3. 负载均衡

注册中心通常内置或与外部负载均衡器配合,进行请求分发:

  • 轮询策略:注册中心可以简单地按顺序将请求分发给每个服务实例,这是最基础的负载均衡策略。
  • 随机策略:注册中心随机选择一个服务实例来处理请求。
  • 最少连接策略:注册中心会将请求分发给当前连接数最少的服务实例。
  • 权重策略:根据服务实例配置的权重,注册中心按比例分发请求。

4.分发过程

以下是注册中心分发请求的具体步骤:

  • 请求到达:服务消费者的请求到达注册中心。
  • 负载均衡决策:注册中心根据配置的负载均衡策略,选择一个服务实例。
  • 服务实例信息返回:注册中心将选定的服务实例的信息(如IP和端口)返回给服务消费者。
  • 请求转发:服务消费者使用返回的服务实例信息,将请求直接发送到该服务实例。

5. 动态更新

  • 服务实例变化:如果服务实例因故障或维护而下线,或新的服务实例上线,注册中心会动态更新服务列表。
  • 健康检查失败:如果健康检查发现某个服务实例不再健康,注册中心会将其从可用列表中移除。