田玉靖++張晨光++任女爾
摘要:Redis具備高速的讀寫能力,是一個典型的分布式讀寫分離模型。我們可以利用master插入數(shù)據(jù),slave提供檢索,從而有效減少單個機器的并發(fā)訪問數(shù)量?;诜植际侥P偷腞edis在帶來高擴展性、高容錯性的同時,無疑也加大了后期部署與運維的難度。該文進行Redis與Docker技術(shù)的結(jié)合,進行了基于Docker的Redis緩存架構(gòu)的研究,通過實驗,證明了基于容器的Docker虛擬化技術(shù),在快速部署、便捷運維方面具有較大的優(yōu)勢。
關(guān)鍵詞:Redis;Docker;分布式;虛擬化
中圖分類號:TP391 文獻標識碼:A 文章編號:1009-3044(2015)23-0056-03
The Research on Redis Cache Architecture Based on Docker
TIAN Yu-jing, ZHANG Chen-guang,REN Nv-er
(China Automotive Technology & Research Center, Tianjin 300300, China)
Abstract:Redis has the ability high speed reading and writing ,and it is a typical distributed reading and writing separated model.We can insert data in use of master and search data by slave,so as to reduce the number of concurrent access to a single machine. Redis, Distributed model, bring high scalability,high fault tolerance,meanwhile,it make deployment and maintain harder.This paper will combine Redis and docker, making a research about its architechure . By the research ,it prove that virtualization technology depending on docker has the advantage in deployment and crossing platform.
Key words: Redis; Docker; distribution; virtualization
身處云計算迅猛發(fā)展浪潮之中,網(wǎng)絡(luò)用戶數(shù)急速增長,世界各行各界致力于信息化、自動化、大數(shù)據(jù)化建設(shè)中。如今系統(tǒng)應(yīng)用與日俱增,負載壓力問題層出不窮,高負荷量是當前面臨的極大問題之一 [1]。要讓服務(wù)器快速響應(yīng)用戶并承受越來越大的負荷量,高速緩存Redis不失為一個好的選擇。同時,內(nèi)存數(shù)據(jù)庫局限于內(nèi)存的容量限制,基于分布式模型的Redis緩存解決了該問題。此外,PaaS(平臺即服務(wù))可提供用戶環(huán)境搭建、部署、運行時的服務(wù)器等平臺,軟件開發(fā)人員和運維人員可以從基礎(chǔ)設(shè)施日常管理、安全問題中解放出來,從而更加專注于業(yè)務(wù)開發(fā)和算法計算。在構(gòu)建PaaS平臺的工具和軟件日趨成熟的過程中,Docker以其基于容器的虛擬化技術(shù)獨樹一幟,影響了整個虛擬化技術(shù)的領(lǐng)域。而使用Docker作為部署項目的過程中,也正面臨著越來越多的應(yīng)用領(lǐng)域,基于Docker部署、運行分布式緩存架構(gòu)的研究也日趨重要。因此,本文研究基于Docker的Redis緩存架構(gòu),解決了在Docker目前使用過程中對Redis部署較為單一的情況,實現(xiàn)了快速部署運行Redis分布式緩存的方案[2]。
1 Redis
1.1 Redis概述
Redis是一個由C編寫的 、
1.2 Redis優(yōu)勢
Redis主要包含的值類型除了較為常見的String類型外,還支持內(nèi)部實際存儲為HashMap的Hash類型、基于鏈表實現(xiàn)的List類型、基于HashMap的Set類型,以及支持排序的Sorted set類型等。因此,提供了非常方便和快速的使用方式[5]。此外,Redis的主要優(yōu)勢為以下幾點:
1)速度較快:Redis的速度十分快,寫的速度可以達到驚人的八萬一千次每秒,而讀的速度也可以達到十一萬次每秒。
2)支持豐富的數(shù)據(jù)類型:Redis支持更多的數(shù)據(jù)類型,例如像列表,集合,有序集合,散列數(shù)據(jù)類型。這就使得程序開發(fā)人員在遇到不同場景的時候有更多的選擇。
3)操作的原子性:不同用戶訪問是否能夠保證數(shù)據(jù)的最新,這是用戶關(guān)注的一點,Redis的原子性恰恰可以解決這方面的問題[6]。
4)Redis的多功能實用工具:應(yīng)用范圍廣,能使用在多個場景或?qū)嵗小?/p>
除了上述的優(yōu)點外,Redis還具有很多其他優(yōu)勢功能。例如pubsub、聚合等。
1.3 Redis分布式應(yīng)用
Redis應(yīng)用的場景非常多,主要可以在緩存、計數(shù)、隊列、防止垃圾郵件、過期項目處理、按照用戶投票和時間排序等。而最重要的應(yīng)用場景自然是本文研究內(nèi)容之一Redis的緩存??偟膩碚f,Redis在很多場景下都是可以直接做為memcached的替代者,而在選擇數(shù)據(jù)類型相對廣泛的時候,Redis是可以作為一個重要的選擇的[7]。
但是Redis的局限性在于內(nèi)存數(shù)據(jù)庫局限于內(nèi)存的容量大小。因此,部署分布式Redis為形勢所向。Redis本身為單點模式,本文處理Redis分布式實現(xiàn)采用一致性Hash原理,采用以key對應(yīng)Redis節(jié)點的方式作為master管理,并提供一定的臟數(shù)據(jù)節(jié)點處理功能,保證數(shù)據(jù)的完整性和正確性。
2 Docker
2.1 Docker概述
Docker的主要面向?qū)ο笫窍到y(tǒng)的開發(fā)人員以及系統(tǒng)管理人員,它是一個優(yōu)秀的開源分布式框架。它主要由Docker Engine和Docker Hub兩個部分組成[8]。Docker類似于虛擬化服務(wù)器,它可以通過對操作系統(tǒng)虛擬化,使得一臺機器上面可以運行多個工作。Docker的最大優(yōu)點就是容器可以提供便攜性,不論是在虛擬機器還是物理服務(wù)器上運行容器。容器給大量部署應(yīng)用的需求提供了一個快速便捷的解決方案。Docker容器技術(shù)便于開發(fā)人員可以更簡單、更快速創(chuàng)建容器,在程序的部署以及應(yīng)用的維護管理更加便捷。
2.2 Docker優(yōu)勢
Docker作為開發(fā)者和系統(tǒng)管理員在應(yīng)用開發(fā)和部署中的開放式平臺,將Container技術(shù)融合并開源化,體現(xiàn)出便攜式,輕量級及高性能等諸多優(yōu)點[11]。
1)擁有VM的有點的同時,Docker擁有自己更突出的地方。關(guān)鍵的一點是Docker更小、更快。在尺寸方面進行了優(yōu)化,相較于VM,更適合于云端的使用。
2)Docker的開放性能夠降低QA和環(huán)境之間的耦合性,構(gòu)建、發(fā)布等操作都是十分簡潔的。
3)Docker具有很好的沙盒式隔離性,將應(yīng)用和系統(tǒng)進行模塊式容器化管理,不需要添加任何操作系統(tǒng)。
4)Docker的開源性 ,使得成本降低。適用于多平臺管理,統(tǒng)一化生產(chǎn),測試,發(fā)布流程。
2.3 Docker原理
Docker采用的架構(gòu)是客戶端/服務(wù)器形式的。從客戶端開始,以TCP/REST發(fā)送請求,然后Docker Host進行請求的收集,最終實現(xiàn)遠程控制。服務(wù)器端接收客戶端的請求是靠Docker Client進行的,然后做分布等處理,使得在一個機器上面可以同時運行多個工作任務(wù)。Docker daemon的運行方式是在宿主機的后臺,客戶端和daemon是可以進行直接交互的[9]。Docker的實現(xiàn)原理與其特性也是緊密關(guān)聯(lián)的,如Docker的交互式shell、日志記錄、資源隔離等,Docker的具體架構(gòu)圖如下:
Docker宿主機與容器進行交互方式有共享目錄、橋接網(wǎng)絡(luò)、共享網(wǎng)絡(luò)、容器模式網(wǎng)絡(luò)、none無網(wǎng)絡(luò)等方式。其中,為了確保容器內(nèi)容的安全性,使用共享目錄的方式安裝軟件、配置log,進行數(shù)據(jù)的備份和物理存儲;使用容器模式在宿主機內(nèi)部進行溝通。在進行跨host宿主機的方式中,采用Docker的溝通方式、宿主機分管各個內(nèi)部容器的交互方式。
3 基于Docker構(gòu)建Redis分布式緩存
3.1 主體架構(gòu)思路
Docker的運行方式主要以宿主機分管容器的方式,而Redis為主從式分布式方式,而Docker的容器和Redis的從節(jié)點服務(wù)器均具有可擴展性。本文的主要實驗思路是把Redis的環(huán)境整合到一個Image中,當Client需要搭建時,只需要打包好的Image,并進行環(huán)境變量的配置。如圖1所示為Redis的Docker化。
整個架構(gòu)按照主從式結(jié)構(gòu)進行設(shè)計和部署,使用Docker的宿主機進行容器管理和Redis主服務(wù)master管理;通過Docker宿主機監(jiān)控配有Redis slave的容器進行啟動;在啟動的過程中,通過容器的啟動和擴展實現(xiàn)Redis的擴展。
3.2 架構(gòu)實現(xiàn)流程
1)安裝Docker。從Registory中下載ubuntu并且建立container。同時準備好Redis以及其他需要的軟件環(huán)境。
2)通過創(chuàng)建安裝文件路徑,將壓縮包拷貝到主機host的目錄/app/software/下 ,以container共享文件加的方式運行container的bash,進入目錄后解壓縮,設(shè)置環(huán)境變量等步驟安裝JDK[10]。
3)拷貝Redis安裝軟件至共享目錄。
4)運行container,解壓縮$ tar xzf Redis-2.6.13.tar.gz。
5)$ make、$ make install命令,在/usr/local/bin目錄下生成本個可執(zhí)行文件。
6)將container內(nèi)部信息打包成Image。
7)客戶端創(chuàng)建Master的container,同時根據(jù)需求創(chuàng)建Slave的container。
8)Master的Container中Hosts指向?qū)?yīng)Slave,構(gòu)建二者的關(guān)聯(lián)。
9)平臺運行,分別測試啟動1G、5G、10G、20G、50G、100G內(nèi)存的情況。
3.3 Docker啟動與普通分布式Redis緩存分析
在本架構(gòu)測試方案中,采用Docker啟動Redis和普通分布式Redis啟動進行分析對比。均采用16G內(nèi)存的虛擬ubuntu系統(tǒng)、從節(jié)點逐個啟動的方式作為測試。如下圖3所示,X軸代表Redis內(nèi)存大小,單位為G,Y軸代表配置時間。可以看出,當內(nèi)存數(shù)較小的時候,性能沒有較大的差異;當內(nèi)存數(shù)比較多、需要部署更多的機器時,Docker需要的啟動單位時間只是增加啟動容器的時間,而啟動容器一般在數(shù)秒即可完成,但是普通的分布式Redis啟動則需要逐一啟動所有的ubuntu虛擬機。也就是說,部署的節(jié)點數(shù)越多,Docker也就越便捷。
除此以外,由于Docker容器模式的網(wǎng)絡(luò),致使在Redis持久化存儲上具有更便捷的交互模式和更高的安全可靠性。
4 結(jié)束語
對于應(yīng)用來講,Redis具有巨大的性能優(yōu)勢,但由于它是對內(nèi)存的一種管理和使用模式,在部署和維護方面并不方便;而Docker作為基于容器的虛擬化技術(shù),能夠快捷方便地管理內(nèi)存,并實現(xiàn)分布式并發(fā)處理。通過以上基于Docker的Redis緩存架構(gòu)的研究和實驗仿真,設(shè)計和解決兩者結(jié)合的架構(gòu)性問題,驗證了Docker做分布式緩存的高效性、高可用性。此外,還可以通過Docker API使用腳本調(diào)用的方式,進一步自動化、高效快速的部署、運維以及分級管理Redis緩存。該研究對Redis緩存的應(yīng)用性能以及其運維模式具有重要的實用價值。
參考文獻:
[1] James Turnbull. The Docker Book[M]. Amazon Digital Services, Inc, 2014.
[2] Jang Seung-Ju. Design of the Remote Management System in the Windows Operating System[J]. International Journal of Computer Science and Network Security, 2011, 11(11): 38?42.
[3] 楊保華, 戴王劍, 曹亞侖. Docker技術(shù)入門與實戰(zhàn)[M]. 北京: 機械工業(yè)出版社, 2014.
[4] 陳如明.大數(shù)據(jù)時代的挑戰(zhàn),價值與應(yīng)對策略[J].移動通信,2012(17):14-15.
[5] 鞠春利,劉印鋒.基于Docker的私有PaaS系統(tǒng)構(gòu)建[J].輕工科技,2014(10):80-83.
[6] 張忠琳,黃炳良.基于openstack云平臺的docker應(yīng)用[J].軟件,2014 (11):73-76.
[7] 王鑫濤.云管理平臺中虛擬網(wǎng)絡(luò)設(shè)計與實現(xiàn)[D]. 大連: 大連理工大學(xué),2013.
[8] 劉高軍.基于Redis的海量小文件分布式存儲方法研究,2013(10).
[9] 曾超宇.Redis在高速緩存系統(tǒng)中的應(yīng)用[J].微型機與應(yīng)用,2013(12).
[10] 唐誠.Redis數(shù)據(jù)庫在微博系統(tǒng)中的實踐[J].廈門城市職業(yè)學(xué)院學(xué)報,2012(3).
[11] 楊莎莎, 鄒華. 托管Paas平臺安全容器的設(shè)計與實現(xiàn)[J]. 軟件, 2012, 33(12): 1-5.