上云之后,企业如何降成本?速查《云原生成本管理白皮书》找答案>> 了解详情
写点什么

Subtree 发布 Dotmesh,使用类似 Git 的 CLI 实现应用状态的捕获、组织和共享

  • 2018 年 2 月 12 日
  • 本文字数:2260 字

    阅读完需:约 7 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

Subtree 发布了 Dotmesh 。Dotmesh 是一种容器友好的应用状态快照工具,它提供了与 git 类似的命令行接口(CLI),操作并共享的捕获的应用状态数据。Dotmesh 主要从云原生和基于微服务的应用中捕获、管理和共享状态,便于调试和探索在 QA 和生产环境中发现的有问题状态。

Dotmesh 工具可对数据库和其它文件系统的状态做快照,提供了“类似于 git 的 CLI,用于捕获、组织和共享应用状态”。应用状态在“ datadot ”中捕获,并通过一种集中式的“dothub”仓储进行存储和共享。Dotmesh 可以在一次原子提交中捕获多种数据库的状态,每种状态在一个“ subdot ”中。该工具非常适用于在任一时间点上捕获基于微服务的应用状态。在基于微服务的应用环境中,应用状态分布于多个组件间,例如多个数据存储、缓存或队列。

下面给出 Dotmesh 文档中提供的一个简单的例子。该例子展示了如何启动一个以Dotmesh 为后台的PostgreSQL 容器:

docker run -d --volume-driver dm -v myapp:/var/lib/postgresql/data --name postgres postgres:9.6.6上面的命令创建了一个称为“myapp”的 datadot,在其中创建了一个用于默认主分支的可写文件系统,并将主分支的可写文件系统挂接到PostgreSQ 容器的 /var/lib/postgresql/data目录。运行命令dm commit -m "empty state"将会提交该 datadot。该命令创建了当前分支上的文件系统状态在当前时间点的快照。

之后,再一次使用提交命令,就会将数据添加到 PostgreSQL 数据库中。通过运行dm log命令,工程师可以确认提交的情况,也可以使用命令dm reset --hard HEAD^回滚到首次提交。 HEAD^ 语法对于有 git 使用经验的工程师并不陌生,它表示“在当前分支上最新提交之前的一次提交”。通过指定标识符做提交,还可以实现回滚和快进。工程师可以将数据PUSH 到一个由集中式的“dothub”构成的Dotmesh 仓储。为使用当前的 Dothub SaaS 产品,访问仓储需要进行注册。工程师还可以在其它可用的 dot 上做CLONE 和PULL

基于微服务的应用,通常具有一个以上的有状态组件,例如多个数据库、缓存和队列。具有单一服务的应用有时也是如此。datadot 可在原子的、一致的单次提交中捕获所有这些状态。由于subdot 划分了文件系统,使得不同容器可以使用文件系统的不同部分,因此可以将subdot 看出是主分支可写文件系统的另一种分区。对datadot 的提交和分支,将作用于整个datadot,而非特定的subdot。这意味着,datadot 提交的是整个应用状态的快照,而非单个数据服务。

图1 datadot 图解(图片来自于 Dotmesh 文档

Dotmesh 使用 ZFS 存储 datadot 的内容。ZFS 是一种文件系统和逻辑卷的组合管理器,最初由 Sun Microsystems 设计。ZFS 提供的特性包括数据破坏防护、支持高存储容量、数据的有效压缩、文件系统和卷管理概念的集成、快照,以及使用写时复制(Copy-on-write)生成克隆(clone)。包括 Docker 在内的大多数 Linux 容器,都支持对 ZFS 卷的直接挂接。我们可以看到, ZFS on Linux (ZoL)的移植是成熟稳定的。但是,除非用户“对 ZoL 具有丰富的经验”,否则并不推荐当前在生产环境中使用ZFS Docker 存储驱动。Dotmesh 计划将在工具中囊括所需的这些专业经验。

Dotmesh 节点以集群方式组织。所有节点使用 etcd 以“网格”方式关联,构成一个集群,其中每个节点运行 Dotmesh 服务器。Dotmesh 的文档提供了在 Docker、通用 Kubernetes 集群和 GKE(Google Container Engine)上安装 Dotmesh 服务器的指导。集群中的任一节点,都可以看到并操作同一组 Dot。Dotmesh 实现将 datadot 上的数据按需在集群中的节点间移动。

在所有分支上的全部提交,会自动地复制到每一个节点上。其中唯一不被复制的,是每个分支的所有 subdot 中的未提交的状态,即“脏”状态。“脏”状态存储在称为分支“主节点”的单个节点上。对“脏”状态的提交,可以确保数据被复制到了多个节点上。

服务器进程间使用两种方式通信。一种是使用etcd 中的共享状态,通过42380 端口在节点间通信。另一种使用6969 端口通过HTTP 通信。在Dotmesh 文档指出,使用6969 端口的HTTP 通信是未加密的,无法保护通信免受攻击者的攻击。因此,必须在集群中锁定这些端口。如果集群要扩展到不信任的网络上,必须使用VPN。

图2 Dotmesh 的架构(图片来自于 Dotmesh 文档

Dotmesh FAQ 还阐明了该工具与 Portworx Rook 等其它容器和云原生存储产品的不同之处:

事实上,Portworx 和 Dotmesh 解决了不同的问题。我们认为,Portworx 提供了一种同步复制的块存储,它解决的是生产环境中容器的存储问题。是否采用 Portworx,通常是一个运维上的决策。Portworx 很一种很好的工具,并且对于很多客户都是一种必要的组件,尤其是在本地部署环境中。这时用户并不具有 EBS 或 GCE PD 等技术可用,或者是缺乏这些技术。

在 FAQ 中还指出,团队并未试图将 Dotmesh 构建成另一种同步复制块存储系统,而是意在“解决更广泛、更专注于工作流的问题,将数据置于整个软件开发生命周期中的正确位置”。团队希望达成的目标是可以“捕获、组织和共享应用状态,即整个应用的快照”,尤其聚焦于开发人员的工作流,并构建基于微服务的应用和使用混合持久化(Ployglot persistence)管理状态。

Dotmesh 项目的网站和 GitHub 仓储中,提供了更丰富的信息。开发人员可以通过一个交互式的 Katacoda 教程尝试使用该工具。

查看英文原文: Subtree Release “Dotmesh”, a Git-like CLI for Capturing, Organising and Sharing Application States

2018 年 2 月 12 日 18:00794
用户头像

发布了 387 篇内容, 共 106.4 次阅读, 收获喜欢 243 次。

关注

评论

发布
暂无评论
发现更多内容

Test

haibin369

《手写Mybatis》第4章:Mapper XML的解析和注册使用

小傅哥

小傅哥 mybatis 工厂模式 建造者

一文了解垃圾回收算法中的引用计数算法

宇宙之一粟

垃圾回收算法 引用计数 4月月更

python 包之 Pillow 图像处理教程

autofelix

Python 图像处理 Pillow 4月月更

spring-cloud 链路追踪

Rubble

4月日更

脉冲能量|Committer 专访——李理:Apache Pulsar 项目“体验师”

Apache Pulsar

开源 云原生 Apache Pulsar Apache Pulsar 社区 运维‘

净推荐值(NPS)完整行动指南

龙国富

客户体验 NPS 净推荐值 北极星指标 客户忠诚度

微信朋友券的高性能复杂度

CityAnimal

架构实战营 #架构实战营 「架构实战营」

Excelize 发布 2.6.0 版本,功能强大的 Excel 文档基础库

xuri

golang Excel Apache POI Go 语言 Excelize

不写代码,带你徒手开发一个健康打卡应用

华为云开发者社区

无代码 AppCube 应用开发 健康打卡 可视化编排

都2022年了,HDFS为何还如此能战

华为云开发者社区

大数据 hadoop hdfs 分布式文件系统 大数据存储

B 端 SaaS 产品自动化事件设计 - 规则表达式

龙国富

自动化 SaaS 正则 B端 规则表达式

为什么做开源需要懂异步协作?

腾源会

开源 腾源会

使用和风天气 API 10分钟搭建天气预报数据看板

蒋川

API 天气api

华为云GaussDB(for Influx)揭秘第五期:最佳实践之子查询

华为云开发者社区

数据库 华为云 GaussDB(for Influx) 子查询 InfluxQL

状态机引擎在vivo营销自动化中的深度实践 | 引擎篇02

vivo互联网技术

服务器 状态机

架构实战营作业 - 模块二

haibin369

「架构实战营」

10个商品图策略,引导亚马逊卖家提升客户购物体验

龙国富

电商 商品 亚马逊 客户体验

13个问题帮你选型 “客户体验管理SaaS平台”

龙国富

SaaS 选型 客户体验 CEM CXM

大家好啊,世界您好啊

InfoQ_353bc6b96230

超nei卷!连黑客勒索软件团伙都开始谈客户体验…

龙国富

黑客 客户体验 drakside 客户至上

java培训关闭流方法有顺序吗

@零度

JAVA开发 包装流

面试官:Redis的事务满足原子性吗?

码农参上

redis 事务 4月月更

自己动手写Docker系列 -- 5.5实现容器停止

Go Docker 4月月更

为啥JS/TS里都会有"use strict"

华为云开发者社区

js ts 严格模式 use strcit 使用严格

十年磨一剑,墨菲安全正式发布开源项目murphysec

墨菲安全

开源安全

快速尝鲜:RabbitMQ 搭建完就得用起来

阿Q说代码

RabbitMQ springboot 4月月更 消息确认机制

企业知识管理的解决方案

小炮

知识管理 企业知识管理 企业知识管理工具

敲重点!这些更新将会影响HarmonyOS原子化服务上架

HarmonyOS开发者社区

HarmonyOS 原子化服务

Linux驱动开发-编写PCF8591(ADC)芯片驱动

DS小龙哥

4月月更

Subtree发布Dotmesh,使用类似Git的CLI实现应用状态的捕获、组织和共享_数据库_Daniel Bryant_InfoQ精选文章