将分布式应用程序连接到数据库:优点和缺点

一、介绍

随着公司跨不同地理区域的发展,统一业务流程的一种方法是实现与中央数据库通信的分布式应用程序。但是,此方法要求您将应用程序分解为两个单独的程序:服务器软件和客户端软件。

服务器软件应驻留在安全的云环境中,例如 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;

上述方法应该可以很好地工作,并且您需要在客户端的应用程序中更改最少的代码。但是,它具有以下缺点,应不惜一切代价避免。

  1. 直接连接方法要求软件的每个副本都将数据库凭据硬编码在某处。即使您可能尝试加密连接字符串,单个安全漏洞或漏洞也会使您的应用程序毫无价值。如果黑客设法获取连接字符串,他们可以破解应用程序中的每个用户帐户,因为他们已经可以直接访问中央数据库。
  2. 由于不同地理区域中的用户可以访问分布式应用程序,因此直接连接方法要求您向每台主机打开数据库端口。这为机器人、DDoS 和暴力攻击创造了一个非常好的途径。
  3. 紧密耦合。由于已将连接字符串保存在分发的每个软件副本中,因此数据库凭据中的单个更改将意味着锁定所有用户。

从上述缺点可以看出,将分布式应用程序连接到云数据库的直接方法并不是最佳方法。在下一步中,您将看到一种更可靠且几乎防故障的方法。

三、接口连接方式

API 代表应用程序编程接口。这是一个中间件,允许您的前端应用程序以安全的方式与后端应用程序通信。

API 层应驻留在云基础架构中,例如 Vultr 的云计算实例或 VPS。基本上,以下是通过 API 将分布式应用程序迁移并连接到云数据库的基本过程。

  1. 注册一个云计算帐户。
  2. 然后,启动一个 Linux 服务器。例如,Ubuntu 20.04 对于云计算初学者来说是一个很好的操作系统。
  3. 接下来,在 Linux 服务器中安装数据库服务器。例如,您可以安装 MySQL 或部署 PostgreSQL 数据库服务器。
  4. 在服务器上创建新数据库,然后从本地数据库导入数据。
  5. 接下来,使用您喜欢的脚本语言(例如 PHP、Golang、Python 等)创建一个 API。请参阅以下指南,了解创建 API 的基础知识。
    • 在 Linux 上使用 Golang 和 MySQL 8 设计现代 API。
    • 在 Ubuntu 20.04 上使用 PHP 和 MySQL 创建一个 JSON REST API。
  6. 您的 API 应支持身份验证、授权、排序、筛选、分页和自定义字段选择。
  7. 然后,您应该将 API 源代码放在 Web 服务器的根目录中,以便可以通过 HTTP 方法(、、 和 )公开访问它。GETPOSTPUTDELETE
  8. 接下来,重新设计应用程序(例如,桌面软件或移动应用)以使用新的 API 终结点,而不是连接字符串。现代编程语言附带了不同的库,允许您使用最少的代码执行此操作。例如,当使用Android编写应用程序时,您可以使用Volley库。同样,对于 .NET 应用程序,可以使用 WebRequest 类向 API 终结点发出 HTTP 请求。
  9. 典型的 API 终结点类似于以下 URL。
    http://www.example.com/api/v1
  10. 最后,使用新的 API 设置发布应用。

API 连接方法可能需要更长的时间才能实现。此外,它还要求您完全重组前端应用程序。但是,它具有以下优点。

  1. 数据库凭据仅保存在 API 层中。最终用户在连接到云应用程序时应通过 HTTPS 使用其帐户凭据。这种方法更安全,如果发生中间人攻击,只有少数用户帐户受到威胁,而不是整个数据库。
  2. 松耦合。使用 API 方法时,应用程序有 3 层。即前端、中间件 (API) 和后端(数据库)。这意味着单个组件中的更改可能并不总是影响其他组件的存在。
  3. 代码重用。API 方法促进代码重用。多个客户端应用程序可以使用 API 数据。例如,您可以创建一个 API,将公司门户、移动应用程序、桌面应用程序、基于 Web 的软件等连接到中央数据库。这意味着您只需要维护一个 API 端点,这大大降低了编程成本和运行 IT 基础架构所需的员工数量。

三、结论

在权衡了这两种方法之后,很明显 API 方法胜出,并且始终是推荐的方法。此外,像 Facebook 和T witter 这样的大公司使用API 方法,因为它是高度安全的。

如果你的公司正在大幅增长到不同的地理区域,则应考虑在云中设计和托管分布式应用。最后,您将拥有一个更安全、更稳定的弹性系统,最重要的是,您将拥有一个用于所有业务流程的中央数据库。

可在下一个项目中使用的顶级开源数据库应用程序

一、介绍

多年来,开源社区提出了许多数据库应用程序。庞大的数据库列表有时会让人不知所措,为下一个数据驱动应用程序做出选择可能会令人困惑。

不久前,兼容性是为项目选择正确的数据库解决方案时的主要关键。例如,WordPress总是可以与MariaDB或MySQL服务器一起使用。然而,在现代,来自才华横溢的开发人员的创新为等式增加了许多因素。

今天,在将自己投入数据库系统之前,您需要考虑安全性、可靠性、可伸缩性、报告、支持、易于集成、托管成本、适用性和可维护性。本教程将引导您了解可在下一个项目中使用的顶级开源数据库管理系统及其功能和用例。

二、关系数据库管理系统

关系数据库管理系统(RDBMS)是数据库解决方案的主要流行类别。在此模型中,应用程序将数据存储在基于行的表结构中,可以使用结构化查询语言 (SQL) 查询这些结构。RDBMS 应用程序具有不同的功能,可解决数据的一致性、完整性和准确性问题。

以下是可以在项目中使用的基于 SQL 的主要数据库。

2.1、MySQL 数据库服务器

在部署云原生应用程序时,MySQL是最好的数据库之一,也是内容管理系统(CMS)的首选数据库。它与其他开源应用程序(如WordPress,OpenCart,Drupal,Magento,Joomla等)集成得很好。

MySQL 附带了多种安全功能,包括 TLS、数据加密、密码策略和基于角色的权限。在可扩展性方面,您可以跨服务器池使用 MySQL 组复制功能来实现水平扩展。

MySQL 还支持事务,是需要数据库一致性的关键任务应用程序的不错选择。例如,电子支付解决方案。在一些技术堆栈中使用MySQL 的最受欢迎的公司包括 Uber,Amazon,Twitter,Pinterest 等。

2.1.1、使用 MySQL 服务器的好处

  • 易于与流行的编程语言(如PHP,Golang,Node.js等)集成。
  • 支持流行的 SQL 语言。
  • 高度安全。
  • 支持交易。
  • 在执行基于行的计算时支持窗口函数。
  • 有大量的在线文档用于学习目的。
  • 拥有成本低。

2.1.2、可能的 MySQL 用例

  • 个人博客。
  • 内容管理系统。
  • 电子商务网站。
  • 公司门户。
  • 企业资源规划 (ERP) 应用程序。

按照以下指南在您的 Linux 服务器上安装 MySQL。

  • 在您的 Linux 服务器上安装 MySQL Server。

2.2、MariaDB 数据库服务器

是 MySQL 的一个分支,由最初的 MySQL 开发人员编码,以提供高性能,稳定性和开放性。MariaDB 具有严格的安全措施,包括可插拔身份验证模块 (PAM)、轻量级目录访问协议 (LDAP)、内部安全/密码检查等。一些支持MySQL的CMS,如WordPress,也可能很好地与MariaDB安装配合使用。

此外,MariaDB 服务器支持现代和更好的存储引擎,如 Cassandra。后者允许您在单个数据库服务器中同时运行 SQL 和 NoSQL 函数。MariaDB 的一些最杰出的客户包括三星,Auto Europe,CCV 和诺基亚。

2.2.1、使用 MariaDB 服务器的好处

  • 支持读取扩展和高速多主复制。
  • 经济高效的数据库解决方案。
  • 支持 Kafka,Spark,Python,Java 和 C 的简化数据导入连接器。
  • 支持 SQL 标准。

2.2.2、可能的 MariaDB 用例

  • 像基于云的销售点终端一样构建 CMS。
  • 创建动态企业网站。
  • 管理用户帐户和身份验证。
  • 构建金融应用程序。
  • 创建基于健康的系统。

通过以下链接在您的服务器上安装 MariaDB。

  • 在您的 Linux 服务器上安装 MariaDB 服务器。

2.3、PostgreSQL 数据库服务器

PostgreSQL 是最先进的数据库解决方案之一,是 Ruby,Python 和 Golang 项目开发人员的首选。PostgreSQL 支持高级数据类型,包括数组,JSON,hstore和特殊类型,如几何数据和网络地址。PostgreSQL 具有高度可扩展性,您可以使用它为任务关键型应用程序设置主/副本集群。

其他值得注意的 PostgreSQL 功能包括基于角色的权限,复杂的锁定机制,外键,多列索引,事务,存储过程等。PostgreSQL数据库服务器的主要客户包括 Apple,IMDB,Instagram,Reddit,Skype 和 Spotify。

2.3.1、使用 PostgreSQL 服务器的好处

  • SQL 支持。
  • 高级和自定义数据类型。
  • 按需可扩展性和灾难恢复功能。
  • 强大的访问控制,包括基于角色的权限、LDAP 和通用安全服务应用程序接口 (GSSAPI)。

2.3.2、可能的 PostgreSQL 用例

  • 在 ERP 应用程序中管理用户数据。
  • 在电信应用程序中存储聊天和通话数据。
  • 在电子商务应用程序中运行产品和客户数据。
  • 管理政府和商业智能数据。

按照以下指南在 Linux 服务器上安装 PostgreSQL 数据库。

  • 在 Linux 服务器上安装 PostgreSQL。

三、NoSQL数据库管理系统

NoSQL 不仅是 SQL 的首字母缩写。它是一种使用非表格数据结构来存储信息的数据库体系结构。大多数 NoSQL 应用程序实现键值存储、文档、宽列或图形来存储数据。NoSQL 数据库的出现为开发人员提供了灵活的模式,可以处理大量数据而不会出现可扩展性问题。

以下是您可以在下一个项目中使用的最常见的 NoSQL 数据库。

3.1、Redis 数据库服务器

Redis 是一个内存数据库,它实现键值模型来存储数据。它快速、可靠且安全。由于 Redis 将数据存储在计算机的 RAM 中,因此在缓存等特殊功能方面,它的性能优于所有基于 SQL 的数据库。其灵活的数据结构、简单的命令协议和复制功能使其成为现代应用程序的理想选择。使用Redis的知名公司包括 Twitter,Flickr,GitHub,Craigslist 等。

3.1.1、使用 Redis 服务器的好处

  • 非常快。Redis 每秒可以执行数十万个写入/读取请求。
  • Redis API 库支持主要的编程语言,包括 PHP、Golang、Java、Python 等。这使得集成更容易。
  • Redis 支持低延迟高性能复制,允许您跨多个服务器水平扩展应用程序。
  • 在特殊情况下,您可以将 Redis 配置为将数据持久化到磁盘,以避免在重新启动服务器时丢失数据。

3.1.2、可能的 Redis 用例

  • 在电子商务网站中缓存产品数据或常用信息。
  • 存储会话数据以进行身份验证。
  • 为健身和游戏应用程序创建排行榜。
  • 创建发布者/订阅者应用以分离任务关键型应用程序的前端和后端。

单击下面的链接在您的服务器上安装 Redis。

  • 在您的 Linux 服务器上安装 Redis。

3.2、MongoDB数据库服务器

MongoDB 使用 JavaScript 对象表示法(JSON)格式来存储数据。MongoDB 数据库中的每条记录都称为一个文档。文档可能包含一个或多个键值对,这些键值对允许您创建灵活的文档架构来存储字符串、数字、对象和数组。MongoDB 带有强大的查询和分析工具,用于从庞大的数据库生成报告。一些实施MongoDB的公司包括福布斯,丰田,Sanoma,Vivint 等。

3.2.1、MongoDB 服务器的优点

  • 处理大型数据集时的按需分片。
  • 用于存储非结构化数据的灵活文档架构。
  • 高性能和可用性。MongoDB 比大多数关系数据库更快。
  • 比 SQL 更容易掌握的简单查询语法。

3.2.2、可能的 MongoDB 用例

  • 构建税务和咨询服务应用程序。
  • 处理智能工厂数据。
  • 存储在线学习平台数据。
  • 运行银行交易平台。
  • 创建保险比较应用程序。
  • 构建客户智能应用程序。
  • 运行科学实验。

按照下面的链接安装 MongoDB 应用程序。

  • 在 Linux 服务器上安装 MongoDB。

3.3、流入数据库数据库服务器

InfluxDB 是一个时间序列数据库应用程序,用于开发物联网行业的应用程序。它带有一个内置的HTTP API,允许您使用更少的代码存储和查询数据库中的数据。由于它使用简单的索引模型,InfluxDB 可以处理大量的数据库写入,使其成为时间序列应用程序的最佳选择。使用 InfluxDB 的一些公司包括 Capital One,Texas Instruments,Adobe,MediaLin 等。

3.3.1、InfluxDB服务器的优势

  • 统一的 API 支持,用于处理数据引入、查询、存储和可视化。
  • 可扩展性。InfluxDB 每秒可以处理大量写入,而不会出现可扩展性问题。
  • 实时分析数据,以识别模式/趋势并预测未来结果。

3.3.2、可能的流入数据库用例

  • 存储智能手表、汽车跟踪设备、智能电表等的物联网应用数据。
  • 为按需金融服务提供支持,例如分析不同货币的市场趋势。
  • 监控科学仪器以预测趋势、提高效率并推动未来的发现。

按照以下指南在您的服务器上安装 InfluxDB。

  • 在 Linux 服务器上安装 InfluxDB。

四、结论

本指南将带您了解可在下一个大项目中使用的不同开源数据库管理系统。本教程重点介绍了 SQL 和 NoSQL 数据库,以便您更好地了解根据您的特殊用例可以使用的最佳数据库。对于复杂的应用程序,您可以使用两个数据库系统的组合来形成一个混合系统。例如,在电子商务平台中,您可以使用 Redis 进行身份验证,并使用 MySQL 来存储产品和客户数据。