【.com快言】随着组织将业务转移到云环境,他们很快意识到,在一些最关键的应用背后,那些老式的关系型数据库不仅限制了迁移速度快,也根本无法有效实现业务的弹性扩展。很多企业希望在保持Oracle、SQLServer、Postgres、MySQL等关系型数据库可靠性的同时,享受云服务带来的规模效应、全球稳定等“红利”。为了满足这样的需求,人们开始转向NoSQL数据库。但由于NoSQL并非完全旨在提供真正的一致性,因此它不能用作事务数据库。当然,最近出现了一些声称提供“ACID事务”的NoSQL解决方案。但是,它们无法提供会计、库存控制和身份管理等关键任务所需的隔离级别。DistributedSQL-ANewDatabase2012年,Google发表了一篇关于Spanner的论文。本文介绍了一种全新的基于分布式系统的分布式数据库,可以全局扩展。总的来说,GoogleCloudSpanner是一个可扩展、多版本、同步复制的数据库。它是第一个可以在全球范围内分发数据并支持外部一致的分布式事务的系统(有关详细信息,请参见--https://ai.google/research/pubs/pub39966)。接下来,在此基础上,我们来讨论一下这类分布式SQL的基本概念,尤其是如何实现可扩展性和一致性。总的来说,分布式SQL数据库要想在分布式环境下真正做到可扩展,具有以下七大核心特性:1.可扩展性正如我们无需大量准备就可以实现可扩展计算一样,分布式SQL数据库可以适应无缝扩展在不增加操作复杂性的情况下优化云环境。也就是说,它具有在多个分布式参与者之间平均分配数据的能力。2.一致性分布式SQL数据库必须在分布式环境中提供高度隔离。云环境往往由各种分布式系统和微服务组成,不同的调用和操作可能指向同一份数据,我们很难保证事务的一致性。除了调节资源争用,分布式SQL数据库还可以提供与单实例数据库相同的事务隔离级别。3.健壮性分布式SQL数据库无需任何外部工具即可提供最高级别的健壮性。通过云服务为我们的业务提供持续在线的环境,分布式数据库可以最大限度地减少故障恢复时间并自动复制数据而无需任何外部配置。4.地域复制由于云服务可以以可接受的服务水平到达世界各个角落,分布式SQL数据库也可以突破地域限制。在复杂、广泛、分散的地理环境中,可以进行分布式处理和数据存储,满足各地用户的业务需求。5、支持SQL众所周知,SQL是数据库使用的结构化语言,是所有应用逻辑的默认语言。凭借其通用性,我们无需重新培训开发人员即可熟练地连接和调用数据库资源。除了上面提到的Spanner,AmazonAurora、Yugabyte、FaunaDB和CockroachDB等都可以支持SQL。6.数据本地化在分布式系统中,由于数据分布在各个区域的数据中心,应用架构师往往需要知道各个站点的位置,并在程序逻辑中找到最近的位置,以便将需要调用的存储进行数据绑定是应用程序的一部分。然后,分布式SQL可以根据其数据表中的某些字段对数据进行地理分区,从而使数据更接近用户端。这就是所谓的数据库的数据主权(datasovereignity)问题。因此,开发人员可以确保用户可以低延迟访问他们的信息,从而最大限度地减少云端数据传输的成本和流量开销。7、多云(Multi-cloud)模式分布式SQL数据库的一个独特之处在于:半自治单元(semi-autonomousunits),可以参与更大的系统。也就是说,每个单元都可以自行部署,然后加入一个更大的系统,例如CockroachDB集群。通过这个特性,分布式SQL数据库可以更好的扩展到真正的多云环境中,而不是仅仅依赖单一的网络来完成数据分发。在这种模式下,参与者的云服务类别将不再受到限制,他们可以位于任何地方,任何类型的公共云、私有云,甚至是单个本地(on-premise)实例。显然,这对于我们的分布式混合和多云环境中的各种应用程序至关重要。分布式SQL的基本要求以上七大特点可谓是云环境下分布式SQL所特有的。但归根结底还是数据库,因此还应具备数据库的以下基本功能:可管理性:用户可以使用一套命令行或图形工具方便地安装和配置目标数据库。用户可以通过运行环境的控制、数据生命周期的管理、定期的备份和恢复,创建数据表、定义和实现schema、设置索引和分区、重建DDL。可优化:DBA可以深入了解数据库在查询响应方面的性能,并使用基于成本的优化器等高级功能来优化查询效率。安全性:与企业中其他常用软件类似,安全性是一个不可忽视的环节。数据库应该提供认证、授权和问责等AAA机制。而且这些功能不仅要在数据库内部是独立的,还应该集成一个具有身份管理和治理功能的集中管控系统,对流转的各个层级(包括表、行、列层级)的数据进行管控。通过整个系统。制定一致的政策。可集成性:显然,数据库需要能够通过经过测试或已知的驱动程序与前端应用程序集成,以实现批量采集或导出数据等服务。同时,数据库还应该通过使用ETL(Extract-Transform-Load)工具将捕获的数据与数据流分析或云存储等更高级的服务相集成。当然,上述所谓的“基本”功能需求并不简单。他们旨在为企业级应用程序提供更成熟的数据库。总结分布式SQL数据库作为一个新兴的品类和演进方向,在数据一致性和本地化方面也需要进一步与云环境配合,不断完善。毕竟在恶劣的生产环境中,这样的数据库会遇到更多与性能和效率相关的实际问题。上面提到的CockroachDB是一个云??原生的分布式SQL数据库。可以帮助各种企业级应用将最基础的工作负载和部分关键任务迁移到云端,实现对各种高级云原生环境的策略编排。您可以尝试将其作为了解分布式SQL的切入点。原标题:DistributedSQL:AnEvolutionoftheDatabase,作者:JimWalker
