微服務(wù)實(shí)踐目錄,可以參見(jiàn)連接。

緩存系列包括:
1.微服務(wù)管理-11.緩存概述
1.微服務(wù)管理-11.緩存-0.技術(shù)
1.微服務(wù)管理-11.緩存-1.多級(jí)緩存設(shè)計(jì)
1.微服務(wù)管理-11.緩存-2.典型緩存架構(gòu)設(shè)計(jì)
1.微服務(wù)管理-11.緩存-3.實(shí)踐
1.微服務(wù)管理-11.緩存-4.總結(jié)
背景
隨著互聯(lián)網(wǎng)的普及,內(nèi)容信息越來(lái)越復(fù)雜,用戶數(shù)和訪問(wèn)量越來(lái)越大,我們的應(yīng)用需要支撐更多的并發(fā)量。對(duì)于一個(gè)計(jì)算機(jī)系統(tǒng)來(lái)說(shuō)輸入、輸出、計(jì)算、存儲(chǔ)都需要不斷的擴(kuò)展,從原來(lái)的單臺(tái)機(jī)器擴(kuò)展到多臺(tái)機(jī)器以增強(qiáng)系統(tǒng)的輸入、輸出、計(jì)算、存儲(chǔ)能力。在硬件上以多臺(tái)廉價(jià)機(jī)器替換單臺(tái)的昂貴服務(wù)器的趨勢(shì)已經(jīng)從GFS、云計(jì)算領(lǐng)域的興起而不斷的被應(yīng)用在實(shí)踐中。相對(duì)于硬件基礎(chǔ)設(shè)施來(lái)說(shuō),軟件基礎(chǔ)設(shè)施也跟隨者小型化、廉價(jià)化的趨勢(shì)在不斷的分裂發(fā)展。從軟件基礎(chǔ)層面上有使用分布式的方式解決輸入、輸出、計(jì)算、存儲(chǔ)能力的問(wèn)題。
軟件基礎(chǔ)設(shè)施方面的輸入可以使用 OpenResty這種可以高度定制化的接入服務(wù),輸出可以使用CDN、P2P這樣的分發(fā)網(wǎng)絡(luò)進(jìn)行。計(jì)算可以使用微服務(wù),分布式計(jì)算解決差異化、大批量計(jì)算的問(wèn)題。存儲(chǔ)方面的發(fā)展對(duì)于其他方面來(lái)說(shuō)相對(duì)比較緩慢。近些年不斷提出存儲(chǔ)方面的特定場(chǎng)景解決方案:大數(shù)據(jù)存儲(chǔ)與計(jì)算方案,NewSql的關(guān)系型存儲(chǔ)解決方案,文檔型存儲(chǔ)解決方案等。但業(yè)內(nèi)對(duì)于非關(guān)系型數(shù)據(jù)庫(kù)的研究與應(yīng)用還是處于不是很穩(wěn)定的階段,菲關(guān)系型數(shù)據(jù)庫(kù)一方面解決存儲(chǔ)性能的問(wèn)題,一方面有被CAP所限制。所以出現(xiàn)了BASE這種對(duì)CAP進(jìn)行權(quán)衡的方式。
從存儲(chǔ)的基本理論(ACID,CAP,BASE)可以得出存儲(chǔ)的可伸縮性、性能等方面是有理論約束的。不能將系統(tǒng)所要求的并發(fā)量、響應(yīng)時(shí)間等壓在數(shù)據(jù)庫(kù)的能力上,所以緩存技術(shù)再一次被提上桌面。
數(shù)據(jù)庫(kù)每秒能接受的請(qǐng)求次數(shù)也是有限的(或者文件的讀寫也是有限的),但是我們不可能把我們的持久化技術(shù)不不實(shí)用數(shù)據(jù)庫(kù)。所以,如何能夠有效利用有限的資源來(lái)提供盡可能大的吞吐量?就成為數(shù)據(jù)庫(kù)在軟件系統(tǒng)中的最主要責(zé)任。一個(gè)有效的辦法就是引入緩存,打破標(biāo)準(zhǔn)流程,每個(gè)環(huán)節(jié)中請(qǐng)求可以從緩存中直接獲取目標(biāo)數(shù)據(jù)并返回,從而減少計(jì)算量,有效提升響應(yīng)速度,讓有限的資源服務(wù)更多的用戶。
技術(shù)對(duì)比
我們這里討論的緩存技術(shù)是針對(duì)數(shù)據(jù)管理與數(shù)據(jù)存儲(chǔ)方面的技術(shù)。不包括像瀏覽器緩存,cdn緩存,nginx緩存這樣的技術(shù)。從這個(gè)角度說(shuō),所有的內(nèi)存式數(shù)據(jù)庫(kù)都可以作為緩存使用。下圖為google查詢緩存技術(shù)的趨勢(shì)圖:

在緩存技術(shù)剛出現(xiàn)的那幾年,memcache和redis是不相上下的。后來(lái)redis異軍突起,其他的緩存技術(shù)已經(jīng)不可與redis同日而語(yǔ)。但對(duì)于技術(shù)來(lái)說(shuō),不同的技術(shù)有不同的側(cè)重點(diǎn)有自己所適用的場(chǎng)景。所以對(duì)于每項(xiàng)技術(shù)都需要有一些了解。
對(duì)于緩存技術(shù)有一些通用的特性,還有一些自己的特點(diǎn)。所以本文會(huì)從通用的角度對(duì)比幾個(gè)現(xiàn)在可以看到的,會(huì)從不同的方面進(jìn)行對(duì)比。具體指標(biāo)有:客戶端,分布式支撐,命中率,最大元素?cái)?shù),換入換出策略,數(shù)據(jù)類型,持久化,監(jiān)控管理,緩存穿透支持,標(biāo)準(zhǔn)規(guī)范(JSR-107 JAVA緩存規(guī)范)
-
redis
介紹
Redis是一個(gè)開(kāi)源(BSD許可)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),用作數(shù)據(jù)庫(kù)、緩存和消息代理。它支持?jǐn)?shù)據(jù)結(jié)構(gòu),如字符串、哈希、列表、集合、帶范圍查詢的排序集合、位圖、超日志、帶半徑查詢的地理空間索引和流。Redis具有內(nèi)置的復(fù)制、Lua腳本、LRU逐出、事務(wù)和不同級(jí)別的磁盤持久性,并通過(guò)Redis Sentinel和帶有Redis集群的自動(dòng)分區(qū)提供高可用性。特點(diǎn)
Redis能讀的速度是110000次/s,寫的速度是81000次/s 。Redis的所有操作都是原子性的,同時(shí)Redis還支持對(duì)幾個(gè)操作全并后的原子性執(zhí)行。Redis還支持 publish/subscribe, 通知, key 過(guò)期等等特性。可以使用命令行進(jìn)行非常容易的操作。Redis支持Lua腳本擴(kuò)展功能。類型
key-value型,遠(yuǎn)程服務(wù)。客戶端
多種宿主語(yǔ)言客戶端支持,客戶端還可以支持JSR-107標(biāo)準(zhǔn)。可以參見(jiàn):https://redis.io/clients最大元素?cái)?shù)
Redis最大支持的Key大小、Value大小都為512MB。最多可以建立2^32個(gè)key,經(jīng)過(guò)實(shí)踐測(cè)試,每個(gè)實(shí)例至少可以處理2.5億個(gè)key。每個(gè)hash,list,set和sort set都可以容納2^32個(gè)元素??梢詤⒁?jiàn):https://redis.io/topics/data-types-intro
https://redis.io/topics/faq數(shù)據(jù)類型
支持String、Hash、List、Set、Sorted Set、Geo、Stream、HyperLogLog。每種都可以有多種用法。持久化
Redis支持三種持久化方式:AOF,RDB,禁止持久化??梢詤⒁?jiàn):https://redis.io/topics/persistence
換出策略支持多種:lru,lfu,fifo??梢詤⒁?jiàn):https://redis.io/topics/lru-cache監(jiān)控管理
Redis原生支持多種監(jiān)控方式。可以使用redis-cli中的monitor,info,time命令行參數(shù)可以獲取信息。從命令上可以獲得多種類型的原始數(shù)據(jù)包括很多redis的指標(biāo)型數(shù)據(jù)。還有多種類型的界面化監(jiān)控軟件Prometheus--redis_exporter,RedisLive等都可以很好的滿足監(jiān)控的要求。緩存穿透、緩存同步
redis本身是未支持的緩存穿透與緩存同步的功能,需要使用第三方組建完成??梢允褂冒⒗锏腸anal。分布式支持
Redis支持復(fù)制(replication)、Sentinel 和集群(cluster)三個(gè)多機(jī)功能??梢灾С忠恢滦訦ash算法進(jìn)行數(shù)據(jù)的分片工作。
-
Memcached
介紹
Memcached是免費(fèi)開(kāi)放源代碼、高性能、分布式內(nèi)存對(duì)象緩存系統(tǒng),本質(zhì)上是通用的,但旨在通過(guò)減輕數(shù)據(jù)庫(kù)負(fù)載來(lái)加速動(dòng)態(tài)web應(yīng)用程序。Memcached是內(nèi)存中的鍵值存儲(chǔ),用于存儲(chǔ)數(shù)據(jù)庫(kù)調(diào)用、API調(diào)用或頁(yè)面呈現(xiàn)結(jié)果中的任意小塊數(shù)據(jù)(字符串、對(duì)象)。Memcached簡(jiǎn)單但功能強(qiáng)大。它的簡(jiǎn)單設(shè)計(jì)促進(jìn)了快速部署,易于開(kāi)發(fā),并解決了大型數(shù)據(jù)緩存面臨的許多問(wèn)題。它的API可用于大多數(shù)流行語(yǔ)言。特點(diǎn)
Memcached 是單進(jìn)程多線程的工作模式,請(qǐng)求到達(dá)時(shí),主線程會(huì)將請(qǐng)求分發(fā)給多個(gè)工作線程,因此必須要做數(shù)據(jù)的互斥。memcached每秒可以輕松處理200,000+個(gè)請(qǐng)求。使用libevent提供事件驅(qū)動(dòng)能力。資料比較難找。類型
key-value型,遠(yuǎn)程服務(wù)。客戶端
多種宿主語(yǔ)言客戶端支持。最大元素?cái)?shù)
Memcached單個(gè)key-value大小有限,一個(gè)value最大只支持1MB。MemCache中可以保存的item數(shù)據(jù)量是沒(méi)有限制的,只要內(nèi)存足夠。MemCache單進(jìn)程在32位機(jī)中最大使用內(nèi)存為2G,這個(gè)之前的文章提了多次了,64位機(jī)則沒(méi)有限制。數(shù)據(jù)類型
支持String,Object類型持久化
MemCached不支持?jǐn)?shù)據(jù)持久化,斷電或重啟后數(shù)據(jù)消失,但其穩(wěn)定性是有保證的。監(jiān)控管理
memcache使用命令stats可以得到很多監(jiān)控信息。界面化的監(jiān)控工具有open-falcon,memcachephp可以使用。緩存穿透、緩存同步
memcache本身是未支持的緩存穿透與緩存同步的功能,需要使用第三方組建完成??梢允褂冒⒗锏腸anal。分布式支持
各個(gè)memcached服務(wù)器之間互不通信,各自獨(dú)立存取數(shù)據(jù),不共享任何信息。服務(wù)器并不具有分布式功能,分布式部署取決于memcache客戶端。
-
etcd
介紹
etcd是一個(gè)分布式鍵值對(duì)存儲(chǔ),設(shè)計(jì)用來(lái)可靠而快速的保存關(guān)鍵數(shù)據(jù)并提供訪問(wèn)。通過(guò)分布式鎖,leader選舉和寫屏障(write barriers)來(lái)實(shí)現(xiàn)可靠的分布式協(xié)作。etcd集群是為高可用,持久性數(shù)據(jù)存儲(chǔ)和檢索而準(zhǔn)備。
您的應(yīng)用程序可以讀取數(shù)據(jù)并將數(shù)據(jù)寫入etcd。一個(gè)簡(jiǎn)單的用例是將數(shù)據(jù)庫(kù)連接細(xì)節(jié)或特性標(biāo)志作為鍵值對(duì)存儲(chǔ)在etcd中。這些值可以被監(jiān)視,允許應(yīng)用程序在更改時(shí)重新配置自身。高級(jí)使用利用etcd的一致性保證來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)領(lǐng)導(dǎo)人選舉或跨工作集群執(zhí)行分布式鎖定。特點(diǎn)
etcd提供了leader選舉、分布式時(shí)鐘、分布式鎖、持續(xù)監(jiān)控(watch)和集群內(nèi)各個(gè)成員的liveness監(jiān)控等功能。zookeer雖然也實(shí)現(xiàn)了類似的功能,但是不方便易用,還需借助Netflix提供的Apache Curator庫(kù)。
etcd比較多的應(yīng)用場(chǎng)景是用于服務(wù)發(fā)現(xiàn)。etcd是CoreOS團(tuán)隊(duì)于2013年6月發(fā)起的開(kāi)源項(xiàng)目,它的目標(biāo)是構(gòu)建一個(gè)高可用的分布式鍵值(key-value)數(shù)據(jù)庫(kù)。etcd內(nèi)部采用raft協(xié)議作為一致性算法,etcd基于Go語(yǔ)言實(shí)現(xiàn)。安裝配置簡(jiǎn)單,而且提供了HTTP API進(jìn)行交互,使用也很簡(jiǎn)單。根據(jù)官方提供的benchmark數(shù)據(jù),單實(shí)例支持每秒2k+讀操作。類型
key-value型,遠(yuǎn)程服務(wù)。客戶端
多種宿主語(yǔ)言客戶端支持??梢詤⒁?jiàn):https://etcd.io/docs/v3.4.0/integrations/最大元素?cái)?shù)
etcd旨在處理典型的元數(shù)據(jù)小鍵值對(duì)。默認(rèn)情況下,任何請(qǐng)求的最大大小為1.5 MiB。 可以通過(guò)etcd服務(wù)器的--max-request-bytes標(biāo)志配置此限制。默認(rèn)的存儲(chǔ)大小限制為2GB,可使用--quota-backend-bytes標(biāo)志進(jìn)行配置。 建議在正常環(huán)境下使用8GB的最大大小??梢詤⒁?jiàn):https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/limit.md數(shù)據(jù)類型
因?yàn)槭褂胔ttp api的方式進(jìn)行數(shù)據(jù)管理,所以對(duì)于數(shù)據(jù)類型的直接支持就只有String類型。持久化
Etcd 就會(huì)在默認(rèn)的工作目錄下生成兩個(gè)子目錄:snap 和 wal。兩個(gè)目錄的作用說(shuō)明如下。
snap:用于存放快照數(shù)據(jù)。Etcd 為防止 WAL 文件過(guò)多會(huì)創(chuàng)建快照,snap 用于存儲(chǔ) Etcd 的快照數(shù)據(jù)狀態(tài)。
wal:用于存放預(yù)寫式日志,其最大的作用是記錄整個(gè)數(shù)據(jù)變化的全部歷程。在 Etcd 中,所有數(shù)據(jù)的修改在提交前,都要先寫入 WAL 中。使用 WAL 進(jìn)行數(shù)據(jù)的存儲(chǔ)使得 Etcd 擁有故障快速回復(fù)和數(shù)據(jù)回滾這兩個(gè)重要功能。監(jiān)控管理
etcd因?yàn)樗膋8s體系的原因,可以直接使用 Prometheus
進(jìn)行監(jiān)控。并且為其提供了完整的指標(biāo)體系??梢詤⒁?jiàn):https://etcd.io/docs/v3.4.0/metrics/緩存穿透、緩存同步
主要針對(duì)服務(wù)發(fā)現(xiàn)場(chǎng)景,所以這方面的考慮應(yīng)該較少。因?yàn)槲覜](méi)有找到etcd關(guān)于這方面的資料。分布式支持
集群方式類似與zookeeper。
-
H2 Database
介紹
H2是一個(gè)Java編寫的關(guān)系型數(shù)據(jù)庫(kù),它可以被嵌入Java應(yīng)用程序中使用,或者作為一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行。H2數(shù)據(jù)庫(kù)的前身是HypersonicSQL,它的名字的含義是 Hypersonic2,但是它的代碼是從頭開(kāi)始編寫的,沒(méi)有使用HypersonicSQL或者HSQLDB的代碼。特點(diǎn)
H2 Database是一個(gè)開(kāi)源的嵌入式數(shù)據(jù)庫(kù)引擎,采用java語(yǔ)言編寫,不受平臺(tái)的限制,同時(shí)H2 Database提供了一個(gè)十分方便的web控制臺(tái)用于操作和管理數(shù)據(jù)庫(kù)內(nèi)容。H2 Database還提供兼容模式,可以兼容一些主流的數(shù)據(jù)庫(kù),因此采用H2 Database作為開(kāi)發(fā)期的數(shù)據(jù)庫(kù)非常方便。類型
RDBMS,內(nèi)嵌,本地。客戶端
因?yàn)閔2使用java編寫的內(nèi)嵌式數(shù)據(jù)庫(kù),所以對(duì)于java的支持,或jvm上語(yǔ)言支持較好。最大元素?cái)?shù)
數(shù)據(jù)類型
基本支持所有的sql數(shù)據(jù)類型。持久化
支持單個(gè)文件獨(dú)立存儲(chǔ)。監(jiān)控管理
提供界面化操作。緩存穿透、緩存同步
未知。分布式支持
支持集群??梢詤⒁?jiàn):http://www.h2database.com/html/advanced.html#clustering
-
Guava Cache
介紹
Guava是google的一個(gè)開(kāi)源java框架。guava工程包含了若干被Google的 Java項(xiàng)目廣泛依賴的核心庫(kù),例如:集合 [collections] 、緩存 [caching] 、原生類型支持 [primitives support] 、并發(fā)庫(kù) [concurrency libraries] 、通用注解 [common annotations] 、字符串處理 [string processing] 、I/O 等等。 所有這些工具每天都在被Google的工程師應(yīng)用在產(chǎn)品服務(wù)中。特點(diǎn)
Guava Cache是在內(nèi)存中緩存數(shù)據(jù),相比較于數(shù)據(jù)庫(kù)或redis存儲(chǔ),訪問(wèn)內(nèi)存中的數(shù)據(jù)會(huì)更加高效。Guava官網(wǎng)介紹,下面的這幾種情況可以考慮使用Guava Cache:愿意消耗一些內(nèi)存空間來(lái)提升速度。預(yù)料到某些鍵會(huì)被多次查詢。緩存中存放的數(shù)據(jù)總量不會(huì)超出內(nèi)存容量。類型
key-value型,內(nèi)嵌,本地。客戶端
java以及JVM上語(yǔ)言。最大元素?cái)?shù)
未找到最大實(shí)際測(cè)試數(shù)據(jù)。但是有文章說(shuō)可能會(huì)造成oom的問(wèn)題。GuavaCache支持四種回收方式: (1)基于容量回收(Size-based Eviction);(2)基于時(shí)間回收(Timed Eviction);(3)基于引用類型的回收Reference-based Eviction);(4)手動(dòng)回收。 4. 它可以監(jiān)控加載/命中情況。數(shù)據(jù)類型
java本身所有的數(shù)據(jù)類型都可以支持。持久化
Guava Cache不持久化數(shù)據(jù)。監(jiān)控管理
不支持。CacheBuilder.recordStats()用來(lái)開(kāi)啟Guava Cache的統(tǒng)計(jì)功能。緩存穿透、緩存同步
未支持。分布式支持
需要自己實(shí)現(xiàn)。
-
Caffeine
介紹
Caffeine使用的是一個(gè)內(nèi)存緩存,是基于Google 的 Guava與ConcurrentLinkedHashMap進(jìn)行實(shí)現(xiàn)的。Caffeine是一個(gè)開(kāi)源的Java緩存庫(kù),它能提供高命中率和出色的并發(fā)能力。特點(diǎn)
Caffeine提出了《設(shè)計(jì)一個(gè)現(xiàn)代的緩存》,這樣的現(xiàn)代化緩存架構(gòu)。在文章中Caffeine使用Caffeine設(shè)計(jì)的Window TinyLfu作為回收策略,TinyLfu算法提供了一個(gè)近乎最佳的命中率。類型
key-value型,內(nèi)嵌,本地。客戶端
支持JSR-107標(biāo)準(zhǔn)??梢耘cSpring Cache集成使用。最大元素?cái)?shù)
無(wú)相關(guān)數(shù)據(jù)。數(shù)據(jù)類型
java本身所有的數(shù)據(jù)類型都可以支持。持久化
無(wú)相關(guān)數(shù)據(jù)。監(jiān)控管理
緩存訪問(wèn)統(tǒng)計(jì)功能。緩存穿透、緩存同步
未支持。分布式支持
未支持。
-
Ehcache
介紹
Ehcache是一個(gè)開(kāi)源的、基于標(biāo)準(zhǔn)的緩存,它可以提高性能、減輕數(shù)據(jù)庫(kù)負(fù)載并簡(jiǎn)化可伸縮性。它是使用最廣泛的基于Java的緩存,因?yàn)樗选⒖煽?、功能齊全,并且與其他流行的庫(kù)和框架集成。Ehcache可以從進(jìn)程內(nèi)緩存擴(kuò)展到進(jìn)程內(nèi)/進(jìn)程外混合部署和太字節(jié)大小的緩存。特點(diǎn)
Ehcache是一個(gè)純java的進(jìn)程內(nèi)緩存框架,具有快速、精干的特點(diǎn)。是hibernate默認(rèn)的cacheprovider。支持REST和SOAP api等特點(diǎn)。類型
key-value型,內(nèi)嵌,本地。客戶端
Java或者Jvm上語(yǔ)言??赏ㄟ^(guò)RMI、可插入APi等方式進(jìn)行分布式緩存。最大元素?cái)?shù)
通過(guò)參數(shù)配置。數(shù)據(jù)類型
java本身所有的數(shù)據(jù)類型都可以支持。持久化
可以持久化到硬盤上。監(jiān)控管理
Ehcache最初是由Greg Luck于2003年開(kāi)始開(kāi)發(fā)。2009年,該項(xiàng)目被Terracotta購(gòu)買。軟件仍然是開(kāi)源,但一些新的主要功能只能在商業(yè)產(chǎn)品中使用,其中主要的產(chǎn)品有Big MemoryGo, Big Memory Max, Enterprise Ehcache.其官網(wǎng)有介紹http://www.terracotta.org/products/緩存穿透、緩存同步
可以使用j2cache進(jìn)行二級(jí)緩存設(shè)置。分布式支持
使用Terracotta進(jìn)行集群處理。
-
hazelcast
-
介紹
Hazelcast全稱是Hazelcast IMDG (In-Memory Data Grid),內(nèi)存數(shù)據(jù)網(wǎng)格。新的支持?jǐn)?shù)據(jù)的應(yīng)用程序可以提供變革性的業(yè)務(wù)能力——如果它們滿足當(dāng)今的即時(shí)性要求的話。Hazelcast平臺(tái)允許您通過(guò)跨計(jì)算機(jī)集群訪問(wèn)可擴(kuò)展的共享RAM池來(lái)構(gòu)建最快的應(yīng)用程序。 -
特點(diǎn)
Hazelcast是由Hazelcast公司開(kāi)發(fā)和維護(hù)的開(kāi)源產(chǎn)品,可以為基于jvm環(huán)境運(yùn)行的各種應(yīng)用提供分布式集群和分布式緩存服務(wù)。 -
類型
Key-Value型,本地/遠(yuǎn)程。 -
客戶端
java本身所有的數(shù)據(jù)類型都可以支持。 -
最大元素?cái)?shù)
無(wú)數(shù)據(jù)。 -
數(shù)據(jù)類型
java本身所有的數(shù)據(jù)類型都可以支持。 -
持久化
支持3種持久化策略,Read-Through、Write-Through和Write-Behind。 -
監(jiān)控管理
未找到相關(guān)資料。 -
緩存穿透、緩存同步
可以使用j2cache進(jìn)行二級(jí)緩存設(shè)置。 -
分布式支持
支持Coherence和Terracotta。
-
介紹
-
Apache Ignite
介紹
Apache Ignite內(nèi)存數(shù)組組織框架是一個(gè)高性能、集成和分布式的內(nèi)存計(jì)算和事務(wù)平臺(tái),用于大規(guī)模的數(shù)據(jù)集處理,比傳統(tǒng)的基于磁盤或閃存的技術(shù)具有更高的性能,同時(shí)他還為應(yīng)用和不同的數(shù)據(jù)源之間提供高性能、分布式內(nèi)存中數(shù)據(jù)組織管理的功能。
Ignite來(lái)源于尼基塔·伊萬(wàn)諾夫于2007年創(chuàng)建的GridGain系統(tǒng)公司開(kāi)發(fā)的GridGain軟件,尼基塔領(lǐng)導(dǎo)公司開(kāi)發(fā)了領(lǐng)先的分布式內(nèi)存片內(nèi)數(shù)據(jù)處理技術(shù)-領(lǐng)先的Java內(nèi)存片內(nèi)計(jì)算平臺(tái),今天在全世界每10秒它就會(huì)啟動(dòng)運(yùn)行一次。他有超過(guò)20年的軟件應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn),創(chuàng)建了HPC和中間件平臺(tái),并在一些創(chuàng)業(yè)公司和知名企業(yè)都做出過(guò)貢獻(xiàn),包括Adaptec, Visa和BEA Systems。尼基塔也是使用Java技術(shù)作為服務(wù)器端開(kāi)發(fā)應(yīng)用的先驅(qū)者,1996年他在為歐洲大型系統(tǒng)做集成工作時(shí)他就進(jìn)行了相關(guān)實(shí)踐。
2014年3月,GridGain公司將該軟件90%以上的功能和代碼開(kāi)源,僅在商業(yè)版中保留了高端企業(yè)級(jí)功能,如安全性,數(shù)據(jù)中心復(fù)制,先進(jìn)的管理和監(jiān)控等。2015年1月,GridGain通過(guò)Apache 2.0許可進(jìn)入Apache的孵化器進(jìn)行孵化,很快就于8月25日畢業(yè)并且成為Apache的頂級(jí)項(xiàng)目,9月28日即發(fā)布了1.4.0版,應(yīng)該說(shuō)發(fā)展、迭代速度非常之快。該技術(shù)相關(guān)資料較少,但確是一個(gè)很有潛力的技術(shù),解決了大規(guī)模、大數(shù)據(jù)量、高并發(fā)企業(yè)級(jí)或者互聯(lián)網(wǎng)應(yīng)用面臨的若干痛點(diǎn)。特點(diǎn)
Spark是一個(gè)和Ignite類似的項(xiàng)目。但是Spark聚焦于OLAP,而Ignite憑借強(qiáng)大的事務(wù)處理能力在混合型的OLTP/ OLAP場(chǎng)景中表現(xiàn)更好。特別是針對(duì)Hadoop,Ignite將為現(xiàn)有的Map/Reduce,Pig或Hive作業(yè)提供即插即用式的加速,避免了推倒重來(lái)的做法,而Spark需要先做數(shù)據(jù)ETL,更適合新寫的分析應(yīng)用。類型
Key-Value型,本地/遠(yuǎn)程。客戶端
使用語(yǔ)言api和rest api進(jìn)行操作。最大元素?cái)?shù)
PB級(jí)數(shù)據(jù)數(shù)據(jù)類型
java本身所有的數(shù)據(jù)類型都可以支持。持久化
持久化到磁盤。監(jiān)控管理
自身就支持監(jiān)控。緩存穿透、緩存同步
使用j2cache進(jìn)行緩存穿透。分布式支持
自身支持集群。
-
LevelDB
介紹
LevelDB是一個(gè)由Google編寫的快捷鍵值存儲(chǔ)庫(kù),它提供了從字符串鍵到字符串值的有序映射。2013年Facebook基于LevelDB開(kāi)發(fā)出RocksDB,特別針對(duì)服務(wù)器負(fù)載而優(yōu)化。特點(diǎn)
LevelDB 只是一個(gè) C/C++ 編程語(yǔ)言的庫(kù), 不包含網(wǎng)絡(luò)服務(wù)封裝, 所以無(wú)法像一般意義的存儲(chǔ)服務(wù)器(如 MySQL)那樣, 用客戶端來(lái)連接它. LevelDB 自己也聲明, 使用者應(yīng)該封裝自己的網(wǎng)絡(luò)服務(wù)器.類型
key-value型,遠(yuǎn)程。客戶端
需要自行封裝。最大元素?cái)?shù)
LevelDB 是單進(jìn)程的服務(wù),性能非常之高,在一臺(tái)4核Q6600的CPU機(jī)器上,每秒鐘寫數(shù)據(jù)超過(guò)40w,而隨機(jī)讀的性能每秒鐘超過(guò)10w。 此處隨機(jī)讀是完全命中內(nèi)存的速度,如果是不命中速度大大下降。數(shù)據(jù)類型
持久化
LevelDB底層存儲(chǔ)利用了LSM tree的思想, RocksDB是Facebook基于LevelDB開(kāi)發(fā)的存儲(chǔ)引擎,針對(duì)LevelDB做了很多優(yōu)化,但是大部分模塊的實(shí)現(xiàn)機(jī)制是一樣的。監(jiān)控管理
未找到相關(guān)資料。緩存穿透、緩存同步
未找到相關(guān)資料。分布式支持
leveldb是google開(kāi)源的單機(jī)key-value存儲(chǔ)引擎。
-
alibaba tair
-
介紹
Tair是快速訪問(wèn)內(nèi)存(MDB)/持久性(LDB)存儲(chǔ)服務(wù)。Tair采用高性能、高可用的分布式集群體系結(jié)構(gòu),能夠滿足企業(yè)對(duì)讀寫性能和可擴(kuò)展容量的高要求。 -
特點(diǎn)
一個(gè) Tair 集群主要包括3個(gè)必選模塊:ConfigServer、Dataserver和 Client. -
類型
key-value型,遠(yuǎn)程。 -
客戶端
Java -
最大元素?cái)?shù)
資料不全。 -
數(shù)據(jù)類型
java本身所有的數(shù)據(jù)類型都可以支持。 -
持久化
Tair 的存儲(chǔ)引擎有一個(gè)抽象層,只要滿足存儲(chǔ)引擎需要的接口,便可以很方便地替換 Tair 底層的存儲(chǔ)引擎。比如你可以很方便地將 bdb、tc 甚至 MySQL 作為 Tair 的存儲(chǔ)引擎,而同時(shí)使用 Tair 的分布方式、同步等特性。 -
監(jiān)控管理
資料不全。 -
緩存穿透、緩存同步
資料不全。 -
分布式支持
本身就是分布式的。
-
介紹
總結(jié)
緩存技術(shù)有很多中,但是每個(gè)緩存技術(shù)都有自己的特點(diǎn)。最強(qiáng)大的是Apache Ignite把緩存做成了Cache as a Service(CaaS) 緩存即服務(wù)。下來(lái)就是幾個(gè)獨(dú)立的緩存數(shù)據(jù)庫(kù):alibaba tair,redis,memcache,etcd。內(nèi)嵌式的緩存有Hazelcast,Ehcache,Guava Cache,H2 Database。在這些技術(shù)中還有兩種可以支持IMGD (In-Memory Data Grid內(nèi)存數(shù)據(jù)網(wǎng)格)的兩種Apache Ignite,Hazelcast。Apache Ignite還可以支持網(wǎng)格計(jì)算的緩存。Apache Ignite還有蘇寧 11.11:基于 Apache Ignite 日均十億數(shù)據(jù)對(duì)賬實(shí)踐應(yīng)用這樣的實(shí)踐應(yīng)用。
不要將所有的壓力、吞吐都?jí)涸跀?shù)據(jù)庫(kù)上,因?yàn)閿?shù)據(jù)庫(kù)理論上是有限制的。其他還有像zookeeper,mysql memory database,sqlite3,Berkeley DB服務(wù)可以作為緩存使用。
參考
【分布式存儲(chǔ)】CAP、BASE與ACID原則
Memcache,Redis,MongoDB(數(shù)據(jù)緩存系統(tǒng))方案對(duì)比與分析
緩存那些事
Tair
Etcd官方文檔中文版
阿里云Redis開(kāi)發(fā)規(guī)范
Apache Ignite 初探
Apache Ignite中文網(wǎng)
Guava Cache使用介紹
etcd:從應(yīng)用場(chǎng)景到實(shí)現(xiàn)原理的全方位解讀
H2 Database簡(jiǎn)介
緩存篇 : Guava cache 之全面剖析
用 Terracotta 實(shí)現(xiàn) Master-Worker
Hazelcast介紹和優(yōu)勢(shì)
Apache Ignite簡(jiǎn)介以及Ignite和Coherence、Gemfire、Redis等的比較