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