1. 程式人生 > >httpdns中限流的方案

httpdns中限流的方案

採用令牌桶演算法的思想:

github地址:https://github.com/juju/ratelimit

1、在Compass結構體中增加一個成員bucket,定義一個專門的初始化函式用於bucket的初始化

2、在server_route_d函式的第一行,呼叫bucket.TakeAvailable(1)函式

3、或者在解析完hosts個數為n後,呼叫bucket.TakeAvailable(n)函式

4、針對TakeAvailable函式的返回結果,最簡單的方式為直接Fill_Json後return,這樣直接放棄處理了

5、稍微複雜點的方式:

(1)設定三次迴圈呼叫TakeAvailable呼叫,如果呼叫成功,則執行

(2)如果三次迴圈呼叫後仍不成功,則再進行三次另外的迴圈:

        -1-:先呼叫wait,然後再TakeAvailable,若仍然不成功

        -2-:若三次這樣的呼叫後仍然不成功,則再放棄處理,跳到Fill_Json處理後return