流控是任何一個復雜系統都必須考慮的問題,本文介紹并比較了不同的流控算法,從而幫助我們可以基于系統需求和架構選擇合適的方案。原文:Distributed Rate-Limiting Algorithms[1]
當我們設計分布式流控系統(distributed rate-limiting system)時,需要用到哪些工具和算法?
Joshua Hoehne @Unsplash
Criteo是全球最大的廣告技術公司之一,隨著廣告市場的不斷發展,Criteo在過去幾年里一直致力于改進API,幫助客戶更好的通過可編程接口訪問需要的服務。
隨著越來越多的客戶使用新的API,很明顯,需要實現某種流量控制,以確保所有客戶端都能平等訪問資源,并保護API免受(惡意或錯誤的)頻繁調用。
流控似乎很簡單: 只允許給定的客戶端每分鐘執行X個調用。在單個服務器實例上實現流控非常容易,可以很容易找到相關的庫來實現。但問題是我們的API托管在6個數據中心(歐洲、北美和亞洲),每個數據中心都有多個實例,這意味著我們需要某種分布式流控系統。
流控不僅與調用次數有關,還需要和客戶端同步當前被限制的狀態(例如,使用專用的報頭和狀態碼)。但是本文將主要關注用于流控的算法和系統。
在嘗試開發自己的系統之前,更重要的是查看現有的基礎設施是否能夠提供想要的特性。
那么,部署在數據中心所有實例之前,并且已經在負責檢查、路由流量的是什么?負載均衡器。大多數負載均衡器都提供了流控特性或某種可用于實現流控的抽象。例如,HAProxy有現成的可用于設置流控的stick tables[2],可以在實例之間同步狀態,并且工作得很好。
不幸的是,負載均衡不支持我們需要的某些特性(動態限制、令牌自省token introspection、……),因此我們需要自己實現這些特定的需求。
說到負載均衡,如果給定客戶端的負載并不均衡,并且總是與單個實例交互
本文鏈接:http://www.tebozhan.com/showinfo-26-86346-0.html五分鐘搞懂分布式流控算法
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: Nacos 并發小技巧之緩存實例信息
下一篇: 分享七個令人興奮的 Go-cli 項目