使用etcd作为主存储/数据库?

Cho*_*ate 31 database nosql coreos etcd kubernetes

可以将etcd用作可靠的数据库替代品吗?由于它是以持久方式分发和存储键/值对,因此它将是一个很好的替代nosql数据库.此外,它有一个很棒的API.有人可以解释为什么这不是一件事吗?

Lak*_*kar 42

ETCD

  • etcd是一个高度可用的键值存储库,Kubernetes使用它来持久存储其所有对象,如部署,pod,服务信息.
  • etcd具有高访问控制,只能在主节点中使用API​​访问.除master之外的集群中的节点无权访问 etcd存储.

nosql数据库

为什么etcd不是替代品

  • etcd不能存储在内存中(ram)它们只能保存在磁盘存储中,而redis可以缓存在ram中,也可以保存在磁盘中.

  • etcd没有各种数据类型.它只用于存储kubernetes对象.但redis和其他键值存储具有数据类型的灵活性.

  • etcd保证只有很高的可用性,但不会给你快速的查询和索引.所有nosql键值存储都是以快速查询和搜索为目标构建的.

虽然很明显etcd不能用作替代的nosql数据库,但我认为上面的解释将证明它不是一个合适的替代品.

  • “仅存储kubernetes对象”->这是不正确的。尽管Kubernetes是etcd的主要客户之一,但这并不意味着只能将kubernetes对象存储在etcd中。etcd的目标更多是在分布式环境中存储数据。 (19认同)
  • 这里的缺点都是错误的,可能是因为作者只在 Kubernetes 环境中使用过 etcd。etcd 在内存中工作,仅将日志存储在磁盘上。etcd 将数据(键和值)存储为二进制数组;最终用户可以应用他们想要的任何类型(通常通过将值存储为 JSON)。etcd 使用 btree 来索引键,这与大多数其他数据库在通用数据上使用的索引相同。我想它不使用 SQL,但适合键值数据库中数据的“查询和搜索”在 etcd 中速度非常快。 (14认同)
  • 这个答案不应该被任何人关心。第二部分完全错误。 (5认同)
  • 为什么说“ etcd具有较高的访问控制,只能使用主节点中的API进行访问。除master以外的群集中的其他节点都不能访问etcd存储”。部署自己的etcd与部署自己的数据库一样容易,并且可以为您想要的任何实体提供访问权限? (2认同)
  • 我不认为结论符合整个讨论,我认为 etcd 可以用作非 SQL 数据库的替代品,真正的答案是这取决于您的用例以及您愿意做出哪些权衡 (2认同)

小智 9

ETCD.IO网站:

etcd 是一个高度一致的分布式键值存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以在网络分区期间优雅地处理领导者选举,并且可以容忍机器故障,即使是在领导节点中也是如此。

它有一个使用 http 和 json 的简单界面。它不仅仅适用于 Kubernetes。Kubernetes 只是使用它的关键应用程序的一个示例。

你说得对,这应该是一件事。一个很好的可靠的数据存储,具有易于使用的 API,以及使用 raft 协议在事情发生变化时告诉您的好方法。这对于功能切换和其他需要了解所有内容的项目来说非常有用,并且比在 SQL 数据库中放置触发器并让它向外部应用程序发送事件或非常糟糕的轮询之类的事情要好得多。

因此,如果您正在编写类似 kubernetes 用例 >> 的内容,那么它对于分布式应用程序来说是一个经过充分验证的完美存储。

如果您正在编写与 kubernetes 用例非常不同的东西,那么您正在与所有其他 no-sql 数据库进行比较。但与 mongodb 之类的东西有很大不同,所以如果 mongodb 或类似的东西不适合你,它可能对你更好。

其他示例用户

M3是Uber创建的Prometheus大规模指标平台,使用etcd进行规则存储等功能

一致性 Jepson 在https://jepsen.io/analysiss上对 NOSQL 数据库一致性进行了很好的比较

ETCD 在https://etcd.io/blog/jepsen-343-results/上总结了他们的结果