CockroachDb设计:分布式一致性OLTP SQL数据库

# CockroachDb设计:从beta到1.0的路

此博文的版本最初于2017年5月1日发布,并已修改,以提供最新的信息

随着最近的1.0版本,CockroachDB现在是一个生产环境就绪的数据库。 1.0展示了CockroachDB的核心功能,同时通过灵活支持各种云部署的云本机架构为用户提供了更好的性能和稳定性。 它包含了允许我们的用户在生产环境中成功运行CockroachDB的核心功能。 现在我们的1.0版本已经解决了,我想分享我们如何定义我们的目标使用场景(use case 以下写作用例),并深入了解在生产环境中运行该场景的实际产品特点以及功能。

CockroachDb 产品定位(use case)

我们将分布式OLTP作为我们的核心用例。 OLTP(Online Transaction Processing在线事务处理)涵盖了包含事务性质的程序,包括金融交易处理,库存管理,电子商务以及各种各样的Web应用程序。 OLTP数据库通常支持关键任务应用程序,从而直接驱动企业的成功。公司需要他们的OLTP数据库性能随着业务增长而不断增长,同时保持数据的安全和可用性。为了实现这一点,公司最终会“分布式”其数据库到多个服务器上,在这过程中通常会牺牲数据库的事务性。跨越多个数据中心的部署变得更加复杂,复杂的异步数据副本设置需要大量的部署和维护开销。

CockroachDB通过提供SQL的强大一致性与NoSQL的可扩展性相结合,实现分布式OLTP。这允许企业扩展其OLTP数据库,而不必在数据库跨越多个数据中心时进行应用程序更改。

然而,上述讨论无法覆盖CockroachDB提供的更大的优势:能够正确构建云原生体系架构。 CockroachDB没有单点故障,高可用,自动化操作,水平可扩展性,完全开源。使用CockroachDB,用户可以将机器添加到其集群,并观察CockroachDB自动重新平衡不同节点的数据。副本的同步也是内置的,所以即使节点出现故障,其他节点也可以修复错误,继续返回正确一致的数据。 CockroachDB也适用于多个数据中心,因此即使面对数据中心故障,也可以保证数据安全。

CockroachDB 1.0实现生产环境就绪

在决定了我们的目标用例之后,我们需要定义怎么样才能上生产环境。 对我们来说,这意味着需要构建特定核心功能并支持云本地分布式OLTP部署,加上稳定性,性能和可用性。

CockroachDb 核心功能

我们已经解决的两个核心功能对于分布式OLTP场景至关重要,分布式SQL和多活可用性。 SQL界面提供了一个功能强大且熟悉的API,开发人员可以使用这些API来定义其事务工作负载,并提供强大的社区和现有的工具生态系统。 CockroachDB支持很大一部分的标准SQL ,包括辅助索引,外键,JOIN和聚合。 CockroachDB还支持分布式ACID事务和查询。对于应用程序开发人员,CockroachDB集群显示为单个逻辑数据库。对于运营商,CockroachDB集群可以通过简单地添加CockroachDB节点来支撑增长数据存储和吞吐量需求。

除了支持SQL API之外,我们还希望以保持强一致性,容错性和可扩展性的方式支持CockroachDB的分布式部署。这使我们成为我们的第二个核心功能,多活可用性。

多活可用性是从primary-secondary和active-active的演进 - 设置到使用基于自动数据一直的副本在三个或更多副本中始终复制的部署,所有这些副本都是主动服务R / W客户端流量。多活可用性允许客户端流量动态负载平衡,以利用可用的副本,而不是依赖脆弱的故障转移机制。因为它采用强一致的副本,多活可用性可以避免过时的读取和解决冲突。副本在一个Raft一致组中这个范围是强一致。一个最佳实践:部署在三个数据中心的CockroachDB可以随着容量的增加而自动扩展和重新平衡,并在数据
中心级灾难中生存下来。

稳定性

通过我们的1.0版本,我们希望用户不仅能够测试和利用我们的核心功能,而且还可以很轻松地在生产环境运行CockroachDb,同时减少停机时间。我们在各种混乱情况下,通过多个云部署运行多个CockroachDB集群,以确保稳定性和可用性。每一次代码提交我们都运行严格的测试套件,并与Kyle Kingsbury合作,对CockroachDB运行Jepsen测试,以保证数据的完整性。

当运行CockroachDb在生产环境,我们的用户也可以预期减少停机时间,支持无停机滚动升级和证书轮换。我们的CockroachDB Enterprise备份和还原功能使用户能够以分布式方式有效地运行定期和增量备份。

性能

与使用基于一致性的副本的任何数据库一样,CockroachDB查询会在读取和写入时达到规定的机器时产生网络延迟。我们已经做了大量工作,通过读协议,并行化SQL执行以及在高争用场景下的优化来提高查询性能。对于希望将我们部署到多个数据中心的用户,基于负载的协议重新平衡允许接收最多流量的范围以提供更快的读取。

为了启用分布式SQL,CockroachDB使用排序机制,数据分为范围,而不是散列机制来分发数据。这允许我们进行高效扫描并支持典型的SQL功能。我们还构建了分布式SQL层,以分布式方式处理读取查询,以实现查询速度的显着增加。

可用性

除了稳定性和性能之外,我们希望开发人员和操作员更容易地采用CockroachDB。我们利用PostgreSQL产品线协议来利用现有和强大的PostgreSQL生态系统。开发人员可以使用现有的客户端驱动程序和ORM与CockroachDB进行交互,只要它们与CockroachDB兼容。 CockroachDB也非常灵活和可配置,使操作员轻松满足现代化可用性要求。运营人员可以在集群,数据库和表级别指定区域配置。他们还可以在云端或流行的容器中部署CockroachDB。

与CockroachDB 一起努力

CockroachDB仍然是一个相对年轻的数据库,1.0有几个值得关注的注意事项。首先,虽然CockroachDB使用PostgreSQL协议,但它不支持PostgreSQL的所有功能 - 特别是PostgreSQL特定的扩展。这意味着并不是所有使用PostgreSQL的工具都可以与CockroachDB一起使用。第二,分布式系统带有网络延迟。某些数据模型和业务程序的成本更高。第三,为了更快的查询,在SQL层上仍然有很多优化,因此目前的形式的CockroachDB更适合事务负载与分析工作负载。与任何1.0版本一样,重要的是首先测试针对CockroachDb的特定业务程序,然后再转入生产环境。

我们开源社区有大量粉丝,有几个渠道可供用户帮忙。我们的Gitter渠道,论坛和GitHub由我们的工程团队积极运维。请与我们联系,提出您的任何问题和建议。


原文: https://www.cockroachlabs.com/blog/coming-soon-what-to-expect-in-cockroachdb-1-0/
github: https://github.com/cockroachdb/cockroach

你可能感兴趣的:(分布式数据库,CockroachDB)