当前位置: 代码网 > 服务器>服务器>Linux > 开发者子环境实战:Istio、SkyWalking 与 Spring Boot 的集成应用

开发者子环境实战:Istio、SkyWalking 与 Spring Boot 的集成应用

2024年08月04日 Linux 我要评论
微服务架构被企业级开发广泛采用,而随着业务迅速发展,服务数量也呈现爆炸式的增长。日常开发过程中一套测试环境可能包含成千上百个服务。在协作过程中等待环境、抢占环境、验证冲突已成为常态。而长期发展导致的技术债和基础架构复杂度又非常高,复制多套环境存在较高难度,工程师日常协作只能在等待中苦不堪言。 在 Zadig 系统推出了环境自测模式,工程师可以基于一套含全量服务的基准环境低成本搭建独享的开发者子环境。利用...

微服务架构被企业级开发广泛采用,而随着业务迅速发展,服务数量也呈现爆炸式的增长。日常开发过程中一套测试环境可能包含成千上百个服务。在协作过程中等待环境、抢占环境、验证冲突已成为常态。而长期发展导致的技术债基础架构复杂度又非常高,复制多套环境存在较高难度,工程师日常协作只能在等待中苦不堪言。

在 zadig 系统推出了环境自测模式,工程师可以基于一套含全量服务的基准环境低成本搭建独享的开发者子环境。利用 istio 和 tracing 组件的链路追踪流量动态路由的能力,实现开发者子环境与基准环境联调的目的,从而解决大规模微服务下工程师被环境问题阻塞的情况。

下面以服务网格组件 istio + 企业采用率非常广泛的 skywalking + 典型微服务架构 spring boot 项目 piggymetrics 为例,演示如何使用 zadig 自测模式实现工程师日常自测联调过程。

项目简介

本例 piggymetrics 项目,架构如下:

服务配置文件参考 yaml,服务组成如下:

8 个 spring boot 应用程序:

  • account-service
  • auth-service
  • config-service (主要管理服务依赖的 configmap 和 secret 等配置)
  • gateway
  • monitoring-service
  • notification-service
  • registry-service
  • statistics-service

4 个 mongodb 实例:

  • account-mongodb
  • auth-mongodb
  • notification-mongodb
  • statistics-mongodb

1 个 rabbitmq:

  • rabbitmq

对于 statistics-service 服务开发者需要自测联调,可以基于基准环境拉起一套含有 config-service' 和 statistics-service' 服务的子环境,通过访问基准环境的地址,并且在请求中加上子环境相应的 header 信息可实现访问子环境的能力。效果图如下:

前置准备工作

基础组件信息

  • kubernetes 版本:v1.29(node 2*8c16g)
  • zadig 版本:2.0+
  • skywalking 版本:v10.0.0
  • elasticsearch 版本:7.17.1
  • istio 版本:1.12.1

安装组件

1.安装 zadig

安装方式参考官方文档:快速安装 | zadig 文档

2.安装 istio

安装方式参考官方文档:installation guides

3.安装 skywalking

git clone https://github.com/apache/skywalking-kubernetes
cd skywalking-kubernetes

kubectl create ns skywalking
helm repo add elastic https://helm.elastic.co
helm dep up chart/skywalking

cd chart
helm install skywalking skywalking -n skywalking -f ./skywalking/values-my-es.yaml #根据实际情况自行修改 values-my-es.yaml 配置

准备基准环境

  1. 在 zadig 上创建项目 piggymetrics ,配置服务,服务 yaml fork 自 zadig 代码库,可使用「从代码库同步」方式批量导入服务配置。

服务 yaml 声明中,已通过 initcontainer 共享 skywalking agent jar 到业务容器。initcontainer 所使用的 image 通过以下方式生成:

# 选择对应版本的 agent jar 包下载,并构建成镜像。dockerfile示例如下:
from busybox:latest
run mkdir -p /usr/skywalking/agent/
add apache-skywalking-apm-bin/agent/ /usr/skywalking/agent/
workdir /

业务镜像所使用的 image 生成方式举例:

from java:8-jre

add ./target/statistics-service.jar /app/
entrypoint ["sh","-c","java -dapp.id=$sw_agent_name -xmx200m $java_opts -dskywalking.agent.service_name=$sw_agent_name -dskywalking.collector.backend_service=$sw_agent_collector_backend_services -jar /app/statistics-service.jar"]
expose 7000

需要根据实际情况修改服务 yaml 的环境变量中 skywalking-oap 的地址:sw_agent_collector_backend_services 的值,即 <service-name>.<namespace-name>.svc.cluster.local,服务加载进来后,填写 oap_svc 变量值,本例中配置 skywalking-skywalking-helm-oap

  1. 创建包含全量服务的基准环境 base

部署完成后,可从 skywalking ui 上查看的服务之间的依赖关系如下:

开启自测模式

在基准环境准备完成以后即可开启自测模式并创建包含 config-servicestatistics-service服务的子环境 subdev.

创建过程中后,修改子环境的中服务依赖的中间件等配置,环境配置-添加 configmap special-config-env,修改中间件地址为:<service-name>.<namespace-name>.svc.cluster.local。

apiversion: v1
data:
  account_mongodb_host: account-mongodb.piggymetrics-env-base.svc.cluster.local
  auth_mongodb_host: auth-mongodb.piggymetrics-env-base.svc.cluster.local
  auth_service_host: auth-service.piggymetrics-env-base.svc.cluster.local
  notification_mongodb_host: notification-mongodb.piggymetrics-env-base.svc.cluster.local
  rabbitmq_host: rabbitmq.piggymetrics-env-base.svc.cluster.local
  registry_service_host: registry.piggymetrics-env-base.svc.cluster.local
  statistics_mongodb_host: statistics-mongodb.piggymetrics-env-base.svc.cluster.local
kind: configmap
metadata:
  name: special-config-env

完成配置修改后,子环境环境即可正常和基准环境交互。

验证自测模式

访问 gateway 服务的接口:/account/current

访问链路如下:

1.访问基准环境

本机访问集群中的 gateway 服务,需要先做端口转发。

kubectl port-forward service/gateway 8085:80 -n  piggymetrics-env-base
  • 方式一: chrome 访问 localhost:8085 页面正常操作,即访问的是基准环境。

  • 方式二: 使用 curl 命令请求基准环境
curl -v -x put -h "authorization: bearer c7f5d94f-8eca-4702-96b4-f496837e8e29" -h "content-type:application/json" -d '{"note":null,"incomes":[{"income_id":1,"title":"10000www","icon":"wallet","currency":"usd","period":"month","amount":"10000","converted":"nan"}],"expenses":[],"saving":{"amount":0,"capitalization":false,"deposit":false,"currency":"usd","interest":0}}' localhost:8085/accounts/current

上述请求中的 access token bearer c7f5d94f-8eca-4702-96b4-f496837e8e29 可以通过登录 piggymetrics web 端新建用户获取,如下图所示。

2.访问子环境

访问地址使用 base 环境的地址,并在请求 header 中添加字段:

方式一: 利用 chrome 插件 modheader,使页面发起的请求在 header 中添加字段。加上字段后,可以使用 chrome 页面操作,访问子环境进行自测联调。

方式二: 使用 curl 命令将请求转发到子环境,使用子环境进行自测联调,请求 header 中添加字段 x-env、sw8。

curl -v -x put -h "authorization: bearer c7f5d94f-8eca-4702-96b4-f496837e8e29" -h 'x-env: subdev' -h 'sw8: 1-mjk3zwiyytiznzk2ngqzzdgzmzvkmjk3mta3njlinjqundkumty1mtcznjc1ndewntawmde=-mjk3zwiyytiznzk2ngqzzdgzmzvkmjk3mta3njlinjqundkumty1mtcznjc1ndewntawmda=-1-u2vydmljzui=-mtewy2vhmzfhodcwndblztkwn2qxzjqxotg0mjuzmtfamtkylje2oc4wlji0ma==-r0vuoi9ncmvldgluzy97bmftzx0=-u2vydmljzue6oda=' -h "content-type:application/json" -d '{"note":null,"incomes":[{"income_id":1,"title":"10000www","icon":"wallet","currency":"usd","period":"month","amount":"10000","converted":"nan"}],"expenses":[],"saving":{"amount":0,"capitalization":false,"deposit":false,"currency":"usd","interest":0}}' localhost:8085/accounts/current

查看子环境 subdev 中 statistics-service 服务的日志,可知请求已到子环境服务中。

kubectl logs statistics-service-5966d6b65c-5sc98 -n piggymetrics-env-subdev|grep "statistics-service-"

至此已实现自测模式的能力,工程师可以根据实际情况基于基准环境创建属于自己的子环境。

扫码即刻咨询
解锁企业专属最佳实践方案!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com