技术和互联网已成为我们日常、学术和职业生活的核心。这就是为什么同时存在的网站和应用程序的绝对数量不足为奇的原因。如果您是一家企业,您会希望拥有一个相关的网络平台。应用程序使您能够轻松地向目标客户推销和交付您的服务。无论您创建Web 应用程序的原因是什么,您都需要确定如何构建它。在选择最佳服务器设置时,您可以使用多种选择。您选择的服务器架构将决定您如何运行和管理环境中的所有内容。这就是为什么必须在仔细考虑后做出决定的原因。
如何选择正确的服务器设置
那么您如何确定哪种架构“适合”您的应用程序?为此,您需要首先考虑您的 Web 应用程序的要求是什么。您必须加入某些功能才能使其在您的特定用例中有效工作。例如,也许您正在努力开发易于扩展的应用程序。或者,您可能需要您的应用程序在浏览器和移动设备上流畅运行。同时,您的预算也可能是您最关心的问题。
无论您的要求是什么,您都应该知道您可以为您的应用程序创建自定义解决方案。在本教程中,我们将探索许多人通常用于其 Web 应用程序的各种类型的服务器。我们将讨论各种用例以及何时最好使用某种设置。为了帮助您确定它是否适合您,我们还将为您提供每种服务器架构的一些优缺点。
1. 一切都在一台服务器上
顾名思义,您将整个环境加载到一个单一的服务器上。环境将包括您的 Web 服务器、应用程序服务器以及数据库服务器。例如,它适用于Linux、Apache、MySQL和PHP (LAMP) 堆栈配置。您可以按照我们的教程了解如何在 Ubuntu 服务器上安装 LAMP 堆栈以及如何在 CentOS 上安装 LAMP 堆栈。
何时使用:如果您的时间不多,这种类型的安排效果最好。设置简单快捷。这就是为什么它适用于简单的 Web 应用程序。
好处:简单易懂,易于实现。只需很少的时间即可完成整个设置。
缺点:不允许水平可扩展性。在组件隔离方面提供的很少。应用程序和数据库本质上在争夺相同的资源,因为它们位于单个服务器上。因此,您可能会遇到性能不佳的情况。
2. 单独的数据库服务器
使用单个服务器的主要问题是对有限资源的竞争。此设置旨在解决该问题。在这里,数据库管理系统或 DBMS与应用程序服务器保持分离。数据库服务器在私有网络中,拥有自己的资源。这会带来更好的性能和更高的安全性。
何时使用:同样,如果您想部署快速设置,配置起来非常简单。如果您担心数据库和应用程序争夺相同资源,这是理想的解决方案。
好处:应用程序和数据库的单独、专用系统资源,包括 CPU、内存、I/O 等。在应用程序和数据库层中的任何一个层都具有更大的可扩展性潜力。您可以根据需要添加和删除资源。如果您从公共互联网上删除数据库,您也可以提高安全性。
缺点:比单个服务器设置复杂一点。两台服务器之间的低带宽或高延迟网络连接会产生性能问题。
3.反向代理或负载均衡器
这就是负载平衡器出现的地方。负载平衡器通常用于服务器环境以提高性能和可靠性。他们通过“平衡负载”来做到这一点;即跨服务器阵列分配工作负载。
何时使用:当您需要执行水平扩展时,负载平衡器非常有用。水平扩展基本上意味着向环境添加更多服务器。您还可以使用应用程序层反向代理,使用一个域和端口同时为多个应用程序提供服务。HAProxy、Nginx和Varnish是允许反向代理负载平衡的软件示例。
好处:如果线路中的一台服务器出现故障,其他服务器会通过平衡工作负载来补偿其功能。允许您执行水平扩展以增加或减少环境的容量。它还限制客户端连接,以防止 DDOS 攻击。
缺点:如果系统资源不足,负载均衡器可能会限制应用程序的性能。需要适当的配置以确保适当的性能。比单个服务器或单独的服务器设置复杂得多。您需要考虑 SSL 终止和需要粘性会话的应用程序等因素。使用负载平衡器的主要问题是它是单点故障。这意味着如果负载均衡器无法正常工作,您的整个服务就会宕机。
4. HTTP 加速器或缓存反向代理
这是一种设置,可用于提高向应用程序用户交付内容的速度。它采用各种技术来减少这个时间。最重要的一个是缓存来自应用服务器的响应。当用户第一次请求内容时,加速器将内容保存在其内存中。因此,当任何类似的未来请求进来时,它无需与应用程序服务器交互即可快速提供内容。Nginx、Varnish 和Squid都能够进行HTTP 加速。
何时使用:可以理解,这种设置最适合用户频繁请求的文件和内容。它也适用于内容丰富的动态 Web 应用程序。
好处:缓存和压缩显着提高了应用程序和请求处理的速度。减少 CPU 上的负载还可以提高站点性能。您还可以将其用作反向代理负载平衡器。
缺点:您必须对其进行很好的调整才能发挥其最佳性能。如果缓存命中率较低,您可能会遇到性能不佳的情况。
5. 主副本数据库复制
主副本数据库复制设置通常对于执行读取多于写入的系统非常有用。例如,内容管理系统可以真正利用这样的架构。您需要一个主节点和一个或多个复制节点进行复制。它将读取分布在所有节点上。更新仅发送到主节点。
何时使用:就像我们提到的,基于复制的数据库设置有助于提高系统的读取性能。您可以将它用于 CMS 等应用程序。
好处:它提高了数据库的读取性能,因为它将数据库分布在副本中。如果只使用主节点进行更新,还可以提高写入性能。
缺点:任何尝试访问数据库的应用程序都必须能够决定向哪个节点发送更新和读取请求。如果主副本失败,更新将停止。您必须解决该问题才能继续进行更新。没有故障转移机制来适应潜在的主节点故障。
组合使用服务器设置
幸运的是,您也可以结合各种技术来获得所需的结果。这意味着您可以在单个环境中对应用程序服务器和缓存服务器进行负载平衡并复制数据库。这样做可以让您充分利用两台服务器的功能。但是,它不会使设置变得更加复杂或麻烦。
例子:我们将尝试通过一个例子来理解这样的环境:在这样的环境中,负载均衡器会向缓存服务器发送静态请求。静态内容包括 CSS、图像和 Javascript 等。它会将任何其他类型的内容请求定向到应用程序服务器。
假设用户从环境中请求一些静态内容。下面是会发生的事情:
负载均衡器将首先确定内容是缓存命中还是缓存未命中。缓存命中的内容存在于缓存中,而缓存未命中的内容不存在。它通过检查缓存后端来实现。如果缓存命中,负载均衡器会将内容发送给用户。如果是缓存未命中,缓存服务器会将请求转发到应用程序的后端。应用后端将从数据库中查找并发送内容。缓存后端从负载均衡器接收内容。它还会缓存此内容,然后再将其返回到负载平衡器。后者然后将响应转发给用户。
另一方面,如果用户请求动态内容,将会发生以下情况:
请求将从用户传入负载均衡器。此请求到达应用程序后端。应用后端定位请求的内容并将其返回给负载均衡器。用户接收内容。这种组合环境的主要好处之一是它更可靠。不仅如此,它还具有超强的性能。但是,仍然存在两个单点故障——负载平衡器和主数据库服务器。
结论
您可以在您的环境中单独使用每个服务器设置。另一方面,您也可以将它们组合在一起以创建个性化的解决方案。没有“正确”的答案。这一切都取决于您希望从架构中提取的功能。掌握有关每个服务器设置如何工作的基础知识将有助于您为自己的应用程序做出决定。最好的办法是从小而简单的开始。随着经验的积累,您可以不断增加设置的复杂性。