解决方案深度剖析:使用 MongoDB 和 Elk Stack 构建具有网络处理和存储功能的高可用网络应用程序

介绍

高可用性网页应用程序设置为希望消除单个故障点和最小化停机时间的开发人员提供了优点。

Highly-Available Web Application Full Diagram

这种高可用性应用程序的设置被设计成一种假设的解决方案,可以提供:

  • 用于图像、文档和视频的处理解决方案,专注于存储、检索和连接
  • 可以扩展、修改或与电子商务解决方案集成的评分、领导板或采购解决方案
  • 也可以与电子商务解决方案集成的博客解决方案

在本文中,我们将讨论此设置的具体特征,并在更一般的层面讨论其组件,在每个部分的末尾,我们将链接到有关该主题的额外资源,以支持您考虑方法和最佳实践。

步骤1:使用私人网络创建前端服务器

Diagram of Step 1: Front-End Servers

典型的多层设置将演示层与我们的应用程序逻辑分开,将应用程序函数分开为层,从长远来看,解决问题和扩展过程变得更容易。

当我们选择服务器和资源时,我们可以考虑以下因素:

  • 我們將與媒體和影像資產進行什麼樣的工作?
  • 我們的計算需求會是什麼樣子?
  • 我們預測的流量類型和量是什麼樣的?
  • 我們計劃如何監控它?

我们的监控工具将帮助我们扩展我们的应用程序,并在这一层面和其他层面上构建资源。为了节约成本和采取安全措施,我们可以采取额外的步骤,将我们的应用程序的资源,包括前端服务器,分配到共享的私人网络中。

步骤 2:为前端服务器创建负载平衡器

Diagram of Step 2: Load Balancers

为了确保我们的应用程序的资源保持高可用性和性能,我们可以创建负载平衡器来管理我们的前端工作负载. 这些负载平衡器将重定向流量,使用定期健康检查和故障转移机制来管理服务器故障或故障。

为了优化其配置,我们可以考虑以下因素:

  • 我们会存储有关请求和用户的状态信息吗?
  • 我们需要根据CPU负载重定向请求吗?

这些因素将使我们能够为我们的配置选择最佳算法. 负载平衡器的工作还有一个额外的安全组件:我们可以配置它们以倾听特定端口并在端口之间重定向流量。

步骤 3:使用私人网络创建后端服务器

Diagram of Step 3: Back-End Servers

创建我们的应用程序的后端涉及另一个资源计算的集合。 再次,我们的应用程序的工作性质将决定我们的服务器的大小和资源。 要考虑的因素包括我们的服务器将在这个层面上完成的处理工作类型和量。

在这一层面,监测也将是重要的,以解决如下问题:

  • 我們正在處理什麼樣的圖像和媒體資產?
  • 我們從這些資產中提取資訊,或者只是從這些資產中提取或重新組合?
  • 我們擁有什麼樣的消費交易量和類型?

我们可以在我们共享的私人网络中将资源放置在这个层面,以便对潜在的带宽收费做出回应。

如何在Ubuntu 16.04上设置远程数据库以优化网站性能

第4步:安装HAProxy

Diagram of Step 4: HAProxy

类似于我们的负载平衡器如何处理外部请求,HAProxy管理我们前端和应用层之间的通信流程. 在其作为负载平衡器的功能中,HAProxy可以配置来聆听和重定向特定端口的流量。

步骤 5:创建 SQL 数据库

Diagram of Step 5: SQL Databases

对于我们应用数据的某一部分,我们将使用 SQL 数据库. 这对于需要当前、准确和一致的数据。销售交易、登录 / 登录信息和密码更改等事情,结构均匀且需要安全,使 SQL 数据库的使用成为合理的案例。

再次,我们将想考虑我们的指标:我们正在处理多少交易或安全请求?如果我们的负载很高,我们可能想考虑使用诸如ProxySQL等工具来平衡接入请求。

步骤 6:创建 NoSQL 数据库

Diagram of Step 6: NoSQL Databases

有了不那么统一或模型化的数据,我们可以使用 NoSQL 数据库. 对于图片、视频或博客帖子,例如,NoSQL 数据库提供了以非模型的方式存储项目元数据的能力. 使用这种类型的解决方案时,我们的数据将高度可用,其一致性将是最终的。

可根据请求负载和类型优化性能的因素包括:使用负载平衡解决方案来管理数据库之间的流量,在数据库和存储解决方案之间分发数据,并添加或破坏数据库(而不是复制它们)。

步骤7:添加区块存储

Diagram of Step 7: Block Storage

我们的设置将数据库存储功能与我们的应用程序的其他操作分开。我们的目标是提高数据的安全性和我们的应用程序的整体性能。作为这个隔离过程的另一部分,我们可以为我们的SQL数据库文件创建备份解决方案。

步骤 8:创建一个 Elastic / ELK 堆栈

Diagram of Step 8: ELK Stack

监控我们的应用程序的性能将告知我们在扩展和完善我们的设置时做出的决定。 为了完成这一工作,我们可以使用一个集中式日志解决方案,例如弹性/ELK堆栈. 我们的堆栈包括收集和可视化日志的组件:Logstash,处理日志; Elasticsearch,存储它们; Kibana,允许它们进行搜索和视觉组织。 如果我们将这个堆栈放置在保留IP后面,我们将能够通过静态IP远程访问它。

【 】【如何在Ubuntu 16.04上安装Elasticsearch、Logstash和Kibana(ELK Stack)】【 】【如何在DigitalOcean上创建保留IP】【 】【如何在DigitalOcean上使用保留IP】【 】【如何在DigitalOcean上使用保留IP】【 】【如何在DigitalOcean上使用保留IP】【 】】【如何在DigitalOcean上使用保留IP】【 】】【如何在DigitalOcean上使用保留IP】【 】

步骤9:创建对象商店

Diagram of Step 9: Object Storage

在存储我们的应用程序的静态资产时,我们希望确保它们的可用性,同时保持高性能。像DigitalOcean Spaces这样的对象存储解决方案可以满足这一需求。 具体来说,如果我们决定在我们的数据库中存储大型对象,他们可能会遇到数据流动的性能问题,使我们的备份非常大。 在这种情况下,我们可以将数据移动到对象存储。 通过在我们的数据库中存储URL,我们可以指向我们的资源,而不会影响其存储容量。

步骤 10: 配置 DNS 记录

Diagram of Step 10: DNS Records

一旦我们的高可用性设置完成,我们可以将应用程序的域名指向我们的负载平衡器,使用DNS。 使用圆算法,我们可以在应用程序的分布式资源之间平衡查询响应,从而最大限度地提高这些资源的可用性,同时在资源集群中分配工作负载。

第11步:规划恢复战略

我们的恢复策略将包括工具和功能,以备份和恢复我们的数据在行政或其他故障的情况下。对于我们每个Droplets,我们可以利用和自动化DigitalOcean Snapshots来复制和存储Droplets的图像在DigitalOcean服务器上。此外,我们可以使用专用工具和服务,如Percona,Restic或Bacula,以及存储设备,如DigitalOcean备份和空间来复制我们的数据。

结论

在本文中,我们讨论了一种高度可用的Web应用程序的潜在设置,该应用程序依赖于基础设施组件(如Droplets、Load Balancers、Spaces 和 Block Storage)以提供高水平的操作性能,该设置可以支持图像和其他媒体的处理解决方案,重点是存储和检索,以及可以与电子商务解决方案集成的购买、评分或博客功能。

最终,开发人员可以采取许多方向来满足特定需求和使用案例,同时保持高可用性,每个应用程序设置都会反映其架构的特殊性。

Published At
Categories with 技术
comments powered by Disqus