Docker和超融合的结合

 

我们说Docker是无状态的,其主要在于对计算资源的弹性伸缩。在我们不需要运行Docker或者Docker出现损坏的时候我们只需要将其进行销毁即可。即类似于之前网上有篇文章所说的,容器就像是农场里面的饲养的一头奶牛,当我们想吃牛肉了或者奶牛生病了不能够再生产奶,那我们就直接换掉就好了。容器技术基于这样的思想,和公有云的按需使用、弹性伸缩一致。所以Docker等容器技术相比较虚拟机而言,能够得到如此大力推广和发展,实是因为Docker等容器技术将计算资源的按需使用、弹性伸缩做到了极致。


但是我们的应用是有状态的,这个和Docker的无状态是如何结合的。在这里我们所述的状态,就是应用程序运行所需的数据、配置等等信息。所有我在这里所理解的是,在基于Docker的时代,我们不但将应用从操作系统中抽象分离出来,同时还将我们的应用和数据以及配置相分离。这样做到的好处就是容器是奶牛任君挑选,随时还可以再换一批。同时,将其中应用的数据和配置信息单独分离出来存放在永久性的存储当中,这其中通过某一机制和Docker进行互联,在启用Docker之后,Docker自动的去拿到所属的数据以及配置信息组成一个完成的运行环境。Docker推出的Volume数据卷就是这么一种机制的实现形式。相比较应用虚拟化而言,Docker和应用虚拟化的区别我认为就是:Docker将应用和操作系统镜像了分离,而应用虚拟化没做到的就是应用和操作系统的分离。因此在应用虚拟化时代我们得小心呵护这台虚拟机,就类似于宠物一样,怕它坏了怕它生病了。


同时在Docker容器时代,如果我们的永久存储放置在本地的服务器磁盘上,那么显然这个问题和虚拟机时代所面临的问题一样,本机的磁盘损坏的情况下我们的永久存储数据丢失。同时,在进行Docker的跨主机迁移的时候,或者说我们在多台主机内启用相同容器的时候,位于A主机上的Docker容器还通过网络去B主机上读取永久性的数据存储吗?或者是每台主机上都复制同步一份Docker的永久性存储?既然大家不管在哪儿都可能需要去读取到永久性的存储空间,那么我将这个空间放置在大家都能够去读取的地方不就可以了吗!因此解决Docker的永久性存储最好的办法就是存储是共享的。因为数据都是存储在共享存储里了,所以容器在集群的另外一个服务器重新启动或者创建一个新的容器的时候,只需要挂载同样的数据卷就可以了。


就如上述所说,虚拟机是宠物得爱护和照顾。容器是奶牛随时可以再换一批。那么在Docker时代,我们的宠物就变成了—Docker的数据以及配置文件,即应用的有状态部分。我们提供容器时,它们必须对应用进行配置和映射,包括配置安全性和网络设置,存储等其它权限或访问应用数据以及其它部分的应用层次。这也意味着在容器时到我们并未远离宠物,而是我们的喜好不一样咯,这一次的宠物是一系列配置文件——说明如何协调应用程序而不是应用程序以基础设施为中心的展现。


那么Volume解决了容器的数据持久化存储问题,但它仅仅是一个数据接口,容器本身并不负责持久化数据的管理。对于这只新的宠物,我们采用新的手段来进行爱护和照顾呢?


问题就到共享存储上面来了。传统的共享存储不管你是什么高端,在应用层级将应用本身(无状态部分)和数据以及配置(有状态部分)相分离,那么必可避免的出现IO延迟。数据具有的惯性和延迟令应用很难远程访问数据,除非数据访问协议允许特殊容迟(latency tolerant)。因此应用和数据天然的优势还是应用的数据在本地。这是一个方面,在另一个方面,传统的存储的数据保护是通过RAID、快照以及数据备份等手段来进行保护。这些手段在数据出现问题时都需要手动进行数据的恢复操作。说了这么多其实还表达的就是传统的存储还是在以养宠物的方式来维护存储。那么我们可不可以以养奶牛的方式来维护存储。


答案是显而易见的。目前最火的技术超融合,其思想就类似于养奶牛的方式维护存储,只不过我们认为养的方式有所不同,超融合是同时养几头相同的奶牛,在其中一头奶牛死亡后还有其他的奶牛可以继续提供牛奶。


现在对于Docker的存储永久性问题,主要依靠外部存储来解决,其中一种解决方案是把容器数据持久保存在可靠的分布式存储中,比如GlusterFSCeph等等。分布式存储如GlusterFSCeph等主要解决的是数据的管理性问题。比如采用多副本技术以及自恢复技术,将数据自动进行应用本地的迁移、数据损坏的自动修复等等。而恰恰超融合架构中最根本的变化是存储,由原先的集中共享式存储(SAN/NAS)转向软件定义存储,特别是分布式存储(包括Object/Block/File存储),比如NDFS/Ceph。但是这只解决了Docker永久性数据的一个问题,即数据管理问题。


那么Docker的永久性数据还面临另外一个什么问题?


容器里面直接跑的应用,它天生比虚拟机VM更接近应用,最能通过应用感知对存储的深层次需求,从而动态配置不同的存储策略。因此,为容器提供状态持久化的外部存储系统,应该是面向应用的存储系统,它针对不同类型应用的容器提供精细的存储策略,并进行动态智能应用感知。应用感知存储基于性能、可用性、可恢复性、法规遵从要求及其价值来调整存储,以适应存储对应的单个应用。它是一种将存储技术融合到一个平台的智能系统,并能理解不同的应用及它们的使用模式。该系统可以优化数据布局、数据行为和服务质量(QoS)水平,以确保最佳性能。应用感知磁盘按照关键任务次序识别并存储数据。例如,公司日常销售库存系统应用数据都存储在磁盘外部边缘,以确保快速访问。 CRM数据保存到性能中等的磁盘中部,而电子邮件归档可以存储在磁盘高容量的中心部分。


应用感知存储+分布式存储我觉得就可以解决Docker面临的永久性存储问题了,而应用感知存储+分布式存储其实在超融合系统里面都会有涉及,我们可以将以上这两个应用感知存储+分布式存储融合成为超融合存储,实质上超融合存储里面就存在了这样的技术融合。因此我们的解决方案就是容器计算+超融合架构。这也是Docker和超融合结合天生具有的优势。