-
Notifications
You must be signed in to change notification settings - Fork 62
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Smooth weight Round Robin algorithm #333
Smooth weight Round Robin algorithm #333
Conversation
這個假設之後可能要修正,因為之後要開始考慮同一個節點上的“不同”硬碟後,所謂的n會變成partitions數量,換言之,那個量級會比節點數量大很多 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@wycccccc 感謝幫忙拆成小的PR,幾個意見請看一下
app/src/main/java/org/astraea/partitioner/smoothPartitioner/SmoothWeightRoundRobin.java
Outdated
Show resolved
Hide resolved
app/src/main/java/org/astraea/partitioner/smoothPartitioner/SmoothWeightRoundRobin.java
Outdated
Show resolved
Hide resolved
app/src/main/java/org/astraea/partitioner/smoothPartitioner/SmoothWeightRoundRobin.java
Outdated
Show resolved
Hide resolved
app/src/main/java/org/astraea/partitioner/smoothPartitioner/SmoothWeightRoundRobin.java
Outdated
Show resolved
Hide resolved
app/src/main/java/org/astraea/partitioner/smoothPartitioner/SmoothWeightRoundRobin.java
Outdated
Show resolved
Hide resolved
@wycccccc 你剛剛推了一個空白檔案上來,記得移除掉 |
那可能就需要升級成vnswrr了,不過我感覺這個在換成partition打分的時候再升級就好。 |
沒錯,這個就交給 @chinghongfang 來負責了XDD |
已按照學長給的建立,移除了不需要的程式碼,修改成了同步方法,添加了EffectiveWeightResult,不過我沒有把currentWeight包進取因爲它並不是每10秒算一次,而是每次選取都會改變。 |
我準備對那個調整分數的數值做以下修改。 現在直接對負載分數做歸一化處理:定義爲B 我認爲這樣修改會比較直觀,唯一的問題在於嘗試將負載偏移率與資料偏移量劃等號這件事是否有其合理性。我感覺沒有感覺到不合理的地方。 |
這邊是在討論當broker評分有變化時,effective weight該怎麼跟著變化,這樣理解對嗎? 如果我的理解對的話,現在的邏輯針對每次的評分變化有兩個“稀釋”的動作:
這兩者結合起來是想要避免什麼風險?直覺像是在說我們想避免大幅度的轉向,因此我們不頻繁變更effective weight,同時就算要變也只變一些些? |
對的
關於effective weight 是在重複以下流程: 週期收集這件事更像是在確保我收集到的metrics計算出的負載分數,是有確切受到我上一次變更effective weight的影響
這一點是在於是上一次的effective weight產生的資料分配情況,導致了這次的負載分數。因爲它按照了我們給的模式發資料,所以我才得到了這個分數。因此調整建立在上一次的effective weight上就是這個理由。
其實這個做法更像是嘗試根據負載狀況進行調優,調整過後會看看大家有沒有變好,再做調整。 |
修改完畢,再麻煩學長了。 |
app/src/main/java/org/astraea/partitioner/smooth/SmoothWeightRoundRobin.java
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@wycccccc 感謝耐心,整個看起來還不錯,測試跑過就合併,接著去下一隻PR討論
#315 中SWRR演算法討論,我有想到解決炮口一致的問題。
簡而言之借鑑了VNSWRR的思路。
因爲SWRR算出來的節點排序是固定的所以可以先事先算好一定量的後續排序。而不是需要的時候再一筆筆算。
這樣能帶來兩個好處:
1.解決炮口問題,一開始我們根據初始權重生成排序,然後隨機起點,這樣炮口就不一致了。
2.SWRR算法的時間複雜度是O(n),n爲節點數量,因爲他需要從所有節點中找到狀態最好的。改稱先算排序那就變成了直接拿,複雜度就變爲了O(1),這在節點數量有很多的情況下效能會有所改善。
缺點:
空間換時間,外加需要考慮排序所花的時間,何時排序才能不影響某筆資料的latency
第二個好處目前似乎還不急,我讀其他文章這個算法的效能瓶頸似乎在有2000個節點纔會開始影響。
似乎可以先只選用第一個好處的做法,只在初始化的時候生成排序和隨機起點。
其他神祕數字我還在思考,暫時還沒有頭緒。