本文以对一个部署在Kubernetes上的微服务应用进行强弱依赖治理为例,介绍通过场景化演练来发现依赖问题、暴露风险的整个过程。

背景信息

本文示例的应用是一个开源电商Demo,提供了商品选购、购物车、下单等功能。由于应用程序不存在对外部云服务的依赖,并且提供了预构建镜像,所以该应用可以直接部署在任意Kubernetes集群上。Demo应用架构如下图所示。

最佳实践1
该微服务Demo由9个服务构成:
  • nacos-server:注册中心。
  • frontend:前端。
  • recommendationservice:推荐系统,负责对首页的产品列表进行排序。
  • cartservice:购物车。
  • cart-redis:购物车信息储存的数据库。
  • checkoutservice:下单。
  • checkout-mysql:下单信息储存的数据库。
  • productservice:商品。
  • product-mysql:商品数据库。

部署应用

部署应用支持以下2种方法:

  • 部署方法1:使用预构建镜像快速部署。

    运行prebuild中的所有YAML文件,使用预构建的镜像快速部署。

    cd prebuild/
    for i in *.yaml; do kubectl apply -f $i; done
  • 部署方法2:手动编译并部署。
    1. 在根目录下运行mvn clean install
    2. 进入每个子模块目录src/{submodule},运行./build.sh,编译并构建镜像文件。
    3. 修改YAML文件中镜像。
    4. 部署应用。

创建治理方案

一个治理方案针对一个应用,例如需要对电商Demo的前端页面进行治理,则选择frontend应用。在主机模式下,接入探针时需填写应用名;在K8s环境下,您需要通过Label来识别应用名。

  1. 登录AHAS控制台,然后在页面左上角选择地域
  2. 在左侧导航栏选择故障演练 > 业务场景演练 > 强弱依赖治理,选择创建治理方案
  3. 输入方案名称,单击新应用接入,选择Kubernetes,接入新应用。
    1. 登录容器服务管理控制台
    2. 在左侧导航栏选择市场 > 应用目录,单击ack-ahas-pilot,根据具体情况修改参数,单击创建,详情请参见架构感知监控
      强弱依赖治理最佳实践2.png
    接入探针后,Kubernetes中打标签为app=<name>的Pod将显示在AHAS控制台故障演练的治理应用中。labelsfrontend
  4. 单击下一步,进入依赖分析,注入流量。

    由于依赖关系的准确识别是需要流量的,如果在流量不足的测试环境中接入,则需要您手动提供流量。推荐使用PTS等工具创建压测提供流量,本文示例将压测API中的链接地址更换为frontend的公网访问地址,可自定义流量注入链路。

    1. 登录PTS控制台
    2. 在左侧导航栏选择创建压测 > 创建PTS场景,在场景配置中创建压测场景。详情请参见创建压测场景
      注入流量
  5. 依赖分析页面,系统自动识别依赖关系。

    进入依赖分析页面,在应用存在正常流量的情况下,系统会自动分析建立依赖关系。如果超过一定时长依赖关系无变化,则表示在当前流量关系下,依赖已完全展示。本文示例识别出frontend有5个依赖。

    依赖识别
  6. 单击下一步,进入依赖预判,进行业务依赖判断。

    业务依赖是指对识别到的依赖进行强弱关系的预判,依赖预判不能脱离业务的特性,系统将依赖分为强依赖与弱依赖。如本示例下图所示。

    业务依赖

    通过以上业务依赖的预判可以得出以下结论:

    • 前端对商品推荐服务预判为弱依赖,表示当推荐服务发生故障时前端正常访问不应该受阻。
    • 在购物链路中,商品服务product对商品数据库product-mysql预判为强依赖。表示如果扣减库存失败,则应该阻断下单流程,否则可能导致超卖的错误。
  7. 单击下一步,进入依赖验证。选择要验证的依赖,单击去验证

    在对业务分析进行依赖预判后,应通过故障注入的方式验证真实依赖关系是否与预判相符,例如注入依赖的服务间的网络延迟故障。强弱依赖的验证可以有多种指标,例如监控与日志的报警,请求的返回状态码等等。

    本文示例预期frontend与cartservice为弱依赖,单击去验证,开始故障演练。

    依赖验证

    验证结果是前端页面无法显示(或HTTP返回结果非200),如下所示。

    依赖验证2
  8. 演练完成后,单击恢复终止。在结果反馈页面,记录结论验证结果。返回到依赖验证页面继续验证其他依赖。
  9. 单击方案归档,结束1个应用的强弱依赖治理。归档后将无法进行再次分析、验证,但治理报告可正常下载。未手工归档的方案,系统将在30天内自动归档。

总结

强弱依赖治理提供了一系列自动化功能,包括应用接入、依赖智能识别、对应演练自动创建、依赖验证等。为了实现全面准确的依赖分析,您需要提供全面覆盖依赖的流量。

利用强弱依赖治理梳理出应用的依赖关系的强弱,能够提前发现风险、发现不合理的依赖关系,进而提升应用的高可用能力。

演示操作

以下通过3个视频,演示下强弱依赖治理的整个过程。

  1. 准备工作

  2. 操作步骤

  3. 总结