有什么轻量级的微服务网关可以替换掉 springcloudgateway? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
bouts0309
V2EX    程序员

有什么轻量级的微服务网关可以替换掉 springcloudgateway?

  •  
  •   bouts0309 2024-05-13 22:09:19 +08:00 3121 次点击
    这是一个创建于 516 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近尝试将 Java 系的服务都转到更轻量级的方案上,包括 springboot->gin,nacos->consul 等,但是在微服务网关的选择上不是很清楚有什么轻量的方案。PS:跟着网上的推荐也看了几天 apisix ,但是用 consul 作为上游服务发现类型的时候出现 no allow host 然后 502 ,搜索了一下没发现解决方案,去 apisix 的 discussion 提问还没回复。而且 apisix-dashboard 里服务发现类型还没有 consul 选项,看了一圈 issue 都说会在下一个 release 里发,结果距离上一个 release 已经过去一年多了还没有发新的。

    22 条回复    2024-05-14 19:00:35 +08:00
    xxxccc
        1
    xxxccc  
       2024-05-13 22:57:31 +08:00
    traefik
    bootvue
        2
    bootvue  
       2024-05-13 22:58:33 +08:00
    traefik+1
    heqingpan
        3
    heqingpan  
       2024-05-13 23:06:14 +08:00
    nacos 也可以考虑换成轻量级 r-nacos (用 rust 重写的 nacos ,协议完成兼容),这样就可以和 apisix 配套使用。
    haiku
        4
    haiku  
       2024-05-13 23:07:25 +08:00 via Android
    traefik 确实轻量,容器下动态配置也方便
    tramm
        5
    tramm  
       2024-05-14 08:42:37 +08:00
    Apinto
    还没试过
    chiikawa
        6
    chiikawa  
       2024-05-14 08:51:16 +08:00
    apisix
    chiikawa
        7
    chiikawa  
       2024-05-14 08:52:12 +08:00
    apisix 配合 nacos
    xwayway
        8
    xwayway  
       2024-05-14 08:52:17 +08:00
    apisix + 1 ,当然如果觉得 low 可以用 kong ,我个人倒是觉得 apisix 还行
    halov
        9
    halov  
       2024-05-14 09:01:13 +08:00
    apisix
    pming1
        10
    pming1  
       2024-05-14 09:09:02 +08:00
    上了 k8s ,nacos 都可以省了。
    bthulu
        11
    bthulu  
       2024-05-14 09:30:46 +08:00
    为什么你们还在用网关, 网关这种东西, 自 k8s 诞生的那一天起就被淘汰了.
    zhenjiachen
        12
    zhenjiachen  
       2024-05-14 09:46:30 +08:00
    apisix 不推荐
    /t/1033395
    RainCats
        13
    RainCats  
       2024-05-14 11:40:08 +08:00
    nacos 目前发现有个 rust 重写的 rnacos 可以替换,但生产环境没试过。
    同样起了八个服务,资源消耗差不多是十几二十倍的差距:
    nacos:698.6MB
    rnacos:29.2MB
    BQsummer
        14
    BQsummer  
       2024-05-14 16:12:57 +08:00
    @bthulu 没网关跨 vpc 怎么调用? 金丝雀发布怎么精确控制流量到 pod? 失败逻辑怎么精确到接口?
    pckillers
        15
    pckillers  
       2024-05-14 16:57:05 +08:00
    @BQsummer
    Q:没网关跨 vpc 怎么调用?
    A:先在路由策略上实现 service 网段跨 VPC 访问,然后通过 k8s 的 RBAC 精确控制各个项目之间访问权限即可。

    Q:金丝雀发布怎么精确控制流量到 pod
    A: 个人只用过基于 Nginx 的 ingress ,但即使是这种传统的 ingress 也支持特定规则 header 流量,特定规则 cookie 流量,或者按照比例的控制流量到多个 service 。 此外 APISIX Ingress 、Kong Ingress 与 Istio 都支持金丝雀发布,个人没在生产环境里用过。 至于精确到 pod ,service 可以包含多个 pod 也可以只包含一个 pod ,这非常简单。

    Q:失败逻辑怎么精确到接口?
    A: 分析 Ingress 层的 log 就行了,比如用 Nginx-ingress 的话就找个能分析 nginx 日志的系统监听 Nginx-ingress 的日志。
    pckillers
        16
    pckillers  
       2024-05-14 17:07:12 +08:00
    个人非常同意 @pming1 的看法。
    nacos 的配置中心功能完全能用 k8s 的 configmap 、secret 甚至 workload 的环境变量替代。
    nacos 的注册服务则是完全能被 k8s 的 service 替代。
    至于很多人喜欢的 java 网关,ingress 要强大得多。

    在 k8s 里搭建 nacos 的行为,纯粹是在浪费性能套娃。
    Ayanokouji
        17
    Ayanokouji  
       2024-05-14 17:33:14 +08:00
    @pckillers k8s 就不需要网关了吗,你考虑过多集群吗?
    heqingpan
        18
    heqingpan  
       2024-05-14 17:58:28 +08:00 via Android
    @pckillers
    k8s 的 configmap 很难完全替代配置中心。

    部分场景有依赖配置中心的运行时动态变更配置能力,k8s 通过重启方式重新加载配置是不太能接受的。

    比如我们新写一个新的处理流程,支持出问题时通过配置控制是回切到老逻辑。
    如果通过配置中心,可以在 1 秒内把几十个实例秒级回退到老逻辑。
    如果走 k8s 的分批重启加载新配置,回切时长达不到这效果。

    类似的场景还有临时动态调整处理线程池数量等。
    KP45
        19
    KP45  
       2024-05-14 18:01:51 +08:00
    https://docs.spring.io/spring-security/reference/servlet/oauth2/resource-server/jwt.html

    // Spring Security OAuth 2.0 Resource Server JWT
    implementation 'org.springframework.security:spring-security-oauth2-jose'
    implementation 'org.springframework.security:spring-security-oauth2-resource-server'

    维护一个 jwks 获取地址就行啦,网关都不需要
    pckillers
        20
    pckillers  
       2024-05-14 18:23:34 +08:00
    @heqingpan
    configmap 通过文件夹形式挂载不设置 subpath ,就能自动更新配置文件。不过确实达不到秒级。

    通过改配置文件就能改逻辑。这功能高级,我遇到的 springboot 项目逻辑都是写死在 jar 里的

    至于动态调整处理线程池数量,k8s 规范上 pod 都是要加性能限制的,我寻思针对单 POD 调好最佳性能的参数后,改这些参数但不提升 CPU 与内存并不能真正应对大量负载吧? 除非一开始的参数就设置为无法发挥出硬件能力的偏低参数,但这样又是纯粹的浪费资源。目前我这里的 k8s 服务就是单纯的测好单 pod 的最佳性能参数后,再根据流量、CPU 、内存指标自动扩充 POD 数量。
    heqingpan
        21
    heqingpan  
       2024-05-14 18:53:14 +08:00 via Android
    @pckillers
    我上面说的动态感知配置变更,是通过配置中心 client 监听配置中心内容实现的,是不是监听本地配置文件。

    k8s 就算能更新 pod 的配置文件,如果想不重启更新配置,还应要应用主动监听配置文件内容是否有变化。(相当于自己实现动态配置功能)

    通过动态配置做切流、回滚等流程控制很好用。

    没有动态变更配置的能力,可能不会想去写这类控制代码;但系统支持这个能力,在写新的高风险链路逻辑时一般都会加上,在遇到问题能快速回切止损。

    当你用上一次避免问题扩大代之后,你应该就不愿意放弃它。
    mark2025
        22
    mark2025  
       2024-05-14 19:00:35 +08:00
    nacos 把后门当特性的想法有点抽象 https://github.com/alibaba/nacos/issues/4593
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     982 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 23:15 PVG 07:15 LAX 16:15 JFK 19:15
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86