如今docker在云计算领域发展的势头很猛,各个公司不论大小都开始研究这个开源工具和技术,围绕docker的开源项目和创业公司也多如牛毛,就是一个简单管理container的web ui都有不少开源项目。不过仍是一我的说的好,docker必需要是集群才好玩,并且越大越好玩。固然这是从玩技术的人眼中看待的问题,若是要真正用于生产仍是有不少问题须要解决,不少方案须要设计,不少容错须要处理。今天看资料学习到了docker是怎样解决容器里面数据存储的问题的方案,之前作PAAS遇到过这种问题,不过本身也设计了相应的方案解决了问题。不过docker提供的volumes解决方案好像感受更加完美和灵活一些,可是整体架构和思路其实都是同样的。下面就根据本身的理解说说docker的volumes解决方案,官方文档有详细的使用说明,若是想要尝试一把,请自行google或者直接访问docker官方问题:https://docs.docker.com/userguide/dockervolumes/web
在介绍具体方案之前先说说基于container运行的程序有什么样的数据存储问题。传统的软件开发人员都习惯了使用本地磁盘保存文件等数据,若是程序挂了之后从新启动之后那么数据还在(硬盘没坏的状况下),你可能会说为何不使用云存储或者分布式文件系统或者数据库之类的,首先传统行业开发者可能尚未接受或者接触云存储系统和概念,其次小公司或者我的开发者不必定可以能够本身使用的云存储系统(第三方每每须要收费,并且不必定好用),数据库不合适存储文件。因此这些问题就须要PAAS平台(不论是公有仍是私有,固然这里把docker也算在内了)去解决,若是PAAS平台是基于container运行应用的架构那么就存在本地数据存储的问题。由于PAAS平台须要合理利用资源,那么就须要动态调度运行程序到不一样的主机上去运行,那么在应用被从一个container调度另外一个container运行的时候,怎样保证数据也被一样迁移过去,并且迁移后的container和之前的container可能根本不在同一个主机上。那么数据迁移就是一个很大的问题,想要很优雅的解决这个问题不是那么容易的。docker
先看看我之前是怎么解决这个问题的(其实你会发现和docker的解决方案是那么惊人的类似),咱们为开发者提供一个目录,承诺在这个目录下存放的问题保证在大多数状况下不会丢失(极端状况可能会丢失一些数据,例如硬盘坏掉并且这时数据恰好尚未成功备份,固然也有解决方案,不过须要牺牲用户体验和性能:就是同步写云存储),而后咱们有一个文件系统的监听agent会监控这些目录的变化,若是在一个固定间隔时间内有文件变化就会按期把这个目录压缩成一个压缩文件而后上传云存储,当用户的应用被迁移到另外一个container中去的时候在从云存储下载而且解压到相应目录便可。这里为了解决用户不停的写文件致使频繁的进行压缩和上传操做,咱们设置了一个时间间隔来作这些操做。若是在这个时间间隔内有数据写入而且尚未执行压缩上传操做的时候主机挂掉或者硬盘坏掉那么部分数据丢失。为了解决上传过多文件到云存储每次都是覆盖之前老的文件,即一个应用只有一个压缩文件被存放在云存储。经过这种方案咱们解决了基本上99%以上的数据存储问题。数据库
继续阅读后文,请到:www.wuyouqiang.com架构