0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

OSC开源社区 来源:OSC开源社区 2023-02-09 11:12 次阅读

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

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

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

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

Telepresence

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

8617f4fe-a813-11ed-bfe3-dac502259ad0.png

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

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

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

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

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

全局流量拦截

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

862efaaa-a813-11ed-bfe3-dac502259ad0.png

个人流量拦截

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

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

86471252-a813-11ed-bfe3-dac502259ad0.png

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

  • 基于主机安装 Rainbond [1]或基于 Helm 安装 Rainbond[2]

安装 Telepresence

MacOS:

#Intel
brewinstalldatawire/blackbird/telepresence

#M1
brewinstalldatawire/blackbird/telepresence-arm64

Windows:

#使用管理员身份打开Powershell

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

#解压缩包
Expand-Archive-Pathtelepresence.zip-DestinationPathtelepresenceInstaller/telepresence
Remove-Item'telepresence.zip'
cdtelepresenceInstaller/telepresence

#安装
powershell.exe-ExecutionPolicybypass-c".'.install-telepresence.ps1';"

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

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

$telepresencehelminstall
...
TrafficManagerinstalledsuccessfully

或者在 Kubernetes 集群中使用 Helm 安装 Traffic Manager[3]

本地连接远程服务

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

$telepresenceconnect
connectedtocontext

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

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

865fb988-a813-11ed-bfe3-dac502259ad0.png

后面会以 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 组件内的端口访问地址获取。
  • 如果本地只启动一个 pig-auth 服务,pig-auth 需要连接 pig-register 和 redis,那么就需要将这俩服务的对外端口打开,并修改配置文件让本地的 pig-auth 服务可以连接远程到 pig-register 和 redis。

在本地调试 auth 服务

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

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

$telepresenceintercept--port<local-port>:-n

命令拆解

#
#需要拦截流量的服务workload
$kubectlgetdeploy-nzq
NAMEREADYUP-TO-DATEAVAILABLEAGE
pig-auth1/111146m

#本地端口

#
#需要拦截流量的服务的serviceportname
$kubectlgetsvcgr795b69-nzq-oyaml
...
ports:
-name:http-3000
port:3000
protocol:TCP
targetPort:3000
...

#命名空间

最终命令:

$telepresenceinterceptpig-auth--port3000:http-3000-nzq
UsingDeploymentpig-auth
intercepted
Interceptname:pig-auth-zq
State:ACTIVE
Workloadkind:Deployment
Destination:127.0.0.1:3000
ServicePortIdentifier:http-3000
VolumeMountError:sshfsisnotinstalledonyourlocalmachine
Intercepting:allTCPrequests

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

866fe8ee-a813-11ed-bfe3-dac502259ad0.gif

最后

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

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2670

    浏览量

    47340
  • 服务器
    +关注

    关注

    12

    文章

    9017

    浏览量

    85182
  • 微服务
    +关注

    关注

    0

    文章

    134

    浏览量

    7328

原文标题:让远程成为本地,微服务后端开发的福音

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    微服务架构下分布式事务解决方案 —— 阿里GTS

    中间件。原文地址:https://yq.aliyun.com/articles/542020 1 微服务的发展微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发
    发表于 03-16 11:14

    微服务网关gateway的相关资料推荐

    目录微服务网关 gateway 概述[路由器网关 Zuul 概述]嵌入式 Zuul 反向代理微服务网关 gateway 概述1、想象一下一个购物应用程序的产品详情页面展示了指定商品的信息:2、若是
    发表于 12-23 08:19

    关于微服务的一些问题的解答

    微服务确实很受欢迎,但是对于微服务的误解也是事实,本文对这些误解一一来介绍下: 一、微服务不够微? 尽管微服务定义的很明确,但是开发者社区对
    发表于 10-11 11:27 0次下载
    关于<b class='flag-5'>微服务</b>的一些问题的解答

    什么是微服务_微服务知识点全面总结

    微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以工作变得更为简便,它可扩展单个
    的头像 发表于 02-07 16:06 1.5w次阅读

    微服务可靠性设计

    微服务化之后,系统分布式部署,传统单个流程的本地API调用被拆分成多个微服务之间的跨网络调用,由于引入了网络通信、序列化和反序列化等操作,系统发生故障的概率提高了很多。微服务故障,有些
    的头像 发表于 02-09 09:21 3894次阅读
    <b class='flag-5'>微服务</b>可靠性设计

    java微服务架构有哪些

    本文首先简单介绍了微服务的概念以及使用微服务所能带来的优势,然后结合实例介绍了几个常见的Java微服务框架。微服务开发领域的应用越来越广泛
    的头像 发表于 02-09 10:34 8621次阅读
    java<b class='flag-5'>微服务</b>架构有哪些

    微服务优势_微服务架构的好处与不足

    是相互独立的,所以不同的服务可以使用不同的语言来开发,或者根据业务的需求使用不同类型的数据库。总而言之,微服务架构有很多吸引人的地方,不过在拥抱微服务之前要认清它所带来的挑战。而每一种
    发表于 02-23 11:24 4385次阅读

    Python微服务开发的源代码合集免费下载

    本文档的主要内容详细介绍的是Python微服务开发的源代码合集免费下载。
    发表于 09-20 08:00 3次下载

    Dubbo 如何成为连接异构微服务体系的最佳服务开发框架

    从编程开发的角度来说,Apache Dubbo (以下简称 Dubbo )首先是一款 RPC 服务框架,它最大的优势在于提供了面向接口代理的服务编程模型,对开发者屏蔽了底层的
    发表于 03-12 17:04 931次阅读
    Dubbo 如何<b class='flag-5'>成为</b>连接异构<b class='flag-5'>微服务</b>体系的最佳<b class='flag-5'>服务</b><b class='flag-5'>开发</b>框架

    微服务为什么要用到API网关?

    微服务架构(通常简称为微服务)是指开发应用所用的一种架构形式。通过微服务,可将大型应用分解成多个独立的组件,其中每个组件都有各自的责任领域。
    的头像 发表于 04-14 09:17 717次阅读

    基于Traefik自研的微服务网关

    数据平面主要功能是接入用户的HTTP请求和微服务被拆分后的聚合。使用微服务网关统一对外暴露后端服务的API和契约,路由和过滤功能正是网关的核心能力模块。另外,
    的头像 发表于 04-16 11:08 2568次阅读

    【Spring Cloud 】基于微服务架构的智慧工地监管平台源码带APP

    技术架构:微服务 开发语言:Java 开发工具:Idea 前端框架:Vue 后端框架:Spring Cloud 数 据 库:My
    的头像 发表于 08-28 11:10 608次阅读
    【Spring Cloud 】基于<b class='flag-5'>微服务</b>架构的智慧工地监管平台源码带APP

    springcloud微服务架构

    Spring Cloud是一个开源的微服务架构框架,它提供了一系列工具和组件,用于构建和管理分布式系统中的微服务。它基于Spring框架,旨在通过简化开发过程和降低系统复杂性来帮助开发
    的头像 发表于 11-23 09:24 1214次阅读

    设计微服务架构的原则

    微服务是一种软件架构策略,有利于改善整体性能和可扩展性。你可能会想,我的团队需不需要采用微服务,设计微服务架构有哪些原则?本文会给你一些灵感。文章速览:微服务设计的要素
    的头像 发表于 11-26 08:05 559次阅读
    设计<b class='flag-5'>微服务</b>架构的原则

    如何构建弹性、高可用的微服务

    基于微服务的应用程序可实现战略性数字转型和云迁移计划,对于开发团队来说,这种架构十分重要。那么,如何来构建弹性、高可用的微服务呢?RedisEnterprise给出了一个完美的方案。文况速览
    的头像 发表于 11-26 08:06 453次阅读
    如何构建弹性、高可用的<b class='flag-5'>微服务</b>?