深入分布式緩存:從原理到實踐( 簡體 字) | |
作者:于君澤 曹洪偉 邱碩 等著 | 類別:1. -> 程式設計 -> 綜合 |
出版社:機械工業出版社 | 3dWoo書號: 48104 詢問書籍請說出此書號! 有庫存 NT售價: 495 元 |
出版日:11/1/2017 | |
頁數:396 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787111585190 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
贊譽
推薦序1 推薦序2 推薦序3 作者寄語 前言 第1章 緩存為王1 1.1 什么是緩存?1 1.2 為什么使用緩存?2 1.2.1 從用戶體驗說起3 1.2.2 關于系統的性能3 1.3 從網站的架構發展看緩存4 1.4 客戶端緩存5 1.4.1 頁面緩存6 1.4.2 瀏覽器緩存7 1.4.3 APP上的緩存8 1.5 網絡中的緩存11 1.5.1 Web代理緩存11 1.5.2 邊緣緩存12 1.6 服務端緩存14 1.6.1 數據庫緩存14 1.6.2 平臺級緩存16 1.6.3 應用級緩存18 第2章 分布式系統理論24 2.1 分布式系統概論24 2.2 分布式系統概念26 2.2.1 進程與線程26 2.2.2 并發26 2.2.3 鎖26 2.2.4 并行27 2.2.5 集群27 2.2.6 狀態特性28 2.2.7 系統重發與冪等性28 2.2.8 硬件異常30 2.3 分布式系統理論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 分布式系統設計策略49 2.4.1 心跳檢測50 2.4.2 高可用設計50 2.4.3 容錯性52 2.4.4 負載均衡53 2.5 分布式系統設計實踐54 2.5.1 全局ID生成54 2.5.2 哈希取模56 2.5.3 一致性哈希57 2.5.4 路由表58 2.5.5 數據拆分58 第3章 動手寫緩存60 3.1 緩存定義的規范60 3.1.1 新規范的主要內容及特性60 3.1.2 新規范的API介紹61 3.2 緩存框架的實現62 3.2.1 前期準備63 3.2.2 緩存的架構介紹63 3.2.3 設計思路以及知識點詳解64 3.3 緩存框架的使用示例74 第4章 Ehcache與Guava Cache76 4.1 Ehcache的主要特性76 4.2 Ehcache使用介紹77 4.2.1 Ehcache架構圖77 4.2.2 緩存數據過期策略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的創建方式93 4.5.3 緩存數據刪除95 4.5.4 并發場景下的使用95 4.6 本章小結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內存存儲102 5.2.1 Slab Allocation機制102 5.2.2 使用 Growth Factor進行調優104 5.2.3 Item105 5.3 典型問題解析106 5.3.1 過期機制106 5.3.2 哈希算法107 5.3.3 熱點問題108 5.3.4 緩存與數據庫的更新問題108 5.3.5 別把緩存當存儲109 5.3.6 命名空間110 5.3.7 CAS110 5.4 Memcached客戶端分析110 5.4.1 Memcached的Client111 5.4.2 Spymemcached設計思想解析111 5.5 Memcached周邊工具發展117 第6章 Memcached 周邊技術119 6.1 Twemcache119 6.1.1 Twemcache 的設計原理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 數據結構148 7.1.1 value對象的通用結構149 7.1.2 String149 7.1.3 List152 7.1.4 Map155 7.1.5 Set157 7.1.6 Sorted-Set159 7.2 客戶端與服務器的交互160 7.2.1 客戶端/服務器協議161 7.2.2 請求/響應模式163 7.2.3 事務模式164 7.2.4 腳本模式168 7.2.5 發布/訂閱模式169 7.3 單機處理邏輯171 7.3.1 多路復用171 7.3.2 定時任務處理173 7.4 持久化174 7.4.1 基于全量模式的持久化174 7.4.2 基于增量模式的持久化176 7.4.3 基于增量模式持久化的優化178 第8章 分布式Redis180 8.1 水平拆分(sharding)181 8.1.1 數據分布181 8.1.2 請求路由182 8.2 主備復制(replication)182 8.2.1 主備復制流程183 8.2.2 斷點續傳183 8.3 故障轉移(failover)184 8.3.1 sentinel間的相互感知185 8.3.2 master的故障發現186 8.3.3 failover決策186 8.4 Redis Cluster187 8.4.1 拓撲結構187 8.4.2 配置的一致性188 8.4.3 sharding190 8.4.4 failover193 8.4.5 可用性和性能196 第9章 Tair探秘198 9.1 Tair總體架構198 9.2 Config Server簡介199 9.3 Data Server簡介201 9.4 Tair高可用和負載均衡204 9.4.1 對照表204 9.4.2 數據遷移219 9.5 存儲引擎220 9.6 Tair的API222 9.6.1 key/value相關API223 9.6.2 prefix相關的API226 第10章 EVCache探秘229 10.1 EVCache項目介紹230 10.1.1 EVCache的由來231 10.1.2 EVCache的發展232 10.1.3 EVCache的演進234 10.2 EVCache 的使用場景238 10.2.1 典型用例238 10.2.2 典型部署239 10.3 EVCache的性能240 10.3.1 EVCache集群的性能240 10.3.2 全局化復制時的性能問題242 10.3.3 Moneta項目中的組件性能243 10.4 EVCache 的高可用性244 10.4.1 AWS的多可用區244 10.4.2 EVCache對AWS高可用性的增強245 10.5 源碼與示例245 10.5.1 源碼淺析245 10.5.2 EVCache 示例253 第11章 Aerospike原理及廣告業務應用259 11.1 Aerospike架構259 11.2 Aerospike具體實現261 11.2.1 Aerospike集群管理261 11.2.2 數據分布263 11.3 Aerospike集群配置和部署265 11.3.1 搭建集群的方式與配置266 11.3.2 部署集群267 11.4 Aerospike與Redis的對比271 11.5 Aeropsike在廣告行業的具體應用272 11.5.1 Aerospike在個性化推薦廣告中的應用273 11.5.2 Aerospike在實時競價廣告中的應用274 第12章 社交場景架構進化:從數據庫到緩存283 12.1 社交業務示例283 12.1.1 業務模型283 12.1.2 業務場景284 12.1.3 業務特點285 12.2 關系(relation)的存儲286 12.2.1 基于DB的最簡方案286 12.2.2 DB的sharding方案288 12.2.3 引入緩存290 12.2.4 緩存的優化方案292 12.3 帖子(post)的存儲293 12.3.1 基于DB的方案294 12.3.2 引入服務端緩存296 12.3.3 本地緩存297 12.4 時間線(timeline)的存儲297 12.4.1 基于DB的方案—push模式298 12.4.2 基于DB的方案—pull模式300 12.4.3 增量查詢引入服務端緩存302 第13章 緩存在社交網絡Feed系統中的架構實踐304 13.1 Feed系統架構304 13.2 Feed緩存模型307 13.3 Feed緩存架構的設計309 13.3.1 簡單數據類型的緩存設計310 13.3.2 集合類數據的緩存設計312 13.3.3 其他類型數據的緩存設計314 13.4 Feed緩存的擴展 315 13.4.1 Redis的擴展315 13.4.2 計數器的擴展316 13.4.3 存在性判斷的擴展318 13.5 Feed緩存的服務化319 第14章 典型電商應用與緩存324 14.1 電商類應用的挑戰及特點324 14.2 應用數據靜態化架構高性能單頁Web應用325 14.2.1 整體架構326 14.2.2 CMS系統326 14.2.3 前端展示系統328 14.2.4 控制系統328 14.3 應用多級緩存模式支撐海量讀服務329 14.3.1 多級緩存介紹329 14.3.2 如何緩存數據331 14.3.3 分布式緩存與應用負載均衡332 14.3.4 熱點數據與更新緩存334 14.3.5 更新緩存與原子性336 14.3.6 緩存崩潰與快速修復336 14.4 構建需求響應式億級商品詳情頁337 14.4.1 商品詳情頁前端結構338 14.4.2 單品頁技術架構發展338 14.4.3 詳情頁架構設計原則343 14.4.4 遇到的一些問題349 第15章 同程鳳凰緩存系統基于Redis的設計與實踐357 15.1 同程鳳凰緩存系統要解決什么問題357 15.1.1 Redis用法的凌亂358 15.1.2 從實際案例再看Redis的使用360 15.1.3 如何改變Redis用不好的誤區362 15.1.4 鳳凰緩存系統對Redis系統化改造364 15.2 用好Redis先運維好它366 15.2.1 傳統的Redis運維方式366 15.2.2 Redis的Docker化部署368 15.2.3 鳳凰緩存系統對Redis的監控369 15.2.4 鳳凰緩存系統對Redis的集群分片優化370 15.2.5 客戶端在運維中的作用371 15.2.6 鳳凰緩存系統在Redis運維上的工具372 15.3 鳳凰緩存系統的使用效果373 第16章 新的旅程374 16.1 更好的引入緩存技術374 16.1.1 緩存引入前的考量374 16.1.2 緩存組件的選擇375 16.1.3 緩存架構的設計376 16.1.4 緩存系統的監控及演進377 16.2 緩存分類總結377 16.3 緩存知識結構更多Tips378 16.3.1 緩存使用模式379 16.3.2 緩存協議379 16.3.3 緩存連接池380 16.3.4 幾個關注點383 16.3.5 管理緩存387 16.3.6 緩存可用性390 16.3.7 數據一致性392 16.3.8 熱點數據處理393 16.3.9 注意事項Tips396 這是一本從大型互聯網系統的應用角度探討分布式緩存的書籍。本書站在原理、框架、架構、案例等多個視角對分布式緩存進行了探討。
互聯網系統隨著容量需求的陡增,許多看似簡單的存儲類場景都面臨著巨大的容量問題和穩定性風險,而其中大部分問題都可以通過對緩存的合理使用來規避。讀者從本書中將會獲得應對這些問題的思路,也會對分布式緩存有一個體系化的認識。 本書內容共分為三個部分,全書按照從理論到實現,再到實踐的思路撰寫。 首先介紹分布式緩存的背景知識,對“分布式”和“緩存”這兩個關鍵詞進行了全面闡述,從而為后續章節的敘述打下基礎; 接著介紹業界主流的緩存,關注其原理與實現,囊括了Ehcache、Memcached、Redis、Tair、EVCache、Aerospike等六個緩存或類緩存系統; 最后討論緩存在互聯網系統中的實踐,從廣告、社交、新聞、電商、營銷等五類典型的互聯網應用入手,分析它們面臨的性能穩定性問題以及如何利用分布式緩存解決這些問題。 為了初心的紀念
一本歷時2年的書即將出版難免有些激動,同時亦有些忐忑。激動在于這是一次有意義的社會實踐,諸多作者參與其中。至完稿時,作者與發起計劃時已有些不同。一些朋友因為各種原因退出了,所以從堅持的角度看,完成就意味著第一層面的成功。忐忑在于從初心出發,通讀全稿仍有不足之處,諸位作者在具體實踐中所遇到的線上問題遠非本書所能盡數容納。而最后精華的實踐章節亦經過公司PR審核,略有刪減。再一層,設計和編碼很重要,運維管理同等重要。一個好用、易用、穩定的運維工具也是選擇一套開源組件的重要參考因素,為了集中注意力,本書基本未覆蓋運維部分的內容,且待有心人續之。寫一本書,面世之后,作者或喜或憂,因為臧否之權利在于讀者。 自覺而言,本書適合有一定研發經驗的朋友閱讀,它山之石,亦有攻玉之效。本書在邏輯上可分為三大篇章:基礎概念篇、開源框架篇、應用案例篇。基礎概念除了基礎知識,也介紹了一些分布式方面的方法和思路;開源框架篇遴選了近年來流行的框架(比如Redis),同時對淘寶Tair、EVCache也做了一些探索。在Redis大行其道之時,對于Memcached及其周邊知識也做了介紹,某些公司還有大量的Memcached實例,比如微博、Twitter等。工具的革新總是源自需求的不斷被滿足,而根據被滿足的特性可以歸納其共性,比如解決單點高可用問題就是一個普適性問題,涉及主從模式、雙活模式等,可用性同時又和性能、數據一致性相關。緩存為性能而生,但“緩存”設施的存在就決定了這個設施要符合分布式理論的要求。業界介紹理論和概要,或介紹設計原則的書不少,但拿出具體實踐的稀有,比如新浪微博、Twitter這樣的社交SNS具體如何設計緩存。簡約而不簡單!在應用案例篇,筆者邀請了對應領域的專家為大家解讀案例,可以讓大家觸摸到真實的設計意圖。重要的是大家可以獲得不同場景下不同設計策略的啟發。 本書的產生要追溯到多年前。筆者一直對緩存技術抱有熱情,關注開源框架的發展,亦在工作中關注所遇、所見,乃至所聽的案例。從應用程序研發方面看分布式緩存,并不需要所有的程序員都具備開發一套組件的能力,但是需要具備正確使用它的能力。正如易寶CTO陳斌老師所言:“解決雪崩問題的最好辦法是不發生雪崩”。不論是在硅谷互聯網公司里還是在國內的互聯網平臺上,曾多次遇到過海量規模的交易瞬間吞噬平臺的悲慘故事。筆者亦了解一些緩存因為代碼缺陷或者使用不當被擊穿的案例,不同數量級的請求產生的結果有天壤之別,不可不慎。 兩年前偶遇機械工業出版社的楊福川老師,攀談之下就萌發了創作本書的念頭。但由于工作繁忙且想呈現心中所想之提綱,故邀請一些不同場景下的專家共同完成。組團過程多有波折,特別感動的是北京的孔慶龍兄。他非常有興趣參與合作,但時逢小孩即將出生,為此,孔兄開了一次家庭會議來討論此事。雖然孔兄后續未決定參與,但可見其待人之真、之誠,是值得交的朋友。兩年間發生了不少事情,劉暻宇(leo)、何濤、曹洪偉和程超都換了工作。在本書項目開始時程超家的小朋友還未出生,現在都快2歲了。大家都很忙,大約1個月碰一下進度,有時候可能一點進展都沒有。期間,程超和leo都一度要退出,終堅持了下來。還有些朋友中間退出了,同時有陳波、王曉波等朋友加入。到這時,啥時候出版已不那么心焦了,水到渠成。就是問初心,我們有沒有盡自己的努力來呈現一份關于工具書的紀念? 特別感謝曹洪偉身體力行,按時按質完成了分配的章節,同時review了不少章節,帶動了這個虛擬組織邁上一個新臺階。這是一本書的編寫過程,是一次心靈的旅行,是一次基于互聯網的跨組織協同,也是關于工作和生活的點綴。感謝妻子曉娜對于我寫作的支持,她對于進度的關注甚于我自己。她花了大量的時間輔導兩個小朋友的學習,雖然周末有輔導班、家務等各種事項,但我總能申請到一些時間來構思本書。本書也是送給我的兩個寶貝的禮物。這個禮物是初心,想到什么有意義的事情要義無反顧去做;同時,這個禮物也代表“堅持”,如同寫作文一樣,觀察、總結,然后不斷練習。 同時還要感謝所有的合作者,我們交叉review了所有章節。感謝機械工業出版社的楊福川老師、孫海亮老師。孫老師的審閱非常專業,從讀者視角直面問題所在。朱攀兄弟review了部分章節,在寫作過程中和高磊兄弟、丁浪兄弟也有交流,一并表示感謝。 囿于篇幅和知識局限,錯漏之處難免,后續將通過勘誤和調整完善的形式持續優化。為了初心的紀念,一次心靈的旅游!祝大家閱讀愉快! 于君澤(右軍) |