基于Docker的Redis缓存架构的研究

时间:2022-10-19 07:53:46

基于Docker的Redis缓存架构的研究

摘要:Redis具备高速的读写能力,是一个典型的分布式读写分离模型。我们可以利用master插入数据,slave提供检索,从而有效减少单个机器的并发访问数量。基于分布式模型的Redis在带来高扩展性、高容错性的同时,无疑也加大了后期部署与运维的难度。该文进行Redis与Docker技术的结合,进行了基于Docker的Redis缓存架构的研究,通过实验,证明了基于容器的Docker虚拟化技术,在快速部署、便捷运维方面具有较大的优势。

关键词: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 it’s 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

身处云计算迅猛发展浪潮之中,网络用户数急速增长,世界各行各界致力于信息化、自动化、大数据化建设中。如今系统应用与日俱增,负载压力问题层出不穷,高负荷量是当前面临的极大问题之一 [1]。要让服务器快速响应用户并承受越来越大的负荷量,高速缓存Redis不失为一个好的选择。同时,内存数据库局限于内存的容量限制,基于分布式模型的Redis缓存解决了该问题。此外,PaaS(平台即服务)可提供用户环境搭建、部署、运行时的服务器等平台,软件开发人员和运维人员可以从基础设施日常管理、安全问题中解放出来,从而更加专注于业务开发和算法计算。在构建PaaS平台的工具和软件日趋成熟的过程中,Docker以其基于容器的虚拟化技术独树一帜,影响了整个虚拟化技术的领域。而使用Docker作为部署项目的过程中,也正面临着越来越多的应用领域,基于Docker部署、运行分布式缓存架构的研究也日趋重要。因此,本文研究基于Docker的Redis缓存架构,解决了在Docker目前使用过程中对Redis部署较为单一的情况,实现了快速部署运行Redis分布式缓存的方案[2]。

1 Redis

1.1 Redis概述

Redis是一个由C编写的 、键值的开源存储系统。Redis的出现,在某些方面完善了关系数据库存储的不足的问题 [3]。在内存数据库类型中有Redis和Memcached,它们都支持多种Value类型,但Redis支持存储的值类型更加广泛,Redis中值的类型对于字符串集合(有序和无序)、字符串列表及单纯字符串,都可以做良好的支持。其次,Redis涵盖了多种多样的排序方式。它的另一个优点是可以进行主服务器到从服务器的同步,这对于读取操作的扩展以及数据冗余方面给予了很大的支持。Redis提供的语言版本多样,更加快速,并且支持数据持久化,用户使用起来十分方便[4]。

1.2 Redis优势

Redis主要包含的值类型除了较为常见的String类型外,还支持内部实际存储为HashMap的Hash类型、基于链表实现的List类型、基于HashMap的Set类型,以及支持排序的Sorted set类型等。因此,提供了非常方便和快速的使用方式[5]。此外,Redis的主要优势为以下几点:

1)速度较快:Redis的速度十分快,写的速度可以达到惊人的八万一千次每秒,而读的速度也可以达到十一万次每秒。

2)支持丰富的数据类型:Redis支持更多的数据类型,例如像列表,集合,有序集合,散列数据类型。这就使得程序开发人员在遇到不同场景的时候有更多的选择。

3)操作的原子性:不同用户访问是否能够保证数据的最新,这是用户关注的一点,Redis的原子性恰恰可以解决这方面的问题[6]。

4)Redis的多功能实用工具:应用范围广,能使用在多个场景或实例中。

除了上述的优点外,Redis还具有很多其他优势功能。例如pubsub、聚合等。

1.3 Redis分布式应用

Redis应用的场景非常多,主要可以在缓存、计数、队列、防止垃圾邮件、过期项目处理、按照用户投票和时间排序等。而最重要的应用场景自然是本文研究内容之一Redis的缓存。总的来说,Redis在很多场景下都是可以直接做为memcached的替代者,而在选择数据类型相对广泛的时候,Redis是可以作为一个重要的选择的[7]。

但是Redis的局限性在于内存数据库局限于内存的容量大小。因此,部署分布式Redis为形势所向。Redis本身为单点模式,本文处理Redis分布式实现采用一致性Hash原理,采用以key对应Redis节点的方式作为master管理,并提供一定的脏数据节点处理功能,保证数据的完整性和正确性。

2 Docker

2.1 Docker概述

Docker的主要面向对象是系统的开发人员以及系统管理人员,它是一个优秀的开源分布式框架。它主要由Docker Engine和Docker Hub两个部分组成[8]。Docker类似于虚拟化服务器,它可以通过对操作系统虚拟化,使得一台机器上面可以运行多个工作。Docker的最大优点就是容器可以提供便携性,不论是在虚拟机器还是物理服务器上运行容器。容器给大量部署应用的需求提供了一个快速便捷的解决方案。Docker容器技术便于开发人员可以更简单、更快速创建容器,在程序的部署以及应用的维护管理更加便捷。

2.2 Docker优势

Docker作为开发者和系统管理员在应用开发和部署中的开放式平台,将Container技术融合并开源化,体现出便携式,轻量级及高性能等诸多优点[11]。

1)拥有VM的有点的同时,Docker拥有自己更突出的地方。关键的一点是Docker更小、更快。在尺寸方面进行了优化,相较于VM,更适合于云端的使用。

2)Docker的开放性能够降低QA和环境之间的耦合性,构建、等操作都是十分简洁的。

3)Docker具有很好的沙盒式隔离性,将应用和系统进行模块式容器化管理,不需要添加任何操作系统。

4)Docker的开源性 ,使得成本降低。适用于多平台管理,统一化生产,测试,流程。

2.3 Docker原理

Docker采用的架构是客户端/服务器形式的。从客户端开始,以TCP/REST发送请求,然后Docker Host进行请求的收集,最终实现远程控制。服务器端接收客户端的请求是靠Docker Client进行的,然后做分布等处理,使得在一个机器上面可以同时运行多个工作任务。Docker daemon的运行方式是在宿主机的后台,客户端和daemon是可以进行直接交互的[9]。Docker的实现原理与其特性也是紧密关联的,如Docker的交互式shell、日志记录、资源隔离等,Docker的具体架构图如下:

Docker宿主机与容器进行交互方式有共享目录、桥接网络、共享网络、容器模式网络、none无网络等方式。其中,为了确保容器内容的安全性,使用共享目录的方式安装软件、配置log,进行数据的备份和物理存储;使用容器模式在宿主机内部进行沟通。在进行跨host宿主机的方式中,采用Docker的沟通方式、宿主机分管各个内部容器的交互方式。

3 基于Docker构建Redis分布式缓存

3.1 主体架构思路

Docker的运行方式主要以宿主机分管容器的方式,而Redis为主从式分布式方式,而Docker的容器和Redis的从节点服务器均具有可扩展性。本文的主要实验思路是把Redis的环境整合到一个Image中,当Client需要搭建时,只需要打包好的Image,并进行环境变量的配置。如图1所示为Redis的Docker化。

整个架构按照主从式结构进行设计和部署,使用Docker的宿主机进行容器管理和Redis主服务master管理;通过Docker宿主机监控配有Redis slave的容器进行启动;在启动的过程中,通过容器的启动和扩展实现Redis的扩展。

3.2 架构实现流程

1)安装Docker。从Registory中下载ubuntu并且建立container。同时准备好Redis以及其他需要的软件环境。

2)通过创建安装文件路径,将压缩包拷贝到主机host的目录/app/software/下 ,以container共享文件加的方式运行container的bash,进入目录后解压缩,设置环境变量等步骤安装JDK[10]。

3)拷贝Redis安装软件至共享目录。

4)运行container,解压缩$ tar xzf Redis-2.6.13.tar.gz。

5)$ make、$ make install命令,在/usr/local/bin目录下生成本个可执行文件。

6)将container内部信息打包成Image。

7)客户端创建Master的container,同时根据需求创建Slave的container。

8)Master的Container中Hosts指向对应Slave,构建二者的关联。

9)平台运行,分别测试启动1G、5G、10G、20G、50G、100G内存的情况。

3.3 Docker启动与普通分布式Redis缓存分析

在本架构测试方案中,采用Docker启动Redis和普通分布式Redis启动进行分析对比。均采用16G内存的虚拟ubuntu系统、从节点逐个启动的方式作为测试。如下图3所示,X轴代表Redis内存大小,单位为G,Y轴代表配置时间。可以看出,当内存数较小的时候,性能没有较大的差异;当内存数比较多、需要部署更多的机器时,Docker需要的启动单位时间只是增加启动容器的时间,而启动容器一般在数秒即可完成,但是普通的分布式Redis启动则需要逐一启动所有的ubuntu虚拟机。也就是说,部署的节点数越多,Docker也就越便捷。

除此以外,由于Docker容器模式的网络,致使在Redis持久化存储上具有更便捷的交互模式和更高的安全可靠性。

4 结束语

对于应用来讲,Redis具有巨大的性能优势,但由于它是对内存的一种管理和使用模式,在部署和维护方面并不方便;而Docker作为基于容器的虚拟化技术,能够快捷方便地管理内存,并实现分布式并发处理。通过以上基于Docker的Redis缓存架构的研究和实验仿真,设计和解决两者结合的架构性问题,验证了Docker做分布式缓存的高效性、高可用性。此外,还可以通过Docker API使用脚本调用的方式,进一步自动化、高效快速的部署、运维以及分级管理Redis缓存。该研究对Redis缓存的应用性能以及其运维模式具有重要的实用价值。

参考文献:

[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技术入门与实战[M]. 北京: 机械工业出版社, 2014.

[4] 陈如明.大数据时代的挑战,价值与应对策略[J].移动通信,2012(17):14-15.

[5] 鞠春利,刘印锋.基于Docker的私有PaaS系统构建[J].轻工科技,2014(10):80-83.

[6] 张忠琳,黄炳良.基于openstack云平台的docker应用[J].软件,2014 (11):73-76.

[7] 王鑫涛.云管理平台中虚拟网络设计与实现[D]. 大连: 大连理工大学,2013.

[8] 刘高军.基于Redis的海量小文件分布式存储方法研究,2013(10).

[9] 曾超宇.Redis在高速缓存系统中的应用[J].微型机与应用,2013(12).

[10] 唐诚.Redis数据库在微博系统中的实践[J].厦门城市职业学院学报,2012(3).

[11] 杨莎莎, 邹华. 托管Paas平台安全容器的设计与实现[J]. 软件, 2012, 33(12): 1-5.

上一篇:赤峰民间音乐非物质文化遗产的发掘、保护现状 下一篇:浅析项目教学法在网页制作教学中的应用