本文以对一个部署在Kubernetes上的微服务应用进行强弱依赖治理为例,介绍通过场景化演练来发现依赖问题、暴露风险的整个过程。
背景信息
示例说明
本文示例的应用是一个开源电商Demo,提供了商品选购、购物车、下单等功能。由于应用程序不存在对外部云服务的依赖,并且提供了预构建镜像,所以该应用可以直接部署在任意Kubernetes集群上。Demo应用架构如下图所示。
- 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:手动编译并部署。
- 在根目录下运行
mvn clean install
。 - 进入每个子模块目录src/{submodule},运行
./build.sh
,编译并构建镜像文件。 - 修改YAML文件中镜像。
- 部署应用。
- 在根目录下运行
创建治理方案
一个治理方案针对一个应用,例如需要对电商Demo的前端页面进行治理,则选择frontend应用。在主机模式下,接入探针时需填写应用名;在K8s环境下,您需要通过Label来识别应用名。
- 登录AHAS控制台。
- 在左侧导航栏选择微服务演练页面单击强弱依赖治理。 ,然后在
- 在强弱依赖治理页面,单击创建治理方案。
- 输入方案名称,单击新应用接入,选择Kubernetes,接入新应用。接入探针后,Kubernetes中打标签为
app=<name>
的Pod将显示在AHAS控制台故障演练的治理应用中。 - 单击下一步,进入依赖分析,注入流量。
由于依赖关系的准确识别是需要流量的,如果在流量不足的测试环境中接入,则需要您手动提供流量。推荐使用PTS等工具创建压测提供流量,本文示例将压测API中的链接地址更换为frontend的公网访问地址,可自定义流量注入链路。
- 在依赖分析页面,系统自动识别依赖关系。
进入依赖分析页面,在应用存在正常流量的情况下,系统会自动分析建立依赖关系。如果超过一定时长依赖关系无变化,则表示在当前流量关系下,依赖已完全展示。本文示例识别出frontend有5个依赖。
- 单击下一步,进入依赖预判,进行业务依赖判断。
业务依赖是指对识别到的依赖进行强弱关系的预判,依赖预判不能脱离业务的特性,系统将依赖分为强依赖与弱依赖。如本示例下图所示。
通过以上业务依赖的预判可以得出以下结论:
- 前端对商品推荐服务预判为弱依赖,表示当推荐服务发生故障时前端正常访问不应该受阻。
- 在购物链路中,商品服务product对商品数据库product-mysql预判为强依赖。表示如果扣减库存失败,则应该阻断下单流程,否则可能导致超卖的错误。
- 单击下一步,进入依赖验证。选择要验证的依赖,单击去验证。
在对业务分析进行依赖预判后,应通过故障注入的方式验证真实依赖关系是否与预判相符,例如注入依赖的服务间的网络延迟故障。强弱依赖的验证可以有多种指标,例如监控与日志的报警,请求的返回状态码等等。
本文示例预期frontend与cartservice为弱依赖,单击去验证,开始故障演练。
验证结果是前端页面无法显示(或HTTP返回结果非200),如下所示。
- 演练完成后,单击恢复或终止。在结果反馈页面,记录结论和验证结果。返回到依赖验证页面继续验证其他依赖。
- 单击方案归档,结束1个应用的强弱依赖治理。归档后将无法进行再次分析、验证,但治理报告可正常下载。未手工归档的方案,系统将在30天内自动归档。
总结
强弱依赖治理提供了一系列自动化功能,包括应用接入、依赖智能识别、对应演练自动创建、依赖验证等。为了实现全面准确的依赖分析,您需要提供全面覆盖依赖的流量。
利用强弱依赖治理梳理出应用的依赖关系的强弱,能够提前发现风险、发现不合理的依赖关系,进而提升应用的高可用能力。
演示操作
以下通过3个视频,演示下强弱依赖治理的整个过程。
- 准备工作
- 操作步骤
- 总结