-
運維
鎖定
運維,本質上是對網絡、服務器、服務的生命週期各個階段的運營與維護,在成本、穩定性、效率上達成一致可接受的狀態。
- 中文名
- 運維
- 外文名
- O&M (Operation and Maintenance)
- 運維工程師
- 運維從業人員
- SRE
- Site Reliability Engineer
- 運維平台
- 運維相關工作平台
- DBA
- Database Administrator
運維運維的職責
對於初創公司,運維部和系統部一般是合二為一的,相關工作由同一批人負責,界限可能不是很明顯。大型公司對運維工作的要求更高,需要有更精細的分工,因此機房/網絡/操作系統相關的底層工作分離出來由專人負責,成為系統管理部,而上層和應用產品相關的工作則由運維負責,成為運維部。以下從互聯網產品生命週期和運維涉及的技術分別來看分工較細的大型互聯網公司中運維工作的職責。
[1]
運維產品生命週期
運維的職責覆蓋了產品從設計到發佈、運行維護、變更升級及至下線的生命週期,各個階段的職責包括:
產品發佈前
這個階段運維工程師的職責是參與設計並把關運維准入,主要包括:
(1) 產品的業務熟悉;
(4) 資源就位,將申請的服務器及基礎環境/域名準備就位。
產品發佈
這個階段運維工程師負責發佈的具體工作,將具體的軟件和系統/硬件資源整合形成產品並對外提供服務。
對於已在線服務的更新也屬於發佈範疇,這個時候的產品發佈一般要保障在線發佈,在不中斷對外服務的情況下完成產品的升級。對於大型複雜的變更也存在中止服務部署完成後再重新提供服務的情況,但這種情況需要運維工程師通過儘可能的技術手段來避免。
產品運行維護
這個階段的主要工作包括:
(1) 監控:對服務運行的狀態進行實時的監控,隨時發現服務的運行異常和資源消耗情況;輸出重要的日常服務運行報表以評估服務/業務整體運行狀況,發現服務隱患;
(2) 故障處理:對服務出現的任何異常進行及時處理,儘可能避免問題的擴大化甚至中止服務。這之前運維工程師需要針對各類服務異常,如機房/網絡故障、程序bug等問題制定處理的預案,問題出現時可以自動或手動執行預案達到止損的目的。除了日常小故障外,運維工程師還需要考慮產品不同程度受損情況下的災難恢復,包括諸如地震等不可抗力導致大規模機房故障、在線產品被刪除等對產品造成致命傷害的情況。
容量管理:包括服務規模擴張後的資源評估、擴容、機房遷移、流量調度等規劃和具體實施。
產品性能/成本優化
產品下線
發展良好的互聯網產品將始終在線對外提供服務,但互聯網產品快速迭代,也存在相當多孵化的產品最後被淘汰的情況,這些產品都需要做下線處理,這個過程運維工程師主要做好資源回收的工作,將機器/網絡等資源回收後納入資源池中供其它服務使用。
[2]
運維運維技術方向
產品的整個生命週期裏運維的職責重要而廣泛,但運維工程師們的職責不僅限於這部分工作,還需要總結工作中遇到的問題,抽取出相關的技術方向、研發相關的工具和平台以支持/優化業務的發展並提高運維的效率,相關技術工作主要包括:
- 服務監控技術:包括監控平台的研發、應用,服務監控準確性、實時性、全面性的保障
- 服務故障管理:包括服務的故障預案設計,預案的自動化執行,故障的總結並反饋到產品/系統的設計層面進行優化以提高產品的穩定性
- 服務容量管理:測量服務的容量,規劃服務的機房建設,擴容、遷移等工作
- 服務性能優化:從各個方向,包括網絡優化、操作系統優化、應用優化、客户端優化等,提高服務的性能和響應速度,改善用户體驗
- 服務全局流量調度:接入服務的流量,根據容量和服務狀態在各個機房間分配流量
- 服務任務調度:服務的各種定時/非定時任務的調度觸發及狀態監控
- 服務安全保障:包括服務的訪問安全、防攻擊、權限控制等
- 數據傳輸技術:包括p2p等各類傳輸技術的研發應用,也遠距離大數據傳輸等問題的解決
- 服務自動發佈部署:部署平台/工具的研發,及平台/工具的使用,做到安全、高效的發佈服務
- 服務集羣管理:包括服務的服務器管理、大規模集羣管理等
- 服務成本優化:儘可能降低服務運行使用的資源,降低服務運行成本
- 數據庫管理(DBA):通過設計、開發和管理高性能數據庫集羣,使數據庫服務更穩定、更高效、更易於管理。
- 平台化的開發:類docker和google borg平台的開發管理,及服務接入技術
- 分佈式存儲平台的開發優化:類google gfs等分佈式存儲平台的研發及服務接入
等等,凡是關係到服務質量、效率、成本、安全等方面的工作,及涉及到的技術、組件、工具、平台都在運維的技術範疇裏。做好每一個技術方向、完成相應的組件、工具、平台研發都能對履行運維職責起到積極的作用,對業務的發展發揮關鍵影響。
[3]
運維技能和素質
- 紮實的計算機基礎知識,包括計算機系統架構,操作系統,網絡技術等;
- 通用應用方面需要了解操作系統、網絡、安全,存儲,CDN,DB等,知道其相關原理;
- 編程能力,小到運維工具的開發大到大型運維繫統/平台的開發都需要有良好的編程能力;
- 數據分析能力:能夠整理、分析系統運行的各項數據,從中發現問題及找到解決方向;
- 豐富的系統知識,包括系統工具、典型系統架構、常見的平台選型等;
- 綜合利用工具和平台的能力;
運維工作的複雜性對這個崗位的運維工程師們的軟素質也提出了要求:
- 時間管理能力,特別是碎片化時間的處理能力;
- 沉穩的心態,面對緊急情況時需要處變不驚;
- 溝通能力、團隊協作,運維工作跨部門、跨工種工作很多,需善於溝通、並且團隊協作能力要強;
- 工作中需膽大心細:膽大才能創新、不走尋常路,特別對於運維這種新的工種,更需創新才能促進發展;心細,運維工程師是最高線上權限者,需要謹慎心細;
運維開展方式
業務運維工程師的日常工作包括:
- 監控線上的服務質量
- 響應異常/處理突發故障
- 在線發佈/升級產品
- 和相應產品線的研發和測試協調處理產品問題
- 基於工作中的問題和數據分析進行抽取,將運維經驗理念落地沉澱為方法論/工具/系統/平台,並制定相關的改進計劃,在各個技術方向上落地實現,最終反饋回運維工作中,提高運維本身的效率和產品的價值。
運維平台工具
運維工程師使用的運維平台和工具包括:
- Web服務器:apache、tomcat、nginx、lighttpd
- 監控:nagios、ganglia、cacti、zabbix
- 自動部署:ansible、sshpt、salt
- 配置管理:puppet、cfengine
- 負載均衡:lvs、haproxy、nginx
- 傳輸工具:scribe、flume
- 備份工具:rsync、wget
- 數據庫:mysql、oracle、sqlserver
- 分佈式平台:hdfs、mapreduce、spark、storm、hive
- 分佈式數據庫:hbase、cassandra、redis、MongoDB
- 容器:lxc、docker
- 虛擬化:openstack、xen、kvm
- 安全:kerberos、selinux、acl、iptables
- 問題追查:netstat、top、tcpdump、last
廣義上所有開源的軟件都是運維工程師會使用到的平台和工具,同時也包括運維各個技術方向上自行研發的各類平台。
運維職業發展
運維工程師從工作方式上分為幾大類:
- 運維工程師/運維開發工程師:
負責具體的產品線運維工作,同時也需要掌握開發的能力,深入業務,最瞭解業務的痛點和問題,同時研發/優化針對產品業務需求的平台、工具和手段,能夠接觸到各類優秀的系統架構並有能力做出優劣對比,同時對業務的掌控決定了相應運維工程師在業務發展中的作用。長遠發展是成為大型系統的架構師。
- 運維平台研發工程師:
專門研發運維相關通用平台和技術,需要有一定的產品線運維經驗或從產品線中拿到運維需求。對研發能力有較高的要求,對系統的設計有較嚴格的標準,並且能夠理解用户需求,做出適合服務運維和滿足運維工程師使用體驗的運維產品,長遠的發展是成為各個技術縱向領域的技術專家。
- 數據庫研發工程師/數據庫工程師:
數據庫方向是運維技術中較為特殊的一個方向,由於業務的重要性通常需要專設崗位,業界在該方向也有深厚的研究和積累。主要方向有數據庫內核、雲數據庫等,長遠發展是數據庫領域的技術專家,數據庫架構師。
- 運維經理:
運維同學做事情的過程中通常需要協調多個RD和QA同學,對協調和推進能力要求比較高,對一些技術深度還不錯,協調和推進能力比較高的同學非常適合轉型管理職位,長遠的發展和技術部門的管理職位一樣目標是CTO、CEO。
各個方向上的工程師發展到一定階段後,沒有明確的界限,需要同時具備較強的運維、架構、編程、算法等能力,是一個要求很高的職業。
運維運維行業前景
- 從行業角度來看,隨着中國互聯網的高速發展、網站規模越來越大、架構越來越複雜,對專職網站運維工程師、網站架構師的要求會越來越急迫,特別是對有經驗的優秀運維人才需求量大,而且是越老越值錢。
- 從個人角度,運維工程師技術含量及要求會越來越高,同時也是對公司應用、架構最瞭解最熟悉的人、越來越得到重視。
- 互聯網運維是一個融合多學科(網絡、系統、開發、安全、應用架構、存儲等)的綜合性技術崗位,給運維工程師提供了一個很好的個人能力與技術的發展空間。
- 運維工作的相關經驗將會變得非常重要,而且也將成為個人的核心競爭力,優秀的運維工程師具備很好的各層面問題的解決能力及方案提供、全局思考的能力等。
- 由於運維崗位所接觸的知識面非常廣闊,更容易培養或發揮出個人某些方面的特長或愛好,如內核、網絡、開發、數據庫等方面,可以做得非常深入精通、成為這方面的專家。
- 當前國內外對運維人才的需求非常迫切,運維工程師的薪資也水漲船高,與研發、測試等技術部門持平,甚至超出。
運維資深運維
CXY:
運維是一個非常廣泛的定義,在不同的公司不同的階段有着不同的職責與定位,如果以operation字面的含義去理解,認為就是敲幾行操作命令的工作,那就錯了。 對於初創公司,運維工程師的工作可能需要從申請域名開始,購買/租用服務器,上架,調整網絡設備的設置,部署操作系統和運行環境,部署代碼,設計和部署監控,防止漏洞和攻擊等等。對於大型的公司,對於運維工作的要求越來越高,也催生了更細化的運維分工:從大的方向,可以分為網站運維,系統運維,網絡運維,數據庫運維,IT運維,運維開發,運維安全等方向。
無論做什麼運維,最基本的職責都是保證業務能夠穩定運行。所以必須成為業務穩定性的owner。有些人通常認為運維工程師像消防員,7*24小時響應異常,救火。但是穩定性的運維工程師和醫生的職業更接近。醫生也分各種科室,也有急症室,需要先判斷病人的問題,對症下藥。
業務有着各種各樣的需求,如果運維工程師能夠滿足業務需求,或者主動挖掘業務的痛點和改進方法,就能為業務實現更多的價值。
在滿足業務需求時,應該分清主次,優先面對業務快速發展非常重要的需求,例如穩定性,部署和變更效率,容量管理。穩定性不用多説,如果用户沒法穩定使用你的業務,什麼產品特性都沒有價值。對於百度這樣極速發展的互聯網公司,每天都有大量的升級更新需要提供給用户,如何在異地的大集羣上最快的滿足產品的升級需求,同時讓用户對升級過程無感知,這是我們的追求。當用户會用百度來測量網絡是否可以上網時,就是對運維質量的褒獎。
其次,可以橫向看看不同業務的需求。如果能夠把多個業務的需求抽象出來,把一些有通用價值的工作平台化(例如數據庫,cdn,監控,流量接入和調度,大數據的存儲和計算),也能在這個方向進行深入的發展。在百度這樣的巨大的流量和服務器規模下,你不僅有巨大的空間和挑戰,也有着充足的資源和支持,可以開發和應用業界最前沿的技術。
有一定的積累後,可以進入到宏觀和微觀的兩個層面,從整個公司層面考慮業務的智能部署和調度(涉及網絡,硬件,系統,應用開發方式等各個要點),進一步提升效率和節省成本。
如果能夠懂業務,理解業務的模式,緊密結合業務進行優化和創新,也是運維工程師體現價值的另外一種方式。有很多產品上的創新,專利的申請,論文的發表,業務指標的提升,直接或者以合作的方式由運維工程師貢獻。
YBX:
運維工程師相對研發人員來講,可以全局觀察所維護的計算機系統,特別是高階運維工程師,不存在模塊界限,這種獨特的位置帶來很多價值:
- 知道準確的系統瓶頸點,進而知道系統準確的容量;在系統出現瓶頸前,知道如何快速提供容量。
- 知道系統的風險點,可以協調風險點上下相關關聯模塊,做出冗餘策略;相比集中解決單點模塊穩定性,更合理。
- 長期從事相關工作,積累較多的架構設計經驗,可以指導新架構設計和審核。
- 從公司不同業務角度看,運維可以從中抽象相同的模塊,統一管理,形成有效的平台和自動化管理方法
同樣從公司不同業務角度看,可以統一調配資源,進而節省資源。
KZ:
- 設計並實現可以提高公司服務可用性,可擴展性,延遲和效率的軟件。
- 處理日常緊急事故,修正,替換問題組件。並設計規避問題方法。
- 設計和實現新的超大規模分佈式系統架構和標準。
- 參與服務擴容計劃和預測服務增長趨勢,對軟件和系統性能進行調優。
- 提供在線諮詢服務和現場解決問題服務。
- 構建自動運維平台,解決日常問題。
- 構建知識庫,預測可能的問題。
XX:
運維即生產環境以及和生產環境相關的資源、服務的維護的整個過程,包括了相關的技術、流程手段,確保生產環境穩定、高效、低成本的運行。
運維一方面為對業務功能最終負責,其價值的體現為最大化助力產品價值的發揮。這通常是通過將產品功能的運行表現提升到極致來達成的。例如搜索引擎的運維重點要保障用户在搜索時候的極致體驗:穩、快、準、新、全。而一個在線聊天系統的運維應該是確保用户聊天過程的實時與順暢。另一方面為對在線業務的成本最終負責。其價值的體現為降低服務運行成本
運維工程師的要求特別嚴苛,因為運維工程師針對不同的問題,需要不斷的補充擴大自己的知識和研究範疇。
SJY:
一個運維工程師所需的技術體系以其專業方向而異。但基本的計算機系統架構,操作系統,網絡技術的掌握是基本要求。例如你可能需要熟練掌握linux操作系統的使用,熟練使用各種腳本工具來處理日常工作任務,精通TCP/IP協議棧以排查一個大規模網絡系統中的流量異常問題等。更進一步的你需要形成一套軟件可運維性方面的經驗積累,以此作為後續工作的指導。
一個運維工程師在初期階段目的是掌握維護一套系統所需的所有軟硬件知識和經驗。進階階段是需要能夠設計開發一套基礎的體系軟件,以支撐業務系統的穩定可靠運行,即開發服務於軟件的軟件,以支持更大規模的業務系統,提高運維生產力。最高階段是反作用於軟件系統的構建和運行階段,使得系統從誕生階段起即具有天然的可運維性,以最大化系統的生產力,同時最小化對外部支撐資源的依賴。
ZM:
運維工程師首先應該是軟件工程師(Software Engineer),只是責任和側重有所不同。
[4]
運維工程師應該是軟件工程師、系統工程師等角色的綜合體,和一般軟件工程師相比、應該具有更加廣博的知識背景
運維的職責在於:
- 保證服務的穩定運行;
- 考慮服務的可擴展性;
- 從系統的穩定性和可運維性的角度,提出開發需求;
- 定位系統的問題,甚至可以直接修正bug;
- 對突然出現的問題做到快速響應和處理;
運維的日常工作:
- 需要對系統的需求和設計方案進行分析,思考在保證穩定性方面有哪些可以加強的地方,並和系統的研發人員進行有效溝通;
- 使用工具、或者寫程序,對運營數據進行分析;
- 寫程序以建立工具或平台,去加強系統的穩定性;
運維工程師最重要的是會運用編程和軟件的方法來解決問題。發展的道路應該和軟件工程師沒有很大的區別,差異只是關注點和領域方向的不同
運維國際會議
以下是部分運維相關的國際會議,會議涉及運維及運維相關技術的交流學習。
nsdi'14 |
Percona live |
Velocity Oreilly web |
fcw'14 |
LISA '14 |
35th IEEE S&P 2014 |
SIGMOD/PODS ’14 |
OSDI'14 |
oow'13 |
SRECON |
- 參考資料
-
- 1. What is Site Reliability Engineering? .site-reliability-engineering[引用日期2015-08-12]
- 2. Engineering Reliability into Web Sites: Google SRE .googleusercontent[引用日期2015-08-12]
- 3. Site Reliability Engineers: “solving the most interesting problems” .blogspot[引用日期2015-08-12]
- 4. Site Reliability Engineers: the “world’s most intense pit crew” .blogspot.2012-06-07[引用日期2015-08-11]