现在docker在云计算领域发展的势头很猛,各个公司不论大小都开始研究这个开源工具和技术,围绕docker的开源项目和创业公司也多如牛毛,就是一个简单管理container的web ui都有很多开源项目。不过还是一个人说的好,docker必须要是集群才好玩,而且越大越好玩。当然这是从玩技术的人眼中看待的问题,如果要真正用于生产还是有很多问题需要解决,很多方案需要设计,很多容错需要处理。今天看资料学习到了docker是怎样解决容器里面数据存储的问题的方案,以前做PAAS遇到过这种问题,不过自己也设计了相应的方案解决了问题。不过docker提供的volumes解决方案好像感觉更加完美和灵活一些,但是总体架构和思路其实都是一样的。下面就根据自己的理解说说docker的volumes解决方案,官方文档有详细的使用说明,如果想要尝试一把,请自行google或者直接访问docker官方问题:https://docs.docker.com/userguide/dockervolumes/

在介绍具体方案以前先说说基于container运行的程序有什么样的数据存储问题。传统的软件开发人员都习惯了使用本地磁盘保存文件等数据,如果程序挂了以后重新启动以后那么数据还在(硬盘没坏的情况下),你可能会说为什么不使用云存储或者分布式文件系统或者数据库之类的,首先传统行业开发者可能还没有接受或者接触云存储系统和概念,其次小公司或者个人开发者不一定能够可以自己使用的云存储系统(第三方往往需要收费,而且不一定好用),数据库不合适存储文件。所以这些问题就需要PAAS平台(不管是公有还是私有,当然这里把docker也算在内了)去解决,如果PAAS平台是基于container运行应用的架构那么就存在本地数据存储的问题。因为PAAS平台需要合理利用资源,那么就需要动态调度运行程序到不同的主机上去运行,那么在应用被从一个container调度另一个container运行的时候,怎样保证数据也被同样迁移过去,而且迁移后的container和以前的container可能根本不在同一个主机上。那么数据迁移就是一个很大的问题,想要很优雅的解决这个问题不是那么容易的。

先看看我以前是怎么解决这个问题的(其实你会发现和docker的解决方案是那么惊人的相似),我们为开发者提供一个目录,承诺在这个目录下存放的问题保证在大多数情况下不会丢失(极端情况可能会丢失一些数据,例如硬盘坏掉而且这时数据刚好还没有成功备份,当然也有解决方案,不过需要牺牲用户体验和性能:就是同步写云存储),然后我们有一个文件系统的监听agent会监控这些目录的变化,如果在一个固定间隔时间内有文件变化就会定期把这个目录压缩成一个压缩文件然后上传云存储,当用户的应用被迁移到另一个container中去的时候在从云存储下载并且解压到相应目录即可。这里为了解决用户不停的写文件导致频繁的进行压缩和上传操作,我们设置了一个时间间隔来做这些操作。如果在这个时间间隔内有数据写入并且还没有执行压缩上传操作的时候主机挂掉或者硬盘坏掉那么部分数据丢失。为了解决上传过多文件到云存储每次都是覆盖以前老的文件,即一个应用只有一个压缩文件被存放在云存储。通过这种方案我们解决了基本上99%以上的数据存储问题。

继续阅读后文,请到:www.wuyouqiang.com

docker解决数据存储问题的方案的更多相关文章

  1. docker的数据存储

    概述 Docker 为容器提供了两种存放数据的资源:由 storage driver 管理的镜像层和容器层:以及Data Volume. store driver Docker镜像的分层结构如下图所示 ...

  2. SaaS多租户模式数据存储方案

    云计算多租户几乎用于所有软件即服务 (Software as a Service, SaaS) 应用程序,因为计算资源是可伸缩的,而且这些资源的分配由实际使用决定.话虽如此,用户可以通过 Intern ...

  3. SaaS多租户模式数据存储方案比较

    云计算多租户几乎用于所有软件即服务 (Software as a Service, SaaS) 应用程序,因为计算资源是可伸缩的,而且这些资源的分配由实际使用决定.话虽如此,用户可以通过 Intern ...

  4. Android Learning:数据存储方案归纳与总结

    前言 最近在学习<第一行android代码>和<疯狂android讲义>,我的感触是Android应用的本质其实就是数据的处理,包括数据的接收,存储,处理以及显示,我想针对这几 ...

  5. HBase 数据存储结构

    在HBase中, 从逻辑上来讲数据大概就长这样: 单从图中的逻辑模型来看, HBase 和 MySQL 的区别就是: 将不同的列归属与同一个列族下 支持多版本数据 这看着感觉也没有那么太大的区别呀, ...

  6. Sqlserver 高并发和大数据存储方案

    Sqlserver 高并发和大数据存储方案 随着用户的日益递增,日活和峰值的暴涨,数据库处理性能面临着巨大的挑战.下面分享下对实际10万+峰值的平台的数据库优化方案.与大家一起讨论,互相学习提高!   ...

  7. 万亿级日志与行为数据存储查询技术剖析——Hbase系预聚合方案、Dremel系parquet列存储、预聚合系、Lucene系

    转自:http://www.infoq.com/cn/articles/trillion-log-and-data-storage-query-techniques?utm_source=infoq& ...

  8. Nfs+Drdb+Heartbeat 数据存储高可用服务架构方案

    一.方案的应用场景 适用于2千万-3千万PV架构的网站,Nfs数据存储高可用服务方案 备注:互联网排名前30左右公司常用的架构 二.生产环境方案部署原理图 三.生产环境服务器硬件配置: 生产环境中采用 ...

  9. 前端数据存储方案集合(cookie localStorage等)以及详解 (二)

    前端数据存储方案集合(cookie localStorage等)以及详解 (二) 在之前的文章中已经介绍到了 前端存储方案中的 cookie . 但是 cookie 的存储上限是 4KB. 如果超过了 ...

随机推荐

  1. [算法]树上倍增求LCA

    LCA指的是最近公共祖先(Least Common Ancestors),如下图所示: 4和5的LCA就是2 那怎么求呢?最粗暴的方法就是先dfs一次,处理出每个点的深度 然后把深度更深的那一个点(4 ...

  2. UIImageView、UISlider、UISwitch、UIStepper、UISegmentControl

    UIImageView——图像视图 作用:专门用来显示图片的控件 . 设置图像 [self.imageView setImage:[UIImage imageNamed:@"abc.png& ...

  3. 解决org.openqa.selenium.WebDriverException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms org.springframework.beans.BeanInstantiation

    解决方法为将selenium-server-standalone-2.37.0.jar升级至selenium-server-standalone-2.41.0.jar即可. 下载地址:http://s ...

  4. 模板(Template)

    最近阅读google chromium base container stack_container代码,深刻感觉到基础知识不扎实. // Casts the buffer in its right ...

  5. 解析XML文件的几种常见操作方法—DOM/SAX/DOM4j

    解析XML文件的几种常见操作方法—DOM/SAX/DOM4j 一直想学点什么东西,有些浮躁,努力使自己静下心来看点东西,哪怕是回顾一下知识.看到了xml解析,目前我还没用到过.但多了解一下,加深点记忆 ...

  6. 设置阿里云maven中央仓库的settings.xml

    本来想找一个可用的设置文件,结果乱七八糟的,干脆自己做了一个,同时还放上了Spring的SNAPSHOT和MILESTONE/RELEASE仓库,希望能帮到一些人. <?xml version= ...

  7. Kendo UI for ASP.NET MVC 的一些使用经验(转)

    转自 http://blog.csdn.net/dj2008/article/details/45313805 最近的项目里用到了Kendo UI.这货很好很强大,但可惜官方文档组织的并不是很好,有很 ...

  8. android4.3 Bluetooth(le)分析之startLeScan分析

    BluetoothAdapter.java中有low enery(le)的一些方法,android提供了这些方法,但源码中并未找到这些方法的调用之处.本文档主要分析这类方法的执行流程,来了解下le到底 ...

  9. ooad单例模式-Singleton

                                                单例模式Singleton 主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 比如建立目录 ...

  10. UE简单操作

    一:UE恢复默认配置      1.开始--运行-- “%APPDATA%” 回车 .      2. 找到并打开 IDMComp 文件夹.将文件夹“UltraEdit”整个给删除.      3.重 ...