Web 应用程序的 5 种常见设置

简介

在决定将哪种服务器体系结构用于您的环境时,需要考虑许多因素,例如性能、可伸缩性、可用性、可靠性、成本和管理。

在本教程中,您将了解常用的服务器设置,并对每种设置进行简短描述,包括优缺点。请记住,这里涉及的所有概念都可以以各种组合使用,并且每个环境都有不同的要求,因此没有单一的正确配置。

在一台服务器上设置所有内容

一种服务器设置是将整个环境驻留在一台服务器上。对于典型的Web应用程序,这包括Web服务器、应用程序服务器和数据库服务器。这种设置的一个常见变体是LAMP stack,,它代表L inux、** A** PACHE、** M** ySQL和** P** HP,位于一台服务器上。这方面的一个示例用例是,当您想要快速设置应用程序时。像这样的基本设置可以用来测试一个想法,或者让一个简单的网页启动和运行。

遗憾的是,这在可伸缩性和组件隔离方面几乎没有提供什么。此外,应用程序和数据库争用相同的服务器资源,如CPU、内存、I/O等。因此,这可能会导致性能较差,并使确定根本原因变得困难。使用一台服务器也不容易横向扩展。您可以在我们的教程了解数据库Sharding.]中了解有关水平缩放的更多信息在我们的教程如何在Ubuntu 22.04.上安装LAMP》中了解更多关于LAMP堆栈的信息以下是使用单台服务器的直观表示:

所有内容都在一个Server

设置单独的数据库服务器

数据库管理系统(DBMS)可以与环境的其余部分分开,以消除应用程序和数据库之间的资源争用,并通过从DMZ,或公共互联网上删除数据库来提高安全性。

一个示例用例是,这可以快速设置您的应用程序,并防止应用程序和数据库争夺相同的系统资源。您还可以分别垂直扩展每个应用程序层和数据库层。这可以通过向任何需要增加容量的服务器添加更多资源来实现。根据您的设置,这可能还会通过从DMZ中删除您的数据库来提高安全性。

此设置比单台服务器稍微复杂一些。如果两台服务器之间的网络连接在地理上彼此相距较远,则可能会出现诸如高延迟之类的性能问题。如果带宽对于传输的数据量来说太低,也可能存在性能问题。您可以阅读有关如何使用MySQL.设置远程数据库以优化站点性能》的更多信息以下是使用单独数据库服务器的直观表示:

独立服务器数据库

设置负载均衡(反向代理)

可以将负载均衡器添加到服务器环境中,通过跨多个服务器分配工作负载来提高性能和可靠性。如果其中一个负载平衡服务器出现故障,其他服务器将处理传入流量,直到出现故障的服务器恢复正常状态。它还可以通过使用Layer 7]应用层反向代理,通过相同的域和端口来服务多个应用程序。几种能够实现反向代理负载均衡的软件类型包括HAProxy、Nginx和Varish。

一个示例用例是在需要通过添加更多服务器进行扩展的环境中,也称为_horizontal scaling_。当您设置负载均衡器时,它可以通过向其添加更多服务器来扩展环境容量。它还可以通过将客户端连接限制在合理的数量和频率来抵御DDOS攻击

如果负载均衡器没有足够的资源,或者配置不当,设置负载均衡器可能会带来性能瓶颈。它还可能带来需要额外考虑的复杂性,例如在哪里执行SSL终止以及如何处理需要粘性会话的应用程序。此外,负载均衡器是单点故障,这意味着如果它出现故障,您的整个服务也可能会出现故障。高可用性(HA)设置是一个没有单点故障的基础架构。要了解如何实施HA设置,您可以阅读我们的文档保留的IPs.您可以在我们的指南HAProxy简介和负载平衡Concepts》中阅读更多内容。以下是设置负载均衡的直观表示:

加载Balancer

设置HTTP加速器(缓存反向代理)

HTTP加速器或缓存HTTP反向代理可用于通过各种技术减少向用户提供内容所需的时间。HTTP加速器采用的主要技术是将来自Web或应用服务器的响应缓存在内存中,因此可以快速处理未来对相同内容的请求,减少与Web或应用服务器的不必要交互。一些能够实现HTTP加速的软件的例子是Varnish,Squid,Nginx。一个示例用例是在具有内容密集型动态Web应用程序或许多经常访问的文件的环境中。

HTTP加速可以通过缓存和压缩来减少Web服务器上的CPU负载,从而增加用户容量,从而提高站点性能。它还可以用作反向代理负载均衡,一些缓存软件甚至可以防御DDOS攻击。不幸的是,如果缓存命中率很低,它可能会降低性能,并且需要调优才能获得最佳性能。以下是设置HTTP加速器的直观表示:

http加速器

设置主副本数据库复制

对于执行多次读取而不是写入的数据库系统(如CMS),提高性能的一种方法是使用主副本数据库复制。复制需要一个主节点和一个或多个复制副本节点。在此设置中,所有更新都发送到主节点,读取内容可以跨所有节点分发。一个示例使用情形是提高应用程序的数据库层的读取性能。设置主复制副本数据库复制可通过将读取分散到多个复制副本来提高数据库读取性能,并通过专门用于更新来提高写入性能,而无需花费时间处理读取请求。

主副本数据库复制的一些缺点是,访问数据库的应用程序必须有一种机制来确定它应该向哪些数据库节点发送更新和读取请求。此外,如果主服务器出现故障,则在问题得到纠正之前,无法对数据库执行更新。在主节点发生故障时,它也没有内置的故障转移功能。以下是具有单个复制副本节点的主复制副本复制设置的直观表示:

主复制数据库复制

概念组合

除了应用程序服务器之外,还可以对缓存服务器进行负载平衡,并在单个环境中使用数据库复制。组合这些技术的目的是在不引入太多问题或复杂性的情况下获得每种技术的好处。下面是这种类型的服务器环境设置的示例图:

负载均衡器、超文本传输协议加速器和数据库复制Combined

例如,设想一个场景,其中负载均衡器配置为识别静态请求(如图像、CSS、JavaScript等)。并将这些请求直接发送到缓存服务器,并将其他请求发送到应用服务器。

以下是用户发送动态内容请求时的流程细目:

1.用户向http://example.com/ (负载均衡)请求动态内容 2.负载均衡向APP-Backend发送请求 3.APP-Backend从数据库中读取内容,并将请求的内容返回给负载均衡 负载均衡器将请求的数据返回给用户

当用户请求静态内容时,适用以下流程:

1.负载均衡器检查缓存后端,确认请求的内容是否缓存(缓存命中)或未缓存(缓存缺失) 2.如果内容被缓存命中,这意味着它会将请求的内容返回给负载均衡器,并跳到流程的最后一步,将数据返回给用户。如果内容缓存未命中,缓存服务器通过负载均衡器将请求转发到APP后端 3.负载均衡将请求转发到APP-BACKEND 4.APP后端从数据库中读取内容,并将请求的内容返回给负载均衡器 5.负载均衡器将响应转发到缓存后端 6.缓存后端缓存内容并返回给负载均衡器 7.负载均衡器向用户返回请求的数据

该环境仍然存在两个单点故障,即负载平衡器和主数据库服务器,但它提供了前面部分描述的所有其他可靠性和性能优势。

结论

现在您已经熟悉了一些基本的服务器设置,您应该很清楚您自己的应用程序将使用哪种设置(S)。如果您正在努力改进您自己的环境,请记住,迭代过程最好避免过快地引入太多的复杂性。

Published At
Categories with 技术
comments powered by Disqus