V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
bouts0309
V2EX  ›  程序员

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

  •  
  •   bouts0309 · 219 天前 · 2435 次点击
    这是一个创建于 219 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近尝试将 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  
       219 天前
    traefik
    bootvue
        2
    bootvue  
       219 天前
    traefik+1
    heqingpan
        3
    heqingpan  
       219 天前
    nacos 也可以考虑换成轻量级 r-nacos (用 rust 重写的 nacos ,协议完成兼容),这样就可以和 apisix 配套使用。
    haiku
        4
    haiku  
       219 天前 via Android
    traefik 确实轻量,容器下动态配置也方便
    tramm
        5
    tramm  
       218 天前
    Apinto
    还没试过
    lwq84510
        6
    lwq84510  
       218 天前
    apisix
    lwq84510
        7
    lwq84510  
       218 天前
    apisix 配合 nacos
    xwayway
        8
    xwayway  
       218 天前
    apisix + 1 ,当然如果觉得 low 可以用 kong ,我个人倒是觉得 apisix 还行
    halov
        9
    halov  
       218 天前
    apisix
    pming1
        10
    pming1  
       218 天前
    上了 k8s ,nacos 都可以省了。
    bthulu
        11
    bthulu  
       218 天前
    为什么你们还在用网关, 网关这种东西, 自 k8s 诞生的那一天起就被淘汰了.
    zhenjiachen
        12
    zhenjiachen  
       218 天前
    apisix 不推荐
    /t/1033395
    RainCats
        13
    RainCats  
       218 天前
    nacos 目前发现有个 rust 重写的 rnacos 可以替换,但生产环境没试过。
    同样起了八个服务,资源消耗差不多是十几二十倍的差距:
    nacos:698.6MB
    rnacos:29.2MB
    BQsummer
        14
    BQsummer  
       218 天前
    @bthulu 没网关跨 vpc 怎么调用? 金丝雀发布怎么精确控制流量到 pod? 失败逻辑怎么精确到接口?
    pckillers
        15
    pckillers  
       218 天前
    @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  
       218 天前
    个人非常同意 @pming1 的看法。
    nacos 的配置中心功能完全能用 k8s 的 configmap 、secret 甚至 workload 的环境变量替代。
    nacos 的注册服务则是完全能被 k8s 的 service 替代。
    至于很多人喜欢的 java 网关,ingress 要强大得多。

    在 k8s 里搭建 nacos 的行为,纯粹是在浪费性能套娃。
    Ayanokouji
        17
    Ayanokouji  
       218 天前
    @pckillers k8s 就不需要网关了吗,你考虑过多集群吗?
    heqingpan
        18
    heqingpan  
       218 天前 via Android
    @pckillers
    k8s 的 configmap 很难完全替代配置中心。

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

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

    类似的场景还有临时动态调整处理线程池数量等。
    KP45
        19
    KP45  
       218 天前
    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  
       218 天前
    @heqingpan
    configmap 通过文件夹形式挂载不设置 subpath ,就能自动更新配置文件。不过确实达不到秒级。

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

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

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

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

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

    当你用上一次避免问题扩大代之后,你应该就不愿意放弃它。
    mark2025
        22
    mark2025  
       218 天前
    nacos 把后门当特性的想法有点抽象 https://github.com/alibaba/nacos/issues/4593
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   917 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:05 · PVG 06:05 · LAX 14:05 · JFK 17:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.