深度解决方案:使用MongoDB和Elk Stack构建具有Web处理和存储功能的高可用Web应用程序
介绍
高可用性web应用程序设置为希望消除单点故障并最大限度减少停机时间的开发人员提供了优势。然而,在这个总体框架内,有许多可能的变化。开发人员将根据其应用程序的特定需求和性能目标进行选择。

此高可用性应用程序设置被设计为一个假设的解决方案,可能提供:
-
图像、文档和视频的处理解决方案,重点是存储、检索和连接。
-
记分、排行榜或采购解决方案,可以扩展、修改或与电子商务解决方案集成。
-
也可以与电子商务解决方案集成的博客解决方案。
在本文中,我们将介绍此设置的特定功能,并在更一般的级别上讨论其组件。在每一节的末尾,我们将链接到有关该主题的其他资源,以在您考虑方法和最佳实践时为您提供支持。
步骤1:使用专用网络创建前端服务器

典型的多层设置将表示层与应用程序逻辑分离。从长远来看,将应用程序功能分层可以使故障排除和扩展过程更容易。
在选择服务器和资源时,我们可以考虑以下因素:
-
我们将在媒体和图像资产方面做什么样的工作?
-
我们的计算需求会是什么样子?
-
我们预计的交通量和类型是什么?
-
我们有什么计划来监控它?
我们的监控工具将帮助我们扩展应用程序,并在该级别和其他级别构建资源。为了节省成本和安全措施,我们可以采取的另一个步骤是将应用程序的资源(包括前端服务器)分配给共享的专用网络。然后,数据可以在服务器之间传输,而不会产生额外的带宽成本或离开单个数据中心。
-
如何设置和使用DigitalOcean专用网络。
-
数字海洋私人网络常见问题。
步骤2:为前端服务器创建负载平衡器

为了确保应用程序的资源保持高可用性和高性能,我们可以创建负载平衡器来管理前端工作负载。这些负载平衡器将重定向传入流量,使用定期的健康检查和故障转移机制来管理服务器故障或失灵。他们还将更普遍地平衡流量,确保单个服务器不会过载。
为了优化其配置,我们可以考虑以下因素:
-
我们会存储关于请求和用户的状态信息吗?
-
我们需要根据CPU负载重定向请求吗?
这些因素将使我们能够为我们的配置选择最佳算法。负载平衡器的工作还有一个额外的安全组件:我们可以将它们配置为侦听特定端口,并在端口之间重定向流量。也可以使用它们为后端服务器解密消息。
-
DigitalOcean负载平衡器简介。
-
什么是负载平衡?.
-
5 DigitalOcean负载平衡器用例。
步骤3:使用专用网络创建后端服务器

创建应用程序的后端涉及另一组资源计算。同样,应用程序工作的性质将决定服务器的大小和资源。需要考虑的因素包括我们的服务器在这个级别上所做的处理工作的类型和数量。这就是数据类型和处理任务之间的区别。例如,如果我们正在处理图像资产和消费者数据,我们可以考虑负载和延迟要求,因为它们适用于每种情况。
在这一层面上,监测对于解决以下问题也很重要:
-
我们正在对图像和媒体资产进行何种处理?
-
我们是从这些资产中提取信息,还是简单地检索或重组它们?
-
我们有哪些数量和类型的消费者交易?
我们可以将此级别的资源放置在共享专用网络中,以考虑潜在的带宽费用。
-
如何在Ubuntu 16.04上使用MySQL设置远程数据库以优化站点性能。
-
如何创建Django应用程序并将其连接到数据库。
步骤4:安装HAProxy

与负载平衡器处理外部请求的方式类似,HAProxy管理前端和应用层之间的通信流。在作为负载平衡器的功能中,HAProxy可以配置为侦听和重定向来自特定端口的流量。这可以为应用程序的内部操作增加另一层安全性。当我们需要缩放时,我们可以配置HAProxy来自动添加和删除节点。
-
HAProxy和负载平衡概念简介。
-
How To Create a High Availability HAProxy Setup with Corosync,Pacemaker,and Reserved IP on Ubuntu 14.04。
步骤5:创建SQL数据库

对于应用程序数据的特定部分,我们将使用SQL数据库。这适用于需要最新、准确和一致的数据。诸如销售事务、登录/注销信息和密码更改之类的内容在结构上是统一的,并且需要安全,因此可以合理地使用SQL数据库。
同样,我们要考虑我们的指标:我们处理了多少事务性或安全性请求?如果我们的负载很高,我们可能需要考虑使用ProxySQL之类的工具来平衡传入的请求。如果我们在SQL数据库之间设置复制,我们可以采取额外的步骤来提高性能并确保高可用性。如果我们需要扩展数据处理,这也将证明是有用的。
-
如何在Ubuntu 16.04上安装最新的MySQL。
-
如何在Ubuntu 16.04上配置MySQL组复制。
步骤6:创建NoSQL数据库

对于不太统一或示意性的数据,我们可以使用NoSQL数据库。例如,对于图片、视频或博客帖子,NoSQL数据库提供了以非图解方式存储项目元数据的能力。当使用这种类型的解决方案时,我们的数据将具有高可用性,其一致性将最终实现。在考虑性能时,我们希望考虑我们预期对这些数据库的请求的类型和数量。
根据请求负载和类型,可以优化性能的因素包括:使用负载平衡解决方案来管理数据库之间的流量,跨数据库和存储解决方案分发数据,以及添加或销毁数据库(而不是复制它们)。
-
如何在Ubuntu 16.04上安装和保护MongoDB。
-
如何在Ubuntu 16.04上安装和配置OrientDB。
步骤7:添加块存储

我们的设置将数据库存储功能与应用程序的其他操作分离开来。目标是增强数据的安全性和应用程序的整体性能。作为隔离过程的另一部分,我们可以为SQL数据库文件创建备份解决方案。块存储解决方案,如DigitalOcean的块存储卷,由于其低延迟I/O和原理图文件系统结构,可以很好地完成这项工作。它们还提供了缩放选项,因为它们可以轻松销毁、调整大小或倍增。
-
如何在DigitalOcean上使用块存储。
-
对象存储与块存储服务。
步骤8:创建弹性/麋鹿堆栈

监控应用程序的性能将为我们在扩展和优化设置时做出的决策提供信息。为了完成这项工作,我们可以使用集中式日志解决方案,例如弹性/ELK堆栈。我们的堆栈包括收集和可视化日志的组件:Logstash,用于处理日志;Elasticsearch,存储它们;还有Kibana,它允许对它们进行搜索和视觉组织。如果我们将这个堆栈放在保留IP之后,我们将能够使用静态IP远程访问它。此外,如果我们将堆栈包含在共享的专用网络中,我们将具有另一个安全优势:我们的报告代理不需要通过互联网将信息传输到堆栈。
-
指标、监控和警报简介。
-
如何在Ubuntu 16.04上安装Elasticsearch、Logstash和Kibana(ELK Stack)。
-
如何在DigitalOcean上创建保留IP。
-
如何在DigitalOcean上使用保留IP。
步骤9:创建对象存储

在存储应用程序的静态资产时,我们希望确保其可用性,同时保持高性能。像DigitalOcean Spaces这样的对象存储解决方案可以满足这一需求。具体来说,如果我们决定在数据库中存储大型对象,它们可能会遇到数据流入带来的性能问题,这使得我们的备份非常大。在这种情况下,我们可以将数据移动到对象存储。通过在数据库中存储URL,我们可以从数据库中指向我们的资源,而不会影响其存储容量。这是我们预期将保持静态的数据的最佳解决方案,并提供了其他扩展选项。
-
数字海洋空间简介。
-
对象存储与块存储服务。
步骤10:配置DNS记录

一旦我们的高可用性设置就绪,我们就可以使用DNS将应用程序的域名指向负载平衡器。通过循环算法,我们可以在应用程序的分布式资源之间平衡查询响应。这将最大限度地提高这些资源的可用性,同时还可以跨资源集群分配工作负载。此外,我们可以使用地理路由将请求与邻近资源相匹配。
-
如何使用DigitalOcean设置主机名。
-
DNS术语、组件和概念简介。
-
如何在Ubuntu 16.04上创建具有心跳和保留IP的高可用性设置。
步骤11:规划恢复策略
我们的恢复策略将包括在发生管理或其他故障时备份和恢复数据的工具和功能。对于我们的每个水滴,我们可以利用并自动化DigitalOcean快照,将水滴的图像复制并存储在DigitalMocean服务器上。此外,我们可以使用Percona、Restic或Bacula等专用工具和服务,以及DigitalOcean备份和共享空间等存储设备来复制我们的数据。在评估这些工具并创建策略时,我们将考虑应用程序每一层的数据,以及需要备份的频率,以便我们有一个合理的点来恢复应用程序的功能。
-
如何使用DigitalOcean快照自动备份水滴
-
了解DigitalOcean水滴备份
-
为生产而构建:Web应用程序-恢复规划。
-
如何为VPS选择有效的备份策略。
结论
在本文中,我们讨论了一种高可用性web应用程序的潜在设置,该应用程序依赖于基础架构组件,如水滴、负载平衡器、空间和块存储,以提供高水平的操作性能。该设置可以支持图像和其他媒体的处理解决方案,重点是存储和检索,以及可以与电子商务解决方案集成的购买、记分或博客功能。
最终,开发人员可以采取许多方向来满足特定需求和用例,同时保持高可用性,每个应用程序设置都将在其架构的特定性中反映这些差异。
更多推荐



所有评论(0)