關(guān)于我們
書單推薦
新書推薦
|
深入分布式緩存:從原理到實踐
書內(nèi)容在邏輯上共分為三個部分,按照從理論到實現(xiàn),再到實踐的思路撰寫。首先介紹分布式緩存的背景知識,對本書“分布式”和“緩存”這兩個關(guān)鍵詞進行了全面的綜述,作為后續(xù)章節(jié)敘述的基礎(chǔ);第二部分介紹業(yè)界主流的緩存,關(guān)注其原理與實現(xiàn),囊括了Ehcache、Memcached、Redis、tair、EVCache、Aerospike等六個緩存或類緩存系統(tǒng);后一部分討論緩存在互聯(lián)網(wǎng)系統(tǒng)中的實踐,從廣告、社交、新聞、電商、營銷等五類典型的互聯(lián)網(wǎng)應(yīng)用入手,分析它們面臨的性能穩(wěn)定性問題以及如何利用分布式緩存解決這些問題。
來自螞蟻金服、京東、網(wǎng)聯(lián)、新浪微博、同程旅游等公司的10余位一線架構(gòu)師用心之作;
阿里研究員蔣江偉、易寶支付CTO陳斌、普元信息CTO焦烈焱、特贊科技CTO黃勇、微博研發(fā)副總經(jīng)理楊衛(wèi)華等專家聯(lián)袂推薦
深度解構(gòu)Ehcache、Memcached、Redis、tair、EVCache、Aerospike等6大緩存系統(tǒng)的技術(shù)原理,及其在電商、社交、廣告等典型場景中的應(yīng)用
Praise贊譽
本書圍繞分布式緩存的基礎(chǔ)概念、開源框架、應(yīng)用案例三方面進行講解,從理論到實戰(zhàn),循序漸進,深入淺出。看完部分章節(jié)后,意猶未盡,欲罷不能。國內(nèi)基于真實應(yīng)用案例的好書太少了,君澤以及他的朋友們做到了這一點,十分期待這本書能早日上市。
—黃勇特贊科技CTO、《架構(gòu)探險》作者
分布式緩存,是任何一個互聯(lián)網(wǎng)公司在成長過程中都會面臨的技術(shù)難題。本書作者結(jié)合理論研究和長期的互聯(lián)網(wǎng)行業(yè)從業(yè)經(jīng)驗,深入淺出地介紹了分布式系統(tǒng)理論和分布式緩存實戰(zhàn),給業(yè)界以借鑒和啟發(fā)。本書是作者們的用心之作。
—朱攀德比軟件架構(gòu)師
緩存是軟件性能優(yōu)化的大殺器,分布式緩存是網(wǎng)站架構(gòu)的必殺技,玩轉(zhuǎn)緩存就玩轉(zhuǎn)了網(wǎng)站架構(gòu)的半邊天。遺憾的是,目前市面上專門講述分布式緩存的書籍不多,幸運的是本書就是一本這方面的專著。本書所有作者都是多年工作在網(wǎng)站架構(gòu)一線的老司機,值得信賴,故將本書推薦給大家。
—李智慧《大型網(wǎng)站技術(shù)架構(gòu):核心原理與案例分析》作者
從十幾年前的Ehcache到最近幾年流行的Redis,從CDN、瀏覽器、API Gateway到后端微服務(wù),以及數(shù)據(jù)訪問層的二級緩存,緩存無處不在。在體驗為王、唯快不破的時代,分布式緩存是關(guān)鍵。本書從理論到實踐,詳細(xì)剖析了分布式緩存的實現(xiàn)原理以及應(yīng)用案例,是一本接地氣的好書。
—李林鋒華為PaaS平臺架構(gòu)師、公司總裁技術(shù)創(chuàng)新獎獲得者
隨著現(xiàn)代應(yīng)用對速度的要求越來越高,對緩存機制的使用也越來越常見、越來越頻繁。本書以緩存機制的基本原理為開始,逐漸過渡至緩存系統(tǒng)的組建以及使用上面,全書分析和講解了多個緩存系統(tǒng),并列舉了緩存的各種使用場景。如果你正準(zhǔn)備構(gòu)建自己的緩存系統(tǒng),又或者你想進一步學(xué)習(xí)更多與緩存有關(guān)的知識,那么這本書將是你不容錯過的一本書。
—黃健宏《Redis設(shè)計與實現(xiàn)》作者
在計算機的世界里,不論硬件層面還是軟件層面,緩存都被廣泛應(yīng)用于解決處理響應(yīng)慢的瓶頸。我們在構(gòu)建微服務(wù)架構(gòu)系統(tǒng)的時候也一樣,緩存是提升性能的關(guān)鍵技術(shù)手段。然而,緩存在不同場景下的應(yīng)用各有不同,要想用對緩存、用好緩存并不容易。本書針對不同的緩存類型、實現(xiàn)手段、算法策略做了非常細(xì)致的講解,所以我推薦開發(fā)者和架構(gòu)師們通過本書來對緩存做一次全面的學(xué)習(xí),這有助于更好地使用緩存來優(yōu)化我們的系統(tǒng)性能。
—翟永超《Spring Cloud微服務(wù)實戰(zhàn)》作者
不同的存儲介質(zhì),讀寫性能有很大的差異,價格亦是如此,性能越好的介質(zhì),價格就越高。把最常訪問的數(shù)據(jù)放在讀寫性能最好的設(shè)備上,達(dá)到成本和性能的均衡,這便誕生了緩存。本書的幾位作者都是大型分布式環(huán)境下歷練出來的沙場老將,豐富的經(jīng)驗和翔實的案例,對于互聯(lián)網(wǎng)行業(yè)的技術(shù)人員來說,頗有裨益。
—陳康賢《大型分布式網(wǎng)站架構(gòu)設(shè)計與實踐》作者、阿里巴巴技術(shù)專家
如今的軟件系統(tǒng),已經(jīng)成為分布式系統(tǒng)的天下。分布式的語境對系統(tǒng)的設(shè)計與開發(fā)提出了完全不一樣的挑戰(zhàn),作為提升性能的關(guān)鍵要素—緩存,自然也不例外。在緩存的命中、更新與失效,以及數(shù)據(jù)一致性保障等諸多方面,分布式緩存應(yīng)用的復(fù)雜度可能是按指數(shù)級增加的,許多問題都是我們在單機應(yīng)用上無法涉獵的。倘若沒有分布式系統(tǒng)設(shè)計的實戰(zhàn)經(jīng)驗,面對分布式緩存的諸多問題,我們將束手無策。求助于網(wǎng)絡(luò)?講解緩存知識的文章是片鱗半爪,未成體系,故而無法窺其全部。本書的幾位作者都經(jīng)歷過大型軟件系統(tǒng)的深度洗禮,書中內(nèi)容都來自他們的一線實戰(zhàn)。閱讀本書,讀者就能站在他們的肩膀上看得更遠(yuǎn),實在是幸運!
—張逸民航信息技術(shù)架構(gòu)師、《恰如其分的軟件架構(gòu)》譯者
緩存是當(dāng)前互聯(lián)網(wǎng)的基石,極大彌補了關(guān)系型數(shù)據(jù)庫的天然缺陷。緩存技術(shù)也是每一個架構(gòu)師的必修課,從最初的Memcached,到Redis及各種擴展架構(gòu),發(fā)展至今已經(jīng)有些百花齊放的感覺。本書難得地進行了全面梳理,并附以在電商、社交、廣告等典型場景下的大型應(yīng)用。你值得擁有。
—蕭田國高效運維社區(qū)發(fā)起人、DevOpsDays中國聯(lián)合發(fā)起人
緩存是互聯(lián)網(wǎng)架構(gòu)中最關(guān)鍵的環(huán)節(jié),本書作者在緩存的性能及高可用方面有豐富的經(jīng)驗,很高興看到他們通過本書分享了多年的實踐精華。
—楊衛(wèi)華微博研發(fā)副總經(jīng)理
互聯(lián)網(wǎng)高性能系統(tǒng)設(shè)計的核心之一就是緩存系統(tǒng)的設(shè)計。本書集合了緩存理論、開源緩存系統(tǒng)、大規(guī)模業(yè)務(wù)中緩存的具體實踐,全方位解讀了分布式緩存設(shè)計,既能夠幫助讀者深入理解分布式緩存系統(tǒng),又提供了很好的架構(gòu)設(shè)計案例供參考,細(xì)細(xì)品讀,受益良多!
—李運華阿里游戲資深技術(shù)專家、《面向?qū)ο罂▽毜洹纷髡?
推薦序1 Foreword
緩存技術(shù)的大規(guī)模使用是互聯(lián)網(wǎng)架構(gòu)區(qū)別于傳統(tǒng)IT技術(shù)最大的地方,對緩存的理解和使用的深度決定了是否能架構(gòu)出一個高性價比、高擴展性的系統(tǒng)。阿里巴巴的系統(tǒng)使用了大量緩存技術(shù)(內(nèi)部緩存的產(chǎn)品名字叫Tair)。從2007年開始,緩存服務(wù)器的增長速度遠(yuǎn)遠(yuǎn)超過了數(shù)據(jù)庫服務(wù)器的增長速度,而因為對緩存的充分使用,系統(tǒng)具備的吞吐量能力的增速又遠(yuǎn)遠(yuǎn)高于緩存本身規(guī)模的增速。這是一件非常劃算的事情,成本下降非常明顯,大概使用1臺緩存服務(wù)器就可以完成以前4臺服務(wù)器的工作,從而為整體集群節(jié)省3臺服務(wù)器。
緩存代表了高性能的一項技術(shù),同時緩存也是系統(tǒng)架構(gòu)里非常核心的部分,一個系統(tǒng)緩存承擔(dān)著90%以上的熱點流量,緩存出一點點問題,系統(tǒng)的可用性會馬上受到影響。在阿里巴巴的系統(tǒng)架構(gòu)討論會上,一般都會把做緩存產(chǎn)品的同事叫上,要求其在了解系統(tǒng)架構(gòu)規(guī)模的前提下給出流量規(guī)模、分區(qū)方案、熱點節(jié)點等方面的建議。負(fù)責(zé)緩存產(chǎn)品的同事往往也需要對業(yè)務(wù)有所了解,否則就不能設(shè)計出更好的產(chǎn)品。緩存的使用也使得架構(gòu)更加清晰、更容易理解,流量走向變得更簡單,這使得系統(tǒng)持續(xù)可用性有了明顯的提升。
本書比較系統(tǒng)地介紹了緩存在各個層面的工作原理、作用和價值。理解了緩存的相關(guān)知識,會對架構(gòu)一個高性能分布式系統(tǒng)有很大的幫助。
—小邪(蔣江偉)阿里研究員
Foreword推薦序2
無處不在的緩存,空間換時間的藝術(shù)
Cache這個詞,據(jù)說來自于法語,本意是當(dāng)CPU處理數(shù)據(jù)時,先到Cache中去尋找,如果數(shù)據(jù)在之前的操作已經(jīng)讀取而被暫存其中,就不需要從主內(nèi)存(Main memory)中讀取。后來Cache的范圍有所擴大,凡是位于速度相差較大的兩種硬件之間,用于協(xié)調(diào)兩者數(shù)據(jù)傳輸速度差異的結(jié)構(gòu),都稱為Cache。
現(xiàn)在,我們談的緩存,已經(jīng)遠(yuǎn)遠(yuǎn)突破了原有的概念,在我看來,緩存是一種通用的設(shè)計模式:這種模式利用增加存儲空間的方式,實現(xiàn)低速部件與高速部件之間的解耦。換而言之,只要實現(xiàn)了解耦的地方,就有存在緩存的可能,既然解耦是計算機系統(tǒng)架構(gòu)設(shè)計中最常用的手段,那么緩存就必將在計算機系統(tǒng)中無處不在。緩存用空間換時間的方式解決問題,而空間不可能無限使用,使用緩存時我們通常會考慮如何選擇存儲方式、如何使用多級緩存節(jié)省空間、如何有效提高緩存的命中率、如何確定有效的更新策略等問題,這些思考會有相當(dāng)普遍的適用性。
本書重點解讀了分布式系統(tǒng)下如何使用緩存。分布式系統(tǒng)中大規(guī)模使用緩存是從早期互聯(lián)網(wǎng)三大法寶(MemCache、反向代理、分庫分表)開始的,利用這種集中式、大規(guī)模的緩存技術(shù),我們解決了數(shù)據(jù)庫低速IO與高速應(yīng)用之間的矛盾。我們也發(fā)現(xiàn),除了緩存的通用問題之外,分布式系統(tǒng)緩存還需要解決更多的問題,例如如何對多種類型數(shù)據(jù)選擇不同的存儲方式、如何保證數(shù)據(jù)一致性、如何提高緩存自身的可用性、如何增強系統(tǒng)的可維護性。為了系統(tǒng)性解決這些問題,分布式緩存逐漸變成了分布式架構(gòu)系統(tǒng)中的一個基礎(chǔ)設(shè)施。
緩存的使用雖然廣泛,但把緩存作為一種基礎(chǔ)設(shè)施的發(fā)展歷史并不長,大多數(shù)的商業(yè)化軟件比較復(fù)雜,主要以內(nèi)存數(shù)據(jù)庫為主,而輕量型分布式緩存在不同場景下有不同的關(guān)注點和使用方式。君澤集合了一批老司機,為大家展示了多種分布式系統(tǒng)中緩存的使用場景與方案,既有新浪微博這樣重量級社交平臺信息聚合、分發(fā)緩存的方法,也有海量廣告業(yè)務(wù)信息撮合的緩存模式;既有電商系統(tǒng)冷熱數(shù)據(jù)分離的緩存策略,也有對完整分布式系統(tǒng)緩存的技術(shù)選型和總結(jié)。
通過分布式、微服務(wù)架構(gòu),實現(xiàn)業(yè)務(wù)的云化/數(shù)字化,建立起的應(yīng)用生態(tài)是一個復(fù)雜的體系,其中方方面面的著作很多,但專注在緩存方面的還沒有,本書選擇了這個方向,就是希望能幫助我們形成一個完整的技術(shù)視圖,我相信這是作者們做這件事的初衷。
—焦烈焱普元信息CTO
Foreword推薦序3
緩存為王
君澤人很低調(diào)也很友善,第一次和他見面還是在2016年的年底。2017年的春夏之交,當(dāng)我正在機場為飛機晚點心煩不已的時候,收到了君澤的一條微信。內(nèi)容是說他自己正在忙著準(zhǔn)備一本書,而且把主要的章節(jié)內(nèi)容發(fā)給了我。在百無聊賴之間我就讀了起來。
這本書是君澤組織國內(nèi)互聯(lián)網(wǎng)技術(shù)領(lǐng)域具有實戰(zhàn)經(jīng)驗的部分專家,分工合作聯(lián)合撰寫的技術(shù)專著。以最常用、最有效果也最容易出問題的緩存為主題。從基礎(chǔ)概念、開源框架和應(yīng)用案例三個層次進行了討論。給我的感覺是既有理論也有實踐,既有廣度也有深度,既有國外的開源軟件也有國內(nèi)的具體實踐案例,是非常值得深入閱讀和細(xì)心揣摩的一本工具書。
給我印象比較深刻的是開篇的“緩存為王”,因為今年年初我也專門寫過一篇同名的文章,論述了從網(wǎng)絡(luò)靠近用戶端的CDN,到內(nèi)部網(wǎng)絡(luò)緩存,到應(yīng)用緩存,再到數(shù)據(jù)庫緩存的一系列緩存手段、技術(shù)和方法。不敢說英雄所見略同,至少大家的關(guān)注點差不多。我還記得在當(dāng)初的文章中用了一句耐人尋味的話,“解決雪崩問題的最好辦法是不發(fā)生雪崩”。不論是在硅谷互聯(lián)網(wǎng)公司里還是在國內(nèi)的互聯(lián)網(wǎng)平臺上,曾多次遇到過海量規(guī)模的交易瞬間吞噬平臺的悲慘故事。核心的解決方案大同小異,都是通過緩存,逐層減少流量的沖擊,保護用戶的體驗和平臺的服務(wù)可用。金融、財務(wù)行業(yè)有現(xiàn)金為王的說法,互聯(lián)網(wǎng)技術(shù)行業(yè)用“緩存為王”清楚地概括了緩存的重要性。
這本書還深入淺出地討論了Ehcache、Memcached、Redis、Tair、EVCache等各種常用緩存開源系統(tǒng)的方案及精粹。我讀過不少國外有關(guān)緩存的技術(shù)專著,大多數(shù)偏原則和理論,具體實施方案和案例較少,特別是結(jié)合中國互聯(lián)網(wǎng)技術(shù)實踐的更少。所以君澤組織的這本書實際上填補了緩存技術(shù)文獻在這方面的空白。尤其是結(jié)合微博、社交和電商平臺的應(yīng)用實踐探討,對想學(xué)習(xí)如何利用緩存技術(shù)解決實踐中具體問題的讀者大有裨益。
—陳斌易寶支付CTO
作者寄語Foreword
我在這部書里,負(fù)責(zé)編寫了Tair章節(jié),合作編寫了緩存周邊、動手寫緩存章節(jié),期間閱讀了大量的代碼、整理了非常多的資料,希望能帶給讀者需要的知識。在一年多的時間里,工作之余的大部分時間,都投入到了書的編寫中。在這個過程中,家人給了我極大的支持,這里特別感謝我的太太李春花。一年多的時間里,有因為大促工作量激增,有因為工作變動導(dǎo)致工余時間減少,感謝右軍持續(xù)的鼓勵,感謝一同編寫本書的其他伙伴及時的幫助!
—劉璟宇拍拍貸資深架構(gòu)師
很幸運,從2009年新浪微博發(fā)展之初就參與微博平臺系統(tǒng)的的研發(fā)及架構(gòu)工作,經(jīng)歷了微博從起步到當(dāng)前月活用戶數(shù)億的大型互聯(lián)網(wǎng)系統(tǒng)的技術(shù)演進過程。系統(tǒng)演進中經(jīng)歷了很多曲折、困難、不眠之夜,多虧了 TimYang、 zhulei、 liudaoru等那么多良師益友,一路上大家志同道合披荊斬棘,回頭看經(jīng)歷的種種困難卻正好是不斷進步的印記。最后感謝 右軍的邀請和大力組織,感謝 Mis曉曉的包容和支持,正因為有了你們,我才得以完成相關(guān)內(nèi)容的編寫和完善。
—陳波新浪微博平臺架構(gòu)技術(shù)專家
從事數(shù)據(jù)訪問層工作期間,會收到很多緩存方面的技術(shù)支持,在支持的同時,對緩存也有了更深入的了解,也促使我思考如何將這些實踐經(jīng)驗分享給更多的人。正好右軍邀請參與本書的寫作,便欣然同意。寫作期間,閱讀了大量的源碼,并和聯(lián)合作者相互交流緩存的原理及實踐經(jīng)驗,力求能夠呈現(xiàn)實用的技術(shù)。本書涉及的分布式緩存體系非常全面,從分布式、Redis、Memcached等原理的剖析到大量的一線實踐案例,并且對分布式緩存應(yīng)用當(dāng)中的一些痛點、難點進行了深入的闡述。希望本書能夠為想了解緩存技術(shù)的讀者帶來快樂和收益。
—何濤唯品會架構(gòu)師
承右軍兄邀請,有幸參與本書第11章“Aerospike原理及廣告業(yè)務(wù)應(yīng)用”的編寫。本人雖然在互聯(lián)網(wǎng)廣告行業(yè)摸爬打滾十余年,從廣告網(wǎng)絡(luò)到SSP、DSP,再到蘋果應(yīng)用市場的推廣(ASO,ASM),從PC廣告到移動原生廣告都有所涉及。對于廣告系統(tǒng)架構(gòu)搭建(存儲,計算,緩存)以及系統(tǒng)的高可用較熟悉之外,對于寫書確實是趕鴨子上架頭一回。又由于平時工作繁忙,家里瑣碎事情亦多,幾有放棄之念想,但此事絕非君子所為。若如此辜負(fù)右軍兄及其他幾位一同寫書的弟兄,于心不忍,日后亦無顏面對他們。故硬著頭皮,把此章寫完并交付出版社。聽聞此章定稿之后,感覺如釋重負(fù),精神亦有所高漲。當(dāng)然,能夠堅持下去的另一個重要原因是,其他各位參與編寫本書的弟兄的鞭策和鼓勵。在這里要特別感謝右軍和老曹。由于本人水平有限,還望各位親愛的讀者海涵。
—宋慧慶勤誠互動高級架構(gòu)師
首先非常感謝右軍兄邀請我加入寫作團隊,我主要負(fù)責(zé)第3章、第4章,同此參與合作編寫了第6章。雖然我自己經(jīng)常寫一些博客文章,但是寫書和寫博客是完全不一樣的過程,寫書是要能夠帶領(lǐng)讀者逐步深入學(xué)習(xí),而不是簡單地將知識點羅列出來。在這個過程中非常感謝右軍和孫海亮對我進行認(rèn)真的指導(dǎo),讓我的寫作水平有了非常大的提高。當(dāng)我第一篇稿子定稿的時候,我內(nèi)心的成就感是很難用言語來表達(dá)的。由于本書的寫作時間周期比較長,在中途的過程中由于工作繁忙,我也曾經(jīng)有退出的想法,右軍和曹哥給了我巨大的鼓勵,讓我學(xué)會了堅持,同時我的妻子和我的父母也給了我巨大的支持,讓我能夠?qū)W會與團隊協(xié)作。對于我來講這本書對我的意義已經(jīng)超過內(nèi)容本身的范疇,我也希望通過這本書能夠給我的孩子樹立一個貴在堅持和勇于嘗試的榜樣。最后由于本人寫作水平有限,還請各位讀者朋友海涵和包容。
—程超愛農(nóng)驛站首席支付技術(shù)專家
Web應(yīng)用相對于傳統(tǒng)的軟件,在服務(wù)的吞吐量方面有更高的要求,也是其面臨的主要難點之一。對于無狀態(tài)的應(yīng)用服務(wù),日益增加的吞吐量最終轉(zhuǎn)化成存儲層的壓力,使得后者既要解決數(shù)據(jù)一致性問題,又要考慮性能和吞吐量,成為Web應(yīng)用性能的關(guān)鍵,因此已有的文檔和書籍主要聚焦在它的優(yōu)化上。
而緩存作為應(yīng)用服務(wù)節(jié)點和持久化存儲節(jié)點間的輔助層,分擔(dān)著后者的吞吐量需求,好的緩存設(shè)計可以極大地降低存儲層的容量風(fēng)險。本書從緩存的原理、實現(xiàn)到緩存在不同場景的實施方案給出系統(tǒng)化的介紹,為“好的緩存設(shè)計”提供了指導(dǎo)。因此在受邀參與本書編寫時,既感到榮幸,又感到意義重大。
好的寫作依賴于熱情和投入,而書籍的編寫又需要長時間的毅力和堅持,這讓本書的編寫像是一段長跑里需要不斷沖刺,也讓這份“意義重大”既是之于內(nèi)容本身,也是之于作者的自我提升。感謝本書主筆于君澤的堅持,也感謝其他每一位作者的投入,他們鞭策著我在此領(lǐng)域?qū)W習(xí)和思考。限于自己的水平,謹(jǐn)希望所編寫的章節(jié)能為讀者們帶來一點幫助。內(nèi)容有欠缺之處,也希望讀者批評指教,以此驅(qū)動這個領(lǐng)域的應(yīng)用和實踐持續(xù)演進。
—邱碩螞蟻金服技術(shù)專家
作為一個70后的老碼農(nóng),一個半吊子全棧工匠,在中生代技術(shù)(freshman Technology)社區(qū)有幸認(rèn)識了很多志同道合的技術(shù)人。因為自己在公眾號(wireless_com)上的一篇關(guān)于緩存基礎(chǔ)的隨筆而結(jié)識了 右軍,進而參與了本書的創(chuàng)作。在如今用戶體驗至上的時代,性能成為系統(tǒng)設(shè)計中的一種核心約束,在性能提升的各種技術(shù)手段中,緩存為王。隨著技術(shù)的演進,緩存同樣與時俱進。參與編寫的過程是一個對經(jīng)驗梳理的過程,同時也是一個人提升的過程,尤其是和各位作者的切磋,獲益匪淺。每一位作者都犧牲了大量的閑暇時間,為本書的出版付出了巨大的努力。我感謝自己的妻兒,感謝家人對自己的支持,希望這本書能夠不負(fù)眾望。
—曹洪偉渡鴉科技CTO
2014年加入京東后,負(fù)責(zé)重新設(shè)計詳情頁架構(gòu),它是一個讀服務(wù),從前端瀏覽器到后端存儲無處不用緩存,在實戰(zhàn)中通過運用大量緩存技術(shù)提升性能、解決棘手問題,比如618期間有人來刷你的接口,簡單上個緩存,會起到很大的保護作用,而且效果非常好。在運用緩存時有許多需要注意的地方,比如緩存一致性是否需要強一致;價格庫存數(shù)據(jù)能否緩存,緩存多久;緩存分布算法是使用一致性哈希還是取模算法;熱點數(shù)據(jù)怎么處理;緩存崩潰與快速恢復(fù)等等。要用好緩存并不是那么容易的,希望讀者看完本書后能學(xué)到一招半式并應(yīng)用到實戰(zhàn)中。
—張開濤京東架構(gòu)師
緩存在整個高并發(fā)架構(gòu)設(shè)計中是重中之重的關(guān)鍵一筆,所以用好緩存是每次架構(gòu)設(shè)計的必經(jīng)之路。感謝右軍邀請我參與本書。我在本書中介紹了同程旅游的鳳凰緩存系統(tǒng)(phoenix)是如何云化管理同程全部的緩存集群,并治理各應(yīng)用中的緩存使用的。也講述了一些我們?yōu)楹我_發(fā)phoenix來解決緩存問題的坑事;厥走@些坑事,歷歷在目。各種困難、各種痛苦伴隨著鳳凰緩存系統(tǒng)從構(gòu)想到多個版本的更新上線。希望本書能夠給踩到同樣坑事的讀者帶來幫助和快樂。
—王曉波同程旅游首席架構(gòu)師
Preface前言
為了初心的紀(jì)念
一本歷時2年的書即將出版難免有些激動,同時亦有些忐忑。激動在于這是一次有意義的社會實踐,諸多作者參與其中。至完稿時,作者與發(fā)起計劃時已有些不同。一些朋友因為各種原因退出了,所以從堅持的角度看,完成就意味著第一層面的成功。忐忑在于從初心出發(fā),通讀全稿仍有不足之處,諸位作者在具體實踐中所遇到的線上問題遠(yuǎn)非本書所能盡數(shù)容納。而最后精華的實踐章節(jié)亦經(jīng)過公司PR審核,略有刪減。再一層,設(shè)計和編碼很重要,運維管理同等重要。一個好用、易用、穩(wěn)定的運維工具也是選擇一套開源組件的重要參考因素,為了集中注意力,本書基本未覆蓋運維部分的內(nèi)容,且待有心人續(xù)之。寫一本書,面世之后,作者或喜或憂,因為臧否之權(quán)利在于讀者。
自覺而言,本書適合有一定研發(fā)經(jīng)驗的朋友閱讀,它山之石,亦有攻玉之效。本書在邏輯上可分為三大篇章:基礎(chǔ)概念篇、開源框架篇、應(yīng)用案例篇;A(chǔ)概念除了基礎(chǔ)知識,也介紹了一些分布式方面的方法和思路;開源框架篇遴選了近年來流行的框架(比如Redis),同時對淘寶Tair、EVCache也做了一些探索。在Redis大行其道之時,對于Memcached及其周邊知識也做了介紹,某些公司還有大量的Memcached實例,比如微博、Twitter等。工具的革新總是源自需求的不斷被滿足,而根據(jù)被滿足的特性可以歸納其共性,比如解決單點高可用問題就是一個普適性問題,涉及主從模式、雙活模式等,可用性同時又和性能、數(shù)據(jù)一致性相關(guān)。緩存為性能而生,但“緩存”設(shè)施的存在就決定了這個設(shè)施要符合分布式理論的要求。業(yè)界介紹理論和概要,或介紹設(shè)計原則的書不少,但拿出具體實踐的稀有,比如新浪微博、Twitter這樣的社交SNS具體如何設(shè)計緩存。簡約而不簡單!在應(yīng)用案例篇,筆者邀請了對應(yīng)領(lǐng)域的專家為大家解讀案例,可以讓大家觸摸到真實的設(shè)計意圖。重要的是大家可以獲得不同場景下不同設(shè)計策略的啟發(fā)。
本書的產(chǎn)生要追溯到多年前。筆者一直對緩存技術(shù)抱有熱情,關(guān)注開源框架的發(fā)展,亦在工作中關(guān)注所遇、所見,乃至所聽的案例。從應(yīng)用程序研發(fā)方面看分布式緩存,并不需要所有的程序員都具備開發(fā)一套組件的能力,但是需要具備正確使用它的能力。正如易寶CTO陳斌老師所言:“解決雪崩問題的最好辦法是不發(fā)生雪崩”。不論是在硅谷互聯(lián)網(wǎng)公司里還是在國內(nèi)的互聯(lián)網(wǎng)平臺上,曾多次遇到過海量規(guī)模的交易瞬間吞噬平臺的悲慘故事。筆者亦了解一些緩存因為代碼缺陷或者使用不當(dāng)被擊穿的案例,不同數(shù)量級的請求產(chǎn)生的結(jié)果有天壤之別,不可不慎。
兩年前偶遇機械工業(yè)出版社的楊福川老師,攀談之下就萌發(fā)了創(chuàng)作本書的念頭。但由于工作繁忙且想呈現(xiàn)心中所想之提綱,故邀請一些不同場景下的專家共同完成。組團過程多有波折,特別感動的是北京的孔慶龍兄。他非常有興趣參與合作,但時逢小孩即將出生,為此,孔兄開了一次家庭會議來討論此事。雖然孔兄后續(xù)未決定參與,但可見其待人之真、之誠,是值得交的朋友。兩年間發(fā)生了不少事情,劉暻宇(leo)、何濤、曹洪偉和程超都換了工作。在本書項目開始時程超家的小朋友還未出生,現(xiàn)在都快2歲了。大家都很忙,大約1個月碰一下進度,有時候可能一點進展都沒有。期間,程超和leo都一度要退出,終堅持了下來。還有些朋友中間退出了,同時有陳波、王曉波等朋友加入。到這時,啥時候出版已不那么心焦了,水到渠成。就是問初心,我們有沒有盡自己的努力來呈現(xiàn)一份關(guān)于工具書的紀(jì)念?
特別感謝曹洪偉身體力行,按時按質(zhì)完成了分配的章節(jié),同時review了不少章節(jié),帶動了這個虛擬組織邁上一個新臺階。這是一本書的編寫過程,是一次心靈的旅行,是一次基于互聯(lián)網(wǎng)的跨組織協(xié)同,也是關(guān)于工作和生活的點綴。感謝妻子曉娜對于我寫作的支持,她對于進度的關(guān)注甚于我自己。她花了大量的時間輔導(dǎo)兩個小朋友的學(xué)習(xí),雖然周末有輔導(dǎo)班、家務(wù)等各種事項,但我總能申請到一些時間來構(gòu)思本書。本書也是送給我的兩個寶貝的禮物。這個禮物是初心,想到什么有意義的事情要義無反顧去做;同時,這個禮物也代表“堅持”,如同寫作文一樣,觀察、總結(jié),然后不斷練習(xí)。
同時還要感謝所有的合作者,我們交叉review了所有章節(jié)。感謝機械工業(yè)出版社的楊福川老師、孫海亮老師。孫老師的審閱非常專業(yè),從讀者視角直面問題所在。朱攀兄弟review了部分章節(jié),在寫作過程中和高磊兄弟、丁浪兄弟也有交流,一并表示感謝。
囿于篇幅和知識局限,錯漏之處難免,后續(xù)將通過勘誤和調(diào)整完善的形式持續(xù)優(yōu)化。為了初心的紀(jì)念,一次心靈的旅游!祝大家閱讀愉快!
于君澤(右軍)
于君澤:螞蟻金服高級技術(shù)專家、花名右軍,IT從業(yè)超過十五年。對高并發(fā)、分布式架構(gòu)、內(nèi)建質(zhì)量、研發(fā)管理有一些心得。維護公眾號“技術(shù)瑣話”。
程超:“愛農(nóng)驛站”首席支付技術(shù)專家。InfoQ、中生代技術(shù)社區(qū)簽約作者,CSDN博主專家,Spring for all社區(qū)貢獻者,擅長微服務(wù)和分布式架構(gòu)。
邱碩:螞蟻金服技術(shù)專家,花名牧丘,在阿里和支付寶從事中間件、應(yīng)用系統(tǒng)的性能/穩(wěn)定性技術(shù)風(fēng)險相關(guān)工作。Cobar主要作者。
曹洪偉:70后老碼農(nóng),全棧工匠一枚,服務(wù)過多家世界500強,后連續(xù)創(chuàng)業(yè),現(xiàn)任渡鴉科技CTO,致力于人工智能硬件,維護有“wireless_com”公眾號和博客
劉璟宇:拍拍貸資深架構(gòu)師,十余年互聯(lián)網(wǎng)行業(yè)從業(yè)經(jīng)驗,主要研究云計算、服務(wù)化基礎(chǔ)框架以及各種基礎(chǔ)組件。
張開濤:京東架構(gòu)師,暢銷書《億級流量網(wǎng)站架構(gòu)核心技術(shù)》作者,維護有“開濤的博客”公眾號。
何濤:網(wǎng)聯(lián)高級架構(gòu)師,對高流量下的架構(gòu)設(shè)計有豐富的實踐經(jīng)驗,熱衷于高可用、高并發(fā)和高性能的架構(gòu)研究。
宋慧慶:勤誠互動研發(fā)總監(jiān)兼高級架構(gòu)師,十年互聯(lián)網(wǎng)廣告行業(yè)經(jīng)驗,主要研究高可用架構(gòu)技術(shù),為流量變現(xiàn)提供更好的服務(wù)。
陳波:新浪微博技術(shù)專家,負(fù)責(zé)平臺基礎(chǔ)架構(gòu)及優(yōu)化,經(jīng)歷了微博從起步到成為數(shù)億用戶的大型互聯(lián)網(wǎng)系統(tǒng)的演進過程。
王曉波:同程旅游首席架構(gòu)師,10余年互聯(lián)網(wǎng)行業(yè)從業(yè)經(jīng)驗,負(fù)責(zé)中間件、微服務(wù)、分布式架構(gòu)、運維、安全等方面工作。
Contents 目錄
贊譽
推薦序1
推薦序2
推薦序3
作者寄語
前言
第1章 緩存為王1
1.1 什么是緩存?1
1.2 為什么使用緩存?2
1.2.1 從用戶體驗說起3
1.2.2 關(guān)于系統(tǒng)的性能3
1.3 從網(wǎng)站的架構(gòu)發(fā)展看緩存4
1.4 客戶端緩存5
1.4.1 頁面緩存6
1.4.2 瀏覽器緩存7
1.4.3 APP上的緩存8
1.5 網(wǎng)絡(luò)中的緩存11
1.5.1 Web代理緩存11
1.5.2 邊緣緩存12
1.6 服務(wù)端緩存14
1.6.1 數(shù)據(jù)庫緩存14
1.6.2 平臺級緩存16
1.6.3 應(yīng)用級緩存18
第2章 分布式系統(tǒng)理論24
2.1 分布式系統(tǒng)概論24
2.2 分布式系統(tǒng)概念26
2.2.1 進程與線程26
2.2.2 并發(fā)26
2.2.3 鎖26
2.2.4 并行27
2.2.5 集群27
2.2.6 狀態(tài)特性28
2.2.7 系統(tǒng)重發(fā)與冪等性28
2.2.8 硬件異常30
2.3 分布式系統(tǒng)理論31
2.3.1 CAP理論32
2.3.2 CAP理論澄清34
2.3.3 Paxos35
2.3.4 2PC38
2.3.5 3PC39
2.3.6 Raft40
2.3.7 Lease機制41
2.3.8 解決“腦裂”問題43
2.3.9 Quorum NWR44
2.3.10 MVCC45
2.3.11 Gossip46
2.4 分布式系統(tǒng)設(shè)計策略49
2.4.1 心跳檢測50
2.4.2 高可用設(shè)計50
2.4.3 容錯性52
2.4.4 負(fù)載均衡53
2.5 分布式系統(tǒng)設(shè)計實踐54
2.5.1 全局ID生成54
2.5.2 哈希取模56
2.5.3 一致性哈希57
2.5.4 路由表58
2.5.5 數(shù)據(jù)拆分58
第3章 動手寫緩存60
3.1 緩存定義的規(guī)范60
3.1.1 新規(guī)范的主要內(nèi)容及特性60
3.1.2 新規(guī)范的API介紹61
3.2 緩存框架的實現(xiàn)62
3.2.1 前期準(zhǔn)備63
3.2.2 緩存的架構(gòu)介紹63
3.2.3 設(shè)計思路以及知識點詳解64
3.3 緩存框架的使用示例74
第4章 Ehcache與Guava Cache76
4.1 Ehcache的主要特性76
4.2 Ehcache使用介紹77
4.2.1 Ehcache架構(gòu)圖77
4.2.2 緩存數(shù)據(jù)過期策略78
4.2.3 Ehcache緩存的基本用法81
4.2.4 在Spring中使用Ehcache83
4.3 Ehcache集群介紹85
4.3.1 集群的方式86
4.3.2 如何配置集群88
4.4 Ehcache的適用場景89
4.5 Guava Cache的使用92
4.5.1 Guava Cache的適用場景92
4.5.2 Guava Cache的創(chuàng)建方式93
4.5.3 緩存數(shù)據(jù)刪除95
4.5.4 并發(fā)場景下的使用95
4.6 本章小結(jié)96
第5章 從Memcached開始了解集中式緩存97
5.1 Memcached基本知識98
5.1.1 Memcached的操作命令98
5.1.2 Memcached使用場景100
5.1.3 Memcached特征100
5.1.4 Memcached的一些問題101
5.2 Memcached內(nèi)存存儲102
5.2.1 Slab Allocation機制102
5.2.2 使用 Growth Factor進行調(diào)優(yōu)104
5.2.3 Item105
5.3 典型問題解析106
5.3.1 過期機制106
5.3.2 哈希算法107
5.3.3 熱點問題108
5.3.4 緩存與數(shù)據(jù)庫的更新問題108
5.3.5 別把緩存當(dāng)存儲109
5.3.6 命名空間110
5.3.7 CAS110
5.4 Memcached客戶端分析110
5.4.1 Memcached的Client111
5.4.2 Spymemcached設(shè)計思想解析111
5.5 Memcached周邊工具發(fā)展117
第6章 Memcached 周邊技術(shù)119
6.1 Twemcache119
6.1.1 Twemcache 的設(shè)計原理120
6.1.2 Twemcache的安裝及命令行詳解122
6.1.3 基于Java的Twemcache用法125
6.2 Twemproxy126
6.2.1 Twemproxy的常用部署模式127
6.2.2 Twemproxy的可擴展性129
6.2.3 Twemproxy源代碼簡析131
6.3 Mcrouter137
6.3.1 Mcrouter路由算法138
6.3.2 典型的使用場景139
6.3.3 Mcrouter的可擴展性142
6.3.4 源碼簡要解析144
第7章 Redis探秘148
7.1 數(shù)據(jù)結(jié)構(gòu)148
7.1.1 value對象的通用結(jié)構(gòu)149
7.1.2 String149
7.1.3 List152
7.1.4 Map155
7.1.5 Set157
7.1.6 Sorted-Set159
7.2 客戶端與服務(wù)器的交互160
7.2.1 客戶端/服務(wù)器協(xié)議161
7.2.2 請求/響應(yīng)模式163
7.2.3 事務(wù)模式164
7.2.4 腳本模式168
7.2.5 發(fā)布/訂閱模式169
7.3 單機處理邏輯171
7.3.1 多路復(fù)用171
7.3.2 定時任務(wù)處理173
7.4 持久化174
7.4.1 基于全量模式的持久化174
7.4.2 基于增量模式的持久化176
7.4.3 基于增量模式持久化的優(yōu)化178
第8章 分布式Redis180
8.1 水平拆分(sharding)181
8.1.1 數(shù)據(jù)分布181
8.1.2 請求路由182
8.2 主備復(fù)制(replication)182
8.2.1 主備復(fù)制流程183
8.2.2 斷點續(xù)傳183
8.3 故障轉(zhuǎn)移(failover)184
8.3.1 sentinel間的相互感知185
8.3.2 master的故障發(fā)現(xiàn)186
8.3.3 failover決策186
8.4 Redis Cluster187
8.4.1 拓?fù)浣Y(jié)構(gòu)187
8.4.2 配置的一致性188
8.4.3 sharding190
8.4.4 failover193
8.4.5 可用性和性能196
第9章 Tair探秘198
9.1 Tair總體架構(gòu)198
9.2 Config Server簡介199
9.3 Data Server簡介201
9.4 Tair高可用和負(fù)載均衡204
9.4.1 對照表204
9.4.2 數(shù)據(jù)遷移219
9.5 存儲引擎220
9.6 Tair的API222
9.6.1 key/value相關(guān)API223
9.6.2 prefix相關(guān)的API226
第10章 EVCache探秘229
10.1 EVCache項目介紹230
10.1.1 EVCache的由來231
10.1.
你還可能感興趣
我要評論
|