张亚龙 译 分布式实验室
最近CoreOS推出来重量级产品Torus,专门为容器集群量身打造的分布式存储系统,可以为通过Kubernetes编排和管理的容器集群提供可靠可扩展的存储。让我们来感受下新产品给我们的集群分布式存储带来了多大的优势。
在容器集群的基础设施中,持久化存储是目前计算机界讨论最热的问题之一。微服务生产和消耗的海量数据我们该如何存储?尤其是对于部署一成不变、离散的应用时如何能做到持久化存储?随着容器在企业中的大规模应用,如何用一种能够让开发者在任何环境中能顺利使用的方式存储这些信息?怎样在容器不断动态迭代中保证数据的一致性和持久性?
如今CoreOS推出了Torus,它是一种针对容器集群量身打造的存储系统,可以为通过Kubernetes编排和管理的容器集群提供可靠可扩展的存储。我们相信开源软件必须及早发布产品,这样可以让更多的开发者、测试者以及贡献者参与进来,以增进整个社区的进步。所以现在您就可以在Github(https://github.com/coreos/torus)获取Tours的原型发布版本,同时我们也鼓励所有人参与测试数据和部署集群,一并帮助开发完善下一代的分布式存储。
站在CoreOS的角度,我们相信分布式系统为互联网的安全可靠运行奠定了基础。通过模块化的方式进行构建,在工作负载增加的时候进行扩展,同时确保其简单易用,并使得不同模块能够与其他组件相互配合。这种做法解决了大规模存储计算领域曾经面临过的不少挑战。通过我们构建etcd的三年经验,我们达成解决分布式问题的共识,在集群快速异步更新以及读取信息时,无论粒度多小的重要信息都应该是被约定和保持一致。今天etcd是最快、最稳定的开源分布式键值存储,它被用于包括Kubernetes在内数以百计的业界翘楚的分布式系统软件项目中,扮演着在大规模节点和应用程序执行时被用来协调配置的角色。
过去可靠的分布式存储问题比分布式具有更多的挑战,但是现状确实也是这样的。在实现分布式存储的算法中,如果出现错误后果将会很严重。一般情况下分布式存储的数据巨大,一旦实现中出现错误,错误会以惊人的速度传播,而且这种错误也很难被检测到。数据的疯长也会改变我们创建备份、归档和其他故障安全措施保障应用程序安全的做法。
Tour提供存储应该具有的原始特性:可靠、分布式、简单。它旨在解决今天开发团队运行分布式应用程序中遇到的一些主要问题。虽然传统的存储结构可以连接到我们现在的底层容器,但是这两个模型之间的不匹配促使我们开发这种新的解决方案来解决容器集群之间的存储。现在被认可的分布式存储算法也是出了名的困难的。Torus使用etcd为数以千计的生产部署提供部署服务、元数据的管理以及一致性的维护等。这也使得Torus能够把关注的焦点从新颖的解决方案上转移到存储部分方程上。
现在的存储方案并非全部为cloud-native而生
如果把现存的存储解决方案的部署、管理、操作试图硬塞进现代化的容器集群中实践,这非常困难,而且成本很高。这种分布式主要是为大机器小集群设计的,而不是像GIFEE(http://www.cio.com/article/3037988/coreos-ceo-containers-are-just-the-beginning.html)倡导的侧重于小机器,大集群的创建。更糟糕的是,商业化的分布式存储往往需要昂贵的定制软硬件完成,这样不仅购买昂贵而且很难和其他的工具集成使用,随着时间的推移,升级、许可、超过售后器的维修都是大问题。
容器需要持久化的存储
容器集群比以往的设计更具有动态性,能在遇到自动扩容的场景时做到及时的更新,能够完成持续交付,能够及时应对组件加载失败方便更换的场景。确保能提供以容器微服务的方式为持久化存储提供启动、停止、升级,集群节点之间的数据迁移不像简单的为一个单一服务器运行独立的应用程序甚至是甚至多个虚拟机提供备份储存那么的简单。
现代化集群的存储必须在网络端维持统一的可用性,随着数据在不同容器中处理还需要在一致性基础上保证管理访问,就算只是在一个应用程序内部使用,随着应用版本的增长也需要做到这几方面。
Torus在架构的设计上通过下列几个特性解决了这些问题:
扩展性:与etcd类似,Torus也是一种构建块,可以实现包括分布式块设备(Distributed block device)或大型对象存储在内不同类型的存储。Torus使用Go语言编写并使用gRPC协议,用户可以方便地用任何语言创建Torus客户端。
易用性:专门针对集群和Kubernetes等集群流程平台(Cluster orchestration platform)设计的Torus可用简单的方法部署和运维,并可随时缩放。
准确性:Torus使用etcd分布式键值数据库存储并检索文件或对象元数据。etcd为必须快速可靠执行的分布式系统核心运作提供了一个坚实、经得起考验的基础。
缩放性:Torus目前可缩放至数百个节点,并可将多个共用磁盘以单一存储池的方式使用。
“我们认识到市场对分布式存储有明确的需求,它可以解决使用动态化的容器应用,可以利用快速发展到硬件环境。”Packet的CEOZachary Smith说“我们很兴奋的看到CoreOS发布第一个真正意义上的分布式存储解决方案。”
像core一样,Torus的核心是一个将接口以传统文件方式呈现的库,这个库使得存储系统能够顺利实现易于理解的基本文件操作。借助etdc的一致过程进行协调和检查点操作,这个分布式文件可以通过多种方式暴露给用户的应用程序。目前Torus支持通过网络块设备(NBD)。将这个文件以面向块(Block-oriented)的存储进行暴露。Torus为Kubernetes的pod提供了简单的固定存储。这样的设计还可在不远的未来支持加密和高效率的Reed-Solomon纠错功能,借此为整个系统提供更有保障的数据有效性和保密性。
Torus可通过Kubernetes快速简单的部署和管理。目前发布的Torus包含用于在任何Kubernetes集群上以应用程序方式配置和运行Torus的Kubernetes清单。这使得Torus的安装、管理和升级变成一种简单,完全在云端完成的操作。一旦集群中的应用spun up,Torus会把固定的容量以插件的形式放入Kubernetes的动态存储中。为了使应用程序能够运行在pod,Torus要表现为传统的文件形式存储。从现在发布的版本包括演示运行在固定容量Kubernetes上的 PostgreSQL 数据库服务器,使用Torus作为备份存储。发布的内容有简明的操作文档,使用etcd部署Torus,以及Kubernetes集群,供外部测试使用。
Torus的发布仅仅是我们准备建立一个世界级的cloud-native分布式存储系统的开始,我们还需要很多帮助。请直接到GitHub(https://github.com/coreos/torus)中提供你对项目的帮助和指导。欢迎加入项目的测试,问题提交,加入我们社区的讨论。如果你在San Francisco区域,请加入我们下次的CoreOS会议,可以深度探讨一下关于Torus的实现细节。
分布式系统工程师兼Go kit创始人Peter Bourgon认为:“分布式存储一直被视作云原生应用程序难以解决的问题,我对于Torus的潜力感到很满意,很希望知道CoreOS和这个社区最终将取得怎样的辉煌成果!”
Tour是一个专门为cloud-native提供的简单可靠的现代分布式存储解决方案,也是全球范围企业级Kubernetes使用的基础。
本文为翻译文章,原文链接:https://coreos.com/blog/torus-distributed-storage-by-coreos.html