V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
overthemoon
V2EX  ›  问与答

docker 容器化部署与 feign 服务调用问题

  •  
  •   overthemoon · 2022-08-24 09:00:59 +08:00 · 1938 次点击
    这是一个创建于 824 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原来项目使用 feign 进行服务调用的,现在用原来的代码给甲方公司进行二次开发,甲方需要通过 docker-swarm 进行容器化部署和服务治理。
    现在问题是,甲方需要我们服务之间调用需要通过 resttemplate ,就是传一个域名,通过 docker 进行 dns 解析然后进行服务调用。
    原来项目里面充斥着大量的 feign 调用的业务代码,如果通过 resttemplate 调用需要手动拼接各种东西。
    请问,有没有一种办法,既兼容甲方的 docker 容器化部署方式,又兼容 feign 的负载均衡的调用方式呢?

    第 1 条附言  ·  2022-08-24 10:48:31 +08:00
    我们架构师说容器化部署后,naocs 地址会变,不能用 nacos
    22 条回复    2022-08-25 08:48:19 +08:00
    datoujiejie221
        1
    datoujiejie221  
       2022-08-24 09:12:24 +08:00 via iPhone
    再部个 nacos
    overthemoon
        2
    overthemoon  
    OP
       2022-08-24 09:22:31 +08:00
    @datoujiejie221 nacos 容器化需要怎么操作
    gitdoit
        3
    gitdoit  
       2022-08-24 09:23:11 +08:00
    魔改一下 feign 呢
    sujin190
        4
    sujin190  
       2022-08-24 09:29:43 +08:00
    feign 不还是 http 调用,本来就是走域名的,所以这两者哪不同了?哪来的兼容性问题。。
    ql562482472
        5
    ql562482472  
       2022-08-24 10:46:21 +08:00
    Feign 原本就是走 HTTP 调用,用 Feign 和 RestTemplate 完全没有区别,你口中的不支持,是你没搞清楚链路
    overthemoon
        6
    overthemoon  
    OP
       2022-08-24 10:48:45 +08:00
    @ql562482472 我们架构师说容器化部署后,naocs 地址会变,不能用 nacos ,是这样吗
    ql562482472
        7
    ql562482472  
       2022-08-24 10:52:24 +08:00
    @overthemoon 使用 swarm 可以不用 nacos 了 aService 就是 a 容器的地址,不需要注册中心了 整体移除都可以。容器时代注册中心功能可以托管给其他组件了
    overthemoon
        8
    overthemoon  
    OP
       2022-08-24 10:55:00 +08:00
    @ql562482472 那用 swarm 之后如何进行服务注册和服务发现呢,是否可以继续使用 feign 调用
    ql562482472
        9
    ql562482472  
       2022-08-24 11:02:35 +08:00
    @overthemoon 不需要服务注册,服务发现,而是由容器平台的 DNS 来管理,服务只要启动,就有固有的地址,服务的健康状态由容器平台来管理。
    feign 调用当然是可以的,地址用配置写死就可以了
    overthemoon
        10
    overthemoon  
    OP
       2022-08-24 11:08:32 +08:00
    @ql562482472 那我通过 feign 用域名调用,直接就行了嘛
    zr8657
        11
    zr8657  
       2022-08-24 11:17:54 +08:00
    @overthemoon 直接写域名调就行了,每个服务都跟甲方定个域名让他们配下
    Seulgi
        12
    Seulgi  
       2022-08-24 11:24:32 +08:00
    直接改 feign 注解就行了,feign 是支持直接请求域名的,你们甲方应该是用 docker 的 ingress ,实际对外就是容器名或者 svc 之类的域名:端口,你服务直接请求会被 docker 拦住解析到对应的容器,改动不大。
    leesam1024
        13
    leesam1024  
       2022-08-24 11:55:58 +08:00
    1. 保留 nacos 。
    在容器里面新部署 nacos ,然后会有对应 nacos 服务的 docker 域名,
    在原有项目上把 nacos 的服务地址改为 docker 域名即可。
    feign 注解还是保留原来服务名即可

    2. 不要 nacos ,使用 docker 提供的注册服务。
    feign 注解上的服务名需要改为 docker 内部的域名。
    mritd
        14
    mritd  
       2022-08-24 12:18:51 +08:00 via iPhone
    第一,swarm 基本已经死了,不要用了,换 k8s ,折腾不动用 k3s 的发行版

    第二,容器化以后尽量删除掉无状态应用自己的服务发现,除非该服务发现地层调用 k8s api ,强行上也行,但是会冲突。比如外部容器调度认定不健康,内部应用服务发现认定健康。

    最后,尽量长痛不如短痛,要不后面就是💩上雕花
    datoujiejie221
        15
    datoujiejie221  
       2022-08-24 13:03:53 +08:00 via iPhone
    @overthemoon nacos 不用容器化部署就可以了啊
    idblife
        16
    idblife  
       2022-08-24 13:20:45 +08:00 via iPhone
    用 k8s 吧,nacos 里的服务注册服务发现可以不用
    sujin190
        17
    sujin190  
       2022-08-24 13:38:37 +08:00
    @mritd #14 确实,而且用云的话,好像阿里、腾讯和华为云都有共享集群,便宜不少
    mritd
        18
    mritd  
       2022-08-24 13:46:15 +08:00
    @sujin190 #17 没怎么用过云上的 k8s, 我们都是自己弄的, 然后用个云的 四层 LB 负载一下 api server 就行; 应用部分尽量都走 k8s api 服务发现或者干脆交给 k8s 处理(配置好 health check).
    sujin190
        19
    sujin190  
       2022-08-24 14:56:59 +08:00
    @mritd #18 其实没多少差别,云无非就是直接支持存储用自己的云硬盘,service 和 ingress 可以直接用自己的负载均衡,什么监控日志告警啥的可以接入云基础服务,其他的没啥特别的,要说界面啥的真不咋好用,感觉还不如直接做集群管理 rancher 之类的好用呢
    xaplux
        20
    xaplux  
       2022-08-24 15:02:13 +08:00
    feign 注解不是有个 url 参数么,指定一下域名就行
    @FeignClient(name = "xxx", url = "https://xxx.com", configuration = XxxxConfig.class)
    mritd
        21
    mritd  
       2022-08-24 15:02:44 +08:00
    @sujin190 #19 云核心在 CPI, 具体更底层有没有啥优化就不清楚了; 理论上如果完全解耦合的话, 直接拿他们的 CPI 部署到自己集群也行, 但是如果有私货不开源那就没办法了.
    wm5d8b
        22
    wm5d8b  
       2022-08-25 08:48:19 +08:00 via Android
    改容器挺好呀,DNS 就可以,nacos 都省了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5989 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:01 · PVG 11:01 · LAX 19:01 · JFK 22:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.