让远程成为本地,微服务后端开发的福音

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 微服务后端开发的最大痛点之一就是调试困难,非常影响我们的开发效率。

微服务后端开发的最大痛点之一就是调试困难,非常影响我们的开发效率。

如果我们想与其他微服务进行联动调试,则需要在本地环境中启动对应的微服务模块,这可能需要大量的配置和构建时间,同时也会占用我们本地很多资源,可能还会出现”带不动“的情况。

虽然说我们可以在测试服务器上进行调试,但整个流程也是比较漫长,提交代码 -> 触发CI/CD -> 等待构建成功,可能简单的 BUG 我们提交代码打个日志就能解决问题,当遇到复杂的 BUG 时通过这个方式在服务器上调试就非常难受了,太浪费时间了,提交 -> 等待,反反复复,始终没有本地开发工具直接调试的方便。

下面介绍的工具将远程和本地融为一体,让本地开发更加流畅。

Telepresence

Telepresence 是一个开源工具,用于在本地开发环境中模拟 Kubernetes 集群中的微服务,它允许开发人员在本地开发环境中运行和调试微服务,而不必担心环境的复杂性和配置困难。

简单来说 Telepresence 将 Kubernetes 集群中服务的流量代理到本地,Telepresence 主要有四个服务:

Telepresence Daemon: 本地的守护进程,用于集群通信和拦截流量。

Telepresence Traffic Manager: 集群中安装的流量管理器,代理所有相关的入站和出站流量,并跟踪主动拦截。

Telepresence Traffic Agent: 拦截流量的 sidecar 容器,会注入到工作负载的 POD 中。

Ambassador Cloud: SaaS 服务,结合 Telepresence 一起使用,主要是生成预览 URL 和一些增值服务。

全局流量拦截

全局流量拦截是将 Orders 的所有流量都拦截到我们本地开发机上,如下图。

个人流量拦截

个人流量拦截允许选择性地拦截服务的部分流量,而不会干扰其余流量。这使我们可以与团队中的其他人共享一个集群,而不会干扰他们的工作。每个开发人员都可以只针对他们的请求拦截 Orders 服务,同时共享开发环境的其余部分。

个人拦截需要配合 Ambassador Cloud 使用,这是一项收费服务,免费用户可以最多拦截 3 个服务。

结合 Telepresence 开发调试 Rainbond 上的微服务

安装 Telepresence

MacOS:

# Intel
brew install datawire/blackbird/telepresence

# M1
brew install datawire/blackbird/telepresence-arm64

Windows:

# 使用管理员身份打开 Powershell

# 下载压缩包
Invoke-WebRequest https://app.getambassador.io/download/tel2/windows/amd64/latest/telepresence.zip -OutFile telepresence.zip

# 解压缩包
Expand-Archive -Path telepresence.zip -DestinationPath telepresenceInstaller/telepresence
Remove-Item 'telepresence.zip'
cd telepresenceInstaller/telepresence

# 安装
powershell.exe -ExecutionPolicy bypass -c " . '.\install-telepresence.ps1';"

安装 Telepresence 流量管理器到集群中

可以使用 Telepresence 快速安装 Traffic Manager,本地需要有 kubeconfig 文件 ~/.kube/config

$ telepresence helm install
...
Traffic Manager installed successfully

或者在 Kubernetes 集群中使用 Helm 安装 Traffic Manager。

本地连接远程服务

本地使用 telepresence connect 连接远程 Kubernetes API Server,本地需要有 kubeconfig 文件 ~/.kube/config

$ telepresence connect
connected to context <your-context>

在 Rainbond 上快速部署 Pig 微服务应用

通过 Rainbond 开源应用商店快速部署 Pig 微服务应用,部署后如下图

后面会以 pig-auth 这个服务为例,演示本地开发调试的流程,这里需要做一些小改动:

  1. 从应用商店安装的应用默认 Workload 是字符串,需要修改 Workload 为易于查看的,这里以 pig-auth 为例,进入组件中编辑组件名称,修改组件英文名称为 auth
  2. 简单来说 telepresence 的工作原理就是代理 k8s service,默认 gateway 到 auth 是使用的 nacos 做的负载均衡,这样的话 telepresence 是无法拦截到流量的,我们需要修改 gateway 配置使用 k8s service 做负载均衡。

    • 打开 pig-register 组件的 8848 对外端口,访问 nacos,修改 pig-gateway-dev.ymlspring.cloud.gateway.routes.uri: http://gr795b69:3000gr795b69:3000 通过 pig-auth 组件内的端口访问地址获取。
  3. 如果本地只启动一个 pig-auth 服务,pig-auth 需要连接 pig-register 和 redis,那么就需要将这俩服务的对外端口打开,并修改配置文件让本地的 pig-auth 服务可以连接远程到 pig-register 和 redis。

在本地调试 auth 服务

使用 IDEA 或 VScode 在本地启动 pig-auth 服务。

在本地使用 telepresence 拦截 pig-auth 流量,命令如下:

$ telepresence intercept <workload> --port <local-port>:<service port name> -n <namespace>

命令拆解:

# <workload>
# 需要拦截流量的服务 workload
$ kubectl get deploy -n zq
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
pig-auth       1/1     1            1           146m

# <local-port> 本地端口

# <service port name>
# 需要拦截流量的服务的 service port name
$ kubectl get svc gr795b69 -n zq -o yaml
...
  ports:
  - name: http-3000
    port: 3000
    protocol: TCP
    targetPort: 3000
...

# <namespace> 命名空间

最终命令:

$ telepresence intercept pig-auth --port 3000:http-3000 -n zq
Using Deployment pig-auth
intercepted
   Intercept name         : pig-auth-zq
   State                  : ACTIVE
   Workload kind          : Deployment
   Destination            : 127.0.0.1:3000
   Service Port Identifier: http-3000
   Volume Mount Error     : sshfs is not installed on your local machine
   Intercepting           : all TCP requests

我们在本地给退出登陆这块逻辑打上断点,然后通过线上的前端退出登陆,打到我们本地 IDEA上,整体效果如下:

最后

Telepresence 可以帮助我们简化本地开发流程,同时保证代码的正确性和可靠性。还能使我们在集群中轻松调试和测试代码,提高开发效率。结合 Rainbond 的部署简化,从开发到部署都非常的简单,让我们专注于代码编写。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4月前
|
缓存 监控 持续交付
构建高效微服务架构:后端开发者的七大秘诀
在本文中,我们将深入探讨构建和维护高效微服务架构的关键策略。不同于常规的技术细节介绍,我们将重点放在实践技巧和方法论上,帮助后端开发者提升系统设计能力,确保微服务架构的稳定性、扩展性和安全性。从服务划分到数据一致性,再到服务监控与调优,文中将提供一系列实用的建议和最佳实践,旨在指导读者如何在复杂多变的业务环境中构建出健壮且高效的微服务体系。
|
30天前
|
监控 负载均衡 数据管理
后端开发中的微服务架构实践与挑战
【8月更文挑战第20天】在现代软件工程领域,微服务架构因其灵活性和可扩展性而受到推崇。本文将深入探讨微服务架构的核心概念、实施过程中的关键步骤以及面临的主要挑战,旨在为后端开发人员提供一个全面的视角,帮助他们理解和应对微服务架构带来的变革。
|
1月前
|
API 数据库 开发者
探索后端开发中的微服务架构实践
本文旨在深入探讨微服务架构在后端开发领域的实际应用及其带来的变革。通过具体案例分析,我们将了解微服务如何优化复杂系统的开发与维护,并讨论实施过程中的挑战与解决策略。文章还将提供一些实用的建议,帮助开发者更好地构建和部署微服务应用。
|
1月前
|
Kubernetes 监控 开发者
探索后端开发的新境界:微服务架构与容器化技术
在数字化时代的浪潮中,后端开发不断演进,涌现出创新的架构与技术。本文深入探讨了微服务架构和容器化技术如何重塑后端开发,提升系统的可维护性、可扩展性和部署效率。通过实际案例分析,我们揭示了这些技术背后的原理,并提供了实施的最佳实践和面临的挑战,为后端开发者提供一条清晰的技术升级路径。
52 3
|
23天前
|
消息中间件 Kafka 应用服务中间件
微服务从代码到k8s部署应有尽有系列(一)
微服务从代码到k8s部署应有尽有系列(一)
|
30天前
|
存储 运维 Cloud Native
后端开发中的微服务架构实践
在这个数字化快速发展的时代,后端技术不断演进以支撑日益增长的互联网服务需求。微服务架构作为现代软件工程的一种重要范式,以其灵活性、可维护性和可扩展性受到企业的青睐。本文将深入探讨微服务的核心概念、设计原则以及在实际应用中面临的挑战和解决策略,旨在为后端开发人员提供一套清晰的微服务架构实践指南。
|
3月前
|
Kubernetes 监控 负载均衡
Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?
本文介绍了服务网格(Service Mesh)的概念及其在微服务架构中的重要性。微服务强调围绕业务构建团队和去中心化的数据管理,带来更高的灵活性和扩展性。然而,随着服务数量增加,网络通信成为挑战,包括服务发现、路由和安全等问题。 Service Mesh如Istio应运而生,通过边车代理解决服务间通信,提供服务发现、负载均衡、智能路由、安全和监控等功能。它与Kubernetes结合,增强了容器环境的服务管理能力。Istio的bookinfo示例展示了其在多语言微服务中的应用,简化了代码中的服务调用逻辑,使开发更专注于业务本身。
442 3
Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?
|
4月前
|
消息中间件 API 数据库
构建高性能微服务架构:后端开发的终极指南
【5月更文挑战第27天】随着现代业务需求的不断演进,传统的单体应用架构逐渐显得笨重且难以维护。微服务架构以其灵活性、可扩展性和技术多样性成为企业转型的首选。本文将深入探讨如何构建一个高性能的微服务系统,涵盖关键设计原则、常用技术和实践案例,为后端开发人员提供一份全面的指南。
|
3月前
|
存储 运维 监控
软件设计不是 CRUD:像搭积木一样搭建应用系统(下)——微服务化系统的搭建
【6月更文挑战第8天】微服务架构现为构建复杂应用的主流方法,通过拆分小型独立服务实现灵活组合。服务划分依据业务功能,通信常采用HTTP API或RPC,强调接口简洁、稳定和可扩展。数据管理需保证一致性,示例代码展示了服务间交互。实际搭建还需考虑部署、监控、日志及分布式事务处理等挑战。微服务是一个持续演进的过程,要求开发团队有深厚技术基础和协作能力。它提升了软件的灵活性、可扩展性和可靠性,随着技术进步,微服务架构将持续发展。
73 0
|
4月前
|
API 开发者 UED
构建高效微服务架构:后端开发的新趋势移动应用与系统:开发与优化的艺术
【4月更文挑战第30天】 随着现代软件系统对可伸缩性、灵活性和敏捷性的日益需求,传统的单体应用架构正逐渐向微服务架构转变。本文将探讨微服务架构的核心概念,分析其优势,并着重讨论如何利用最新的后端技术栈实现一个高效的微服务系统。我们将涵盖设计模式、服务划分、数据一致性、服务发现与注册、API网关以及容器化等关键技术点,为后端开发者提供一份实操指南。 【4月更文挑战第30天】 在数字化时代的浪潮中,移动应用和操作系统的紧密交织已成为日常生活和商业活动的基石。本文将深入探讨移动应用开发的关键技术、跨平台开发工具的选择以及移动操作系统的架构和性能优化策略。通过分析当前移动应用开发的挑战与机遇,我们将