【編者按】Yahoo!是一家全球知名的互聯網公司,擁有過8億的活躍用戶,提供了60多個全球化產品,分別部署在20多個國家或地區的數十萬臺服務器之上,然而雅虎全球的運維團隊卻僅有數百人。下面,我們通過雅虎北京全球研發中心高級系統運維工程師劉元概述的三個方面來了解雅虎的技術運維體系,剖析超大規模網絡應用的運維挑戰,走進Yahoo!數據中心!以下為原文:
“工欲善其事,必先利其器”――需要支撐超大規模的網絡應用,超大規模的全球基礎設施是必不可少的。所以我們先看Yahoo!數據中心和全球的骨干網絡有哪些特別的設計和考慮,來幫支撐超大規模的互聯網應用。
圖1 Yahoo自主設計的數據中心
首先通過兩張圖片(圖1)來了解Yahoo!數據中心。我們的數據中心大多是自主設計和建造的,尤其在北美地區,我們自主設計并建造了三個超大規模的數據中心。這三個數據中心初期設計的容量均為20兆瓦,大概可容納25000到30000臺服務器及相應網絡設備,并均有能力通過后續容量擴展至50兆瓦以上。
如果有參觀過國內數據中心,或者有數據中心建設經驗的同學可能會有所了解。影響數據中心建設的最主要因素往往不是網絡帶寬,而是電力和制冷。所以,雅虎通過近20年的經驗積累,在這兩方面沉淀了大量的專利技術以提高數據中心的密集度。我們自行設計機架及其電源模塊以保證所有機架都能滿負荷工作,同時實現所有電源的遠程網絡控制,這樣可以有效的提升可維護性,降低現場工程師的工作負擔。滿架的服務器機架還有另一個好處:所有的服務器都是前吸冷風,后排熱風,我們將服務器機架相對排列(面對面,背對背),這樣就可以實現冷熱風道的隔離,甚至完全密封熱風通道,促使冷空氣在均勻通過所有服務器散熱后,由熱風通道排出。這樣不僅降低了制冷面積,還提升了散熱效率。通過建設超大規模的數據中心,我們不僅增加了數據中心的密集度,提升了單個數據中心的計算能力,滿足了日益增長的超大規模應用需求,同時還能提升數據中心現場工程師的管理效率,降低維護成本。此外,我們也不斷聚焦新技術的采用以降低能源消耗。我們數據中心通過精心的設計,實現PUE(能源使用效率=總體能源消耗/IT設備能源消耗,越接近1代表能源效率越高)僅為1.08的業界領先水平。
除了數據中心是我們自行設計并建造的,我們全球的骨干網絡也是自主設計。我們通過自行鋪設光纜或租用運營商網絡,構建了自己的Yahoo!全球骨干網。所有的網絡設備都由我們的網絡運維團隊管理,核心網絡均是多鏈路冗余,實現單點網絡故障的自動轉移,而不依賴網絡運營商提供的SLA。
圖2全球骨干網絡示意圖(不代表Yahoo!全球骨干網絡設計)
我們的全球骨干網絡均為高帶寬互聯,區域內我們提供10Gbps-40Gbps乃至北美地區的200Gbps互聯帶寬,洲際間也提供20Gbps的多鏈路冗余。骨干網絡主要是傳輸雅虎內部數據,分發應用所需的數據到全球所有數據中心,收集全球用戶訪問數據到后端計算網格進行匯總和計算。
Yahoo!全球骨干網絡除了與傳統運營商網絡互聯互通,以方便最終用戶能通過其運營商網絡快速接入雅虎的各項服務,同時我們還與其他的大型互聯網公司有交換網絡連接,這樣我們與其他大型互聯網公司間的數據交換(如郵件數據交換)即可通過我們的交換網絡傳輸,不再依賴于運營商網絡。這樣不僅提高了交換能力,更大范圍降低對網絡運營商的依賴性。
有了世界頂尖的硬件環境,軟件環境也不可少。下面我們著重介紹下Yahoo!的技術生態圈,看看Yahoo!使用了哪些產品和技術來支持大規模網絡應用。
在雅虎內部構建一個超大規模應用其實并不是那么的復雜,因為我們已經提供了一整套完整的技術體系來幫助開發人員快速建立起一個具有高可維護性的超大規模應用。
圖3 Yahoo!數據中心技術生態圈
從這張圖我們可以看到一個新應用在生態圈里和現有技術平臺的關系:
新應用(APPLICATION)只需要更多的關注自身的業務邏輯。與應用密切關聯的本地信息,我們有一些本地存儲(LOCAL STORAGE)技術來供應用使用,比如關系性數據庫MySQL、Oracle,存儲Key-value型數據的MDBM和Memcache。另外,雅虎還提供了大量的平臺服務(PLATFORM SERVICES)供我們各種應用使用。比如統一驗證平臺YCA來完成所有應用內及應用間的身份驗證,統一防御平臺Ydod來幫助我們識別并且隔離惡意/濫用的流量,用戶信息服務UPS可以讓應用方便的獲取這個用戶的相關信息,如地理位置,興趣喜好等。個性化內容推薦服務Slingstone,可以直接向用戶提供個性化的雅虎內部及合作伙伴的內容信息。另外新應用還能方便快捷的接入廣告平臺(AD SERVER),獲取個性化推薦的廣告。前端應用收集到的各種應用相關信息(如瀏覽點擊數據),通過我們構建在全球骨干網絡之上的數據高速公路(DATA HIGHWAY)這一統一數據通道,及時地回傳到雅虎全球最大的商用Hadoop群集。在Hadoop群集上不同應用及平臺服務根據各自的需求,處理對應的數據,并將處理好的數據在通過雅虎全球骨干網絡分發到各個數據中心的服務端,以方便前端應用的調用。同時Yahoo!在云端(THE CLOUD)還提供共享的云存儲(STORAGE),以方便全球化應用的同步和調用各種共享數據。
除了這些常見的技術來幫助快速構建超大規模應用,我們還提供了大量的技術和產品來進行高效的運維和管理:
所有的這些平臺大多都是雅虎運維團隊自行開發和維護的,更貼合Yahoo!的使用體驗,幫助對超大規模的主機進行統一和高效的管理。
前面的兩條分別是硬件和軟件環境,除了一流的硬件和完備的軟件環境,能夠實現高可用性大規模應用的核心,還是人。所以我們在最后,會給大家介紹雅虎的全球運維團隊是如何工作的。
在Yahoo!我們的運維團隊除了基礎設施的Operation團隊,如數據中心現場工程師(SiteOps)、網絡運維工程師(NetOps)、基礎設施(DNS、DHCP等)運維團隊(InfraOps)和安全團隊(Paranoid)等。我們還會按照產品線劃分出Service Engineer團隊,來支持這項產品的應用運維。
SE(Service Engineer)團隊和大部分公司的系統運維工程師一樣,會負責生產系統維護,如部署應用、監控報警、配置管理、變更管理及故障管理。除此之外,在雅虎SE團隊會更多的深入了解應用。
圖4 團隊協作
從產品設計之初,我們就會和產品經歷及研發團隊共同討論系統架構設計,確保開發團隊將要實現的是高可用性、高可擴展性及高可維護性的產品。產品測試階段,我們也會和測試團隊保持密切的溝通,使測試環境能夠最大程度模擬生產環境的各種場景,以保證我們產品經過了完整有效的測試。系統上線前,我們還會和各個團隊評估整個產品的可維護性,并確定應用的容量規劃及其故障轉移策略,確保SE團隊充分了解如何在生產環境中維護該項產品。由于不同的團隊可能在不同的國家和地區,所以只有更緊密的全球化協作,才能為用戶提供一個高可用性、高可維護性的全球化產品。
產品上線以后,才是產品整個生命周期的開始,我們需要確保產品在其設計的生命周期內,都能夠按照我們的預期提供高可用性的服務。所以在日常維護中,我們會和產品及研發團隊一同分析產品運行狀態,分析總結各種故障,不斷的修正已有的Bug,提供新功能的建議與意見。根據各地用戶分布及產品的運行狀態,修正我們的容量規劃及故障轉移策略,進一步提升用戶體驗。
以上只是雅虎在超大規模應用運維體系的簡單概述,并沒有太多的技術細節,瑾作拋磚引玉之用。雅虎全球運維團隊的工程師利用他們的智慧,不斷創新,一一應對各種挑戰,完成一個個不可能完成的任務。