大規模Docker集群助力微博迎接春晚峰值挑戰

jopen 9年前發布 | 16K 次閱讀 Docker 分布式/云計算/大數據

 

羊年的春晚與往年的春晚一樣,卻又不太一樣。一樣的是服務器君仍要應對全民“DDOS攻擊”,不一樣的是今年無法通過簡單的擴容抵御峰值。今年不但主信息流日常用戶活躍度已經達到了去年春晚的峰值,同時渣浪的產品拿出了多個殺手級產品,像紅包飛,明星粉絲群,這些產品帶來的QPS壓力同樣慘絕人寰。所以今年仍然按業務峰值擴容部署,信息流、紅包飛、通訊、對象庫、RPC等多個服務需要的擴容成本顯然已經到了無法接受程度。

怎么辦?利用各服務的錯峰特點,通過容器化彈性調度,解決抗峰值容量問題。平臺通過對線上業務進行容器化改造,整體集群完成50%規模的容器化部署,容器節點數達到上千個以上。借助服務發現、彈性調度等基礎設施,5分鐘內可以完成上百規模節點調度,可即刻提供10W QPS的承載能力,應對任一服務的峰值。

達成這一目標的挑戰可以概括為三個方面:時間緊,風險大,范圍廣。要在一個月的時間內,部署基本屬于國內最大的容器化集群,并且提供一樣甚至更好的服務SLA,核心接口成功率達到 99.99%,平均耗時小于40ms,同時需要覆蓋全業務,5分鐘內完成服務間資源調配。下面與大家分享一下平臺的一些實踐經驗和踩過的坑。

首先分享平臺為什么選擇Docker。程序猿都知道在代碼運行的世界里,拆東墻補西墻是一件不靠譜的事情,弄不好會塌方的。Docker能夠完美解決環境差異化問題,通過Image定義依賴的環境因素,宿主機僅提供操作系統內核功能,所以任何一個鏡像可以部署到任一Docker化的宿主機上。

當然很多人會有疑問,為什么不采用傳統VM?這就是第二個關鍵問題,就是要快!Docker容器相比傳統VM最大優勢是可以實現秒級啟動,更關鍵的是可以秒級停止。平臺采用“瘦容器”的使用方式,容器與服務同生命周期。服務一旦摘除,容器就會立刻釋放資源,新容器可以立刻就地啟動,這樣能夠極大的縮短擴容所需時間。

部署一個大規模容器集群,Docker僅提供核心的容器化技術,為了確保集群的可控性需要一套完整的解決方案。平臺的解決方案總體上可概括為:部署架構、服務監控、研發流程、擴容預案等幾個方面。

部署架構平臺采用的是簡化的結構,有幾個建議很大家分享一下,a) 一個容器僅有一個進程;b) 采用host網絡模式,除非你知道NAT,Bridge有什么坑;c) 最小化鏡像大小,規劃好層次結構,并且盡量復用;d) 日志采用volumn掛載方式;e) 一切皆容器,例如鏡像構建環境也要容器化。

容器化部署最重要也是最復雜的,就是服務發現問題。平臺參考Kubernates,Mesos,etcd等開源項目的經驗,結合自身的業務特點以及現有基礎設施,實現了一套基于ConfigService中心和調度系統服務發現機制。服務調度粒度從原來僅能針對整個服務池,細化到任一一節點,實現了7層nginx,服務節點,RPC節點三者之間的動態聯動。這里運維的開發工作量是最大的,必須為運維的小伙伴們點個贊。

Docker 部署被詬病最多就是網絡,平臺目前采用的是host模式,為什么沒有采用NAT或者Bridge呢?由于涉及的技術細節比較繁冗,這里僅分享一些踩過的坑。例如NAT使用iptables底層流量轉發依靠內核netfilter模塊,其默認僅保持65536個鏈接,在服務有大量鏈接的場景下,會出現大量拒絕鏈接的現象。再如Bridge的MAC地址默認是選擇其子接口中最先的一個,這樣就會導致一個宿主機下多個容器啟停時出現網絡瞬斷。還有很多問題不一一列舉,平臺未來計劃采用vlanif的方案來解決容器網絡部署難題,請關注后續微博平臺的分享。

服務監控平臺采用的是cadvisor開源方案,但由于cadvisor本身僅提供性能數據不完整,并且僅支持influxdb,所以平臺在其基礎上進行了二次開發,支持CPU使用率、存活個數、內存占用、Swap占用、磁盤占用等性能指標,并且提供了對ElasticSearch的支持,爭取能夠回饋給社區。

研發流程要盡量透明,容器應該融入到現有的流程,而不是改變現有流程。例如不要侵入代碼,如請使用XXX環境變量等。不要影響原有的測試、發布、降級等流程,如測試預覽環境應該容器化,而不應該增加針對容器環境的測試。

擴容預案要確定好規則,避免流量增長時亂擴容,平臺通過核心接口QPS,總體QPS,平均耗時三個指標來定義擴容觸發條件;擴容比例按流量增長計算,建議以 10%規模遞增;擴容來源于整體QPS低、冗余Buffer大于50%的服務池。另外有很多細節需要注意,例如機房流量均衡問題、流量突增問題。

整個項目臨近春節,時間緊任務急,小伙伴們也是蠻拼的,在小黑屋不知度過了多少日夜。特別要感謝各位領導的支持和信任,讓我們在困難面前沒有畏首畏尾。當然這才是剛剛起步,希望更多牛人能夠加入到平臺大家庭,共同打造容器化平臺。

來自:http://weibo.com/p/1001603811301997572906
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!