Zadig 自测模式:破解研发环境困境,激发开发新效能

低成本快速拉起子环境,团队多人高效协同,轻松应对业务变化,开发者体验 UP~

cover.png

在日常开发中,研发工程师经常遭遇环境资源紧张、管理无序和资源争夺,这些问题不仅消耗了大量宝贵时间,也制约了工程师的创新能力,对项目进度和质量构成影响。尽管对于业务架构简单和微服务数量有限的情况,可以通过扩展新环境来满足自测和联调需求,但在业务复杂的场景下,由于成本和技术限制,复制多套环境变得极具挑战。

工程师的痛点问题
1. 业务复杂度高,环境复制难度高
2. 微服务数量大,环境复制成本高
3. 环境一致性差,版本混乱上线风险高
4. 环境不稳定,频繁中断开发体验差

为了应对上述痛点问题,Zadig 提出了一种低成本子环境搭建方案。通过自测模式,只需部署少量服务,并与基准环境服务交互,从而提高开发和联调的效率。

在本文中,我们将深入探讨 Zadig 自测模式的基本原理、应用场景、管理员操作细节和工程师在日常使用中的实际操作等。

# 基本原理

自测模式是 Zadig 为降低环境管理复杂度和部署成本而推出的一种面向开发者的功能模块。当开启了环境的自测模式后,该环境则成为基准环境,该环境拥有完整的服务调用链。没有灰度标的请求会在基准环境中进行调用,调用链路为 A -> B -> C

当开发者需要进行开发、联调时,比如涉及到到 A 和 C 两个服务的变更,可以基于基准环境新建 dev1 子环境,该子环境中仅部署变更后的 A 和 C 服务,即 A' 和 C'。联调时请求加上灰度标,如在 http header 中设定 x-env=dev1 的灰度标,此时请求会按照 A' -> B -> C' 进行。

同理,当开发、联调时仅涉及到 B 和 C 两个服务的变更时,可以基于基准环境新建 dev2 子环境,该子环境仅部署变更后的 B 和 C 服务,即 B'' 和 C''。联调时加上灰度标 x-env=dev2,这样请求按照 A -> B'' -> C'' 进行。

# 应用场景

Zadig 的自测模式支持用较低成本快速拉起包括部分服务的子环境,在子环境中开发、变更目标服务,并和包括全量服务的基准环境交互来实现自测联调,企业可使用自测模式解决的问题包括但不限于:

  1. 开发频率快,业务验证需求旺盛,亟需小快跑的方式迭代业务,但缺乏相关工程底座建设。
  2. 微服务的数量大,业务复杂度高,导致建设一套完整的环境成本高,代价大。
  3. 部分微服务因基础技术架构等原因,无法完整地复制出多套完整环境,导致多个团队绑定在一个环境中,环境稳定性难保障。
  4. ......

# 如何使用

下面以 simple-service为例来说明如何配置和使用 Zadig 自测模式。项目背景以及自测联调需求说明如下:

  1. 项目中共包括 3 个微服务 a、b、c,服务调用链路:a -> b -> c
  2. dev 环境为日常完整稳定的测试环境,包括全部微服务 a、b、c
  3. 日常会对 a 服务进行高频改动,希望能对 a 服务进行充分自测,确保其变更可交付

# 管理员:配置自测模式

# 步骤 1:开启自测模式

访问 dev 环境 > 更多 > 点击开启自测模式

这时会对自测模式的依赖条件做检查:

  1. 业务架构实现全链路数据透传能力或者使用 Tracing 组件。系统无法自动检查,需要管理员自行确保,此处支持较为广泛应用的 SkyWalking、Zipkin、Jaeger 等。
  2. 系统会对 Istio 是否安装做自动检查,如果没有请在环境所在集群进行安装
  3. 服务调用链自动检查,主要依据是有 K8s Service 类型的资源和服务 a、b、c 对应

当开启自测模式后,dev 环境即成为基准环境。

# 步骤 2:配置入口服务

若需要在子环境中添加并联调入口服务,即本项目中a服务,则需要在基准环境中,配置入口服务的 Istio 网关。并将配置的访问地址解析到集群 istio-ingressgateway service 的外网访问地址上,如下图所示。

# 工程师:日常自测联调

# 创建子环境

在 dev 基准环境中通过点击创建子环境,选择 a 服务可创建包含 a 服务的子环境 dev-subenv1

# 请求验证

当需要请求服务 a 时,在请求头部加入 x-env=dev-subenv1 即可将请求流量转发到子环境 dev-subenv1 中,实现子环境和 dev 环境的自测联调。测试效果如下所示:

  1. 增加 x-env=dev-subenv1 请求头访问服务 a,子环境中的服务 a 会接收到请求并给出响应,对于请求链路上的 b 和 c 服务,dev 环境中的服务会给出正常响应。
curl -H "x-env=dev-subenv1" http://{绑定的入口服务地址}/api/v1/info

子环境 dev-subenv1 中 a 服务的日志:

  1. 执行不带任何头部信息的请求,直接请求服务 a,dev 环境中的服务 a、b、c 会处理请求,子环境中无请求流量输入。
curl  http://{绑定的入口服务地址}/api/v1/info

基准环境 dev 中 a 服务的日志:

Zadig 的自测模式是为开发者量身定制的解决方案,适用于多人协同开发、业务规模大、服务相互关联、日常变更频繁的场景。传统测试环境所带来的有限资源、高成本、复杂性等问题,在 Zadig 的自测模式下迎刃而解。

通过低成本搭建子环境、灵活部署少量服务,Zadig 的自测模式使开发者能够在独立的测试环境中进行高效工作,摆脱了对同一测试环境的争夺,提升了开发流程的质量和效率。

Background Image

作为一名软件工程师,我们一直给各行各业写软件提升效率,但是软件工程本身却是非常低效,为什么市面上没有一个工具可以让研发团队不这么累,还能更好、更快地满足大客户的交付需求?我们是否能够打造一个面向开发者的交付平台呢?我们开源打造 Zadig 正是去满足这个愿望。

—— Zadig 创始人 Landy