返回

阿里云 MSE 全链路灰度方案探索:以 Apache APISIX 为例

后端

正文

微服务架构的灰度发布

随着微服务架构的普及,越来越多的企业开始采用微服务架构来构建分布式应用。微服务架构的灰度发布是指将新的服务版本或功能逐步发布给用户的过程,其主要目的是在减少服务变更对用户影响的同时,确保服务的可靠性和可用性。

全链路灰度发布是灰度发布的一种,它指将服务变更从前端到后端,从上游到下游,逐步发布给用户。全链路灰度发布可以有效降低服务变更的风险,提高服务的可靠性和可用性。

Apache APISIX 和阿里云 MSE

Apache APISIX 是一个动态、易于操作的 API 网关,它提供了丰富的路由策略和流量管理功能。阿里云 MSE 是一个企业级的微服务治理平台,它提供了全链路服务治理、动态多活、统一服务质量等能力。

阿里云 MSE 基于 Apache APISIX 的全链路灰度方案,通过极简的配置与无代码侵入的方式,来实现全链路灰度。该方案的原理是,通过在 APISIX 中配置路由策略,将流量按照一定的比例分配给不同的服务版本。当需要进行灰度发布时,只需调整路由策略中流量的分配比例,即可将流量逐步切换到新的服务版本。

实战案例

为了更好地理解阿里云 MSE 基于 Apache APISIX 的全链路灰度方案,我们以一个基于 Kubernetes 的微服务架构为例,来详细介绍该方案的配置流程和实战案例。

  1. 准备工作

在开始之前,需要准备以下内容:

  • 一个 Kubernetes 集群
  • 部署了 Apache APISIX 和阿里云 MSE 的 Kubernetes 集群
  • 一个微服务应用,该应用具有不同的服务版本
  • 一个 API 网关,该网关将流量路由到微服务应用
  1. 配置 APISIX

登录 APISIX 控制台,创建一个新的网关,并配置以下内容:

  • 网关名称:gray-gateway
  • 监听端口:8080
  • 路由策略:
upstream example_upstream {
  servers {
    example_upstream_v1 192.168.0.1:8080;
    example_upstream_v2 192.168.0.2:8080;
  }
}

server {
  listen 8080;
  server_name example.com;
  location / {
    rewrite_by_lua_block {
      local weights = {10, 90}
      local upstream_nodes = {
        "example_upstream_v1",
        "example_upstream_v2",
      }
      local index = math.random(1, 2)
      local upstream_name = upstream_nodes[index]
      local upstream = ngx.re.match(upstream_name, "^([^\\[]+)\\[(.*)\\]
upstream example_upstream {
  servers {
    example_upstream_v1 192.168.0.1:8080;
    example_upstream_v2 192.168.0.2:8080;
  }
}

server {
  listen 8080;
  server_name example.com;
  location / {
    rewrite_by_lua_block {
      local weights = {10, 90}
      local upstream_nodes = {
        "example_upstream_v1",
        "example_upstream_v2",
      }
      local index = math.random(1, 2)
      local upstream_name = upstream_nodes[index]
      local upstream = ngx.re.match(upstream_name, "^([^\\[]+)\\[(.*)\\]$")
      if upstream == nil then
        ngx.log(ngx.ERR, upstream_name .. " format is invalid")
        return
      end
      ngx.var.upstream = upstream[1]
      ngx.var.server_addr = upstream[2]
      ngx.log(ngx.INFO, upstream_name .. " => " .. upstream[1] .. " " .. upstream[2])
      ngx.balancer(weights)
    }
  }
}
quot;) if upstream == nil then ngx.log(ngx.ERR, upstream_name .. " format is invalid") return end ngx.var.upstream = upstream[1] ngx.var.server_addr = upstream[2] ngx.log(ngx.INFO, upstream_name .. " => " .. upstream[1] .. " " .. upstream[2]) ngx.balancer(weights) } } }
  1. 配置 MSE

登录 MSE 控制台,创建一个新的灰度发布规则,并配置以下内容:

  • 名称:gray-rule
  • 路由策略:选择上述创建的 APISIX 网关的路由策略
  • 灰度比例:选择 10%
  • 灰度对象:选择需要进行灰度发布的微服务应用
  1. 测试

现在,您可以通过 APISIX 网关的 8080 端口访问您的微服务应用。您将看到 10% 的流量被分配给了新的服务版本,90% 的流量被分配给了旧的服务版本。

您可以逐步调整 MSE 灰度发布规则中的灰度比例,将流量逐步切换到新的服务版本。当您确认新的服务版本稳定可靠时,您可以将灰度比例调整为 100%,完成灰度发布。

优势

阿里云 MSE 基于 Apache APISIX 的全链路灰度方案具有以下优势:

  • 简单易用 :该方案配置简单,只需在 APISIX 和 MSE 中进行简单的配置即可实现灰度发布。
  • 无代码侵入 :该方案无需修改微服务应用的代码,即可实现灰度发布。
  • 灰度比例可控 :该方案允许用户灵活控制灰度比例,以逐步将流量切换到新的服务版本。
  • 安全性高 :该方案通过 APISIX 和 MSE 的安全功能,可以确保灰度发布过程中的安全性。

总结

本文介绍了阿里云 MSE 基于 Apache APISIX 的全链路灰度方案,该方案通过极简的配置与无代码侵入的方式,来实现全链路灰度。该方案具有简单易用、无代码侵入、灰度比例可控、安全性高等优势,可以帮助企业用户轻松实现业务变更的灰度发布。