如何开发一个可运维系统的一点体会
本文來自網(wǎng)易云社區(qū)
作者:施勇
我們在開發(fā)一個復雜系統(tǒng)的時候,常常會強調(diào)服務化、模塊化、松散耦合等要求以達到高可用、高可靠及高性能等目的;比較少的人會考慮到系統(tǒng)的方便部署配置和運維,至少是在剛開始設(shè)計系統(tǒng)的時候很少考慮到運維部署方面的需求。這樣的復雜系統(tǒng),在正式投入使用之后,常常會因為部署配置和運維等方面問題造成系統(tǒng)不穩(wěn)定甚至出現(xiàn)異常。
根據(jù)整個系統(tǒng)的生命周期,運維占據(jù)的比例和時間遠遠大于開發(fā)設(shè)計的時間,當然是排除了一些夭折的系統(tǒng)。所以在開發(fā)設(shè)計系統(tǒng)的時候,需要加強對于運維方面的重視。一個好的系統(tǒng),除了受到產(chǎn)品用戶的歡迎之外,還需要得到運維人員的認可,才能讓系統(tǒng)更加健康地發(fā)展。反之,如果一個系統(tǒng)運維性較差,那么運維人員和開發(fā)人員可能會逐漸形成隔閡,進而影響整個系統(tǒng)的服務。
結(jié)合自己在開發(fā)和運維方面的經(jīng)歷,以及多年被無數(shù)短信告警騷擾的煩惱,談談在開發(fā)設(shè)計一個系統(tǒng)的可運維性方面需要注意的問題。
一、配置和部署
復雜系統(tǒng)在開發(fā)上線及運維的過程中,肯定需要經(jīng)歷各個不同的階段:開發(fā)測試、QA測試、上線前測試、上線、后續(xù)版本更新等。不同階段和環(huán)境下,系統(tǒng)都需要有不同的配置,對于配置和部署,最好能做到以下幾點:
提供詳細的配置和部署手冊。
提供適用典型場景的各個配置模板。
提供靈活的關(guān)鍵參數(shù)可配置,以適應各類復雜的運行環(huán)境;盡可能提供在線動態(tài)修改的方式。
提供自動化的部署方案或腳本,在異常情況下能自動重啟恢復。
各類系統(tǒng)實際運維的過程中,經(jīng)常會出現(xiàn)下面的情況,需要盡量排除:
針對線上環(huán)境,系統(tǒng)未能提供足夠的參數(shù)配置以適應其負載或優(yōu)化服務。
系統(tǒng)提供了足夠多的靈活可配置的參數(shù),但未針對線上環(huán)境進行優(yōu)化配置。
系統(tǒng)程序?qū)懰懒伺渲媚夸浡窂降炔糠謪?shù)。
二、監(jiān)控告警
一個復雜系統(tǒng)在實際運行過程中,難免會出現(xiàn)各類無法預見的問題。為了讓系統(tǒng)在這種異常環(huán)境下還能提供穩(wěn)健的服務,除了系統(tǒng)設(shè)計的容錯和健壯性之外,還需要的是無處不在的監(jiān)控和及時的告警。
類似天網(wǎng)的監(jiān)控
復雜系統(tǒng)至少需要監(jiān)控:
系統(tǒng)整體服務的可用性、穩(wěn)定性和性能指標。
外部依賴服務的可用性和穩(wěn)定性;若外部依賴服務影響自身服務的性能指標,需要對外部依賴服務做好性能監(jiān)控。
系統(tǒng)內(nèi)部各個模塊的可用性、性能指標以及各模塊銜接的連續(xù)性。
系統(tǒng)異常日志的監(jiān)控。
系統(tǒng)后臺線程的健康狀態(tài),這點很容易被忽略。
系統(tǒng)部署所在服務器和網(wǎng)絡(luò)的健康狀態(tài)。
系統(tǒng)需要提供對各項監(jiān)控內(nèi)容的查詢顯示,以便運維人員能夠隨時了解系統(tǒng)的運行狀態(tài);此外,最好能夠提供查詢API,方面運維集成。
智能的告警策略
當一個復雜的系統(tǒng)出現(xiàn)問題時,需要及時報警通知到相關(guān)的運維人員。在告警策略設(shè)計時,需要考慮到:
不同的告警等級,根據(jù)系統(tǒng)服務異常的原因和影響的范圍,劃分為不同等級并便指導不同的告警策略。
多樣的告警方式,至少支持IM、郵件和手機短信的三種方式告警。
不同層級的告警接收人員。
告警等級 | 描述 | 告警方式和策略 | 告警接收人員 |
事故級 | 系統(tǒng)整體服務不可用或異常,造成業(yè)務損失 | IM、郵件和手機短信;持續(xù)短間隔告警 | 運維、開發(fā)和產(chǎn)品業(yè)務,以及各自部門領(lǐng)導 |
故障級 | 系統(tǒng)服務不穩(wěn)定,未對業(yè)務造成明顯影響 | IM、郵件和手機短信;持續(xù)告警 | 運維、開發(fā),以及各自負責人 |
異常級 | 故障前兆,系統(tǒng)可能在不久將來出現(xiàn)故障 | IM、郵件;固定周期告警 | 運維和開發(fā)人員 |
缺陷級 | 系統(tǒng)已知的缺陷,目前不會對整體服務產(chǎn)生影響 | 郵件;當系統(tǒng)觸發(fā)缺陷時告警 | 運維或開發(fā)人員 |
告警程序設(shè)計上,高等級的告警需要被優(yōu)先處理,不能因為低等級告警過多而造成高等級告警被延遲。同時需要支持對同類告警的暫停報警功能(暫停一段時間后自動恢復監(jiān)控報警),便于運維人員計劃性的維護操作。
告警內(nèi)容的可讀性,對于運維人員也非常重要,特別是手機短信告警的內(nèi)容,應該能夠讓運維人員馬上定位到是哪個服務器所在的服務出現(xiàn)了哪類問題;最惱人的告警短信是各個環(huán)境系統(tǒng)都是相同的內(nèi)容:?xx服務出現(xiàn)異常,請檢查郵件和log?。
設(shè)計良好的系統(tǒng),需要有接入統(tǒng)一的報警監(jiān)控中心的能力。
三、故障處理
一個復雜系統(tǒng)需要提供良好的故障處理機制,包括故障預見、故障現(xiàn)場保留、故障智能處理等。
故障預見
系統(tǒng)在運行過程中,對其利用的資源和自身的運行狀態(tài)做好監(jiān)控,如果預見系統(tǒng)可能出現(xiàn)不穩(wěn)定等情況,需要加以處理和告警。系統(tǒng)可預見的故障可能有:
所處的服務器硬件資源利用率上升,不久將來會到達上限,需要及時告警。
系統(tǒng)設(shè)計的有限制的資源的使用量將達到配置限額,需要及時告警。
系統(tǒng)處理效率突然降低,及時告警。一個容錯備份的分布式系統(tǒng),需及時屏蔽處理效率地下的組件,用其它備份的組件代替。
系統(tǒng)接收處理的請求量突升或突降,及時告警。
故障現(xiàn)場保留
當系統(tǒng)出現(xiàn)故障后,需要對故障現(xiàn)場做好保留,便于后續(xù)分析、處理和改進。故障現(xiàn)場保留的方式通常可以有:
日志。最簡單直接的方式,但在日志輸出格式和內(nèi)容方面,需要做好設(shè)計;既要保證對系統(tǒng)性能影響和資源占用足夠小,又要保留足夠的信息供運維人員和開發(fā)人員排查。
性能和資源監(jiān)控平臺。詳細記錄服務器運行狀態(tài)和各類資源的使用情況,可以了解故障發(fā)生時候的服務器硬件運行狀態(tài)。
故障智能處理
一個復雜系統(tǒng),必須要做到可容錯和故障的自動處理及恢復。如果系統(tǒng)的可容錯和故障自動恢復做得還不完善情況下,至少需要提供可人工運維處理的接口。最怕的是系統(tǒng)做了部分的故障自動處理,但處理機制有問題,并且沒有提供有效的人工處理方式去解決,這個簡直是運維人員的噩夢!一個系統(tǒng)在交付運維的時候,運維手冊中必須包含各類故障的詳細處理方式。
系統(tǒng)可容錯和故障自動恢復,典型的場景有:
當某個依賴的底層服務異常情況下,系統(tǒng)自動屏蔽依賴此服務的請求或通過升降級方式繞過異常底層服務;若不行,也必須在底層服務恢復正常后,系統(tǒng)能立即自動恢復。
系統(tǒng)各個模塊之間的容錯性,包括部分模塊異常或者模塊銜接出現(xiàn)短暫問題,當問題解決后都需能立即恢復。
包含多備份組件的系統(tǒng),當少數(shù)備份組件出現(xiàn)異常時候,其它備份需要立即接管其服務,并能夠自動恢復到正常狀態(tài)。
系統(tǒng)自動故障恢復,需要盡可能以代價小的方式來恢復,并做到整體資源可控。
當系統(tǒng)出現(xiàn)故障時,需要及時告警,通知運維和開發(fā)人員系統(tǒng)故障及對應的處理方式。如果故障自動恢復需要一定時間,恢復的進度也需要定期報告。
四、小結(jié)
一個可運維和方便運維的系統(tǒng),不僅有助于運維人員快速掌握和上手運維,又能及時發(fā)現(xiàn)系統(tǒng)中可能存在的不穩(wěn)定的異常的因素,從而促進整個系統(tǒng)更好更健康的發(fā)展壯大。系統(tǒng)的可運維性,不單單是系統(tǒng)上線之后要考慮的問題,而是要在系統(tǒng)設(shè)計之初就應該關(guān)注的一面,并且是貫穿到開發(fā)設(shè)計的各個階段中的。
以上僅僅是個人對可運維系統(tǒng)的一點體會,希望以后能多多出現(xiàn)這樣的系統(tǒng),助更多的運維和開發(fā)人員脫離疲于奔命救火的苦海。
網(wǎng)易云免費體驗館,0成本體驗20+款云產(chǎn)品!
更多網(wǎng)易研發(fā)、產(chǎn)品、運營經(jīng)驗分享請訪問網(wǎng)易云社區(qū)。
相關(guān)文章:
【推薦】?基于Redis+Kafka的首頁曝光過濾方案
【推薦】?知物由學 | AI時代,那些黑客正在如何打磨他們的“利器”?(一)
轉(zhuǎn)載于:https://www.cnblogs.com/163yun/p/9674268.html
總結(jié)
以上是生活随笔為你收集整理的如何开发一个可运维系统的一点体会的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 悠悠人生怎么登不了
- 下一篇: 中国发明的电脑系统?