序1
開濤勤奮好學又樂於分享,他很早就深讀了不少開源框架源碼,喫透了內核技術,又非常喜歡看技術大俠們的分享,不斷與同行交流,並學以致用,一開始參加工作就站在了較高的起點上,所以往往比同齡人做繫統更加有信心,成果更加突出。他感恩於開源和分享,也踐行著開源分享之路,每次埋頭探索之後都有細心總結,有博客時寫博客,有微信公眾號時發公眾號,把學到的和實踐總結出來的,都無私分享出來。
網站是直接面對廣大客戶的,是公司的門戶,必須快速響應,必須持續可用,必須抗得住洪峰。任何一個網站的發展過程中都出現過問題,影響客戶體驗和商業利益,公司業務規模越大,網站出現問題的損失越大。作者進入京東後,花了不少精力從事了“永不消失的網站”建設工作。作者和同事一起,克服了一個又一個的難題,將口號變成了現實。
本書高屋建瓴,抓住了大型高並發網站設計的核心,從設計原則,到高性能、高吞吐量、高可用的繫統設計,到高靈敏的監控繫統構思、再到應急方案的制定,不失細節,又不拘泥於細節。相比其他已出版的關於大型網站的架構類的書籍,此書更加貼近實戰,追求實用,所有內容來自於實戰,文章內容也是與同道和網友們互動後改進的,本書也沒有那些為了構建一個“完整的體繫”而隻起到填充作用的段落。此書特別適合那些快速成長型企業網站的建設者,互聯網行業的研發人員,對較大規模網站的重構也有借鋻意義,看這本書可以少走些彎路,少踩些坑,其中的策略和技術許多可以直接拿來用,從而時間。作為本書的第一批讀者,發現這本書的內容組織上兼具工具書的特點,沒有嚴格的前後依賴,可以按章節順序閱讀,也可以隨機選取中間的一章。文中公布了作者的聯絡方式,有問題能方便地交流。最後,希望這本書不要成為一個網站架構分享的終結者,希望有更多同學加入到探索和分享的隊伍中來,不斷克服新的挑戰,分享更多新成果。
京東商城副總裁、京東Y事業部負責人於永利
序2
我們的互聯網開發者都曾經有過這樣的經驗。搭建一個設計精良,功能豐富的網站並不是一個高不可攀的事情。但能夠支持巨大的流量而運行自如就不是一件容易的事情了。可是,當你擁有《億級流量網站架構核心技術》時,這一切又變得那麼輕松。
《億級流量網站架構核心技術》一書詳細地闡述了開發高並發高可用網站的一繫列關鍵原則問題。就如何實現繫統高可用,流量高並發進行了深刻剖析。本書例舉了大量的真實應用案例,幫助讀者深入了解。並且使得枯燥的說教變得生動,活潑。
本書作者長期服務於京東研發的第一線,擁有豐富的軟件開發經驗。秉持著對技術的熱愛,為互聯網開發者奉獻自己的心路歷程。希望他的讀者能夠從這本書中受益。
京東集團首席技術顧問翁志
序3
經歷過雙11和618的同學都知道,在大促時如何保證繫統的高並發、高可用是非常重要的事情。因此在備戰大促時,有些通用原則和經驗可以幫助我們在遇到高並發時,構建更可用的繫統,如限流、降級、水平擴展和隔離解耦等。通過這些原則可以在流量超預期時,很好地保護繫統,避免衝擊導致的繫統不可用。
以前京東也遇到過一些高可用問題,如超時設置不合理導致繫統崩潰;限流措施不到位,導致負載過高時繫統崩潰;解耦不徹底,導致某個服務掛掉時所有依賴服務受影響等。這些都是在開發和運維繫統中很常見的問題,隻要開發人員在開發繫統時注意下這些點就可以很好地避免。書中的高可用部分可以很好地幫助讀者解決這些問題。
也經常有人討論如何提升繫統性能,最直接的解決方案是擴容,或通過如加緩存來提升繫統並發能力,或使用隊列進行流量削峰,也可以使用異步並發機制提升吞吐量或者接口性能等。這些技術老生常談,並不新鮮,但很實用,大家在實現高並發繫統時經常會遇到。書中的高並發部分可以幫助讀者理解和使用這些技術。
這本書還有一部分介紹實戰案例,其中包含了京東0級繫統“商品詳情頁”和“商品詳情頁統一服務”繫統,這兩個繫統每天承載了京東幾十億的流量,書中深入講解這兩個繫統的核心技術,還通過案例詳細介紹如何使用OpenResty設計和開發高性能Web應用,值得認真閱讀。
本書最大的特點是實用,書中的原則和經驗是在實戰中總結和進化出來的。市面上繫統化地介紹高可用和高並發的文章並不多,成體繫的就更少了,很多都是散落在網絡上。開濤是京東優秀的架構師,有很強的架構抽像能力、扎實的編程基本功和豐富的實戰經驗,他將這些原則整理成體繫,而且加了很多案例,相信可以很好地幫助讀者學習和使用這些原則,讓讀者讀完此書後能落地到實際項目中。
京東集團架構師吳博
序4
大型互聯網業務需要持續建設網站繫統並通過PC、移動等各種終端來與用戶進行交互。大流量網站架構如何支持高並發訪問並且保證高可用性,這是一個持久的、極具挑戰的技術話題。毫不誇張地說,無數互聯網行業的工程師為之奮鬥。
開濤是京東優秀技術人纔的典型代表。他從研發一線做起,腳踏實地成長為核心架構師。他所著《億級網站架構核心技術》一書,分享高可用與高並發網站構建技術,干貨滿滿,特點鮮明。
第一,理論與實踐結合。本書不僅總結出一繫列技術方法論,而且配合真實的案例,娓娓道來,深入淺出。讀者可以直接運用這些實用技術到自己的日常工作中。
第二,深度與廣度兼具。本書選題極具針對性,專注於高可用與高並發兩方面技術實踐,每個方面均詳解一繫列技術細節。
第三,技術與業務並重。開濤並沒有純談技術,而是圍繞商品詳情頁—京東重要的業務產品之一,來展開更進一步的實踐經驗分享,給讀者從業務需求到技術架構的完整視圖。
第四,新兵與老將咸宜。無論是第一年的軟件工程師,還是工作多年的資深人士,均可從本書中受益。
我個人強烈推薦此書。相信開濤的作品不會讓大家失望。
京東商城總架構師、基礎平臺負責人劉海鋒
序5
去年年底我拿到本書的電子版,受邀為其寫書評。全書篇幅很長,打開修訂視圖後,看到開濤在即將出版之前仍然在不斷的補充素材、示例,推敲著詞句。在讀到其中的某個部分的時候,我聯想到當時工作中正在做的一個優化,還跟他詳細的討論過,他想把這個方案也補充進去作為示例。我說,內容已經夠翔實了,還嫌書不夠厚嗎?
是的,開濤恨不得在這本書中,一股腦地告訴大家他所在領域中所學到和實踐的知識。寫書是一個喫力還不一定能討好的活兒,很佩服他居然能耐心寫了這麼多(還有很多限於整書篇幅,鏈接到他的博客和公眾號上的擴展閱讀內容)。我看到了作者的誠意。
全書前半部分我是利用地鐵上的時間看的,雖然內容我比較熟悉,但想在看書的同時如果能提前發現一些錯誤就更好了,看得極慢。不過,除了一些筆誤之外也沒發現什麼硬傷。後來假期拖延癥犯了,答應的書評還遲遲沒有寫完。後半部分就快速看過。尤其是第四部分案例,差不多就是開濤自己之前的工作內容,這些或多或少的都通過其他渠道看過了。
開濤結合自己的工作內容,以及相關上下遊依賴繫統中的各種方案、架構思想,通過自己的思考和歸類總結寫成本書。其中不僅有很多京東的中前端的架構實踐和技術,還有作者在工作過程中用到的很多技術細節甚至代碼。第二、三部分比較詳細和繫統地說明了高可用、高並發互聯網應用的常用架構思想和設計方法,並配合不同的場景進行舉例闡述,比較適合對此已經有了一些經驗的讀者。針對一些常見軟件和框架的細節使用說明,以及提供很多代碼的行文風格,也許能滿足那些想立即動手實踐的讀者。
架構講究權衡和取舍,但是前提之一是盡可能在多個相關領域的技術知識層面有經驗,因此架構也很重視細節,需要對很多因素有充分思考和權衡,纔有取舍。讀者在閱讀本書的過程中,關注點如果是各種架構方法,則需要注意作者描述的適用場景。如果關注點是各種具體的技術細節,也不要忘記思考背後所體現的架構思想。實際的工作中,很多方案是若干架構方法和技術的綜合運用,並且隨著業務或場景的變化而不斷調整的,不要拘泥。
突然想到了倚天屠龍記中張無忌向張三豐學太極劍一節,最後張無忌成功忘記了所有的招式。對於武功高手來說,最後都是要融會貫通,形成自身體繫的,不要被特定的招式所束縛。學習架構,也不外乎是吧。
京東商城—交易平臺架構師肖飛
序6
動起來
開濤是個勤奮的寫手,寫方案,寫代碼,寫分享,孜孜不倦。對於大多數軟件開發和設計人員來說,寫作不是一件容易的事。因為寫出來並不是給自己看的,是要給同行們看。技術人員一方面對好的技術追求若渴,另一方面又天然地用批判和挑剔的眼光看同行的作品,算是魯迅先生的同道吧。也正因為如此,開濤為此書內容的質量下了不少功夫。
開濤的職業生涯從空中網開始,2014年加入京東,一頭扎進了超0級繫統的建設過程中,京東商城商品詳情頁改版、商品詳情頁統一服務規劃與落地。這些繫統代表著京東的形像,代表著京東技術團隊的形像(開濤也是高顏值)。這些繫統必須能抗峰值、不掉線、響應快,隨著業務量的猛增,預期的瓶頸很快會到來,這次關鍵的繫統改版也是從這些挑戰開始,後來也就有了“永不消失的單品頁”,也就有了這本書中的案例和用心總結。
作者停下開發的腳步,通過思考和總結,把動態的實踐靜止到了紙張上,給大家帶來了精彩,又似躍然紙上,願各位讀者能夠把這些發生在某個歷史瞬間的實踐總結動態地運用到現實的開發實踐中。也期望作者可以開放群或者公眾號,邀請技術專家進來,與讀者進行交流,動起來。
京東商城架構師林世洪
2016年12月
序7
開啟探索之旅,感受技術的魅力
近年來,中國的互聯網產業正在以前所未有的速度迅猛發展。而技術在業務發展中所扮演的角色日益重要,隨著各個業務形態的發展湧現出了許多技術應用上的成功案例和先進技術的研究成果。而作者在本書中則通過對工作中的探索和總結來將繫統高可用這個神秘莫測的面紗揭開,讓對此有興趣的人得以窺其真容。
在以往的交流和面試過程中,大多數的研發人員在其所研發的繫統中很少有機會或確實不需要和繁多的上下遊繫統、海量的業務數據、復雜的部署環境以及極端災難(如機房斷電、光纖損壞)打交道,因此也沒有契機和計劃去詳細了解、研究繫統的高可用,對於繫統高可用的理解和實踐大多停留在理論認知和個人嘗試階段,很難有機會應用到解決實際業務問題上,也就很難形成自己技術和理念上的一個積累。而等到終於有機會開始在海量數據和高並發場景下一展身手的時候,又常常會因為曾經沒有過繫統的學習和經驗積累而在設計繫統、容災策略、解決問題的過程中艱難前行。本書則通過淺顯易懂的理念解讀和實際案例將繫統高可用相關的繫統設計原則、繫統限流、降級措施等“兵法三十六計”以非常直白的方式呈現給了大家。讓我們對於一些常見的高並發業務場景下的繫統設計原則、高可用策略有了清晰的認識和思路的拓展。無論是剛剛接觸編程的學生還是已身經百戰的一線研發人員都可以從書中得到很多啟發,也許隻是一個配置的改變、一行邏輯的優化、一個策略的調整都有可能讓我們的繫統可用性登上新的臺階。
京東的網站繫統走過了從靜態到動態、從動態到動靜結合、從對DB的強依賴到多級緩存、從重啟服務器到自如切換流量、從對503的恐懼到從容應對問題、從修改代碼應對異常到修改配置輕松搞定的繫統演變歷程。當一個繫統的業務體量達到可以引起繫統性能和健壯性發生退變的時候,伴隨著繫統問題到來的更是研發人員自身能力提升和寶貴經驗積累的好時機。與其將問題用重啟應用和“無法解釋的詭異問題”來掩蓋,不如把問題的根源挖掘出來。如果挖掘得足夠深入,一切問題都是可解決的。書中使用的技術和總結的經驗也許無法解決書中業務場景之外的問題,但這也恰恰是技術的魅力所在。沒有一種技術和經驗可以作為繫統的萬能解藥來幫助我們一勞永逸的避免掉所有隱患,但我們可以通過對思想的接納和消化來豐富我們的知識體繫,讓我們成為一個有思想的研發人員。阮一峰曾經在他的書中對於“如何變有思想”做過解釋,我覺得非常適合用在研發人員的身上。研發人員的思想是什麼?當你對一個需求、對一個業務形態或者對一個問題有自己的觀點見解,那你就是有思想的。你的觀點越多就越可能接近問題的本質,那麼你的思想就越深刻和豐富。雖然你的觀點不一定是事實也不一定是正確的,但作為研發人員如果有了通過不斷探索、質疑、證明觀點的能力之後,那麼也就有了透析問題、解決問題的能力。那麼在面對一個看似簡單的需求或者業務時,也許你可以看得更透徹,將繫統設計得更適用更合理,當你遇到書中提及的問題時也可以開始輕松應對。
我想,閱讀並了解書中對於繫統高可用這個領域的介紹一定會讓你樂在其中。雖然你可能會有些疑惑和不解,但作為一個技術人對於技術的追求和探索不就是應該這樣嗎?最後,我邀請你一起踏上這個對於繫統高可用的探索之旅,來感受技術的魅力。
京東商城研發總監韓笑躍
序8
大規模分布式繫統的構建,面臨很多的困難和問題,但是請記住,對架構師而言,不管我們要解決多少困難,最重要的是要保證繫統可用,無論任何環境、任何壓力、任何場景,繫統都要可用,這是我們的第一要務。在保證繫統高可用的前提下,大型分布式繫統面臨的最突出的三大問題就是:如何應對高並發、如何處理大數據量、如何處理分布式帶來的一繫列問題。這也是很多一線架構老司機們的感悟和共識。
由於一本書的容量有限,不可能面面俱到,因此本書集中火力,繫統、詳細、專業地講述了:大型分布式繫統如何保證高可用性,以及如何應對高並發這兩個大方面。涉及到很多技術和細節。比如用來保證高可用的:負載均衡和反向代理、隔離、限流、降級、超時與重試等;又比如用來處理高並發的:應用緩存、多極緩存、連接池、異步並發、隊列處理等。對很多朋友來說,這裡面很多知識都是久聞其名,而不知其然,更不知其所以然的,學習本書正好能彌補大家在這些方面的知識短板。
作者以匠人的情懷,把每個方面從理論到應用、從技術本質到具體實現都講得透徹明了,以平實而不失激情的風格娓娓道來,再輔以實戰經驗的擴展,不單單讓讀者學習到具體的技術和解決問題的思路,更是給出了應對問題的具體解決方案,基本上可以直接把這些方案拿到實際項目中直接使用。
尤為難得的是:本書還結合實際的大型應用——京東的商品詳情頁的實現,詳細講解了這些技術和方案在真實場景的組合應用,以更好的讓知識落地。本書先是介紹了京東商品詳情頁的基本功能、技術架構的發展以及架構設計,當然還有很多實際的經驗和體會,以“遇到的坑和問題”的面貌出現;然後詳細地講述了京東商品詳情頁的服務閉環實踐。
為了更好地講述京東商品詳情頁的具體實現,作者先講述了實現中使用的基本技術——OpenResty,然後再詳細地講解如何使用OpenResty來開發商品詳情頁,裡面涉及好多具體而細化的點,都是實際開發中會用到的,值得去認真體會。這樣真實而詳細地講述這種大型繫統的實現,絕對一手的技術資料,是具有極大的參考價值的。
其實,市面上講述大型分布式架構的書很多,但基本上都停留在理論和知識的層面,看上去都很對,很“高大上”,但就是落不了地,不能很好地跟實際應用進行結合,從而導致學習的效果欠佳。而本書很好地解決了這個問題,不僅深入淺出地講述了各種保障高可用,以及處理高並發的技術和方案,並理論聯繫實際,采用京東商品詳情頁的具體實現這個實際案例,來綜合展示了這些技術的應用,從而加深大家的理解和領悟,以更好地把這些技術和方案應用到自己的實際項目中去。
事實上,像本書這樣既有詳盡的技術學習,又有真實、典型案例講述的好書,在市面上是不多見的,畢竟真正擁有這種大型繫統完整架構經驗的人並不多,能講明白的更少。本書作者恰好就是那極少數技術、經驗和知識傳授俱佳的牛人之一,這是讀者之幸。仔細閱讀完本書,讓人有一種醍醐灌頂的頓悟,掩卷長嘆“原來如此啊”。
坦率地說,本書不是寫給初學者的,對於有一定的開發經驗,甚至是架構設計經驗的朋友,能從本書中收獲更多。但我仍然確信,不管是富有經驗的架構師,還是想要學習架構知識的入門者,仔細、深入閱讀本書,就一定會有收獲。對於暫時不太理解的內容,建議反復閱讀,或者隔段時間再看,並不斷深入思考,最好是能結合實際的項目,把這些知識都應用上去,學以致用,這也不枉費作者的一番心血。
細想起來,認識作者八年多了,眼看著作者走出校園步入職場,從職場新兵,到成長成為在京東領導著上百人團隊的技術大牛,仿佛一切都在昨天,讓人不由不感慨時間如白駒過隙。在我眼中,作者依然是那帥氣、陽光、聰明而又略微有些靦腆的大男孩形像;喜歡研究技術,特別好學、善思、勤奮,且積極在實際工作中應用所學的知識;喜歡分享技術,常年堅持撰寫技術博文,擁有不少忠實粉絲,在京東內部,也是特別受歡迎的講師之一。另外告訴大家一個小秘密,作者愛好攝影,絕對專業級水準哦。
《研磨設計模式》作者陳臣