互聯網運維工作,以服務為(wèi)中心,以穩定、安全、高(gāo)效為(wèi)三個基本點,确保公司的(de)互聯網業務能夠 7×24 小時為(wèi)用戶提供高(gāo)質量的(de)服務。
運維人員對公司互聯網業務所依賴的(de)基礎設施、基礎服務、線上業務進行穩定性加強,進行日常巡檢發現服務可(kě)能存在的(de)隐患,對整體架構進行優化以屏蔽常見的(de)運行故障,多數據中接入提高(gāo)業務的(de)容災能力。
通過監控、日志分析等技術手段,及時發現和(hé)響應服務故障,減少服務中斷的(de)時間,使公司的(de)互聯網業務符合預期的(de)可(kě)用性要求,持續穩定地(dì)為(wèi)用戶提供務。
在安全方面,運維人員需要關注業務運行所涉及的(de)各個層面,确保用戶能夠安全、完整地(dì)訪問在線業務。
從網絡邊界劃分、ACL 管理(lǐ)、流量分析、DDoS 防禦,到操作系統、開源軟件的(de)漏洞掃描和(hé)修補,再到應用服務的(de)XSS、SQL注入防護;
從安全流程梳、代碼白盒黑盒掃描、權限審計,到入侵行為(wèi)檢測、業務風險控制等。
運維人員需要保障公司提供的(de)互聯網業 運行在安全、可(kě)控的(de)狀态下,确保公司業務數據和(hé)用戶隐私數據的(de)安全,同時還需要具備抵禦各種惡意攻擊的(de)能力。
在确保業務穩定、安全的(de)前提下,還需保障業務高(gāo)效的(de)運轉,公司內(nèi)快速的(de)産出。運維工作需要對業務進行各方面優化。
比如(rú),IO 優化提升數據庫性能,圖片壓縮降低(dī)帶寬使用量等,提供的(de)互聯網業務以較小的(de)資源投入帶來最大的(de)用戶價值和(hé)體驗。
同時,還需要通過各種工具平台提升內(nèi)部産品發布交付的(de)效率,提升公司內(nèi)運維相關的(de)工作效率。
運維的(de)工作方向比較多,随着業務規模的(de)不斷發展,越成熟的(de)互聯網公司,運維崗位會劃分得越細。
當前很多大型的(de)互聯網公司,在初創時期隻有系統運維,随着服務規模、服務質量的(de) 要求,也逐漸進行了工作細分。
一(yī)般情況下運維團隊的(de)工作分類(見圖1-1)和(hé)職責如(rú)下。
系統運維負責IDC、網絡、CDN和(hé)基礎服務的(de)建設(LVS、NTP、DNS);負責資産管理(lǐ),服務器選型、交付和(hé)維修。詳細的(de)工作職責如(rú)下:
收集業務需求,預估未來數據中心的(de)發展規模,從骨幹網的(de)分布,數據中心建築,以及Internet接入、網絡攻擊防禦能力、擴容能力、空間預留、外接專線能力、現場服務支撐能力等方面評估選型數據中心。負責數據中心的(de)建設、現場維護工作。
設計及規劃生産網絡架構,這裏面包括:數據中心網絡架構、傳輸網架構、CDN網絡架構等,以及網絡調優等日常運維工作。
LVS 是整個站點架構中的(de)流量入口,根據網絡規模和(hé)業務需求,構建負載均衡集群。
完成網絡與業務服務器的(de)銜接,提供高(gāo)性能、高(gāo)可(kě)用的(de)負載調度能力,以及統一(yī)的(de)網絡層防攻擊能力。
SNAT .集中提供數據中心的(de)公網訪問服務,通過集群化部署,保證出網服務的(de)高(gāo)性能與高(gāo)可(kě)用。
CDN 工作劃分為(wèi)第三方和(hé)自(zì)建兩部分。
建立第三方 CDN 的(de)選型和(hé)調度控制;根據業務發展趨勢,規劃CDN新節點建設布局;完善CDN業務及監控,保障CDN 系統穩定、高(gāo)效運行。
分析業務加速頻道(dào)的(de)文件特性和(hé)數量,制定最優的(de)加速策略和(hé)資源匹配;負責用戶劫持等CDN日常故障排查工作。
負責服務器的(de)測試選型,包含服務器整機、部件的(de)基礎性測試和(hé)業務測試,降低(dī)整機功率,提升機架部署密度等。
結合對公司業務的(de)了解,推廣新硬件、新方案減少業務的(de)服務器投入規模。負責服務器硬件故障的(de)診斷定位,服務器硬件監控、健康檢查工具的(de)開發和(hé)維護。
負責整體平台的(de) OS 選型、定制和(hé)內(nèi)核優化,以及 Patch 的(de)更新和(hé)內(nèi)部版本發布;建立基礎的(de)YUM包管理(lǐ)和(hé)分發中心,提供常用包版本庫;跟進日常各類 OS 相關故障;針對不同的(de)業務類型,提供定向的(de)優化支持。
記錄和(hé)管理(lǐ)運維相關的(de)基礎物理(lǐ)信息,包括數據中心、網絡、機櫃、服務器、ACL、IP等各種資源信息,制定有效的(de)流程,确保信息的(de)準确性;開放API接口,為(wèi)自(zì)動化運維提供數據支持。
業務對 DNS、NTP、SYSLOG 等基礎服務的(de)依賴非常高(gāo),需要設計高(gāo)可(kě)用架構避免單點,提供穩定的(de)基礎服務。
應用運維負責線上服務的(de)變更、服務狀态監控、服務容災和(hé)數據備份等工作,對服務進行例行排查、故障應急處理(lǐ)等工作。詳細的(de)工作職責如(rú)下所述。
在産品研發階段,參與産品設計評審,從運維的(de)角度提出評審意見,使服務滿足運維準入的(de)高(gāo)可(kě)用要求。
負責制定線上業務升級變更及回滾方案,并進行變更實施。掌握所負責的(de)服務及服務間關聯關系、服務依賴的(de)各種資源。能夠發現服務上的(de)缺陷,及時通報并推進解決。
制定服務穩定性指标及準入标準,同時不斷完善和(hé)優化程序和(hé)系統的(de)功能、效率,提高(gāo)運行質量。完善監控內(nèi)容,提高(gāo)報警準确度。
在線上服務出現故障時,第一(yī)時間響應,對已知線上故障能按流程進行通報并按預案執行,未知故障組織相關人員聯合排障。
對各服務的(de)服務器資産進行管理(lǐ),梳理(lǐ)服務器資源狀況、數據中心分布情況、網絡專線及帶寬情況,能夠合理(lǐ)使用服務器資源,根據不同服務的(de)需求,分配不同配置的(de)服務器,确保服務器資源的(de)充分利用。
制定服務例行排查點,并不斷完善。根據制定的(de)服務排查點,對服務進行定期檢查。對排查過程中發現的(de)問題,及時進行追查,排除可(kě)能存在的(de)隐患。
确定服務所需的(de)各項監控、系統指标的(de)阈值或臨界點,以及出現該情況後的(de)處理(lǐ)預案。
建立和(hé)更新服務預案文檔,并根據日常故障情況不斷補充完善,提高(gāo)預案完備性。能夠制定和(hé)評審各類預案,周期性進行預案演練,确保預案的(de)可(kě)執行性。
制定數據備份策略,按規範進行數據備份工作。保證數據備份的(de)可(kě)用性和(hé)完整性,定期開展數據恢複性測試。
數據庫運維負責數據存儲方案設計、數據庫表設計、索引設計和(hé)SQL優化,對數據庫進行變更、監控、備份、高(gāo)可(kě)用設計等工作。詳細的(de)工作職責如(rú)下所述。
在産品研發初始階段,參與設計方案評審,從DBA的(de)角度提出數據存儲方案、庫表設計方案、SQL開發标準、索引設計方案等,使服務滿足數據庫使用的(de)高(gāo)可(kě)用、高(gāo)性能要求。
掌握所負責服務的(de)數據庫的(de)容量上限,清楚地(dì)了解當前瓶頸點,當服務還未到達容量上限時,及時進行優化、分拆或者擴容。
制定數據備份與災備策略,定期完成數據恢複性測試,保證數據備份的(de)可(kě)用性和(hé)完整性。
完善數據庫存活和(hé)性能監控,及時了解數據庫運行狀态及故障。
數據庫安全建設數據庫賬号體系,嚴格控制賬号權限與開放範圍,降低(dī)誤操作和(hé)數據洩露的(de)風險;加強離(lí)線備份數據的(de)管理(lǐ),降低(dī)數據洩露的(de)風險。
對數據庫單點風險和(hé)故障設計相應的(de)切換方案,降低(dī)故障對數據庫服務的(de)影響;不斷對數據庫整體性能進行優化,包括新存儲方案引進、硬件優化、文件系統優化、數據庫優化、SQL優化等,在保障成本不增加或者少量增加的(de)情況下,數據庫可(kě)以支撐更多的(de)業務請求。
設計開發數據庫自(zì)動化運維系統,包括數據庫部署、自(zì)動擴容、分庫分表、權限管理(lǐ)、備份恢複、SQL審核和(hé)上線、故障切換等功能。
運維研發負責通用的(de)運維平台設計和(hé)研發工作,如(rú):資産管理(lǐ)、監控系統、運維平台、數據權限管理(lǐ)系統等。提供各種API供運維或研發人員使用,封裝更高(gāo)層的(de)自(zì)動化運維系統。詳細的(de)工作職責如(rú)下所述。
記錄和(hé)管理(lǐ)服務及其關聯關系,協助運維人員自(zì)動化、流程化地(dì)完成日常運維操作,包括機器管理(lǐ)、重啓、改名、初始化、域名管理(lǐ)、流量切換和(hé)故障預案實施等。
負責監控系統的(de)設計、開發工作,完成公司服務器和(hé)各種網絡設備的(de)資源指标、線上業務運行指标的(de)收集、告警、存儲、分析、展示和(hé)數據挖掘等工作,持續提高(gāo)告警的(de)及時性、準确性和(hé)智能性,促進公司服務器資源的(de)合理(lǐ)化調配。
參與部署自(zì)動化系統的(de)開發,負責自(zì)動化部署系統所需要的(de)基礎數據和(hé)信息,負責權限管理(lǐ)、API開發、Web端開發。結合雲計算,研發和(hé)提供PaaS相關高(gāo)可(kě)用平台,進一(yī)步提高(gāo)服務的(de)部署速度和(hé)用戶體驗,提升資源利用率。
運維安全負責網絡、系統和(hé)業務等方面的(de)安全加固工作,進行常規的(de)安全掃描、滲透測試,進行安全工具和(hé)系統研發以及安全事件應急處理(lǐ)。詳細的(de)工作職責如(rú)下所述。
根據公司內(nèi)部的(de)具體流程,制定切實可(kě)行,且行之有效的(de)安全制度。
定期向員工提供具有針對性的(de)安全培訓和(hé)考核,在全公司內(nèi)建立安全負責人制度。
通過黑白盒測試和(hé)檢查機制,定期産生對物理(lǐ)網絡、服務器、業務應用、用戶數據等方面的(de)總體風險評估結果。
根據風險評估結果,加固最薄弱的(de)環節,包括設計安全防線、部署安全設備、及時更新補丁、防禦病毒、源代碼自(zì)動掃描和(hé)業務産品安全咨詢等。為(wèi)了降低(dī)可(kě)能洩露數據的(de)價值,通過加密、匿名化、混淆數據,乃至定期删除等技術手段和(hé)流程來達到目的(de)。
為(wèi)了滿足例如(rú)支付牌照等合規性要求,安全團隊承擔着安全合規的(de)對外接口人工作。
建立安全報警系統,通過安全中心收集第三方發現的(de)安全問題,組織各部門對已經發現的(de)安全問題進行修複、影響面評估、事後安全原因追查。
早期的(de)運維團隊在人員較少的(de)情況下,主要是進行數據中心建設、基礎網絡建設、服務器采購和(hé)服務器安裝交付工作。幾乎很少涉及線上服務的(de)變更、監控、管理(lǐ)等工作。
這個時候的(de)運維團隊更多的(de)屬于基礎建設的(de)角色,提供一(yī)個簡單、可(kě)用的(de)網絡環境和(hé)系統環境即可(kě)。
随着業務産品的(de)逐漸成熟,對于服務質量方面就有了更高(gāo)的(de)要求。這個時候的(de)運維團隊還會承擔一(yī)些服務器監控的(de)工作,同時會負責 LVS、Nginx 等與業務邏輯無關的(de) 4/7 層運維工作。
這個時候服務變更更多的(de)是逐台的(de)手工操作,或者有一(yī)些簡單批量腳本的(de)出現。監控的(de)焦點更多的(de)在服務器狀态和(hé)資源使用情況上,對服務應用狀态的(de)監控幾乎很少,監控更多的(de)使用各種開源系統如(rú)Nagios、Cacti等。
由于業務規模和(hé)複雜度的(de)持續增加,運維團隊會逐漸劃分為(wèi)應用運維和(hé)系統運維兩大塊。應用運維開始接手線上業務,逐步開展服務監控梳理(lǐ)、數據備份以及服務變更的(de)工作。
随着對服務的(de)深入,應用運維工程師有能力開始對服務進行一(yī)些簡單的(de)優化。同時,為(wèi)了應對每天大量的(de)服務變更,我們也開始編寫各類運維工具,針對某些特定的(de)服務能夠很方便的(de)批量變更。
随着業務規模的(de)增大,基礎設施由于容量規劃不足或抵禦風險能力較弱導緻的(de)故障也越來越多,迫使運維人員開始将更多的(de)精力投入到多數據中心容災、預案管理(lǐ)的(de)方向上。
業務規模達到一(yī)定程度後,開源的(de)監控系統在性能和(hé)功能方面,已經無法滿足業務需求;大量的(de)服務變更、複雜的(de)服務關系,以前靠人工記錄、工具變更的(de)方式不管在效率還是準确性方面也都無法滿足業務需求。
在安全方面也出現了各種大大小小的(de)事件,迫使我們投入更多的(de)精力在安全防禦上。逐漸的(de),運維團隊形成之前提到的(de)5個大的(de)工作分類,每個分類都需要有專精的(de)人才。
這個時候系統運維更專注于基礎設施的(de)建設和(hé)運維,提供穩定、高(gāo)效的(de)網絡環境,交付服務器等資源給應用運維工程師。應用運維更專注于服務運行狀态和(hé)效率。
數據庫運維屬于應用運維工作的(de)細化,更專注于數據庫領域的(de)自(zì)動化、性能優化和(hé)安全防禦。運維研發和(hé)運維安全提供各類平台、工具,進一(yī)步提升運維工程師的(de)工作效率,使業務服務運行得更加穩定、高(gāo)效和(hé)安全。
我們将運維發展過程劃分為(wèi)4個階段,如(rú)圖1-2所示。
圖1-2運維發展過程
手工管理(lǐ)階段:業務流量不大,服務器數量相對較少,系統複雜度不高(gāo)。對于日常的(de)業務管理(lǐ)操作,大家更多的(de)是逐台登錄服務器進行手工操作,屬于各自(zì)為(wèi)戰,每個人都有自(zì)己的(de)操作方式,缺少必要的(de)操作标準、流程機制,比如(rú)業務目錄環境都是各式各樣的(de)。
工具批量操作階段:随着服務器規模、系統複雜度的(de)增加,全人工的(de)操作方式已經不能滿足業務的(de)快速發展需要。因此,運維人員逐漸開始使用批量化的(de)操作工具,針對不同操作類型出現了不同的(de)腳本程序。
但各團隊都有自(zì)己的(de)工具,每次操作需求發生變化時都需要調整工具。這主要是因為(wèi)對于環境、操作的(de)規範不夠,導緻可(kě)程序化處理(lǐ)能力較弱。此時,雖然效率提升了一(yī)部分,但很快又遇到了瓶頸。
操作的(de)質量并沒有太多的(de)提升,甚至可(kě)能因為(wèi)批量執行而導緻更大規模的(de)問題出現。我們開始建立大量的(de)流程規範,比如(rú)複查機制,先上線一(yī)台服務器觀察10分鍾後再繼續後面的(de)操作,一(yī)次升級完成後至少要觀察20分鍾等。
這些主要還是靠人來監督和(hé)執行,但在實際過程中執行往往不到位,反而降低(dī)了工作效率。
平台管理(lǐ)階段:在這個階段,對于運維效率和(hé)誤操作率有了更高(gāo)的(de)要求,我們決定開始建設運維平台,通過平台承載标準、流程,進而解放人力和(hé)提高(gāo)質量。
這個時候對服務的(de)變更動作進行了抽象,形成了操作方法、服務目錄環境、服務運行方式等統一(yī)的(de)标準,如(rú)程序的(de)啓停接口必須包括啓動、停止、重載等。通過平台來約束操作流程,如(rú)上面提到的(de)上線一(yī)台服務器觀察10分鍾。
在平台中強制設定暫停檢查點,在第一(yī)台服務器操作完成後,需要運維人員填寫相應的(de)檢查項,然後才可(kě)以繼續執行後續的(de)部署動作。
系統自(zì)調度階段:更大規模的(de)服務數量、更複雜的(de)服務關聯關系、各個運維平台的(de)林立,原有的(de)将批量操作轉化成平台操作的(de)方式已經不再适合,需要對服務變更進行更高(gāo)一(yī)層的(de)抽象。
将每一(yī)台服務器抽象成一(yī)個容器,由調度系統根據資源使用情況,将服務調度、部署到合适的(de)服務器上,自(zì)動化完成與周邊各個運維系統的(de)聯動,比如(rú)監控系統、日志系統、備份系統等。
通過自(zì)調度系統,根據服務運行情況動态伸縮容量,能夠自(zì)動化處理(lǐ)常見的(de)服務故障。運維人員的(de)工作也會前置到産品設計階段,協助研發人員改造服務使其可(kě)以接入到自(zì)調度系統中。
在整個運維的(de)發展過程中,希望所有的(de)工作都自(zì)動化起來,減少人的(de)重複工作,降低(dī)知識傳遞的(de)成本,使我們的(de)運維交付更高(gāo)效、更安全,使産品運行更穩定。對于故障的(de)處理(lǐ),也希望由事後處理(lǐ)變成提前發現,由人工處理(lǐ)變成系統自(zì)動容災。