-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

億級流量網站架構核心技術——跟開濤學搭建高可用高并發系統

( 簡體 字)
作者:張開濤類別:1. -> 程式設計 -> 綜合
譯者:
出版社:電子工業出版社億級流量網站架構核心技術——跟開濤學搭建高可用高并發系統 3dWoo書號: 46442
詢問書籍請說出此書號!

缺書
NT售價: 495

出版日:4/1/2017
頁數:477
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121309540
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

序1
開濤勤奮好學又樂于分享,他很早就深讀了不少開源框架源碼,吃透了內核技術,又非常喜歡看技術大俠們的分享,不斷與同行交流,并學以致用,一開始參加工作就站在了較高的起點上,所以往往比同齡人做系統更加有信心,成果更加突出。他感恩于開源和分享,也踐行著開源分享之路,每次埋頭探索之后都有細心總結,有博客時寫博客,有微信公眾號時發公眾號,把學到的和在實踐中總結出來的,都無私分享出來。
網站是直接面對廣大客戶的,是公司的門戶,必須快速響應,必須持續可用,必須抗得住洪峰。任何一個網站的發展過程中都出現過問題,影響客戶體驗和商業利益,公司業務規模越大,網站出現問題的損失越大。作者進入京東后,花了不少精力從事了“永不消失的網站”建設工作。作者和同事一起,克服了一個又一個難題,將口號變成了現實。
本書高屋建瓴,抓住了大型高并發網站設計的核心,從設計原則,到高性能、高吞吐量、高可用的系統設計,到高靈敏的監控系統構思、再到應急方案的制定,不失細節,又不拘泥于細節。相比其他已出版的關于大型網站的架構類的書籍,此書更加貼近實戰,追求實用,所有內容來自于實戰,文章內容也是與同道和網友們互動后改進的,本書也
沒有那些為了構建一個“完整的體系”而只起到填充作用的段落。此書特別適合那些快速成長型企業網站的建設者,互聯網行業的研發人員,對較大規模網站的重構也有借鑒意義,看這本書可以少走些彎路,少踩些坑,其中的許多策略和技術可以直接拿來用,從而節省時間。作為本書的第一批讀者,發現這本書的內容組織上兼具工具書的特點,沒有嚴格的前后依賴,可以按章節順序閱讀,也可以隨機選取中間的一章。文中公布了作者的聯絡方式,有問題能方便地交流。最后,希望這本書不要成為一個網站架構分享的終結者,希望有更多同學加入到探索和分享的隊伍中來,不斷克服新的挑戰,分享更多新成果。
——京東商城 副總裁、京東 Y 事業部 負責人 于永利

序2
我們的互聯網開發者都曾經有過這樣的經驗。搭建一個設計精良,功能豐富的網站并不是一個高不可攀的事情。但能夠支持巨大的流量而運行自如就不是一件容易的事情了。可是,當你擁有《億級流量網站架構核心技術》這本書時,這一切又變得那么輕松。
《億級流量網站架構核心技術》一書詳細地闡述了開發高并發高可用網站的一系列關鍵原則問題。就如何實現系統高可用,流量高并發進行了深刻剖析。本書例舉了大量的真實應用案例,幫助讀者深入了解相關知識,并且使得枯燥的說教變得生動,活潑。
本書作者長期服務于京東研發的第一線,擁有豐富的軟件開發經驗。秉持著對技術的熱愛,為互聯網開發者奉獻自己的心路歷程。希望他的讀者能夠從這本書中受益。
——京東集團首席技術顧問 翁志

序3
經歷過“雙 11”和“618”的同學都知道,在大促時如何保證系統的高并發、高可用是非常重要的事情。因此在備戰大促時,有些通用原則和經驗可以幫助我們在遇到高并發時,構建更可用的系統,如限流、降級、水平擴展和隔離解耦等。通過這些原則可以在流量超預期時,很好地保護系統,避免沖擊導致的系統不可用。
以前京東也遇到過一些高可用問題,如超時設置不合理導致系統崩潰;限流措施不到位,導致負載過高時系統崩潰;解耦不徹底,導致某個服務掛掉時所有依賴服務受影響等。這些都是在開發和運維系統中很常見的問題,只要開發人員在開發系統時注意下這些點就可以很好地避免。書中的高可用部分可以很好地幫助讀者解決這些問題。
也經常有人討論如何提升系統性能,最直接的解決方案是擴容,或通過如加緩存來提升系統并發能力,或使用隊列進行流量削峰,也可以使用異步并發機制提升吞吐量或者接口性能等。這些技術老生常談,并不新鮮,但很實用,大家在實現高并發系統時經常會遇到。書中的高并發部分可以幫助讀者理解和使用這些技術。
這本書還有一部分介紹實戰案例,其中包含了京東 0 級系統“商品詳情頁”和“商品詳情頁統一服務”系統,這兩個系統每天承載了京東幾十億的流量,書中深入講解這兩個系統的核心技術,還通過案例詳細介紹如何使用 OpenResty 設計和開發高性能 Web應用,值得認真閱讀。
本書最大的特點是實用,書中的原則和經驗是在實戰中總結和進化出來的。市面上系統化地介紹高可用和高并發的文章并不多,成體系的就更少了,很多都是散落在網絡上。開濤是京東優秀的架構師,有很強的架構抽象能力、扎實的編程基本功和豐富的實戰經驗,他將這些原則整理成體系,而且加了很多案例,相信可以很好地幫助讀者學習
和使用這些原則,讓讀者讀完此書后能落地到實際項目中。
——京東集團架構師 吳博

序4
大型互聯網業務需要持續建設網站系統并通過 PC、移動等各種終端來與用戶進行交互。大流量網站架構如何支持高并發訪問并且保證高可用性,這是一個持久的、極具挑戰的技術話題。毫不夸張地說,無數互聯網行業的工程師為之奮斗。
開濤是京東優秀技術人才的典型代表。他從研發一線做起,腳踏實地成長為核心架構師。他所著《億級流量網站架構核心技術》一書,分享高可用與高并發網站構建技術,干貨滿滿,特點鮮明。
第一,理論與實踐結合。本書不僅總結出一系列技術方法論,而且配合真實的案例,娓娓道來,深入淺出。讀者可以直接將這些實用技術運用到自己的日常工作中。
第二,深度與廣度兼具。本書選題極具針對性,專注于高可用與高并發兩方面技術實踐,每個方面均詳解一系列技術細節。
第三,技術與業務并重。開濤并沒有純談技術,而是圍繞商品詳情頁——京東重要的業務產品之一,來展開更進一步的實踐經驗分享,給讀者從業務需求到技術架構的完整視圖。
第四,新兵與老將咸宜。無論是第一年人事軟件開發的工程師,還是工作多年的資深人士,均可從本書中受益。
我個人強烈推薦此書。相信開濤的作品不會讓大家失望。
——京東商城總架構師、基礎平臺負責人 劉海鋒

序5
去年年底我拿到本書的電子版,受邀為其寫書評。全書篇幅很長,打開修訂視圖后,看到開濤在即將出版之前仍然在不斷補充素材、示例,推敲著詞句。在讀到其中的某個部分的時候,我聯想到當時工作中正在做的一個優化,還跟他詳細討論過,他想把這個方案也補充進去作為示例。我說,內容已經夠翔實了,還嫌書不夠厚嗎?
是的,開濤恨不得在這本書中,一股腦兒地告訴大家他所在領域中所學到和實踐的知識。寫書是一個吃力還不一定能討好的活兒,很佩服他居然能耐心寫了這么多(還有很多限于整書篇幅,鏈接到他的博客和公眾號上的擴展閱讀內容)。我看到了作者的誠意。
全書前半部分我是利用坐地鐵的時間看的,雖然內容我比較熟悉,但想在看書的同時如果能提前發現一些錯誤就更好了,看得極慢。不過,除了一些筆誤之外也沒發現什么硬傷。后來假期拖延癥犯了,答應的書評還遲遲沒有寫完,后半部分就快速看過。尤其是第 4 部分案例,差不多就是開濤自己之前的工作內容,這些或多或少地都通過其他渠道看過了。
開濤結合自己的工作內容,以及相關上下游依賴系統中的各種方案、架構思想,通過自己的思考和歸類總結寫成本書。其中不僅有很多京東的中前端的架構實踐和技術,還有作者在工作過程中用到的很多技術細節甚至代碼。第 2、3 部分比較詳細和系統地說明了高可用、高并發互聯網應用的常用架構思想和設計方法,并配合不同的場景進行
舉例闡述,比較適合對此已經有了一些經驗的讀者。針對一些常見軟件和框架的細節使用說明,以及提供很多代碼的行文風格,也許能滿足那些想立即動手實踐的讀者。
架構講究權衡和取舍,但是前提之一是盡可能在多個相關領域的技術知識層面有經驗,因此架構也很重視細節,需要對很多因素有充分思考和權衡,才有取舍。讀者在閱讀本書的過程中,關注點如果是各種架構方法,則需要注意作者描述的適用場景。如果關注點是各種具體的技術細節,也不要忘記思考背后所體現的架構思想。在實際的工作中,很多方案是若干架構方法和技術的綜合運用,并且隨著業務或場景的變化而不斷調整的,不要拘泥。
突然想到了《倚天屠龍記》中張無忌向張三豐學太極劍一節,最后張無忌成功忘記了所有的招式。對于武功高手來說,最后都是要融會貫通,形成自身體系,不要被特定的招式所束縛。學習架構,也不外乎是吧。
——京東商城 交易平臺架構師 肖飛

序6:動起來
開濤是個勤奮的寫手,寫方案,寫代碼,寫分享,孜孜不倦。對于大多數軟件開發和設計人員來說,寫作不是一件容易的事。因為寫出來并不是給自己看的,是要給同行們看。技術人員一方面對好的技術追求若渴,另一方面又天然地用批判和挑剔的眼光看同行的作品,算是魯迅先生的同道吧。也正因為如此,開濤為此書內容的質量下了不少功夫。
開濤的職業生涯從空中網開始,2014 年加入京東,一頭扎進了超 0 級系統的建設過程中,京東商城商品詳情頁改版、商品詳情頁統一服務規劃與落地。這些系統代表著京東的形象,代表著京東技術團隊的形象(開濤也是高顏值)。這些系統必須能抗峰值、不掉線、響應快,隨著業務量的猛增,預期的瓶頸很快會到來,這次關鍵的系統改版也是從這些挑戰開始,后來也就有了“永不消失的單品頁”,也就有了這本書中的案例和用心總結。
作者停下開發的腳步,通過思考和總結,把動態的實踐靜止到了紙張上,給大家帶來了精彩,愿各位讀者能夠把這些發生在某個歷史瞬間的實踐總結動態地運用到現實的開發實踐中。也期望作者可以開放群或者公眾號,邀請技術專家進來,與讀者進行交流,動起來。
——京東商城架構師 林世洪 2016 年 12 月

序7:開啟探索之旅,感受技術的魅力
近年來,中國的互聯網產業正在以前所未有的速度迅猛發展。而技術在業務發展中所扮演的角色日益重要,隨著各個業務形態的發展涌現出了許多技術應用上的成功案例和先進技術的研究成果。而作者在本書中則通過對工作中的探索和總結來將系統高可用這個神秘莫測的面紗揭開,讓對此有興趣的人得以窺其真容。
在以往的交流和面試過程中,大多數的研發人員在其所研發的系統中很少有機會或確實不需要和繁多的上下游系統、海量的業務數據、復雜的部署環境以及極端災難(如機房斷電、光纖損壞)打交道,因此也沒有契機和計劃去詳細了解、研究系統的高可用,對于系統高可用的理解和實踐大多停留在理論認知和個人嘗試階段,很難有機會應用到
解決實際業務問題上,也就很難形成自己技術和理念上的一個積累。而等到終于有機會開始在海量數據和高并發場景下一展身手的時候,又常常會因為沒有系統地學習和經驗積累而在設計系統、容災策略、解決問題的過程中艱難前行。本書則通過淺顯易懂的理念解讀和實際案例將系統高可用相關的系統設計原則、系統限流、降級措施等“兵法三
十六計”以非常直白的方式呈現給了大家。讓我們對于一些常見的高并發業務場景下的系統設計原則、高可用策略有了清晰的認識和思路的拓展。無論是剛剛接觸編程的學生還是已身經百戰的一線研發人員都可以從書中得到很多啟發,也許只是一個配置的改變、一行邏輯的優化、一個策略的調整都有可能讓我們的系統可用性登上新的臺階。
京東的網站系統走過了從靜態到動態、從動態到動靜結合、從對 DB 的強依賴到多級緩存、從重啟服務器到自如切換流量、從對 503 的恐懼到從容應對問題、從修改代碼應對異常到修改配置輕松搞定的系統演變歷程。當一個系統的業務體量達到可以引起系統性能和健壯性發生改變的時候,伴隨著系統問題到來的更是研發人員自身能力提升和
寶貴經驗積累的好時機。與其將問題用重啟應用和“無法解釋的詭異問題”來掩蓋,不如把問題的根源挖掘出來。如果挖掘得足夠深入,一切問題都是可解決的。書中使用的技術和總結的經驗也許無法解決書中業務場景之外的問題,但這也恰恰是技術的魅力所在。沒有一種技術和經驗可以作為系統的萬能解藥來幫助我們一勞永逸地避免掉所有隱患,但我們可以通過對思想的接納和消化來豐富我們的知識體系,讓我們成為一個有思想的研發人員。阮一峰曾經在他的書中對于“如何變有思想”做過解釋,我覺得非常適合用在研發人員的身上。研發人員的思想是什么?當你對一個需求、對一個業務形態或者對一個問題有自己的觀點見解,那你就是有思想的。你的觀點越多就越可能接近問題的本質,那么你的思想就越深刻和豐富。雖然你的觀點不一定是事實也不一定是正確的,但作為研發人員如果有了通過不斷探索、質疑、證明觀點的能力之后,那么也就有了透析問題、解決問題的能力。那么在面對一個看似簡單的需求或者業務時,也許你可以看得更透徹,將系統設計得更適用更合理,當你遇到書中提及的問題時也可以開始輕松應對。
我想,閱讀并了解書中對于系統高可用這個領域的介紹一定會讓你樂在其中。雖然你可能會有些疑惑和不解,但作為一個技術人對于技術的追求和探索不就應該是這樣嗎?
最后,我邀請你一起踏上這個對于系統高可用的探索之旅,來感受技術的魅力。
——京東商城研發總監 韓笑躍

序8
大規模分布式系統的構建,面臨很多的困難和問題,但是請記住,對架構師而言,不管我們要解決多少困難,最重要的是要保證系統可用,無論任何環境、任何壓力、任何場景,系統都要可用,這是我們的第一要務。在保證系統高可用的前提下,大型分布式系統面臨的最突出的三大問題就是:如何應對高并發、如何處理大數據量、如何處理分布式帶來的一系列問題。這也是很多一線架構老司機們的感悟和共識。
由于一本書的容量有限,不可能面面俱到,因此本書集中火力,系統、詳細、專業地講述了:大型分布式系統如何保證高可用性,以及如何應對高并發這兩個大方面。涉及很多技術和細節。比如用來保證高可用的:負載均衡和反向代理、隔離、限流、降級、超時與重試等;又比如用來處理高并發的:應用緩存、多極緩存、連接池、異步并發、隊列處理等。對很多朋友來說,這里面很多知識都是久聞其名,而不知其然,更不知其所以然的,學習本書正好能彌補大家在這些方面的知識短板。
作者以匠人的情懷,把每個方面從理論到應用、從技術本質到具體實現都講得透徹明了,以平實而不失激情的風格娓娓道來,再輔以實戰經驗的擴展,不單單讓讀者學習到具體的技術和解決問題的思路,更是給出了應對問題的具體解決方案,基本上可以把這些方案拿到實際項目中直接使用。
尤為難得的是:本書還結合實際的大型應用——京東的商品詳情頁的實現,詳細講解了這些技術和方案在真實場景的組合應用,以更好地讓知識落地。本書先是介紹了京東商品詳情頁的基本功能、技術架構的發展以及架構設計,當然還有很多實際的經驗和體會,以“遇到的坑和問題”的面貌出現;然后詳細地講述了京東商品詳情頁的服務閉
環實踐。
為了更好地講述京東商品詳情頁的具體實現,作者先講述了實現中使用的基本技術——OpenResty,然后又詳細地講解如何使用 OpenResty 來開發商品詳情頁,里面涉及好多具體而細化的點,都是實際開發中會用到的,值得去認真體會。這樣真實而詳細地講述這種大型系統的實現,絕對一手的技術資料,是具有極大的參考價值的。
其實,市面上講述大型分布式架構的書很多,但基本上都停留在理論和知識的層面,看上去都很對,很“高大上”,但就是落不了地,不能很好地跟實際應用進行結合,從而導致學習的效果欠佳。而本書很好地解決了這個問題,不僅深入淺出地講述了各種保障高可用,以及處理高并發的技術和方案,并理論聯系實際,采用京東商品詳情頁的具體實現這個實際案例,來綜合展示了這些技術的應用,從而加深大家的理解和領悟,以更好地把這些技術和方案應用到自己的實際項目中去。
事實上,像本書這樣既有詳盡的技術學習,又有真實、典型案例講述的好書,在市面上是不多見的,畢竟真正擁有這種大型系統完整架構經驗的人并不多,能講明白的更少。本書作者恰好就是那極少數技術、經驗和知識傳授俱佳的牛人之一,這是讀者之幸。
仔細閱讀完本書,讓人有一種醍醐灌頂的頓悟,掩卷長嘆“原來如此啊”。
坦率地說,本書不是寫給初學者的,對于有一定的開發經驗,甚至是架構設計經驗的朋友,能從本書中收獲更多。但我仍然確信,不管是富有經驗的架構師,還是想要學習架構知識的入門者,仔細、深入閱讀本書,就一定會有收獲。對于暫時不太理解的內容,建議反復閱讀,或者隔段時間再看,并不斷深入思考,最好是能結合實際的項目,把這些知識都應用上去,學以致用,這也不枉費作者的一番心血。
細想起來,認識作者八年多了,眼看著作者走出校園步入職場,從職場新兵,到成長成為在京東領導著上百人團隊的技術大牛,仿佛一切都在昨天,讓人不由不感慨時間如白駒過隙。在我眼中,作者依然是那帥氣、陽光、聰明而又略微有些靦腆的大男孩形象;喜歡研究技術,特別好學、善思、勤奮,且積極在實際工作中應用所學的知識;喜歡分享技術,常年堅持撰寫技術博文,擁有不少忠實粉絲,在京東內部,也是特別受歡迎的講師之一。另外告訴大家一個小秘密,作者愛好攝影,絕對專業級水準哦。
——《研磨設計模式》作者 陳臣

前言
為什么要寫這本書
在 2011 年年底的時候筆者就曾規劃寫一本 Spring 的書,但是因為是 Spring 入門類型的書,框架的內容更新太快,覺得還是寫博客好一些,因此就把寫完的書稿《跟我學Spring》放到了博客(jinnianshilongnian.iteye.com,因為是龍年開的博客,很多網友喊我龍年兄)中,并持續更新,到現在已經差不多五年了。大家在網上找資源時會發現,很
多內容不成體系,不能用來系統地學習,這也是我曾經的痛點,因此我寫博客的一個特色就是堅持寫系列文章——想學習某種技術只要我的博客有就不需要去其他地方再找了,到現在已經寫過《跟我學 Spring》、《Spring 雜談》、《跟我學 Spring MVC》、《跟我學 Shiro》、《跟我學 Nginx+Lua》等系列,累計訪問量已超過 1000 萬。我寫博客還有一個私心:帶新人,當時我們系統架構使用 OpenResty,而團隊成員都是 Java 程序員,所以就寫了《跟我學 OpenResty(Nginx+Lua)開發》,新人跟著教程學一遍就能上手干活了。掃一掃關注我的博客。
2015 年開始,筆者在個人公眾號“開濤的博客”撰寫《聊聊高并發系統》系列文章,陸續發表了《聊聊高并發系統之限流特技》、《聊聊高并發系統之降級特技》、《聊聊高并發系統之隊列術》、《構建需求響應式億級商品詳情頁》等文章。這些內容都是筆者在一線使用過的一些技能,而這些技能又是一線程序員或架構師應該掌握的必備技能。而且這一系列也得到了很多讀者的反饋和認可,幫助他們解決了系統的一些問題。公眾號發表的有些內容偏理論,很多人不知道怎么去用,因此就有了豐富理論和實戰內容并出版本書的想法。想學習高可用和高并發系統技能,看這本書就夠了,并且可以作為案頭工具書來用。
筆者耗費了大半年業余時間才成就此書,希望這些實戰中能真地用得上的技術可以幫助到讀者。
本書講解的原則并不是筆者總結出來的,有許許多多前輩們已經實踐過,筆者只是花了點時間進行匯總,并把工作中使用過的一些經驗和案例融入到書中。
成長和進步是一個循序漸進的過程,妄圖看完本書后能屠龍降魔是不可能的,別人走過的路還是會走一遍,別人踩過的坑還是會踩一遍。正如作家格拉德威爾在《異類:不一樣的成功啟示錄》一書中的一萬小時定律:“人們眼中的天才之所以卓越非凡,并非天資超人一等,而是付出了持續不斷的努力。一萬小時的錘煉是任何人從平凡變成世界級大師的必要條件”。
讀者對象
本書希望對在一線從事開發工作或正在解決一線問題的朋友有所幫助。
如何閱讀本書
本書的內容是理論與實戰相結合,涉及的知識點比較多,共分為 4 個部分,讀者可按照任何順序閱讀每一個部分,但建議先閱讀第 1 部分進行系統了解。
第1部分概述,主要介紹開發高并發系統的一些原則,并闡述本書將要講解的原則。
第 2 部分高可用,幫助讀者理解高可用的一些原則,如負載均衡、限流、降級、隔離、超時與重試、回滾機制、壓測與預案等,并能實際應用到自己的系統中。
第 3 部分高并發,介紹開發高并發系統的一些原則,如緩存、池化、異步化、擴容、隊列等,并配合大量案例幫助讀者更好地掌握和運用。
第 4 部分案例,介紹筆者開發過的商品詳情頁、統一服務等系統架構,還有一些靜態化架構的思路,幫助讀者理解前邊介紹的一些原則。
閱讀本書需要對 Java、OpenResty(Nginx+Lua)、Redis、MysQl 等技術有一定了解,OpenResty 可以參考我的博客中的《跟我學 OpenResty(Nginx+Lua)開發》系列文章。本文提到的 Nginx+Lua 等同于 OpenResty。可掃碼閱讀《跟我學 OpenResty(Nginx+Lua)開發》。
因為篇幅原因,本書示例很難做到全面且詳細,因此思路不要受限于書中所寫,要活學活用,舉一反三。比如多級緩存的思路,可以擴展到多級存儲:內存→NVMe/SATASSD→機械盤。
勘誤和支持
由于筆者能力有限,雖然找了很多朋友幫忙校對,但書中難免會出現一些錯誤,也請讀者朋友批評指正。大家可以掃如下二維碼關注我的公眾號或者訪問我的博客留言反饋錯誤和建議,筆者會積極提供解答。
致謝
首先要感謝進入京東商城時的架構組的同事們,感謝隋劍峰、鄒開紅、馮培源、李尊敬、徐濤、楊超、王戰兵、趙輝、孫炳蔚等對我的幫助,也感謝楊思勇、尚鑫、徐爍、韓笑躍等對我的信任,并給了我大膽實踐商城單品頁的機會,還有我的好搭檔劉峻樺,還有王曉鐘、劉海峰、林世洪、肖飛、何小鋒、鮑永成、劉行、周昱行等對我的幫助和
XXII | 億級流量網站架構核心技術——跟開濤學搭建高可用高并發系統支持,感謝我的領導徐春俊、楊建對我的支持和肯定,感謝京東和我的團隊,還有許許多多一起合作過和交流過的朋友們,沒有你們的幫助就沒有這本書的出版。
感謝張志統、肖飛、趙云霄、馬順風、劉兵、張亮、顏晟、曾波、孫偉、王景、黃楊俊、王君富、李晉、劉嘉南、劉藝飛、吳正軒、邵東風、孫鵬、張金立、任敬表、劉冉、陳玉苗、王曉雯、李樂偉、晁志剛、王向維、趙湘建、尤鳳凱等對本書的校對和建議。感謝林世洪、肖飛、趙云霄為本書提供素材。也感謝那些在我博客和公眾號留言和鼓勵我的朋友,最后感謝電子工業出版社的俠少和 楊璐 的支持。
內容簡介:

通過梳理大型網站技術發展歷程,剖析大型網站技術架構模式,深入講述大型互聯網架構設計的核心原理,并通過一組典型網站技術架構設計案例,為讀者呈現一幅包括技術選型、架構設計、性能優化、Web 安全、系統發布、運維監控等在內的大型網站開發全景視圖。

目錄:

第 1 部分 概述 ........... 1
1 交易型系統設計的一些原則 .......... 2
1.1 高并發原則 .............. 3
1.1.1 無狀態 ............ 3
1.1.2 拆分 .............. 3
1.1.3 服務化 ............ 4
1.1.4 消息隊列 ............ 4
1.1.5 數據異構 ............ 6
1.1.6 緩存銀彈 ............ 7
1.1.7 并發化 ............ 9
1.2 高可用原則 .............. 10
1.2.1 降級 .............. 10
1.2.2 限流 .............. 11
1.2.3 切流量 ............ 12
1.2.4 可回滾 ............ 12
1.3 業務設計原則 ............ 12
1.3.1 防重設計 ............ 13
1.3.2 冪等設計 ............ 13
1.3.3 流程可定義 ............ 13
1.3.4 狀態與狀態機 ............ 13
1.3.5 后臺系統操作可反饋 .......... 14
1.3.6 后臺系統審批化 .......... 14
1.3.7 文檔和注釋 ............ 14
XXIV | 億級流量網站架構核心技術——跟開濤學搭建高可用高并發系統
1.3.8 備份 .............. 14
1.4 總結 ............... 14
第 2 部分 高可用 ........... 17
2 負載均衡與反向代理 ............ 18
2.1 upstream 配置 ............. 20
2.2 負載均衡算法 ............. 21
2.3 失敗重試 ............. 23
2.4 健康檢查 ............. 24
2.4.1 TCP 心跳檢查 ............ 24
2.4.2 HTTP 心跳檢查 ........... 24
2.5 其他配置 ............. 25
2.5.1 域名上游服務器 .......... 25
2.5.2 備份上游服務器 .......... 26
2.5.3 不可用上游服務器 .......... 26
2.6 長連接 ............... 26
2.7 HTTP 反向代理示例 ............ 29
2.8 HTTP 動態負載均衡 ............ 30
2.8.1 Consul+Consul-template .......... 31
2.8.2 Consul+OpenResty ........... 35
2.9 Nginx 四層負載均衡 ............ 39
2.9.1 靜態負載均衡 ............ 39
2.9.2 動態負載均衡 ............ 41
參考資料 .............. 42
3 隔離術 ............. 43
3.1 線程隔離 ............. 43
3.2 進程隔離 ............. 45
3.3 集群隔離 ............. 45
3.4 機房隔離 ............. 46
3.5 讀寫隔離 ............. 47
目錄 | XXV
3.6 動靜隔離 .............. 48
3.7 爬蟲隔離 .............. 49
3.8 熱點隔離 .............. 50
3.9 資源隔離 .............. 50
3.10 使用 Hystrix 實現隔離 ........... 51
3.10.1 Hystrix 簡介 ........... 51
3.10.2 隔離示例 ............ 52
3.11 基于 Servlet 3 實現請求隔離 .......... 56
3.11.1 請求解析和業務處理線程池分離 ........ 57
3.11.2 業務線程池隔離 .......... 58
3.11.3 業務線程池監控/運維/降級 ........ 58
3.11.4 如何使用 Servlet 3 異步化 ........ 59
3.11.5 一些 Servlet 3 異步化壓測數據 ........ 64
4 限流詳解 .............. 66
4.1 限流算法 .............. 67
4.1.1 令牌桶算法 ............ 67
4.1.2 漏桶算法 ............ 68
4.2 應用級限流 .............. 69
4.2.1 限流總并發/連接/請求數 .......... 69
4.2.2 限流總資源數 ............ 70
4.2.3 限流某個接口的總并發/請求數 ......... 70
4.2.4 限流某個接口的時間窗請求數 ........ 70
4.2.5 平滑限流某個接口的請求數 ........ 71
4.3 分布式限流 .............. 75
4.3.1 Redis+Lua 實現 ........... 76
4.3.2 Nginx+Lua 實現 .......... 77
4.4 接入層限流 .............. 78
4.4.1 ngx_http_limit_conn_module ........ 78
4.4.2 ngx_http_limit_req_module ......... 80
4.4.3 lua-resty-limit-traffic .......... 88
4.5 節流 .............. 90
XXVI | 億級流量網站架構核心技術——跟開濤學搭建高可用高并發系統
4.5.1 throttleFirst/throttleLast .......... 90
4.5.2 throttleWithTimeout .......... 91
參考資料 .............. 92
5 降級特技 .............. 93
5.1 降級預案 ............. 93
5.2 自動開關降級 ............. 95
5.2.1 超時降級 ............ 95
5.2.2 統計失敗次數降級 .......... 95
5.2.3 故障降級 ............ 95
5.2.4 限流降級 ............ 95
5.3 人工開關降級 ............. 96
5.4 讀服務降級 ............. 96
5.5 寫服務降級 ............. 97
5.6 多級降級 ............. 98
5.7 配置中心 ............. 100
5.7.1 應用層 API 封裝 .......... 100
5.7.2 使用配置文件實現開關配置 ........ 101
5.7.3 使用配置中心實現開關配置 ........ 102
5.8 使用 Hystrix 實現降級 ........... 106
5.9 使用 Hystrix 實現熔斷 ........... 108
5.9.1 熔斷機制實現 ............ 108
5.9.2 配置示例 ............ 112
5.9.3 采樣統計 ............ 113
6 超時與重試機制 ............ 117
6.1 簡介 ............... 117
6.2 代理層超時與重試 ........... 119
6.2.1 Nginx ............ 119
6.2.2 Twemproxy ........... 126
6.3 Web 容器超時 ............. 127
6.4 中間件客戶端超時與重試 ........... 128
目錄 | XXVII
6.5 數據庫客戶端超時........... 131
6.6 NoSQL 客戶端超時 ........... 134
6.7 業務超時 .............. 135
6.8 前端 Ajax 超時 ............. 135
6.9 總結 .............. 136
6.10 參考資料 .............. 137
7 回滾機制 ............ 139
7.1 事務回滾 .............. 139
7.2 代碼庫回滾 ............ 140
7.3 部署版本回滾 ............ 141
7.4 數據版本回滾 ............ 142
7.5 靜態資源版本回滾........... 143
8 壓測與預案 ............. 145
8.1 系統壓測 .............. 145
8.1.1 線下壓測 ............ 146
8.1.2 線上壓測 ............ 146
8.2 系統優化和容災 ............ 147
8.3 應急預案 .............. 148
第 3 部分 高并發 .......... 153
9 應用級緩存 ............. 154
9.1 緩存簡介 .............. 154
9.2 緩存命中率 ............ 155
9.3 緩存回收策略 ............ 155
9.4 Java 緩存類型 ............ 156
9.4.1 堆緩存 ............ 158
9.4.2 堆外緩存 ............ 161
9.4.3 磁盤緩存 ............ 162
9.4.4 分布式緩存 ............ 163
XXVIII | 億級流量網站架構核心技術——跟開濤學搭建高可用高并發系統
9.4.5 多級緩存 ............ 166
9.5 應用級緩存示例 ............. 167
9.5.1 多級緩存 API 封裝 .......... 167
9.5.2 NULL Cache ........... 170
9.5.3 強制獲取最新數據 .......... 170
9.5.4 失敗統計 ............ 171
9.5.5 延遲報警 ............ 171
9.6 緩存使用模式實踐 ........... 172
9.6.1 Cache-Aside ............ 173
9.6.2 Cache-As-SoR ............ 174
9.6.3 Read-Through ........... 174
9.6.4 Write-Through ............ 176
9.6.5 Write-Behind........... 177
9.6.6 Copy Pattern ........... 181
9.7 性能測試 ............. 181
9.8 參考資料 ............. 182
10 HTTP 緩存 .............183
10.1 簡介 ............... 183
10.2 HTTP 緩存 ............ 184
10.2.1 Last-Modified ........... 184
10.2.2 ETag ............ 190
10.2.3 總結 ............ 192
10.3 HttpClient 客戶端緩存 ........... 192
10.3.1 主流程 ............ 195
10.3.2 清除無效緩存 .......... 195
10.3.3 查找緩存 ............ 196
10.3.4 緩存未命中 ............ 198
10.3.5 緩存命中 ............ 198
10.3.6 緩存內容陳舊需重新驗證 ........ 202
10.3.7 緩存內容無效需重新執行請求 ....... 205
10.3.8 緩存響應 ............ 206
10.3.9 緩存頭總結 ............ 207
目錄 | XXIX
10.4 Nginx HTTP 緩存設置 ........... 208
10.4.1 expires ............ 208
10.4.2 if-modified-since .......... 209
10.4.3 nginx proxy_pass ........... 209
10.5 Nginx 代理層緩存 ............ 211
10.5.1 Nginx 代理層緩存配置 ......... 211
10.5.2 清理緩存 ............ 214
10.6 一些經驗 .............. 215
參考資料 ............... 216
11 多級緩存 ............. 217
11.1 多級緩存介紹 ............. 217
11.2 如何緩存數據 ............. 219
11.2.1 過期與不過期 .......... 219
11.2.2 維度化緩存與增量緩存 .......... 220
11.2.3 大 Value 緩存 ........... 220
11.2.4 熱點緩存 ............ 220
11.3 分布式緩存與應用負載均衡 ......... 221
11.3.1 緩存分布式 ............ 221
11.3.2 應用負載均衡 .......... 221
11.4 熱點數據與更新緩存 ........... 222
11.4.1 單機全量緩存+主從 .......... 222
11.4.2 分布式緩存+應用本地熱點 ........ 223
11.5 更新緩存與原子性 ........... 224
11.6 緩存崩潰與快速修復 ........... 225
11.6.1 取模 ............ 225
11.6.2 一致性哈希 ............ 225
11.6.3 快速恢復 ............ 225
12 連接池線程池詳解 ............ 227
12.1 數據庫連接池 ............ 227
12.1.1 DBCP 連接池配置 .......... 228
XXX | 億級流量網站架構核心技術——跟開濤學搭建高可用高并發系統
12.1.2 DBCP 配置建議 ........... 233
12.1.3 數據庫驅動超時實現 .......... 234
12.1.4 連接池使用的一些建議 .......... 235
12.2 HttpClient 連接池 ........... 236
12.2.1 HttpClient 4.5.2 配置 .......... 236
12.2.2 HttpClient 連接池源碼分析 ......... 240
12.2.3 HttpClient 4.2.3 配置 .......... 241
12.2.4 問題示例 ............ 243
12.3 線程池 ............. 244
12.3.1 Java 線程池 ............ 245
12.3.2 Tomcat 線程池配置 ......... 248
13 異步并發實戰 ...........250
13.1 同步阻塞調用 ............. 251
13.2 異步 Future ............ 252
13.3 異步 Callback ............ 253
13.4 異步編排 CompletableFuture ......... 254
13.5 異步 Web 服務實現 ............ 257
13.6 請求緩存 ............. 259
13.7 請求合并 ............. 261
14 如何擴容 .............266
14.1 單體應用垂直擴容 ........... 267
14.2 單體應用水平擴容 ........... 267
14.3 應用拆分 ............. 268
14.4 數據庫拆分 ............. 271
14.5 數據庫分庫分表示例 ........... 275
14.5.1 應用層還是中間件層 .......... 275
14.5.2 分庫分表策略 .......... 277
14.5.3 使用 sharding-jdbc 分庫分表......... 279
14.5.4 sharding-jdbc 分庫分表配置 ......... 279
14.5.5 使用 sharding-jdbc 讀寫分離......... 283
目錄 | XXXI
14.6 數據異構 .............. 284
14.6.1 查詢維度異構 .......... 284
14.6.2 聚合據異構 ............ 285
14.7 任務系統擴容 ............ 285
14.7.1 簡單任務 ............ 285
14.7.2 分布式任務 ............ 287
14.7.3 Elastic-Job 簡介 ........... 287
14.7.4 Elastic-Job-Lite 功能與架構 ......... 287
14.7.5 Elastic-Job-Lite 示例 ......... 288
15 隊列術 .............. 295
15.1 應用場景 .............. 295
15.2 緩沖隊列 .............. 296
15.3 任務隊列 .............. 297
15.4 消息隊列 .............. 297
15.5 請求隊列 .............. 299
15.6 數據總線隊列 ............ 300
15.7 混合隊列 .............. 301
15.8 其他隊列 .............. 302
15.9 Disruptor+Redis 隊列 ........... 303
15.9.1 簡介 ............ 303
15.9.2 XML 配置 ............ 304
15.9.3 EventWorker........... 305
15.9.4 EventPublishThread ......... 307
15.9.5 EventHandler............ 308
15.9.6 EventQueue ............ 308
15.10 下單系統水平可擴展架構 ......... 311
15.10.1 下單服務 ............ 312
15.10.2 同步 Worker ........... 313
15.11 基于 Canal 實現數據異構 ......... 314
15.11.1 MySQL 主從復制 .......... 315
15.11.2 Canal 簡介 ............ 316
XXXII | 億級流量網站架構核心技術——跟開濤學搭建高可用高并發系統
15.11.3 Canal 示例 ............ 318
第 4 部分 案例 .......... 323
16 構建需求響應式億級商品詳情頁 .........324
16.1 商品詳情頁是什么 ........... 324
16.2 商品詳情頁前端結構 ........... 325
16.3 我們的性能數據 ........... 327
16.4 單品頁流量特點 ........... 327
16.5 單品頁技術架構發展 ........... 327
16.5.1 架構 1.0 ............ 328
16.5.2 架構 2.0 ............ 328
16.5.3 架構 3.0 ............ 330
16.6 詳情頁架構設計原則 ........... 332
16.6.1 數據閉環 ............ 332
16.6.2 數據維度化 ........... 333
16.6.3 拆分系統 ............ 334
16.6.4 Worker 無狀態化+任務化 ......... 334
16.6.5 異步化+并發化 .......... 335
16.6.6 多級緩存化 ............ 335
16.6.7 動態化 ............ 336
16.6.8 彈性化 ............ 336
16.6.9 降級開關 ............ 336
16.6.10 多機房多活 ............ 337
16.6.11 兩種壓測方案 ........... 338
16.7 遇到的一些坑和問題 ........... 339
16.7.1 SSD 性能差 ............ 339
16.7.2 鍵值存儲選型壓測 .......... 339
16.7.3 數據量大時 JIMDB 同步不動 ......... 342
16.7.4 切換主從 ............ 342
16.7.5 分片配置 ............ 342
16.7.6 模板元數據存儲 HTML .......... 342
16.7.7 庫存接口訪問量 600w/分鐘........ 343
目錄 | XXXIII
16.7.8 微信接口調用量暴增 .......... 344
16.7.9 開啟 Nginx Proxy Cache 性能不升反降 ...... 344
16.7.10 配送至讀服務因依賴太多,響應時間偏慢 ...... 344
16.7.11 網絡抖動時,返回 502 錯誤 ........ 346
16.7.12 機器流量太大 .......... 346
16.8 其他 .............. 347
17 京東商品詳情頁服務閉環實踐 .......... 348
17.1 為什么需要統一服務 ........... 348
17.2 整體架構 .............. 349
17.3 一些架構思路和總結 ........... 350
17.3.1 兩種讀服務架構模式 .......... 351
17.3.2 本地緩存 ............ 352
17.3.3 多級緩存 ............ 352
17.3.4 統一入口/服務閉環 ......... 353
17.4 引入 Nginx 接入層 ........... 354
17.4.1 數據校驗/過濾邏輯前置 ......... 354
17.4.2 緩存前置 ............ 354
17.4.3 業務邏輯前置 .......... 355
17.4.4 降級開關前置 .......... 355
17.4.5 A/B 測試 ............ 355
17.4.6 灰度發布/流量切換 ......... 356
17.4.7 監控服務質量 .......... 356
17.4.8 限流 ............ 356
17.5 前端業務邏輯后置 ........... 356
17.6 前端接口服務器端聚合 ........... 357
17.7 服務隔離 .............. 358
18 使用 OpenResty 開發高性能 Web 應用 ........ 360
18.1 OpenResty 簡介 ............ 361
18.1.1 Nginx 優點 ........... 361
18.1.2 Lua 的優點........... 361
XXXIV | 億級流量網站架構核心技術——跟開濤學搭建高可用高并發系統
18.1.3 什么是 ngx_lua .......... 361
18.1.4 開發環境 ............ 362
18.1.5 OpenResty 生態 .......... 362
18.1.6 場景 ............ 362
18.2 基于 OpenResty 的常用架構模式........ 363
18.2.1 負載均衡 ............ 363
18.2.2 單機閉環 ............ 364
18.2.3 分布式閉環 ............ 367
18.2.4 接入網關 ............ 368
18.2.5 Web 應用 ............ 370
18.3 如何使用 OpenResty 開發 Web 應用 ........ 371
18.3.1 項目搭建 ............ 371
18.3.2 啟停腳本 ............ 372
18.3.3 配置文件 ............ 372
18.3.4 Nginx.conf 配置文件 ......... 372
18.3.5 Nginx 項目配置文件 ......... 373
18.3.6 業務代碼 ............ 374
18.3.7 模板 ............ 374
18.3.8 公共 Lua 庫 ............ 374
18.3.9 功能開發 ............ 375
18.4 基于 OpenResty 的常用功能總結........ 375
18.5 一些問題 ............. 376
19 應用數據靜態化架構高性能單頁 Web 應用 .......377
19.1 整體架構 ............. 378
19.1.1 CMS 系統 ........... 379
19.1.2 前端展示系統 .......... 379
19.1.3 控制系統 ............ 380
19.2 數據和模板動態化 ........... 381
19.3 多版本機制 ............. 381
19.4 異常問題 ............. 381
目錄 | XXXV
20 使用 OpenResty 開發 Web 服務 ......... 383
20.1 架構 .............. 383
20.2 單 DB 架構 ............. 384
20.2.1 DB+Cache/數據庫讀寫分離架構 ....... 384
20.2.2 OpenResty+Local Redis+MySQL 集群架構 ...... 385
20.2.3 OpenResty+Redis 集群+MySQL 集群架構 ..... 386
20.3 實現 .............. 387
20.3.1 后臺邏輯 ............ 388
20.3.2 前臺邏輯 ............ 388
20.3.3 項目搭建 ............ 389
20.3.4 Redis+Twemproxy 配置 .......... 389
20.3.5 MySQL+Atlas 配置 ......... 390
20.3.6 Java+Tomcat 安裝 ........... 394
20.3.7 Java+Tomcat 邏輯開發 .......... 395
20.3.8 Nginx+Lua 邏輯開發 .......... 401
21 使用 OpenResty 開發商品詳情頁 ......... 405
21.1 技術選型 .............. 407
21.2 核心流程 .............. 408
21.3 項目搭建 .............. 408
21.4 數據存儲實現 ............ 410
21.4.1 商品基本信息 SSDB 集群配置 ........ 410
21.4.2 商品介紹 SSDB 集群配置 ........ 413
21.4.3 其他信息 Redis 配置 ......... 416
21.4.4 集群測試 ............ 418
21.4.5 Twemproxy 配置.......... 419
21.5 動態服務實現 ............ 421
21.5.1 項目搭建 ............ 422
21.5.2 項目依賴 ............ 422
21.5.3 核心代碼 ............ 422
21.5.4 web.xml 配置 ........... 427
21.5.5 打 WAR 包 ........... 428
XXXVI | 億級流量網站架構核心技術——跟開濤學搭建高可用高并發系統
21.5.6 配置 Tomcat ........... 428
21.5.7 測試 ............ 428
21.5.8 Nginx 配置 ........... 428
21.5.9 綁定 hosts 測試 .......... 430
21.6 前端展示實現 ............. 430
21.6.1 基礎組件 ............ 430
21.6.2 商品介紹 ............ 432
21.6.4 前端展示 ............ 433
21.6.5 測試 ............ 441
21.6.6 優化 ............ 441
序: