国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Zuul:構建高可用網關之多維度限流

wenshi11019 / 3141人閱讀

摘要:對請求的目標進行限流例如某個每分鐘只允許調用多少次對客戶端的訪問進行限流例如某個每分鐘只允許請求多少次對某些特定用戶或者用戶組進行限流例如非用戶限制每分鐘只允許調用次某個等多維度混合的限流。

對請求的目標URL進行限流(例如:某個URL每分鐘只允許調用多少次)

對客戶端的訪問IP進行限流(例如:某個IP每分鐘只允許請求多少次)

對某些特定用戶或者用戶組進行限流(例如:非VIP用戶限制每分鐘只允許調用100次某個API等)

多維度混合的限流。此時,就需要實現一些限流規則的編排機制。與、或、非等關系。

介紹

spring-cloud-zuul-ratelimit是和zuul整合提供分布式限流策略的擴展,只需在yaml中配置幾行配置,就可使應用支持限流


    com.marcosbarbero.cloud
    spring-cloud-zuul-ratelimit
    1.3.4.RELEASE
支持的限流粒度

服務粒度 (默認配置,當前服務模塊的限流控制)

用戶粒度 (詳細說明,見文末總結)

ORIGIN粒度 (用戶請求的origin作為粒度控制)

接口粒度 (請求接口的地址作為粒度控制)

以上粒度自由組合,又可以支持多種情況。

如果還不夠,自定義RateLimitKeyGenerator實現。

//默認實現
public String key(final HttpServletRequest request, final Route route, final RateLimitProperties.Policy policy) {
    final List types = policy.getType();
    final StringJoiner joiner = new StringJoiner(":");
    joiner.add(properties.getKeyPrefix());
    if (route != null) {
        joiner.add(route.getId());
    }
    if (!types.isEmpty()) {
        if (types.contains(Type.URL) && route != null) {
            joiner.add(route.getPath());
        }
        if (types.contains(Type.ORIGIN)) {
            joiner.add(getRemoteAddr(request));
        }
        // 這個結合文末總結。
        if (types.contains(Type.USER)) {
            joiner.add(request.getUserPrincipal() != null ? request.getUserPrincipal().getName() : ANONYMOUS_USER);
        }
    }
    return joiner.toString();
}
支持的存儲方式

InMemoryRateLimiter - 使用 ConcurrentHashMap作為數據存儲

ConsulRateLimiter - 使用 Consul 作為數據存儲

RedisRateLimiter - 使用 Redis 作為數據存儲

SpringDataRateLimiter - 使用 數據庫 作為數據存儲

限流配置

limit 單位時間內允許訪問的個數

quota 單位時間內允許訪問的總時間(統計每次請求的時間綜合)

refresh-interval 單位時間設置

zuul:
  ratelimit:
    key-prefix: your-prefix 
    enabled: true 
    repository: REDIS 
    behind-proxy: true
    policies:
      myServiceId:
        limit: 10
        quota: 20
        refresh-interval: 30
        type:
          - user
        

以上配置意思是:30秒內允許10個訪問,并且要求總請求時間小于20秒

效果展示

yaml配置:

zuul:
  ratelimit:
    key-prefix: pig-ratelimite 
    enabled: true 
    repository: REDIS 
    behind-proxy: true
    policies:
      pig-admin-service:
        limit: 2
        quota: 1
        refresh-interval: 3

動態圖 ↓↓↓↓↓

Redis 中數據結構 注意紅色字體

總結

可以使用Spring Boot Actuator 提供的服務狀態,動態設置限流開關

源碼可以參考:https://gitee.com/log4j/pig

用戶限流的實現:如果你的項目整合 Shiro 或者 Spring Security 安全框架,那么會自動維護request域UserPrincipal,如果是自己的框架,請登錄成功后維護request域UserPrincipal,才能使用用戶粒度的限流。未登錄默認是:anonymous

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70685.html

相關文章

  • 微服務網關方案調研

    摘要:綜述經調研,使用解決方案的占多數,已經能滿足絕大多數公司需求。但除了一些超級公司外,比如阿里,京東,他們是自己擼的一套網關。 綜述 經調研,使用Spring Cloud Zuul解決方案的占多數,已經能滿足絕大多數公司需求。但除了一些超級公司外,比如阿里,京東,他們是自己擼的一套網關。此外,點評直接采用的nginx負載均衡前置網關,而沒用第七層網關,原因據說是七層網關會影響性能,但由于...

    Y3G 評論0 收藏0
  • 墻裂推薦:搜云庫技術團隊,面試必備的技術干貨

    摘要:今天整理了一下近大半年以來的一些文章,和我的預期一樣,很多文章我都忘記自己曾經寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點贊,加轉發。 今天整理了一下近大半年以來的一些文章,和我的預期一樣,很多文章我都忘記自己曾經寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點贊,加轉發。 面試必備 面試必備:深入Spring MVC DispatchServlet 源碼...

    SegmentFault 評論0 收藏0
  • 墻裂推薦:搜云庫技術團隊,面試必備的技術干貨

    摘要:今天整理了一下近大半年以來的一些文章,和我的預期一樣,很多文章我都忘記自己曾經寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點贊,加轉發。 今天整理了一下近大半年以來的一些文章,和我的預期一樣,很多文章我都忘記自己曾經寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點贊,加轉發。 面試必備 面試必備:深入Spring MVC DispatchServlet 源碼...

    Neilyo 評論0 收藏0
  • Spring Cloud - 技術棧

    摘要:整理自楊波老師的總結注冊中心支持模型存儲和靈活健康檢查能力。服務網關選擇是最佳搭配,但異步性能不足基于的異步未推出正式版。配置中心缺失治理能力。監控存儲依賴于時間序列數據庫。隊列對于日志等可靠性要求不高的場景,用。功能強大但復雜。 整理自楊波老師的總結 showImg(https://segmentfault.com/img/bV3iL1?w=800&h=512); 注冊中心 Eur...

    張金寶 評論0 收藏0
  • spring cloud gateway 限流

    摘要:常見的限流方式,比如適用線程池隔離,超過線程池的負載,走熔斷的邏輯。在令牌桶算法中,存在一個桶,用來存放固定數量的令牌。,令牌桶每秒填充平均速率。 轉載請標明出處: https://www.fangzhipeng.com本文出自方志朋的博客 在高并發的系統中,往往需要在系統中做限流,一方面是為了防止大量的請求使服務器過載,導致服務不可用,另一方面是為了防止網絡攻擊。 常見的限流方式,...

    joy968 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<