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

微服务体系下,限流和熔断分别在哪里发挥作用?

  •  
  •   mangojiji · 166 天前 · 702 次点击
    这是一个创建于 166 天前的主题,其中的信息可能已经有所发展或是发生改变。
    限流只在网关做吗?
    熔断在每个服务上都做,还是只在网关做呢?
    各个服务需要限流吗?
    4 条回复    2024-05-28 11:46:17 +08:00
    MelodYi
        1
    MelodYi  
       165 天前
    限流大多在广义的“服务端”。熔断大多在广义的“客户端”。

    限流简单举例就是令牌桶,过量的请求过来就直接拒绝。
    如果是对 app 、浏览器要访问的接口限流,一般就做在网关层(对浏览器来说,网关就是服务端)。
    服务间调用的时候,被调用的服务(服务端)也可以做限流;或者被网关调用的服务,自己也可以做限流(对网关来说,被调用服务是服务端)。

    熔断一般是在客户端视角的,检查服务端正不正常,在有多个服务端可选的情况下,只调功能正常的、不去调有异常的服务端。对 app 、浏览器来说,服务端就一个域名,大概率也就一个 ip ,一般不做熔断(熔断了就把整个服务端干掉了)。
    微服务一般有多副本,直接访问微服务的“客户端”可以做熔断。
    比如网关对后端服务来说是客户端,网关可以做熔断。
    后端服务间调用,调用方是客户端,调用方也可以做熔断。

    具体要不要配熔断,要不要限流。看业务实际情况,感觉没一个特别固定的方法论。
    yty2012g
        2
    yty2012g  
       165 天前
    限流是入口做,熔断是出口做。每个服务都有入口和出口,每个系统也有入口和出口。一般来说,网关是需要有限流的,每个服务自己最好也做限流。每个服务调用其他的服务可以做熔断,为了保护对方/自己
    mangojiji
        3
    mangojiji  
    OP
       165 天前
    @MelodYi 想问下 Hystrix 在单个服务多个实例的情境下,如何做限流和熔断呢?是不是不适用于此类场景?
    MelodYi
        4
    MelodYi  
       165 天前
    @mangojiji 你是说你的微服务,整个大项目,只有一个服务?
    那是个啥微服务,不就是个 spring web 么(当然你也确实可以说,这是一个微服务)。

    你还是参考这个服务端、客户端的概念就好。如果你的微服务从来不调用外部,那就只是服务端的身份,不会有作为客户端的身份。那这个服务本身只需要考虑限流问题就行了。

    如果你还有网关,网关后面仅一个服务。那这个服务上我觉得限流意义也不大。
    过量的流量让网关先抗住更合理些。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1732 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:02 · PVG 08:02 · LAX 16:02 · JFK 19:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.