解决方案Deep Dive:使用MongoDB和Elk Stack构建具有Web处理和存储功能的高可用Web应用程序

在本文中,我们将介绍高可用性应用程序设置的特定功能,并在高层次上讨论其组件。在每节结束时,我们将链接到该主题的其他资源,以便在您考虑方法和最佳做法时为您提供支持。

介绍

高可用性Web应用程序设置为希望消除单点故障并将停机时间降至最低的开发人员提供了优势。 然而,在这个总体框架内,存在一些可能的变化。 开发人员将根据应用程序的具体需求和他们的性能目标进行选择。

高度可用的Web应用程序完整图

这种高可用性应用程序设置被设计为可能提供的假设解决方案:

  • 针对图像,文档和视频的处理解决方案,侧重于存储,检索和串联。
  • 可以缩放,修改或与电子商务解决方案集成的记分,排行榜或购买解决方案。
  • 一个博客解决方案,也可以与电子商务解决方案集成。

在本文中,我们将详细介绍此设置的特定功能,并在更一般的层面上讨论其组件。 在每节结束时,我们将链接到该主题的其他资源,以便在您考虑方法和最佳实践时为您提供支持。

第1步:使用专用网络创建前端服务器

第1步:前端服务器图

典型的多层安装将表示层与应用程序逻辑分开。 将应用程序功能分为多个层次,可以使长期的故障排除和扩展过程更加轻松。

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

  • 我们将使用媒体和图片资源做什么类型的工作?
  • 我们的计算要求会是什么样子?
  • 我们预计什么类型和量的流量?
  • 我们有什么计划来监控它?

我们的监测工具将帮助我们扩大应用范围,并在这个层面和其他层面建立资源。 我们可以采取额外的措施来节省成本和安全措施,即将我们的应用程序资源(包括我们的前端服务器)分配给共享的专用网络。 然后可以在服务器之间传输数据,而不会产生额外的带宽成本或保留单个数据中心。

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

第2步:负载平衡器的图表

为确保我们应用程序的资源保持高可用性和高性能,我们可以创建负载平衡器来管理我们的前端工作负载。 这些负载均衡器将重定向传入流量,使用常规运行状况检查和故障转移机制来管理服务器故障或故障。 它们还将更平均地平衡流量,确保单个服务器不会过载。

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

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

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

第3步:使用专用网络创建后端服务器

第3步:后端服务器图

创建我们的应用程序的后端涉及另一组资源计算。 同样,我们应用程序的性质决定了我们服务器的大小和资源。 要考虑的因素包括我们的服务器在此级别执行的处理工作的类型和数量。 这是数据类型和处理任务之间的区别将发挥作用的地方。 例如,如果我们正在处理图像资产和消费者数据,那么我们可以考虑负载和延迟要求,因为它们适用于每个要求。

在这一级,监督也很重要,可以解决以下问题:

  • 我们对图像和媒体资产进行了哪些处理?
  • 我们是从这些资产中获取信息,还是仅仅检索或重新组合它们?
  • 我们有什么样的消费者交易量和类型?

我们可以将资源置于我们的共享专用网络中的这个级别,以计入潜在的带宽费用。

第4步:安装HAProxy

第4步的示意图:HAProxy

与我们的负载均衡器处理外部请求的方式类似,HAProxy管理我们的前端和应用程序层之间的通信流。 在作为负载均衡器的功能中,HAProxy可以配置为监听和重定向来自特定端口的流量。 这可以为我们的应用程序的内部操作添加另一层安全性。 当我们需要扩展时,我们可以配置HAProxy来自动添加和删除节点。

第5步:创建SQL数据库

第5步:SQL数据库的图

对于我们应用程序数据的某个部分,我们将使用SQL数据库。 这适用于需要最新,准确和一致的数据。 诸如销售交易,登录/注销信息和密码更改等结构均匀且需要安全的事情,为使用SQL数据库提供了合理的理由。

我们再次想要考虑我们的指标:我们正在处理多少事务或安全请求? 如果我们的负载很高,我们可能会考虑使用ProxySQL等工具来平衡传入的请求。 如果我们在SQL数据库之间建立复制,我们可以采取额外措施来提高性能并确保高可用性。 如果我们需要扩展数据处理,这也将证明是有用的。

第6步:创建NoSQL数据库

第6步:NoSQL数据库图

由于数据的统一性和原理性较差,我们可以使用NoSQL数据库。 例如,对于图片,视频或博客文章,NoSQL数据库提供了以非示意性方式存储项目元数据的功能。 当使用这种类型的解决方案时,我们的数据将高度可用,并且其一致性将是最终的。 当我们考虑绩效时,我们想要考虑我们预计这些数据库的类型和数量。

根据请求负载和类型,优化性能的因素包括:使用负载平衡解决方案管理数据库之间的流量,在数据库和存储解决方案之间分配数据以及添加或销毁数据库(而不是复制数据库)。

第7步:添加块存储

第7步:图块存储

我们的设置将数据库存储功能与应用程序的其他操作分离。 目标是增强数据的安全性和应用程序的整体性能。 作为此隔离过程的另一部分,我们可以为我们的SQL数据库文件创建备份解决方案。 像DigitalOcean的块存储卷这样的块存储解决方案可以很好地完成这项工作,这要感谢他们的低延迟I / O和原理图文件系统结构。 它们还提供缩放选项,因为它们很容易被破坏,调整大小或倍增。

第8步:创建Elastic / ELK

第8步:ELK图

监视我们的应用程序的性能将为我们在缩放和优化我们的设置时做出的决策提供信息。 为了完成这项工作,我们可以使用集中式日志记录解决方案,例如Elastic / ELK。 我们的包含收集和可视化日志的组件:Logstash,它处理日志; Elasticsearch存储它们; 和Kibana,它们可以被搜索和直观地组织。 如果我们将这个放置在浮动IP后面,我们将能够使用静态IP远程访问它。 此外,如果我们将我们的包含在我们的共享专用网络中,我们将拥有另一个安全优势:我们的报告代理不需要通过互联网将信息传输到。

第9步:创建对象库

第9步:对象存储图

在存储应用程序的静态资产时,我们希望确保其可用性,同时保持高性能。 像DigitalOcean Spaces这样的对象存储解决方案可以满足这种需求。 特别是,如果我们决定将大型对象存储在我们的数据库中,那么他们可能会遇到数据涌入带来的性能问题,从而使我们的备份非常庞大。 在这种情况下,我们可以将数据移动到对象存储。 通过在我们的数据库中存储URL,我们可以从数据库中指向我们的资源,而不会影响其存储容量。 这是我们预计数据保持不变的最佳解决方案,并提供了扩展的额外选项。

第10步:配置DNS记录

第10步:DNS记录图

一旦我们的高可用性设置就绪后,我们就可以使用DNS将应用程序的域名指向我们的负载均衡器。 通过循环算法,我们可以在应用程序的分布式资源之间平衡查询响应。 这将最大限度地提高这些资源的可用性,同时还跨资源集群分配工作负载。 另外,我们可以使用地理路由将请求匹配到最接近的资源。

第1步1:规划恢复策略

我们的恢复策略将包括用于在管理或其他故障情况下备份和恢复数据的工具和功能。 对于我们的每个Droplet,我们都可以利用DigitalOcean Snapshots并使其自动化,以在DigitalOcean服务器上复制和存储Droplet的图像。 此外,我们可以使用Percona,Restic或Bacula等专用工具和服务以及DigitalOcean备份和Spaces等存储设备来复制我们的数据。 在我们评估这些工具并创建我们的策略时,我们会考虑应用程序每一层的数据以及需要备份的频率,以便我们从中恢复应用程序的功能。

结论

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

最终,开发人员可以采取许多方向来满足特定需求和使用情况,同时保持高可用性,并且每个应用程序设置都将反映其架构特性的这些差异。