一、介绍
随着公司跨不同地理区域的发展,统一业务流程的一种方法是实现与中央数据库通信的分布式应用程序。但是,此方法要求您将应用程序分解为两个单独的程序:服务器软件和客户端软件。
服务器软件应驻留在安全的云环境中,例如 Vultr 的云计算、裸机或 Vultr Managed Kubernetes (VKE)。这通常称为后端。在面向数据的应用程序中,您的后端必须绑定到关系数据库服务器,例如 MySQL 或 PostgreSQL。基于云的数据库更具弹性、可扩展性,并且可以处理大型工作负载。
另一方面,客户端软件是在用户的计算机或移动设备上运行的前端。例如,手机上的Facebook应用程序是客户端应用程序。您可以使用任何现代编程语言设计前端应用程序,包括Java,C#,VB.Net,Swift,Android等。
设计分布式应用程序时出现的唯一主要挑战是将本地客户端应用程序(例如,移动应用程序和桌面应用程序)链接到服务器软件(在线数据库)的最佳方法。在本指南中,您将学习可以实施的两种不同方法以及每种方法的优缺点。
二、直接连接方式
每个新的云计算程序员在将应用程序的后端连接到云时都会想到一个简单的想法,那就是更改数据库连接字符串。例如,如果您在本地部署了连接到本地 MySQL 实例的应用程序,则数据库连接字符串可能类似于以下代码片段。
Server=localhost;Database=sample_database;user=sample_user;password=EXAMPLE_PASSWORD;
现在,要将应用程序的数据库移动到云中,您只需启动云服务器,安装 MySQL 服务器并将连接字符串更改为以下设置,其中 是云服务器的域名。example.com
Server=example.com;Database=sample_database;user=sample_user;password=EXAMPLE_PASSWORD;
上述方法应该可以很好地工作,并且您需要在客户端的应用程序中更改最少的代码。但是,它具有以下缺点,应不惜一切代价避免。
- 直接连接方法要求软件的每个副本都将数据库凭据硬编码在某处。即使您可能尝试加密连接字符串,单个安全漏洞或漏洞也会使您的应用程序毫无价值。如果黑客设法获取连接字符串,他们可以破解应用程序中的每个用户帐户,因为他们已经可以直接访问中央数据库。
- 由于不同地理区域中的用户可以访问分布式应用程序,因此直接连接方法要求您向每台主机打开数据库端口。这为机器人、DDoS 和暴力攻击创造了一个非常好的途径。
- 紧密耦合。由于已将连接字符串保存在分发的每个软件副本中,因此数据库凭据中的单个更改将意味着锁定所有用户。
从上述缺点可以看出,将分布式应用程序连接到云数据库的直接方法并不是最佳方法。在下一步中,您将看到一种更可靠且几乎防故障的方法。
三、接口连接方式
API 代表应用程序编程接口。这是一个中间件,允许您的前端应用程序以安全的方式与后端应用程序通信。
API 层应驻留在云基础架构中,例如 Vultr 的云计算实例或 VPS。基本上,以下是通过 API 将分布式应用程序迁移并连接到云数据库的基本过程。
- 注册一个云计算帐户。
- 然后,启动一个 Linux 服务器。例如,Ubuntu 20.04 对于云计算初学者来说是一个很好的操作系统。
- 接下来,在 Linux 服务器中安装数据库服务器。例如,您可以安装 MySQL 或部署 PostgreSQL 数据库服务器。
- 在服务器上创建新数据库,然后从本地数据库导入数据。
- 接下来,使用您喜欢的脚本语言(例如 PHP、Golang、Python 等)创建一个 API。请参阅以下指南,了解创建 API 的基础知识。
- 在 Linux 上使用 Golang 和 MySQL 8 设计现代 API。
- 在 Ubuntu 20.04 上使用 PHP 和 MySQL 创建一个 JSON REST API。
- 您的 API 应支持身份验证、授权、排序、筛选、分页和自定义字段选择。
- 然后,您应该将 API 源代码放在 Web 服务器的根目录中,以便可以通过 HTTP 方法(、、 和 )公开访问它。
GET
POST
PUT
DELETE
- 接下来,重新设计应用程序(例如,桌面软件或移动应用)以使用新的 API 终结点,而不是连接字符串。现代编程语言附带了不同的库,允许您使用最少的代码执行此操作。例如,当使用Android编写应用程序时,您可以使用Volley库。同样,对于 .NET 应用程序,可以使用 WebRequest 类向 API 终结点发出 HTTP 请求。
- 典型的 API 终结点类似于以下 URL。
http://www.example.com/api/v1
- 最后,使用新的 API 设置发布应用。
API 连接方法可能需要更长的时间才能实现。此外,它还要求您完全重组前端应用程序。但是,它具有以下优点。
- 数据库凭据仅保存在 API 层中。最终用户在连接到云应用程序时应通过 HTTPS 使用其帐户凭据。这种方法更安全,如果发生中间人攻击,只有少数用户帐户受到威胁,而不是整个数据库。
- 松耦合。使用 API 方法时,应用程序有 3 层。即前端、中间件 (API) 和后端(数据库)。这意味着单个组件中的更改可能并不总是影响其他组件的存在。
- 代码重用。API 方法促进代码重用。多个客户端应用程序可以使用 API 数据。例如,您可以创建一个 API,将公司门户、移动应用程序、桌面应用程序、基于 Web 的软件等连接到中央数据库。这意味着您只需要维护一个 API 端点,这大大降低了编程成本和运行 IT 基础架构所需的员工数量。
三、结论
在权衡了这两种方法之后,很明显 API 方法胜出,并且始终是推荐的方法。此外,像 Facebook 和T witter 这样的大公司使用API 方法,因为它是高度安全的。
如果你的公司正在大幅增长到不同的地理区域,则应考虑在云中设计和托管分布式应用。最后,您将拥有一个更安全、更稳定的弹性系统,最重要的是,您将拥有一个用于所有业务流程的中央数据库。