Rootless Router(After): App Service真的很靈

RootlessRouter系列:
  1. Rootless Router(Part: 0): 用戶態DN42節點
  2. Rootless Router(Part: 1): wggo-vpp
  3. Rootless Router(Re: 0): VPP Host stack
  4. Rootless Router(Part: 2): BIRD-vpp
  5. Rootless Router(Part: 3): EtherGuard
  6. Rootless Router(Extra):蒐集的Userspace 網路棧
  7. Rootless Router(Part: 4): 被VPP Host Stack衝康
  8. Rootless Router(Part: 5): 完結
  9. Rootless Router(Fin): UML版本上線啦!
  10. Rootless Router(Afterword): Azure App Service真的很靈

名詞解釋:

在VPS裡,一款VPS如果被稱作靈車,意思是服務很不穩,容易跑路
可以當作形容詞使用,例如: 這家很靈,意思是這家服務很不穩
相信你也猜到... 我會寫這篇,是因為 Azure App Service真的很靈
玩玩可以,生產環境建議別用。除非你選用Dedicated CPU以上的方案

前情提要

Rootless Router 終於搞定了,目前都是部屬在Azure app service裡面,F1 tier免費層
屬於Azure services that are free always類別
我的Rootless Router上線也有些時日了。正式部屬上線以後,過兩天發現了些問題

Update:

App Service SLA,微軟公司保證有 99.95% 之時間,將提供客戶訂閱中執行之 App。
在免費或共用層下之應用程式並未提供 SLA。

本文稱微軟產品不穩定,系指未提供 SLA服務之自身使用經驗,不能概括微軟有提供SLA之其他產品,特此刊誤

Part: 1

首先了解免費層的限制: 

  1. CPU time: 60min/day
  2. Traffic: 165MB/day

CPU 100%運作,就是消耗全部的CPU time。
每天24小時,cpu time一小時,意味著平均CPU不能超過4%

首先,我的香港節點CPU消耗特別快。一下子就用光我的所有時數
比起其他節點,消耗速度明顯多上20%。就要開始找原因了

經過比較,我發現不同地區CPU型號不同,頻率有差異
也就是說同樣60min,算力是不同的

這些是我試過的節點,和他們的CPU型號

  • HK      Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz
  • JP E     Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz
  • SG       Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz
  • US W   Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz
  • US W2 Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz
  • US E    Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz
  • US E2  Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz
  • CA C    Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz
  • CH       Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz
  • UK S    Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz
  • FR C    Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz
  • AU       Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz
  • UAE N Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz
  • BR S    Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz
除了香港的被我留下來,用來和我自己的台灣節點peer
畢竟港台延遲只有20ms,實在太香了
但是該顆CPU算力相比其他節點不足也是事實。
所以暫不開放新peer,再多觀察一些時間
其他的我都盡量切換到Platinum CPU的地區了

剛剛發現有些節點CPU不是固定的。例如這2個節點和我一開始看到的不一樣!
想說CPU使用率怎麼突然增加了,一看發現CPU突然變爛了
所以新加坡,英國也暫時關閉新peer請求了
  • SG     Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz
  • UK S Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz
經過我的多方優化,限制BIRD CPU使用率等等,現在HK節點使用起來額度也是綽綽有餘
現在香港節點會每天會消耗55min左右,其他節點每天消耗45min左右。相差了大約20%算力

Part 2

現在,CPU使用率相當低,不再擔心CPU過載導致容器被關機了。

但沒過多久,就遇到另一個問題了: 服務不穩

這個是我目前節點的peer數量:
https://42status.kskb.eu.org/

其中澳洲、巴西和阿聯猷是0 peer,也就是說他們的運行環境是完全一模一樣的
除了被分配到的ip以外

但只有這三個區域會這樣不穩: 巴西/英國/美西



可以看到巴西節點跑到一半突然掛掉了。與之相比,澳洲、阿聯猷都保持穩定

圖中的美西正常,是因為最初就是美西出問題,我從usw切換去usw2了
但是usw2的CPU是Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz
美西節點作為熱門peer節點,不可能用這顆CPU。所以我又搬回來了

理論上完全相同的環境,不同地區卻有不同結果。
除了硬體問題,只能懷疑是外部環境的不同了

一開始看了許多地方,CPU使用率,記憶體占用比例
幾乎各處都一樣。直到我發現這個

阿聯猷節點的top

巴西節點的top
因為是相同的容器,相同的設定。所以所有數值幾乎相同。task數量,記憶體占用等

但是有一個數值差異超大,那就是load average!
巴西節點的load average有時甚至可以飆到恐怖的 6!

在我查完linux load average些資訊以後,我懷疑這個訊息和母雞有關。

===== Update =====

巴西節點的top(空負載)
幾乎可以確定load average和母雞負載有關了。
我剛剛ssh進去把所有服務關閉,只留下nginx網頁服務
不然azure偵測到你網站掛掉,會貼心地幫你重啟

可以看到CPU占用率很低,1.7us
但是load average還可以飆到9甚至11! 鄰居是在挖礦嗎?

我的CPU usage雖然很低,但是母雞負載太高了
強烈懷疑這奇怪的奇怪的503 error,還有節點會莫名其妙掛掉,和這個有關

Conclusion

Azure app service F1 plan 免費層是我見過最靈車的服務,要多靈有多靈,建議別用
而且額度真的不是普通的小。正常狀態就會用掉60~80%的CPU額度了,來個Flapping直接超額被關機

真的要用,務必花錢上B1
如果還是不行...美西節點可能就要考慮搬家了。
搬去美中之類,找看看有沒有母雞負載低,又是Platinum CPU的地區吧

微軟回復了,原因是we ran out of workers。看來真的是母雞負荷太高了

美西只有加州是Platinum CPU,要嘛不給用,要碼E5 CPU
現在我先搬去華盛頓了,E5-2673,也暫時不接新peer了

經過幾天統計,微軟的無SLA產品的uptime大概80%~90%,有任何一點要求的服務,建議別用

如果你不介意很靈的peer,歡迎來和我的RootlessRouter peer!
https://github.com/KusakabeSi/RootlessRouter-UML/blob/main/README.md

如果很介意...可以和我的普通節點peer,這個就不是架在azure app service了,而是架在我家
興比之下應該不那麼靈車,歡迎來peer喔!
https://blog.kskb.eu.org/2021/03/dn42-peering.html

留言