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