每个应用程序开发人员都需要了解地理分布式数据库

102 阅读4分钟

每个应用程序开发人员都需要了解地理分布式数据库

Denis Magda 【hudson译】

2022年4月5日

过去七年来,我一直在研究分布式系统、平台和数据库。早在2015年,许多架构师就开始使用分布式数据库来扩展到单台机器或服务器的边界之外。他们选择这样一个数据库是因为它的水平可伸缩性,即使它的性能与传统的单服务器数据库相当。

现在,随着云原生应用程序和无服务器架构的兴起,分布式数据库需要做的不仅仅是提供水平可伸缩性。架构师要求数据库在主要云区域中断期间保持可用,支持混合云部署,为客户和最终用户提供接近的数据。这就是地理分布式数据库发挥作用的地方。

但作为一名Java开发人员,我有两个问题:

  • 我应该在为云原生地理分布式数据库创建应用程序方面投入多少精力?
  • 这只是对现有应用程序的快速重构还是完全重新设计/重写? 创建Java应用程序时的关键见解

工作量因用例而异。然而,即使如此,在构建简单应用程序时,您也可以从“入门”体验中学到很多。在本文中,我将分享使用YugabyteDB 作为地理分布式数据库的一些关键思路。您可以在 GitHub 找到完整源码。 现在让我们开始把!

地理分布式数据库中的数据库部署

YugabyteDB提供了一个完全管理的云版本,支持AWS和GCE,类似于其他云原生数据库。这对作为开发人员的我来说是一件大事。我只想让一个实例运行,这样我就可以专注于我的应用程序逻辑。

最终,我花了几分钟时间在AWS上创建了一个免费实例,并为我的应用程序复制了连接细节。正如预期的那样,体验顺利而迅速。为了编写一行代码之必须下载、安装和配置数据库的日子一去不复返了。

YugabyteDB云面板和我正在运行的实例。

YugabyteDB云面板和我正在运行的实例

地理分布式数据库中的数据库连接

作为一名后端开发人员,我非常感谢一个能够以SQL为本机语言的数据库。这缩短了学习曲线,让我可以重用现有的逻辑。即使我使用Spring Data或Micronaut,我仍然编写和执行直接SQL查询。

因为 YugabyteDB使用Postgres方言,我希望我的简单Java应用程序通过一个经典的JDBC接口连接到我正在运行的数据库实例。使用YugabyteDB,您可以选择标准PostgreSQL JDBC驱动程序或原生Yugabyte JDBC驱动,后者附带一些性能优势。我选择了后者。

几分钟后,我将笔记本电脑的IP地址添加到[IP允许列表]。我还编译并启动了示例应用程序,成功连接到云实例。JDBC连接逻辑与MySQL、PostgreSQL和其他关系数据库要求我遵循的逻辑没有什么不同。这是一个非常好的迹象。

地理分布式数据库连接。

更好的是,尽管我在测试中使用了一个免费的单节点实例,但即使我的数据库有60多个跨越多大洲的节点,连接逻辑也保持不变。对于应用程序开发人员来说,YugabyteDB是一个单一的逻辑实例,但具有与数据分区、节点间通信和查询路由相关的所有复杂性,这些都在幕后透明地进行。

地理分布式数据库中的基本CRUD操作

一旦连接逻辑就位,我引入了一些方法来创建示例表,然后通过JDBC连接查询和更新其记录。这意味着我的简单Java应用程序必须尽可能原始。因此,我选择了一个非常基本的用例:两个账户之间的转账。

示例表是使用标准的CREATE table命令创建的:

地理分布式数据库中的基本CRUD操作。

并正好填充了两个记录(足以评估入门体验):

地理分布式数据库中的基本CRUD操作

最后,在Postgres或MySQL中查询和更新类似表的SQL查询在我的地理分布式数据库中的工作方式相同。下面是两种方法的完整实现:第一种方法选择分布式记录,第二种方法使用分布式事务一致地更新记录:

地理分布式数据库中的基本CRUD操作。

结束想法

当代地理分布式数据库的创建者为我(应用程序开发人员)屏蔽了与分布式系统相关的大多数复杂性。我在一分钟内启动了一个分布式数据库实例,将其作为单个逻辑实例连接,并通过熟悉的SQL和JDBC接口查询数据库。我承认,我的简单Java应用程序远远不是一个包含底层特定数据库的优化实际的解决方案。然而,起步阶段和单服务器的数据库一样简单,这是一件大事。