前言
緩存和算法一樣,幾乎是所有大廠的敲門磚。對於後端開發來說,算法會影響你是否可以接到 Offer,而你對緩存知識的理解程度,則會影響你 Offer 的薪資水平。可以說,對緩存的掌握程度,在某種意義上決定了後端開發者的職業高度。
之前和很多大廠面試官聊天,大家都有這個共識。因爲互聯網公司基本都是直面用戶的業務,要想改善用戶體驗,就要持續確保系統的訪問性能和可用性,而使用緩存最常見且有效的手段。你要是不懂緩存,就很難寫出高性能大併發的代碼來滿足業務需求。所以,面試官通常會通過應聘者對緩存相關知識的理解深入程度,來判斷其開發經驗和學習能力。
在這裏推薦一份數位一線用阿里P7聯手京東T6自己的項目經驗編寫的:深入分佈式緩存從原理到實踐,深度解構分佈式緩存技術原理及其在電商、社交、廣告等
典型場最中的應用
在文章開始前先放一份知識點圖譜,整個圖譜以 10 年分佈式緩存經驗分享爲主,相信有不少乾貨,值得一看。
文章簡介
本書圍繞分佈式緩存的基礎概念、開源框架、應用案例三方面進行講解,從理論到實戰,循序漸進,深入淺出。
- 首先介紹分佈式緩存的背景知識,對“分佈式”和“緩存”這兩個關鍵詞進行了全面闡述,從而爲後續章節的敘述打下基礎;
- 接着介紹業界主流的緩存,關注其原理與實現,囊括了Ehcache.Memcached, Redis、Tair, EVCache,Aerospike等六個緩存或類緩存系統;
- 最後討論緩存在互聯網系統中的實踐。從廣告、社交、新聞、電商、營銷等五類典型的互聯網應用入手,分析它們面臨的性能穩定性問題以及如何利用分佈式緩存解決這些問題。
第一章
在商業的世界中,常說的一句話是“現金爲王"。在互聯網、移動互聯網乃至整個軟件技術世界中,與之相近的一一個說法就是“緩存爲王”。什麼是緩存呢?
私信小編【資料】即可獲取這份阿里P7聯手京東T6出版的深入分佈式緩存從原理到實踐PDF版。
- 什麼是緩存?
- 爲什麼使用緩存?
- 從用戶體驗說起
- 關於系統的性能
- 從網站的架構發展看緩存
- 客戶端緩存
- 頁面緩存
- 瀏覽器緩存
- APP上的緩存
- 網絡中的緩存
- Web代理緩存
- 邊緣緩存
- 服務端緩存
- 數據庫緩存
- 平臺級緩存
- 應用級緩存
第二章
分佈式理論體系宏大精深,可以通過一大厚本專著來專門闡述,本書難以盡述之,本章擬從分佈式系統概論、分佈式系統概念、分佈式系統理論,比如Paxos、分佈式系統設計策略、心跳檢測、分佈式系統設計實踐、全局ID生成等幾個方面略勾畫之。
- 分佈式系統概論
- 分佈式系統概念
- 進程與線程
- 併發
- 鎖
- 並行
- 集羣
- 狀態特性
- 系統重發與冪等性
- 硬件異常
- 分佈式系統理論
- CAP理論
- CAP理論澄清
- Paxos
- 2PC
- 3PC
- Raft
- Lease機制
- 解決“腦裂”問題
- Quorum NWR
- MVCC
- Gossip
- 分佈式系統設計策略
- 心跳檢測
- 高可用設計
- 容錯性
- 負裁均衡
- 分佈式系統設計實踐
- 全局ID生成
- 哈希取模
- 一致性哈希
- 路由表
- 數據拆分
第三章
目前市面上已經有很多開源的緩存框架,比如Redis、Memcached. Eheache 等,那爲什麼還要自己動手寫緩存?本章將帶領大家從0到1寫一個簡單的緩存框架,目的是讓大家對緩存的類型、緩存的標準、緩存的實現及原理有- -個系統的瞭解,做到知其然,知其所以然。
- 緩存定義的規範
- 新規範的主要內容及特性
- ?新規範的API介紹
- 緩存框架的實現
- 前期準備
- 緩存的架構介紹
- 設計思路以及知識點詳解
- 緩存框架的使用示例
第四章
GuavaCache和Ehcache本地緩存,但在細分領域也有不同的應用場景,4.5節中將做詳細介紹。
- Ehcache的主要特性
- Ehcache使用介紹
- Ehcache架構圖
- 緩存數據過期策略
- Ehcache緩存的基本用法
- 在Spring中使用Ehcache
- Ehcache集羣介紹
- 集羣的方式
- 如何配置集羣
- Ehcache的適用場景
- Guava Cache的使用
- Guava Cache的適用場景
- Guava Cache的創建方式
- 緩存數據刪除
- 併發場景下的使用
第五章
許多Web應用程序都將數據保存到RDB中,但隨着數據量的增大,RDB的負擔加重,數據庫響應惡化,性能嚴重下降。Memcached 是高性能的分佈式內存緩存服務器,一般用來緩存訪問的熱點數據,減輕數據庫的負擔。
- Memcached基本知識
- Memcached的操作命令
- Memcached使用場景
- Memcached特徵
- Memcached的一些問題
- Memcached內存存儲
- Slab Allocation機制
- 使用Growth Factor進行調優
- Item
- 典型問題解析
- 過期機制
- 哈希算法
- 熱點問題
- 緩存與數據庫的更新問題
- 別把緩存當存儲
- 命名空間
- CAS
- Memcached客戶端分析
- Memcached的Client
- Spymemcached設計思想解析
- Memcached周邊工具發展
第六章
本章主要介紹基於Memcached的周邊技術,重點對Memcached的定製版Twemcache,對開源的緩存集羣方案Twemproxy,以及Mcrouter等進行解析,以便充分地利用分佈式緩存服務。
- Twemcache
- Twemcache的設計原理
- Twemcache的安裝及命令行詳解
- 基於Java的Twemcache用法
- Twemproxy
- Twemproxy的常用部署模式
- Twemproxy的可擴展性
- Twemproxy源代碼簡析
- Mcrouter
- Mcrouter路由算法
- 典型的使用場景
- Mcrouter的可擴展性
- 源碼簡要解析
第七章
Redis運行於獨立的進程,通過網絡協議和應用交互,將數據保存在內存中,並提供多種手段持久化內存數據。Redis具備跨服務器的水平拆分、複製的分佈式特性。
- 數據結構
- value對象的通用結構
- String
- List
- Map
- Set
- Sorted-Set
- 客戶端與服務器的交互.
- 客戶端/服務器協議
- 請求/響應模式
- 事務模式
- 腳本模式
- 發佈/訂閱模式
- 單機處理邏輯
- 多路複用
- 定時任務處理
- 持久化
- 基於全量模式的持久化
- 基於增量模式的持久化
- 基於增量模式持久化的優化
第八章
本章的編寫目的就是,幫助讀者瞭解如何通過Redis實現上述解決方案,本章包含的主要知識如下:
- 水平拆分(sharding)
- 數據分佈
- 請求路由
- 主備複製(replication)
- 主備複製流程
- 斷點續傳
- 故障轉移(failover)
- sentinel間的相互感知
- master的故障發現
- failover決策
- Redis Cluster
- 拓撲結構
- 配置的一致性
- sharding
- failover
- 可用性和性能
第九章
Tair分爲持久化和非持久化兩種使用方式。非持久化的Tair可以看成是-一個分佈式緩存。持久化的Tair將數據存放於磁盤中。在最新版本的Tair項目中實現了以下4種存儲引擎。
非持久化: mdb
持久化: fdb、kdb和ldb
這4種存儲引擎分別基於四種開源的key/value 數據庫: Memcached、 Firebird、 KyotoCabinet和LevelDB。其中Firebird 是關係型存儲數據庫,Memcached、Kyoto Cabinet和LevelDB是NoSQL數據庫。
私信小編【資料】即可獲取這份阿里P7聯手京東T6出版的深入分佈式緩存從原理到實踐PDF版。
- Tair總體架構
- Config Server簡介
- Data Server簡介
- Tair高可用和負載均衢
- !對照表
- ?數據遷移
- 存儲引擎
- Tair的API
- key/value相關API
- prefix相關的API
第十章
雲服務不僅爲軟件系統的開發和部署帶來了更多的敏捷性,而且提供了更多創新的可能性。當分佈式緩存技術遇到雲服務會是怎樣的情形呢?EVCache就是這樣的一種技術。
- EVCache項目介紹
- EVCache的由來
- EVCache的發展
- EVCache的演進
- EVCache的使用場景
- 典型用例
- 典型部署
- EVCache的性能
- EVCache集羣的性能
- 全局化複製時的性能問題
- Moneta項目中的組件性能
- EVCache的高可用性
- AWS的多可用區
- EVCache對AWS高可用性的增強
- 源碼與示例
- 源碼淺析
- EVCache示例
第十一章
本章將會介紹Aerospike的架構原理,集羣部署,基本用法以及在廣告行業中的具體應用;本章基於Aerospike的3.8.4版本(主要針對具體的部署操作部分,而對於原理,架構的描述則不侷限於此)。接下來開始介紹Aerospike整體的架構實現和原理。
- Aerospike架構
- Aerospike具體實現
- Aerospike集羣管理
- 數據分佈
- Aerospike集羣配置和部署
- 搭建集羣的方式與配置
- 部署集羣
- Aerospike與Redis的對比
- Aeropsike在廣告行業的具體應用
- Aerospike在個性化推薦廣告中的應用
- Aerospike在實時競價廣告中的應用
第十二章
本章以一個典型的社交類應用爲例,基於-一個簡化的領域模型和業務場景,敘述該應用在面臨不斷增加的業務吞吐量時,傳統的基於數據庫的方案將面臨的性能風險,隨後闡述如何利用緩存技術對這些典型的性能問題進行解決。
- 社交業務示例
- 業務模型
- 業務場景
- 業務特點
- 關係(relation) 的存儲
- 基於DB的最簡方案
- DB的sharding方案
- 引入緩存
- 緩存的優化方案
- 帖子(post) 的存儲
- 基於DB的方案
- 引入服務端緩存
- 本地緩存
- 時間線(timeline) 的存儲
- 基於DB的方案一push模式
- 基於DB的方案一pull模式
- 增量查詢引入服務端緩存
第十三章
本章將以新浪微博Feed系統架構的發展歷程作爲背景,基於一個典型的社交網絡Feed系統架構,介紹Feed系統的緩存模型、緩存體系架構,以及緩存體系如何伴隨業務規模來擴展及演進。
- Feed系統架構
- Feed緩存模型
- Feed緩存架構的設計
- 簡單數據類型的緩存設計
- 集合類數據的緩存設計
- 其他類型數據的緩存設計
- Feed緩存的擴展
- Redis的擴展
- 計數器的擴展
- 存在性判斷的擴展
- Feed緩存的服務化
第十四章
分佈式系統的CAP理論首先把分佈式系統中的三個特性進行了如下歸納:
一致性(C):在分佈式系統中的所有數據備份,在同- -時刻是否是同樣的值(等同於所有節點訪問同一份最新的數據副本)。
可用性(A):在集羣中一部分節點故障後,集羣整體是否還能響應客戶端的讀寫請求(對數據更新具備高可用性)。
分區容忍性(P):以實際效果而言,分區相當於對通信的時限要求。系統如果不能在時限內達成數據一致性,就意味着發生了分區的情況,必須就當前操作在C和A之間做出選擇。
- 電商類應用的挑戰及特點
- 應用數據靜態化架構高性能單頁Web應用
- 整體架構
- CMS系統
- 前端展示系統
- 控制系統
- 應用多級緩存模式支撐海量讀服務
- 多級緩存介紹
- 如何緩存數據
- 分佈式緩存與應用負載均衡
- 熱點數據與更新緩存
- 更新緩存與原子性
- 緩存崩潰與快速修復
- 構建需求響應式億級商品詳情頁
- 商品詳情頁前端結構
- 產品頁技術架構發展
- 詳情頁架構設計原則
- 遇到的一些問題
第十五章
本章和大家分享一下同程鳳凰緩存系統在基於Redis方面的設計與實踐。在本章中除了會列舉我們工作過程中遇到各種問題和誤區外,還會給出我們相應的解決辦法,希望能夠拋磚引玉爲大家帶來一定的啓示。
- 同程鳳凰緩存系統要解決什麼問題
- Redis用法的凌亂
- 從實際案例再看Redis的使用
- 如何改變Redis用不好的誤區
- 鳳凰緩存系統對Redis系統化改
- 用好Redis先運維好它
- 傳統的Redis運維方式
- Redis的Docker化部署
- 鳳凰緩存系統對Redis的監控
- 鳳凰緩存系統對Redis的集羣分片優化
- 客戶端在運維中的作用
- 鳳凰緩存系統在Redis運維上的工具
- 鳳凰緩存系統的使用效果
第十六章
在介紹了分佈式理論體系、自己動手寫緩存、若干開源緩存框架等內容之後,如同一段美好的旅程,本書也需要-一個總結性的停頓。談及緩存我們會情不自禁地想起淘汰算法過期處理等,但開發設計中如何更好地引入緩存技術,完整的緩存知識體系又是怎樣的,筆者嘗試梳理一下,算是爲本書做-一個收尾。
- 更好的引入緩存技術
- 緩存引入前的考量
- 緩存組件的選擇
- 緩存架構的設計
- 緩存系統的監控及演進
- 緩存分類總結
- 緩存知識結構更多Tips
- 緩存使用模式
- 緩存協議
- 緩存連接池
- 幾個關注點
- 管理緩存
- 緩存可用性
- 數據致性
- 熱點數據處理
- 注意事項Tips
私信小編【資料】即可獲取這份阿里P7聯手京東T6出版的深入分佈式緩存從原理到實踐PDF版。