微服務(wù)實(shí)踐01--微服務(wù)管理11--緩存01--技術(shù)

微服務(wù)實(shí)踐目錄送膳,可以參見連接豺撑。

作者的公眾號胁澳,之后文章都會先發(fā)公眾號

緩存系列包括:
1.微服務(wù)管理-11.緩存概述
1.微服務(wù)管理-11.緩存-0.技術(shù)
1.微服務(wù)管理-11.緩存-1.多級緩存設(shè)計
1.微服務(wù)管理-11.緩存-2.典型緩存架構(gòu)設(shè)計
1.微服務(wù)管理-11.緩存-3.實(shí)踐
1.微服務(wù)管理-11.緩存-4.總結(jié)

背景

隨著互聯(lián)網(wǎng)的普及胎围,內(nèi)容信息越來越復(fù)雜紊婉,用戶數(shù)和訪問量越來越大药版,我們的應(yīng)用需要支撐更多的并發(fā)量。對于一個計算機(jī)系統(tǒng)來說輸入喻犁、輸出刚陡、計算、存儲都需要不斷的擴(kuò)展株汉,從原來的單臺機(jī)器擴(kuò)展到多臺機(jī)器以增強(qiáng)系統(tǒng)的輸入筐乳、輸出、計算乔妈、存儲能力蝙云。在硬件上以多臺廉價機(jī)器替換單臺的昂貴服務(wù)器的趨勢已經(jīng)從GFS、云計算領(lǐng)域的興起而不斷的被應(yīng)用在實(shí)踐中路召。相對于硬件基礎(chǔ)設(shè)施來說勃刨,軟件基礎(chǔ)設(shè)施也跟隨者小型化、廉價化的趨勢在不斷的分裂發(fā)展股淡。從軟件基礎(chǔ)層面上有使用分布式的方式解決輸入身隐、輸出、計算唯灵、存儲能力的問題贾铝。

軟件基礎(chǔ)設(shè)施方面的輸入可以使用 OpenResty這種可以高度定制化的接入服務(wù),輸出可以使用CDN、P2P這樣的分發(fā)網(wǎng)絡(luò)進(jìn)行垢揩。計算可以使用微服務(wù)玖绿,分布式計算解決差異化、大批量計算的問題叁巨。存儲方面的發(fā)展對于其他方面來說相對比較緩慢斑匪。近些年不斷提出存儲方面的特定場景解決方案:大數(shù)據(jù)存儲與計算方案,NewSql的關(guān)系型存儲解決方案锋勺,文檔型存儲解決方案等蚀瘸。但業(yè)內(nèi)對于非關(guān)系型數(shù)據(jù)庫的研究與應(yīng)用還是處于不是很穩(wěn)定的階段,菲關(guān)系型數(shù)據(jù)庫一方面解決存儲性能的問題庶橱,一方面有被CAP所限制贮勃。所以出現(xiàn)了BASE這種對CAP進(jìn)行權(quán)衡的方式。

從存儲的基本理論(ACID悬包,CAP,BASE)可以得出存儲的可伸縮性馍乙、性能等方面是有理論約束的布近。不能將系統(tǒng)所要求的并發(fā)量、響應(yīng)時間等壓在數(shù)據(jù)庫的能力上丝格,所以緩存技術(shù)再一次被提上桌面撑瞧。

數(shù)據(jù)庫每秒能接受的請求次數(shù)也是有限的(或者文件的讀寫也是有限的),但是我們不可能把我們的持久化技術(shù)不不實(shí)用數(shù)據(jù)庫显蝌。所以预伺,如何能夠有效利用有限的資源來提供盡可能大的吞吐量?就成為數(shù)據(jù)庫在軟件系統(tǒng)中的最主要責(zé)任曼尊。一個有效的辦法就是引入緩存酬诀,打破標(biāo)準(zhǔn)流程,每個環(huán)節(jié)中請求可以從緩存中直接獲取目標(biāo)數(shù)據(jù)并返回骆撇,從而減少計算量瞒御,有效提升響應(yīng)速度,讓有限的資源服務(wù)更多的用戶神郊。

技術(shù)對比

我們這里討論的緩存技術(shù)是針對數(shù)據(jù)管理與數(shù)據(jù)存儲方面的技術(shù)肴裙。不包括像瀏覽器緩存,cdn緩存涌乳,nginx緩存這樣的技術(shù)蜻懦。從這個角度說,所有的內(nèi)存式數(shù)據(jù)庫都可以作為緩存使用夕晓。下圖為google查詢緩存技術(shù)的趨勢圖:

緩存技術(shù)活躍趨勢

在緩存技術(shù)剛出現(xiàn)的那幾年宛乃,memcache和redis是不相上下的。后來redis異軍突起,其他的緩存技術(shù)已經(jīng)不可與redis同日而語烤惊。但對于技術(shù)來說乔煞,不同的技術(shù)有不同的側(cè)重點(diǎn)有自己所適用的場景。所以對于每項(xiàng)技術(shù)都需要有一些了解柒室。
對于緩存技術(shù)有一些通用的特性渡贾,還有一些自己的特點(diǎn)。所以本文會從通用的角度對比幾個現(xiàn)在可以看到的雄右,會從不同的方面進(jìn)行對比空骚。具體指標(biāo)有:客戶端,分布式支撐擂仍,命中率囤屹,最大元素數(shù),換入換出策略逢渔,數(shù)據(jù)類型肋坚,持久化,監(jiān)控管理肃廓,緩存穿透支持智厌,標(biāo)準(zhǔn)規(guī)范(JSR-107 JAVA緩存規(guī)范)

  • redis

    • 介紹
      Redis是一個開源(BSD許可)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲,用作數(shù)據(jù)庫盲赊、緩存和消息代理铣鹏。它支持?jǐn)?shù)據(jù)結(jié)構(gòu),如字符串哀蘑、哈希诚卸、列表、集合绘迁、帶范圍查詢的排序集合合溺、位圖、超日志缀台、帶半徑查詢的地理空間索引和流辫愉。Redis具有內(nèi)置的復(fù)制、Lua腳本将硝、LRU逐出恭朗、事務(wù)和不同級別的磁盤持久性,并通過Redis Sentinel和帶有Redis集群的自動分區(qū)提供高可用性依疼。

    • 特點(diǎn)
      Redis能讀的速度是110000次/s,寫的速度是81000次/s 痰腮。Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全并后的原子性執(zhí)行律罢。Redis還支持 publish/subscribe, 通知, key 過期等等特性膀值」髫ぃ可以使用命令行進(jìn)行非常容易的操作。Redis支持Lua腳本擴(kuò)展功能沧踏。

    • 類型
      key-value型歌逢,遠(yuǎn)程服務(wù)。

    • 客戶端
      多種宿主語言客戶端支持翘狱,客戶端還可以支持JSR-107標(biāo)準(zhǔn)秘案。可以參見:https://redis.io/clients

    • 最大元素數(shù)
      Redis最大支持的Key大小潦匈、Value大小都為512MB阱高。最多可以建立2^32個key,經(jīng)過實(shí)踐測試茬缩,每個實(shí)例至少可以處理2.5億個key赤惊。每個hash,list凰锡,set和sort set都可以容納2^32個元素未舟。可以參見: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,禁止持久化海铆〖?郑可以參見:https://redis.io/topics/persistence
      換出策略支持多種:lru,lfu卧斟,fifo殴边。可以參見: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本身是未支持的緩存穿透與緩存同步的功能,需要使用第三方組建完成刺啦×籼兀可以使用阿里的canal。

    • 分布式支持
      Redis支持復(fù)制(replication)洪燥、Sentinel 和集群(cluster)三個多機(jī)功能磕秤。可以支持一致性Hash算法進(jìn)行數(shù)據(jù)的分片工作捧韵。

  • Memcached

    • 介紹
      Memcached是免費(fèi)開放源代碼市咆、高性能、分布式內(nèi)存對象緩存系統(tǒng)再来,本質(zhì)上是通用的蒙兰,但旨在通過減輕數(shù)據(jù)庫負(fù)載來加速動態(tài)web應(yīng)用程序。Memcached是內(nèi)存中的鍵值存儲芒篷,用于存儲數(shù)據(jù)庫調(diào)用搜变、API調(diào)用或頁面呈現(xiàn)結(jié)果中的任意小塊數(shù)據(jù)(字符串、對象)针炉。Memcached簡單但功能強(qiáng)大挠他。它的簡單設(shè)計促進(jìn)了快速部署却嗡,易于開發(fā)漠其,并解決了大型數(shù)據(jù)緩存面臨的許多問題。它的API可用于大多數(shù)流行語言荧恍。

    • 特點(diǎn)
      Memcached 是單進(jìn)程多線程的工作模式镰烧,請求到達(dá)時拢军,主線程會將請求分發(fā)給多個工作線程,因此必須要做數(shù)據(jù)的互斥怔鳖。memcached每秒可以輕松處理200,000+個請求茉唉。使用libevent提供事件驅(qū)動能力。資料比較難找结执。

    • 類型
      key-value型度陆,遠(yuǎn)程服務(wù)。

    • 客戶端
      多種宿主語言客戶端支持献幔。

    • 最大元素數(shù)
      Memcached單個key-value大小有限懂傀,一個value最大只支持1MB。MemCache中可以保存的item數(shù)據(jù)量是沒有限制的斜姥,只要內(nèi)存足夠鸿竖。MemCache單進(jìn)程在32位機(jī)中最大使用內(nèi)存為2G沧竟,這個之前的文章提了多次了,64位機(jī)則沒有限制缚忧。

    • 數(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本身是未支持的緩存穿透與緩存同步的功能持钉,需要使用第三方組建完成衡招。可以使用阿里的canal每强。

    • 分布式支持
      各個memcached服務(wù)器之間互不通信始腾,各自獨(dú)立存取數(shù)據(jù),不共享任何信息空执。服務(wù)器并不具有分布式功能浪箭,分布式部署取決于memcache客戶端。

  • etcd

    • 介紹
      etcd是一個分布式鍵值對存儲辨绊,設(shè)計用來可靠而快速的保存關(guān)鍵數(shù)據(jù)并提供訪問奶栖。通過分布式鎖,leader選舉和寫屏障(write barriers)來實(shí)現(xiàn)可靠的分布式協(xié)作门坷。etcd集群是為高可用宣鄙,持久性數(shù)據(jù)存儲和檢索而準(zhǔn)備。
      您的應(yīng)用程序可以讀取數(shù)據(jù)并將數(shù)據(jù)寫入etcd拜鹤。一個簡單的用例是將數(shù)據(jù)庫連接細(xì)節(jié)或特性標(biāo)志作為鍵值對存儲在etcd中框冀。這些值可以被監(jiān)視流椒,允許應(yīng)用程序在更改時重新配置自身敏簿。高級使用利用etcd的一致性保證來實(shí)現(xiàn)數(shù)據(jù)庫領(lǐng)導(dǎo)人選舉或跨工作集群執(zhí)行分布式鎖定。

    • 特點(diǎn)
      etcd提供了leader選舉宣虾、分布式時鐘惯裕、分布式鎖、持續(xù)監(jiān)控(watch)和集群內(nèi)各個成員的liveness監(jiān)控等功能绣硝。zookeer雖然也實(shí)現(xiàn)了類似的功能蜻势,但是不方便易用,還需借助Netflix提供的Apache Curator庫鹉胖。
      etcd比較多的應(yīng)用場景是用于服務(wù)發(fā)現(xiàn)握玛。etcd是CoreOS團(tuán)隊于2013年6月發(fā)起的開源項(xiàng)目够傍,它的目標(biāo)是構(gòu)建一個高可用的分布式鍵值(key-value)數(shù)據(jù)庫。etcd內(nèi)部采用raft協(xié)議作為一致性算法挠铲,etcd基于Go語言實(shí)現(xiàn)冕屯。安裝配置簡單,而且提供了HTTP API進(jìn)行交互拂苹,使用也很簡單安聘。根據(jù)官方提供的benchmark數(shù)據(jù),單實(shí)例支持每秒2k+讀操作瓢棒。

    • 類型
      key-value型浴韭,遠(yuǎn)程服務(wù)。

    • 客戶端
      多種宿主語言客戶端支持脯宿∧罹保可以參見:https://etcd.io/docs/v3.4.0/integrations/

    • 最大元素數(shù)
      etcd旨在處理典型的元數(shù)據(jù)小鍵值對。默認(rèn)情況下连霉,任何請求的最大大小為1.5 MiB舍肠。 可以通過etcd服務(wù)器的--max-request-bytes標(biāo)志配置此限制。默認(rèn)的存儲大小限制為2GB窘面,可使用--quota-backend-bytes標(biāo)志進(jìn)行配置翠语。 建議在正常環(huán)境下使用8GB的最大大小〔票撸可以參見:https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/limit.md

    • 數(shù)據(jù)類型
      因?yàn)槭褂胔ttp api的方式進(jìn)行數(shù)據(jù)管理肌括,所以對于數(shù)據(jù)類型的直接支持就只有String類型。

    • 持久化
      Etcd 就會在默認(rèn)的工作目錄下生成兩個子目錄:snap 和 wal酣难。兩個目錄的作用說明如下谍夭。
      snap:用于存放快照數(shù)據(jù)。Etcd 為防止 WAL 文件過多會創(chuàng)建快照憨募,snap 用于存儲 Etcd 的快照數(shù)據(jù)狀態(tài)紧索。
      wal:用于存放預(yù)寫式日志,其最大的作用是記錄整個數(shù)據(jù)變化的全部歷程菜谣。在 Etcd 中珠漂,所有數(shù)據(jù)的修改在提交前,都要先寫入 WAL 中尾膊。使用 WAL 進(jìn)行數(shù)據(jù)的存儲使得 Etcd 擁有故障快速回復(fù)和數(shù)據(jù)回滾這兩個重要功能媳危。

    • 監(jiān)控管理
      etcd因?yàn)樗膋8s體系的原因,可以直接使用 Prometheus
      進(jìn)行監(jiān)控冈敛。并且為其提供了完整的指標(biāo)體系待笑。可以參見:https://etcd.io/docs/v3.4.0/metrics/

    • 緩存穿透抓谴、緩存同步
      主要針對服務(wù)發(fā)現(xiàn)場景暮蹂,所以這方面的考慮應(yīng)該較少寞缝。因?yàn)槲覜]有找到etcd關(guān)于這方面的資料。

    • 分布式支持
      集群方式類似與zookeeper仰泻。

  • H2 Database

    • 介紹
      H2是一個Java編寫的關(guān)系型數(shù)據(jù)庫第租,它可以被嵌入Java應(yīng)用程序中使用,或者作為一個單獨(dú)的數(shù)據(jù)庫服務(wù)器運(yùn)行我纪。H2數(shù)據(jù)庫的前身是HypersonicSQL慎宾,它的名字的含義是 Hypersonic2,但是它的代碼是從頭開始編寫的浅悉,沒有使用HypersonicSQL或者HSQLDB的代碼趟据。

    • 特點(diǎn)
      H2 Database是一個開源的嵌入式數(shù)據(jù)庫引擎,采用java語言編寫术健,不受平臺的限制汹碱,同時H2 Database提供了一個十分方便的web控制臺用于操作和管理數(shù)據(jù)庫內(nèi)容。H2 Database還提供兼容模式荞估,可以兼容一些主流的數(shù)據(jù)庫咳促,因此采用H2 Database作為開發(fā)期的數(shù)據(jù)庫非常方便。

    • 類型
      RDBMS勘伺,內(nèi)嵌跪腹,本地。

    • 客戶端
      因?yàn)閔2使用java編寫的內(nèi)嵌式數(shù)據(jù)庫飞醉,所以對于java的支持冲茸,或jvm上語言支持較好。

    • 最大元素數(shù)

    • 數(shù)據(jù)類型
      基本支持所有的sql數(shù)據(jù)類型缅帘。

    • 持久化
      支持單個文件獨(dú)立存儲轴术。

    • 監(jiān)控管理
      提供界面化操作。

    • 緩存穿透钦无、緩存同步
      未知逗栽。

    • 分布式支持
      支持集群∈г荩可以參見:http://www.h2database.com/html/advanced.html#clustering

  • Guava Cache

    • 介紹
      Guava是google的一個開源java框架彼宠。guava工程包含了若干被Google的 Java項(xiàng)目廣泛依賴的核心庫,例如:集合 [collections] 趣席、緩存 [caching] 兵志、原生類型支持 [primitives support] 醇蝴、并發(fā)庫 [concurrency libraries] 宣肚、通用注解 [common annotations] 、字符串處理 [string processing] 悠栓、I/O 等等霉涨。 所有這些工具每天都在被Google的工程師應(yīng)用在產(chǎn)品服務(wù)中按价。

    • 特點(diǎn)
      Guava Cache是在內(nèi)存中緩存數(shù)據(jù),相比較于數(shù)據(jù)庫或redis存儲笙瑟,訪問內(nèi)存中的數(shù)據(jù)會更加高效楼镐。Guava官網(wǎng)介紹,下面的這幾種情況可以考慮使用Guava Cache:愿意消耗一些內(nèi)存空間來提升速度往枷。預(yù)料到某些鍵會被多次查詢框产。緩存中存放的數(shù)據(jù)總量不會超出內(nèi)存容量。

    • 類型
      key-value型错洁,內(nèi)嵌秉宿,本地。

    • 客戶端
      java以及JVM上語言屯碴。

    • 最大元素數(shù)
      未找到最大實(shí)際測試數(shù)據(jù)描睦。但是有文章說可能會造成oom的問題。GuavaCache支持四種回收方式: (1)基于容量回收(Size-based Eviction)导而;(2)基于時間回收(Timed Eviction)忱叭;(3)基于引用類型的回收Reference-based Eviction);(4)手動回收今艺。 4. 它可以監(jiān)控加載/命中情況韵丑。

    • 數(shù)據(jù)類型
      java本身所有的數(shù)據(jù)類型都可以支持。

    • 持久化
      Guava Cache不持久化數(shù)據(jù)虚缎。

    • 監(jiān)控管理
      不支持埂息。CacheBuilder.recordStats()用來開啟Guava Cache的統(tǒng)計功能。

    • 緩存穿透遥巴、緩存同步
      未支持千康。

    • 分布式支持
      需要自己實(shí)現(xiàn)。

  • Caffeine

    • 介紹
      Caffeine使用的是一個內(nèi)存緩存铲掐,是基于Google 的 Guava與ConcurrentLinkedHashMap進(jìn)行實(shí)現(xiàn)的拾弃。Caffeine是一個開源的Java緩存庫,它能提供高命中率和出色的并發(fā)能力摆霉。

    • 特點(diǎn)
      Caffeine提出了《設(shè)計一個現(xiàn)代的緩存》豪椿,這樣的現(xiàn)代化緩存架構(gòu)。在文章中Caffeine使用Caffeine設(shè)計的Window TinyLfu作為回收策略携栋,TinyLfu算法提供了一個近乎最佳的命中率搭盾。

    • 類型
      key-value型,內(nèi)嵌婉支,本地鸯隅。

    • 客戶端
      支持JSR-107標(biāo)準(zhǔn)。可以與Spring Cache集成使用蝌以。

    • 最大元素數(shù)
      無相關(guān)數(shù)據(jù)炕舵。

    • 數(shù)據(jù)類型
      java本身所有的數(shù)據(jù)類型都可以支持。

    • 持久化
      無相關(guān)數(shù)據(jù)跟畅。

    • 監(jiān)控管理
      緩存訪問統(tǒng)計功能咽筋。

    • 緩存穿透、緩存同步
      未支持徊件。

    • 分布式支持
      未支持奸攻。

  • Ehcache

    • 介紹
      Ehcache是一個開源的、基于標(biāo)準(zhǔn)的緩存虱痕,它可以提高性能舞箍、減輕數(shù)據(jù)庫負(fù)載并簡化可伸縮性。它是使用最廣泛的基于Java的緩存皆疹,因?yàn)樗咽栝稀⒖煽俊⒐δ荦R全略就,并且與其他流行的庫和框架集成捎迫。Ehcache可以從進(jìn)程內(nèi)緩存擴(kuò)展到進(jìn)程內(nèi)/進(jìn)程外混合部署和太字節(jié)大小的緩存。

    • 特點(diǎn)
      Ehcache是一個純java的進(jìn)程內(nèi)緩存框架表牢,具有快速窄绒、精干的特點(diǎn)。是hibernate默認(rèn)的cacheprovider崔兴。支持REST和SOAP api等特點(diǎn)彰导。

    • 類型
      key-value型,內(nèi)嵌敲茄,本地位谋。

    • 客戶端
      Java或者Jvm上語言⊙吡牵可通過RMI掏父、可插入APi等方式進(jìn)行分布式緩存。

    • 最大元素數(shù)
      通過參數(shù)配置秆剪。

    • 數(shù)據(jù)類型
      java本身所有的數(shù)據(jù)類型都可以支持赊淑。

    • 持久化
      可以持久化到硬盤上。

    • 監(jiān)控管理
      Ehcache最初是由Greg Luck于2003年開始開發(fā)仅讽。2009年,該項(xiàng)目被Terracotta購買陶缺。軟件仍然是開源,但一些新的主要功能只能在商業(yè)產(chǎn)品中使用,其中主要的產(chǎn)品有Big MemoryGo, Big Memory Max, Enterprise Ehcache.其官網(wǎng)有介紹http://www.terracotta.org/products/

    • 緩存穿透洁灵、緩存同步
      可以使用j2cache進(jìn)行二級緩存設(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)今的即時性要求的話蛛砰。Hazelcast平臺允許您通過跨計算機(jī)集群訪問可擴(kuò)展的共享RAM池來構(gòu)建最快的應(yīng)用程序罐栈。
    • 特點(diǎn)
      Hazelcast是由Hazelcast公司開發(fā)和維護(hù)的開源產(chǎn)品黍衙,可以為基于jvm環(huán)境運(yùn)行的各種應(yīng)用提供分布式集群和分布式緩存服務(wù)。
    • 類型
      Key-Value型荠诬,本地/遠(yuǎn)程琅翻。
    • 客戶端
      java本身所有的數(shù)據(jù)類型都可以支持。
    • 最大元素數(shù)
      無數(shù)據(jù)柑贞。
    • 數(shù)據(jù)類型
      java本身所有的數(shù)據(jù)類型都可以支持方椎。
    • 持久化
      支持3種持久化策略,Read-Through钧嘶、Write-Through和Write-Behind棠众。
    • 監(jiān)控管理
      未找到相關(guān)資料。
    • 緩存穿透有决、緩存同步
      可以使用j2cache進(jìn)行二級緩存設(shè)置闸拿。
    • 分布式支持
      支持Coherence和Terracotta。
  • Apache Ignite

    • 介紹
      Apache Ignite內(nèi)存數(shù)組組織框架是一個高性能书幕、集成和分布式的內(nèi)存計算和事務(wù)平臺新荤,用于大規(guī)模的數(shù)據(jù)集處理,比傳統(tǒng)的基于磁盤或閃存的技術(shù)具有更高的性能台汇,同時他還為應(yīng)用和不同的數(shù)據(jù)源之間提供高性能苛骨、分布式內(nèi)存中數(shù)據(jù)組織管理的功能。
      Ignite來源于尼基塔·伊萬諾夫于2007年創(chuàng)建的GridGain系統(tǒng)公司開發(fā)的GridGain軟件苟呐,尼基塔領(lǐng)導(dǎo)公司開發(fā)了領(lǐng)先的分布式內(nèi)存片內(nèi)數(shù)據(jù)處理技術(shù)-領(lǐng)先的Java內(nèi)存片內(nèi)計算平臺痒芝,今天在全世界每10秒它就會啟動運(yùn)行一次。他有超過20年的軟件應(yīng)用開發(fā)經(jīng)驗(yàn)牵素,創(chuàng)建了HPC和中間件平臺吼野,并在一些創(chuàng)業(yè)公司和知名企業(yè)都做出過貢獻(xiàn),包括Adaptec, Visa和BEA Systems两波。尼基塔也是使用Java技術(shù)作為服務(wù)器端開發(fā)應(yīng)用的先驅(qū)者瞳步,1996年他在為歐洲大型系統(tǒng)做集成工作時他就進(jìn)行了相關(guān)實(shí)踐。
      2014年3月腰奋,GridGain公司將該軟件90%以上的功能和代碼開源单起,僅在商業(yè)版中保留了高端企業(yè)級功能,如安全性劣坊,數(shù)據(jù)中心復(fù)制嘀倒,先進(jìn)的管理和監(jiān)控等。2015年1月,GridGain通過Apache 2.0許可進(jìn)入Apache的孵化器進(jìn)行孵化测蘑,很快就于8月25日畢業(yè)并且成為Apache的頂級項(xiàng)目灌危,9月28日即發(fā)布了1.4.0版,應(yīng)該說發(fā)展碳胳、迭代速度非常之快勇蝙。該技術(shù)相關(guān)資料較少,但確是一個很有潛力的技術(shù)挨约,解決了大規(guī)模味混、大數(shù)據(jù)量、高并發(fā)企業(yè)級或者互聯(lián)網(wǎng)應(yīng)用面臨的若干痛點(diǎn)诫惭。

    • 特點(diǎn)
      Spark是一個和Ignite類似的項(xiàng)目翁锡。但是Spark聚焦于OLAP,而Ignite憑借強(qiáng)大的事務(wù)處理能力在混合型的OLTP/ OLAP場景中表現(xiàn)更好夕土。特別是針對Hadoop馆衔,Ignite將為現(xiàn)有的Map/Reduce,Pig或Hive作業(yè)提供即插即用式的加速怨绣,避免了推倒重來的做法角溃,而Spark需要先做數(shù)據(jù)ETL,更適合新寫的分析應(yīng)用梨熙。

    • 類型
      Key-Value型开镣,本地/遠(yuǎn)程。

    • 客戶端
      使用語言api和rest api進(jìn)行操作咽扇。

    • 最大元素數(shù)
      PB級數(shù)據(jù)

    • 數(shù)據(jù)類型
      java本身所有的數(shù)據(jù)類型都可以支持邪财。

    • 持久化
      持久化到磁盤。

    • 監(jiān)控管理
      自身就支持監(jiān)控质欲。

    • 緩存穿透树埠、緩存同步
      使用j2cache進(jìn)行緩存穿透。

    • 分布式支持
      自身支持集群嘶伟。

  • LevelDB

    • 介紹
      LevelDB是一個由Google編寫的快捷鍵值存儲庫怎憋,它提供了從字符串鍵到字符串值的有序映射。2013年Facebook基于LevelDB開發(fā)出RocksDB九昧,特別針對服務(wù)器負(fù)載而優(yōu)化绊袋。

    • 特點(diǎn)
      LevelDB 只是一個 C/C++ 編程語言的庫, 不包含網(wǎng)絡(luò)服務(wù)封裝, 所以無法像一般意義的存儲服務(wù)器(如 MySQL)那樣, 用客戶端來連接它. LevelDB 自己也聲明, 使用者應(yīng)該封裝自己的網(wǎng)絡(luò)服務(wù)器.

    • 類型
      key-value型,遠(yuǎn)程铸鹰。

    • 客戶端
      需要自行封裝癌别。

    • 最大元素數(shù)
      LevelDB 是單進(jìn)程的服務(wù),性能非常之高蹋笼,在一臺4核Q6600的CPU機(jī)器上展姐,每秒鐘寫數(shù)據(jù)超過40w躁垛,而隨機(jī)讀的性能每秒鐘超過10w。 此處隨機(jī)讀是完全命中內(nèi)存的速度圾笨,如果是不命中速度大大下降教馆。

    • 數(shù)據(jù)類型

    • 持久化
      LevelDB底層存儲利用了LSM tree的思想, RocksDB是Facebook基于LevelDB開發(fā)的存儲引擎擂达,針對LevelDB做了很多優(yōu)化土铺,但是大部分模塊的實(shí)現(xiàn)機(jī)制是一樣的。

    • 監(jiān)控管理
      未找到相關(guān)資料谍婉。

    • 緩存穿透舒憾、緩存同步
      未找到相關(guān)資料镀钓。

    • 分布式支持
      leveldb是google開源的單機(jī)key-value存儲引擎穗熬。

  • alibaba tair

    • 介紹
      Tair是快速訪問內(nèi)存(MDB)/持久性(LDB)存儲服務(wù)。Tair采用高性能丁溅、高可用的分布式集群體系結(jié)構(gòu)唤蔗,能夠滿足企業(yè)對讀寫性能和可擴(kuò)展容量的高要求。
    • 特點(diǎn)
      一個 Tair 集群主要包括3個必選模塊:ConfigServer窟赏、Dataserver和 Client.
    • 類型
      key-value型妓柜,遠(yuǎn)程。
    • 客戶端
      Java
    • 最大元素數(shù)
      資料不全涯穷。
    • 數(shù)據(jù)類型
      java本身所有的數(shù)據(jù)類型都可以支持棍掐。
    • 持久化
      Tair 的存儲引擎有一個抽象層,只要滿足存儲引擎需要的接口拷况,便可以很方便地替換 Tair 底層的存儲引擎作煌。比如你可以很方便地將 bdb、tc 甚至 MySQL 作為 Tair 的存儲引擎赚瘦,而同時使用 Tair 的分布方式粟誓、同步等特性。
    • 監(jiān)控管理
      資料不全起意。
    • 緩存穿透鹰服、緩存同步
      資料不全。
    • 分布式支持
      本身就是分布式的揽咕。

總結(jié)

緩存技術(shù)有很多中悲酷,但是每個緩存技術(shù)都有自己的特點(diǎn)。最強(qiáng)大的是Apache Ignite把緩存做成了Cache as a Service(CaaS) 緩存即服務(wù)亲善。下來就是幾個獨(dú)立的緩存數(shù)據(jù)庫: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)格計算的緩存肋僧。Apache Ignite還有蘇寧 11.11:基于 Apache Ignite 日均十億數(shù)據(jù)對賬實(shí)踐應(yīng)用這樣的實(shí)踐應(yīng)用。

不要將所有的壓力控淡、吞吐都壓在數(shù)據(jù)庫上嫌吠,因?yàn)閿?shù)據(jù)庫理論上是有限制的。其他還有像zookeeper掺炭,mysql memory database辫诅,sqlite3,Berkeley DB服務(wù)可以作為緩存使用涧狮。

參考

【分布式存儲】CAP炕矮、BASE與ACID原則
Memcache,Redis,MongoDB(數(shù)據(jù)緩存系統(tǒng))方案對比與分析
緩存那些事
Tair
Etcd官方文檔中文版
阿里云Redis開發(fā)規(guī)范
Apache Ignite 初探
Apache Ignite中文網(wǎng)
Guava Cache使用介紹
etcd:從應(yīng)用場景到實(shí)現(xiàn)原理的全方位解讀
H2 Database簡介
緩存篇 : Guava cache 之全面剖析
用 Terracotta 實(shí)現(xiàn) Master-Worker
Hazelcast介紹和優(yōu)勢
Apache Ignite簡介以及Ignite和Coherence、Gemfire者冤、Redis等的比較

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肤视,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涉枫,更是在濱河造成了極大的恐慌邢滑,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愿汰,死亡現(xiàn)場離奇詭異困后,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)尼桶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門操灿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泵督,你說我怎么就攤上這事趾盐。” “怎么了小腊?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵救鲤,是天一觀的道長。 經(jīng)常有香客問我秩冈,道長本缠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任入问,我火速辦了婚禮丹锹,結(jié)果婚禮上稀颁,老公的妹妹穿的比我還像新娘。我一直安慰自己楣黍,他們只是感情好匾灶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著租漂,像睡著了一般阶女。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哩治,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天秃踩,我揣著相機(jī)與錄音,去河邊找鬼业筏。 笑死憔杨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的驾孔。 我是一名探鬼主播芍秆,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼惯疙,長吁一口氣:“原來是場噩夢啊……” “哼翠勉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起霉颠,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤对碌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蒿偎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朽们,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年诉位,在試婚紗的時候發(fā)現(xiàn)自己被綠了骑脱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡苍糠,死狀恐怖叁丧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情岳瞭,我是刑警寧澤拥娄,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站瞳筏,受9級特大地震影響稚瘾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜姚炕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一摊欠、第九天 我趴在偏房一處隱蔽的房頂上張望丢烘。 院中可真熱鬧,春花似錦些椒、人聲如沸铅协。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狐史。三九已至,卻和暖如春说墨,著一層夾襖步出監(jiān)牢的瞬間骏全,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工尼斧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姜贡,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓棺棵,卻偏偏與公主長得像楼咳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子烛恤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容