如何通过StackStorm自动支持2万多台服务器
在過去的三年中,我們的網絡為成千上萬次直播體育賽事、海量軟件下載、數十億小時流媒體視頻內容以及數千個需要實時響應的Web應用程序提供支持。為了支持這種大規模的增長,從2015年開始,我們的全球網絡已經增加到71 Tbps,我們在135個PoP中部署了數千臺新服務器。
網絡部署規模不斷增長和變化,為了解決這方面的挑戰,我們的運營團隊使用StackStorm開發了一個IT自動化平臺。這是一個巨大的飛躍,改變了我們部署、變更、修復和停用服務器的方式,這些服務器占到了我們全球網絡95%以上的比例。
以下是這個自動化平臺給我們帶來的好處:
- 在三年內將12,000多臺服務器添加到我們的網絡中。
- 在某些情況下自動生成ticket,在沒有ticket的情況下自動解決問題。
- 為團隊提供工具,讓他們可以進行實時的協作。
- 遵循一系列手動步驟為工程師節省時間。
基于StackStorm的自定義項目Crayfish
因為認識到IT自動化平臺的價值以及這種平臺的日益成熟,2015年,我們成立了基礎設施自動化團隊,并開始了Crayfish(小龍蝦)項目,認真開發IT自動化解決方案——對于我們這樣規模的企業來說,這是一項艱巨的任務。項目名稱的選擇——我們現在仍在使用——是有意而為之的。一直以來,我們的工具都以魚類和航海為主題,我們之所以選擇Crayfish,是因為小龍蝦是濾食性動物,可以保持環境的清潔。
最開始我們也考慮過開發自己的IT自動化框架,后來決定使用StackStorm(https://stackstorm.com/),并通過增強功能來支持我們獨特的需求和規模,讓我們能夠更高效地往前走。
StackStorm是一個開源的基于事件驅動的平臺,支持“基礎設施即代碼”。它擅長基于事件運行工作流,可以與Slack集成,并提供了原生的ChatOps支持。
我們已經對StackStorm做出了一些配置變更來滿足我們所需的規模。首先,我們需要增加服務實例的數量,并減少數據保留。在項目啟動時,我們的網絡有8,000臺服務器,而現在服務器數量已經達到20,000臺。可伸縮性的關鍵在于能夠運行任意數量的StackStorm實例,并把它們作為worker運行,而不是讓單個StackStorm實例處理所有的東西。如下圖所示,我們開發的一個叫作Policy Engine的東西可以幫我們做到這一點,它會根據我們的業務邏輯將提交的請求轉發給StackStorm。Policy Engine還可以將請求放在隊列中,并在安全的情況下自動處理這些請求。這些策略用來監控并發、容量、流量、生產狀態、基礎設施、黑名單和故障率。
編撰部落知識
IT自動化項目的基本方法是捕獲現有流程和工作流,然后將它們轉換為可以在不需要人工干預的情況下實現工作流步驟的代碼,并將它們存儲在中央存儲庫中,然后作為自動化的一部分或通過ChatOps命令來調用它們。
項目開始后,Crayfish團隊捕獲了整個組織現有的工作流程和流程。所幸的是,不同部門使用的大多數重要的流程(例如網絡運營中心、數據中心運營或SysOps)都有詳細的記錄,可以使用Python來快速編碼并添加到Crayfish中。
例如,如果我們的網絡運營中心想要實現一個重啟工作流,它首先需要根據各種策略驗證在機器上運行工作流是否安全。如果服務器處于生產環境中,系統將會采取措施來消耗連接并更新狀態。接下來,它將執行實際的重啟動作和必要的步驟來驗證機器是否已經準備好進入生產狀態。
可以肯定的是,我們遇到了很多邊緣案例,其中最具挑戰性的是那些還沒有被記錄到文檔中的流程。為了搞定這些邊緣案例,我們需要進行跨職能合作,并與正確的人溝通。自動化的一個好處是我們可以捕獲到這些知識,確保它們在我們的組織中繼續存在。
在某些情況下,我們甚至與一些了解特定任務或知道如何解決特定問題的工程師和技術人員一起合作,找出更有效處理特定任務的方法。我們發現,在某些情況下,不同團隊成員的知識水平是不一樣的。那時候,我們開始收集每個人的意見,提出一個每個人都同意的工作流,并將其作為最有效的解決方案。
按需部署新服務器
Crayfish已經從多個層面改變了我們的IT運營,例如簡化服務器管理、減少服務器停機時間以及加快服務器部署。僅在2018年一年,ITOps就為我們的全球網絡增加了22 Tbps的容量。如果沒有Crayfish的自動化,就不可能新增數千臺服務器,而且這是在不需要顯著提高員工技術水平的情況下完成的。
目前,Crayfish為大約20種不同的服務器類型提供強大的自動化功能。我們將服務器類型定義為運行相似服務的一組服務器。不同的應用程序運行在不同的服務器類型上,因此每種服務器類型在生產環境中需要得到不同的支持。今天,Crayfish支持大約10種服務器類型的完整生命周期,并且還可以對大約10種其他服務器類型做出修復、更改和打補丁。它還為大約40或50多種服務器類型提供不同程度的支持。由于我們專注于部署使用最廣泛的服務器類型,因此Crayfish可以為約96%服務器提供支持。
因為使用了Crayfish,CDN的整體性能得到了提升,并且具備了應對意外事件的能力。我們的網絡設備齊全,可以支持來自主要體育賽事和峰值軟件下載的流量,例如,將更多的服務器保留在生產環境中,減少在高峰期間從生產環境中移除服務器所造成的中斷。
從性能的角度來看,因為我們的規模夠大,所以才體現出Crayfish的重要性。如果你的公司有一個數據中心,并且你可以控制停機時間,那么你就完全可以掌控數據中心。但如果是像下圖所示的那樣,數據中心跨越了幾乎所有的時區,那么你就不得不去應對不同的配置文件、使用情況和使用時間。如果把所有這些考慮因素考慮在內,具體情況可能會非常復雜,但Crayfish可以輕松處理它們。
在使用Crayfish時,我們仍然可以調度任務,例如自動執行配置或升級,但系統可以智能地滿足本地需求。例如,當我們想要重新配置拉脫維亞的所有服務器時,拉脫維亞的某個新聞事件會導致視頻流量大幅增加。因為Crayfish與我們的度量收集系統集成在一起,所以系統將會看到流量增加,重新配置操作就會停止。如果有必要,甚至可以將更多服務器加入到生產環境中。
在服務中斷之前捕獲基礎設施故障
Crayfish與其他監控系統相結合可以顯著減少個別服務器的停機時間和維修時間。我們的系統持續監控網絡是否出現了問題或故障,并且可以自動創建故障ticket或直接打補丁。有了自動化系統,我們的員工不需要通過“死盯”的方式來發現網絡錯誤——計算機會永不疲倦地進行持續的監控。
我們可以通過這種方式完成的檢查幾乎沒有數量上的限制。我們的度量系統不斷運行硬件檢查,不需要將機器撤出生產環境,而另一個系統會查找錯誤,并在發現問題時調用Crayfish對機器執行檢查。通過這種方法,我們能夠及早地發現硬件故障。
例如,如果有指標顯示硬盤驅動器開始出現故障,自動化系統將啟動Crayfish中的工作流,對受影響的計算機進行錯誤驗證,并收集有關故障的詳細信息,例如硬盤驅動器在哪個插槽中出現故障、屏蔽號碼,等等。然后,它會為數據中心運維組創建ticket,運維組會派技術人員前往安裝替換硬件。
根據經驗,任何需要多個部門協作或多個步驟之間需要手動切換的工作流都會帶來嚴重的延遲。有了自動化工作流,完成時間可以是幾分鐘,而不是幾天。這給了每個運維團隊更大的控制權,他們是最了解他們系統和應用程序的人。
為工程師提供可以讓他們變得更高效的工具
我們以前都是向網絡運營中心發出命令,然后等待事情發生。如果網絡運營中心的技術人員花了10分鐘、20分鐘或30分鐘等待服務器正常關閉,你必須要去問為什么。而Crayfish可以并行執行多個任務,而且支持橫向擴展。因此,如果我們需要處理更多的工作負載,可以添加新節點。如果我們突然發現需要同時處理大量的工作負載,可以跨整個CDN擴展多個節點,在處理完成后再縮減節點。
而且,技術人員的工作記憶是有限的,他們在同一時間只能操作幾臺機器。只有最出色的多任務處理程序才能同時處理五六臺處于不同狀態的機器,而且保證不會丟失跟蹤狀態或出現錯誤。在使用Crayfish時,不需要在各種任務之間切換,它們發出命令,然后繼續后續的處理。
Crayfish構建在由軟件基礎設施和系統運營團隊開發的智能配置系統之上,所以完全支持服務器生命周期的其他方面,并在很大程度上是自治的,包括操作系統更新、服務器配置或重新配置、固件更新和安全補丁。當有新補丁發布時,Crayfish會快速進行驗證,以確保補丁可以發布。
因為Crayfish與Slack進行了集成,所以它也支持一般性的IT流程,并在需求發生變化時能夠促進團隊之間的協作。現在,團隊可以將手動流程定義為自動化工作流,而不需要等待某個部門實現變更。然后,他們可以為最終用戶提供按需運行的工作流。現在還可以限制安全運行工作流的策略。在數據中心里工作的工程師也可以發出命令來修改服務器的生產狀態。
最后的想法
由于成千上萬的客戶每天通過我們的20,000多臺服務器推送數TB的數據,StackStorm已經成為保持服務健康和安全的重要運維工具。我們現在能夠更快地擴展網絡來滿足客戶的需求,同時在發生動態變化和意外流量激增的情況下提供更好的性能。這種運營靈活性讓我們成為更可靠的服務提供商,并具備足夠的伸縮性來滿足流媒體和Web應用程序的需求。
雖然其他大多數企業的規模與我們不同,但仍然有很多東西可以進行自動化,包括:
- 讓開發人員專注于能夠帶來更高回報的工作。
- 標準化普通的日常任務。
- 改善跨部門的協作。
- 減少服務器停機時間。
- 通過固件更新和安全補丁來提高安全性。
毫無疑問,向IT自動化的轉變提供了非常有吸引力的投資回報,但最重要的是要確保你的初衷是正確的。我們可以將自動化視為一種為工程師提供工具的方法,這些工具可以提高他們的工作效率和熟練程度,并使他們能夠專注于做出改進。
如果做得好,向基于工作流的自動化過渡是社交化和編撰部落知識的一種非常好的方式。我們將部落聚集在一起,提出一個共同的工作流,并讓每個人都能在未來基于共同的基線貢獻自己的知識。
英文原文:https://medium.com/@verizondigital/using-stackstorm-to-automate-support-for-20-000-servers-4b47ae3a4e98
總結
以上是生活随笔為你收集整理的如何通过StackStorm自动支持2万多台服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++模板使用介绍
- 下一篇: 微信公众平台开发(55)刮刮乐