從互聯網、移動互聯網到云計算、大數據、人工智能,再到虛擬現實/增強現實,十多年來,信息技術的日新月異催生了不斷涌現的互聯網新業態,也推動了傳統行業投身于數字化創新的浪潮。此時此刻,機器取代人類的說法固然夸張,卻也真實地反映了新技術應用對產業帶來的沖擊。
全球頂級商業機構都是能夠把握技術創新成果的企業;而對技術運用不當的企業,即便起點與前者一致,或許也曾風光一時,但最終還是步履維艱,甚至煙消云散。決定能否與技術趨勢同行的一個核心因素就是技術架構。如果說商業模式是商業組織的靈魂,那么架構就是靈魂的根基。最典型的例子就是電商618、雙11大促,流量爆發之下如何保障整個商品交易流程的體驗,對系統設計和運維保障都是巨大的考驗,這也推動了技術的進步。當前的大促活動依然讓電商企業如履如臨,然而挑戰難度已經不如七八年前,這就是架構演進趨于成熟的表現,充分利用云計算理念的“互聯網架構”由此為業界所推崇。
綜合考慮IT資產、業務規模、發展階段、人才儲備及投資成本,不同企業需要的互聯網架構并不完全一樣,譬如初創公司考慮百萬級并發可能不合時宜,然而為長遠計,想跟上發展迅速、爆發力驚人的互聯網業務,架構設計需要既能滿足當前業務需求,又具備快速升級支撐下一個發展階段的能力。企業如何正確駕馭架構的設計和演進?有哪些通用的成熟經驗可供借鑒?業界對此不乏零星的討論,但企業仍缺乏系統的、可指導實踐的參考資料。
本書是網易云基礎服務架構團隊根據網易集團的十余年實踐,結合社區優秀案例總結而成的互聯網架構演進指南。2006年,懷著儲備互聯網技術和孵化新業務的初衷,網易杭州研究院揚帆起航,及至今日在兩個方向上都有不俗的成績,一端是分布式、云計算、大數據、人工智能、增強現實,一端是教育、電商、金融、游戲,這一切都是構建在千錘百煉的互聯網架構之上的,這就是同時滿足功能性需求、非功能性需求和產品快速迭代需求的云原生架構。網易云希望把這些經驗分享給業界,與各行各業一起踐行中國云計算。
全書共5章,以商業組織的互聯網業務成長為主線,著眼于業務需求,清晰地剖析互聯網架構的挑戰,云原生架構的特征、構成和解決的問題,以及架構演進的路徑,并通過案例對設計原則和實踐加以詮釋。通過閱讀本書,架構師能夠借鑒網易十余年的經驗結晶,無須反復試驗,即可快速設計符合互聯網業務場景需求的架構,而有一定基礎的讀者朋友也能更加透徹地理解和規劃未來的方向。
全書由堯飄海統籌構思,網易云基礎服務架構團隊成員參與寫作,書中部分圖片脫胎于社區文檔或官方宣傳資料。第1章以宏觀視角簡明地解析互聯網業務挑戰及架構演進要點;第2章介紹開始搭建業務系統時需要的項目版本管理工具、以Docker為代表的容器技術,以及常見語言的工程化構建方式,并結合實戰示例給予完整展現;第3章針對訪問流量不是很大的業務起步階段,講述如何做好技術選型,實現一個支持快速迭代、高可用、安全的應用服務端;第4章介紹如何解決業務高速成長階段的可擴展性、性能、系統集成與交互、數據可靠性等挑戰;第5章以分布式定時任務和分布式鎖系統的實現為例,介紹分布式服務應用挑戰和架構方法,重點解析了微服務架構、分布式數據一致性和同城多活的實踐。
全書內容分別由堯飄海、焦智慧、王新勇、張小剛和馮常健主筆,黃慶兵、郭憶、喬安然、何李夫、孫建良、劉發明、沈明星、崔曉晴、易庭、祝劍鋒、姜政冬、朱凌墨等網易云架構師和工程師參與了寫作,插圖由李倩倩和紀桂蓮支持完成。
本書的付梓要特別感謝電子工業出版社的符隆美編輯,她幫助我們及時地解決了遇到的各種問題。
限于作者的精力與能力,書中難免出現一些疏漏之處,請廣大讀者不吝指正,并予以包涵,我們會在再版中修正。
推薦序一
不知不覺,網易公司已經走到第20個年頭。網易的業務從郵箱、門戶和游戲業務,拓展到電商、文娛、教育和農業板塊,并在云計算、大數據、人工智能、增強現實等領域進行了戰略布局。每一項業務的健康發展,從“道”的層面而言是在于與用戶共同成長,從“術”的層面則是不斷打磨產品,使之更好地滿足用戶需求。
互聯網信奉“快”,但網易更尊重“匠心”,產品每一個特性的更新,都需要經過反復的驗證。這也意味著,網易業務多元化背后需要大量的產品研發和迭代工作,因此,與之匹配的應用架構至關重要。網易架構在業務成長中不斷演進,形成了當下的云原生架構,讓95%的互聯網業務真正運行于云端,業務團隊只需要努力為業務編碼。由此,“快”和“匠心”在產品端得到了平衡。我相信,云原生是互聯網業務的最優解。
云原生與傳統云計算最大的區別在于,傳統云計算關注的是如何提供性價比最高的計算、存儲、網絡資源,而云原生關注的是如何讓產品能夠支持快速驗證業務模式,如何簡化復雜的開發流程、提升研發效率,如何保障產品的高可用性讓業務無需承受成長之痛,如何實現大規模彈性伸縮輕松應對業務爆發,等等。也正因如此,“云原生架構”雖然只有短短的五個字,其落地卻隱藏了無數的變量與陷阱。
介于此,本書系統梳理了網易云原生架構的演進經驗,對不同的挑戰分別給出相應答案。網易架構仍在演進,我不能說這些答案已經很成熟,但我相信,書中一定會有一些章節正好擊中不同企業的痛點,幫助企業在互聯網業務創新過程中少走一些彎路。網易希望借此與大家共同交流探討。
陳剛
網易杭州研究院院長
推薦序二
作為一家誕生于中國互聯網萌芽期的互聯網公司,網易具有豐富的產品線。長久在網易任職,一個很大的好處是能夠真切地經歷波瀾壯闊的互聯網發展史,而對于技術人來說,更重要的是能夠學習和實踐各項支撐互聯網爆炸式發展的技術,能夠在這段經歷中獲得不同于紙上得來的知識和思想:能切實體會到許多技術為何產生、為何沉寂或者興起,從而能夠在實踐中避免因循守舊或一味求新逐異;更懂得如何根據功能、非功能性需求進行取舍,選擇更有生命力的技術;更加理解架構的本質。
我和我的團隊從十多年前的博客時代開始接觸互聯網技術,當時Web2.0概念剛剛興起,網易博客一上線,用戶量、訪問量就呈爆發式增長,我們最大的困難并不在于如何編寫代碼,而是怎樣支持產品的高速迭代。以往我們并未經歷業務幾乎每天都在更新迭代的情況,此時通宵更新版本成了家常便飯,為此我們優化了版本控制策略,研發并集成了自動化構建和發布工具,將其總結為“項目工程化”,在之后的項目中尤為重視。
然而,當時博客業務也在變得日益復雜。更新版本時,團隊間的協調成為拖慢迭代節奏的重要因素,因此我們開始把一些業務模塊獨立出來,以遠程接口方式提供服務,或是在負載均衡入口直接按業務模塊分流,后臺的緩存、數據庫也做了相應的拆分,服務化進程就這樣自然地開始了,團隊曾考慮借鑒當時業界流行的SOA(面向服務架構)理念,想引入企業服務總線等重量級設施,但由于2C業務和性能意味著用戶量的支持及實際的用戶體驗,基于對更輕量、更高性能的渴望,我們最終選擇了類似微服務的架構形態。
服務化一旦開展,過程就變得更加復雜。隨著發布的頻度再次提升,服務單獨升級帶來了版本問題,以及維護、故障期間的雪崩等一系列棘手的問題,代碼質量也開始下降,由于各種方式的RPC調用、服務發現封裝方式大量地充斥在代碼中,我們意識到必須要有統一的框架支持服務化進程,于是近十年前我們有了自己的微服務框架,逐步解決雪崩、版本、服務發現、降級等問題。
后博客時代,我們將工程化、服務化等工具、框架應用于新的業務,又發現了新的問題。服務化帶來了業務計算節點種類和數量的大幅增長,運維部署變得非常困難,在資源層面,服務化后的節點無法充分利用服務器資源,眾多的服務被混合部署在同一臺服務器上,從而服務間資源爭搶,故障恢復時與各產品、各模塊的協調成了最麻煩的問題,我們意識到單臺服務器的負載在短短幾年內已發生了極大的改變,要解決資源管理問題,云計算勢在必行。
很幸運的是我與團隊能受公司之托來負責云計算平臺的研發工作,2012年秋,網易云計算平臺正式開始支持公司業務,得益于SDN技術與公司原內網環境的較好融合,云平臺很快得到了廣泛使用。相比物理機節點數量的線性增長,虛擬機的數量指數級增長在很大程度上解決了原本遇到的資源管理問題;虛擬主機做到專機專用按需配置,使用數據庫、緩存等基礎服務再也不用等待運維團隊部署維護,系統運維效率也得到了極大的提升。
獲取資源容易了,產品自然而然規劃出眾多的測試環境,如開發環境、集成環境、預發布環境等,于是搭建測試環境,持續集成與交付很快成了新瓶頸,更麻煩的是業務服務化架構日漸成型,應用運維的復雜度指數級提升。為此,我們又打造了自動化部署平臺,解決集群的編排、版本更新、回滾等問題,平臺上線后每月的部署次數直線上升,達到數萬次之多。沒有云計算時,我們覺得兩套測試環境共用就行,每天集成部署一兩次就行,有了云計算后,原本被壓抑的資源、迭代頻度的需求被瞬間釋放,反應到產品中的便是功能開發并行度和迭代速度的大幅提升,迭代風險的大幅下降。上云的收益由此可見一斑,先行擁抱云計算的企業在產品競爭中可獲得巨大的優勢。
可以說在網易這樣的成熟互聯網公司,是原本的軟件架構、技術體系的進化推動了云計算的實施,塑造了云計算平臺的形態,我們的業務技術架構是與云計算伴隨生長的,并且經歷了漫長的迭代過程,而對于后來者,基于云來設計軟件架構、實現工程化、建設運維體系,則可以選擇一條前人已充分實踐并總結和提煉的路徑,一開始便可以從云而生,這也就是我們所說的云原生的技術體系。我們在開放網易云計算能力的過程中遇到過不少用戶,他們不知道網易這樣的互聯網企業如何基于云高速迭代產品、支撐海量用戶,不知道如何在架構設計、技術選型階段邁出第一步,如何為未來的發展打下基礎,或是業務增長后如何應對。有初創企業雖然靈活快速卻控制不了迭代質量、剎不住車的,也有傳統企業提不了速的。正是看到這些問題,我認為,作為互聯網技術的實踐者,我們不僅應當將我們的平臺、工具鏈開放出來,同時也應將我們的云端架構實踐梳理成知識體系分享出來,在這“大眾創業,萬眾創新”的互聯網+時代為企業健康發展作出力所能及的貢獻。
陳諤
網易杭州研究院云計算技術部總監
……