引言

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

下面是一个常用服务器安装的列表,每个都有一个简短的描述,包括优点和缺点。 请记住,这里所涉及的所有概念都可以彼此以不同的组合使用,而且每个环境都有不同的需求,因此没有单一的、正确的配置。

1. 一个服务器上的所有东西

整个环境驻留在单个服务器上。 对于一个典型的 web 应用程序,它包括 web 服务器、应用服务器和数据库服务器。 这种设置的一个常见变体是 LAMP 堆栈,它代表单台服务器上的 Linux、 Apache、 MySQL 和 PHP。

用例: 很适合快速设置应用程序,因为这是可能的最简单的设置,但是它在可伸缩性和组件隔离方面提供的很少。

推介:

  • 很简单

提醒:

  • 应用程序和数据库争夺相同的服务器资源(CPU、内存、 i / o 等等) ,除了可能性能较差外,这些资源还可能使人难以确定性能较差的源(应用程序或数据库)
  • 不容易在水平方向上扩展

相关教程:

  • 如何在 Ubuntu 14.04上安装 LAMP

2. 独立的数据库服务器

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

用例: 有利于快速设置应用程序,但避免应用程序和数据库争夺相同的系统资源。

推介:

  • 应用程序和数据库层不会争用相同的服务器资源(CPU、内存、 i / o 等等)
  • 通过向需要增加容量的服务器添加更多的资源,您可以垂直地分别扩展每一层
  • 根据您的设置,它可以通过从 DMZ 中删除数据库来增加安全性

提醒:

  • 比单个服务器稍微复杂一点的设置
  • 如果两个服务器之间的网络连接延迟较长(即两个服务器在地理上相距较远) ,或者带宽太低,无法传输数据,就会出现性能问题

相关教程:

  • 如何设置远程数据库以优化 MySQL 站点性能
  • 如何将 MySQL 数据库迁移到 Ubuntu 14.04的新服务器上

3. 负载均衡器(反向代理)

可以将负载均衡器添加到服务器环境中,通过将工作负载分布到多个服务器上来提高性能和可靠性。 如果负载平衡的服务器之一发生故障,其他服务器将处理传入的流量,直到故障的服务器恢复正常。 通过使用第7层(应用层)反向代理,它还可以通过同一域和端口服务于多个应用程序。

能够反向代理负载平衡的软件示例: HAProxy、 Nginx 和 Varnish。

用例: 在需要通过添加更多服务器进行扩展的环境中非常有用,也称为水平扩展。

推介:

  • 支持水平扩展,即可以通过添加更多服务器来扩展环境容量
  • 通过将客户端连接限制在合理的数量和频率,可以防止 DDOS 攻击

提醒:

  • 如果没有足够的资源,或者配置不当,负载均衡器可能会成为性能瓶颈
  • 可能会引入需要额外考虑的复杂性,例如在哪里执行 SSL 终止以及如何处理需要粘性会话的应用程序
  • 负载均衡器是单点故障; 如果它出现故障,那么整个服务都会出现故障。 高可用性设置是一种没有单点故障的基础设施。 要了解如何实现 HA 设置,可以阅读《如何使用浮动 IPs 》一节。

相关教程:

  • Haproxy 和负载平衡概念介绍
  • 如何使用 HAProxy 作为 WordPress 应用服务器的第四层负载均衡器
  • 如何使用 HAProxy 作为 WordPress 和 Nginx 的第七层负载均衡器

4. HTTP 加速器(缓存反向代理)

可以使用 HTTP 加速器或缓存 HTTP 反向代理来减少通过各种技术向用户提供内容所需的时间。 Http 加速器使用的主要技术是在内存中缓存来自 web 或应用服务器的响应,这样以后对相同内容的请求可以快速处理,减少了与 web 或应用服务器之间不必要的交互。

能够实现 HTTP 加速的软件例子: Varnish、 Squid、 Nginx。

用例: 适用于内容丰富的动态 web 应用程序环境,或许多常用的访问文件。

推介:

  • 通过减少 web 服务器上的 CPU 负载,通过缓存和压缩提高站点性能,从而增加用户容量
  • 可以用作反向代理负载均衡器
  • 一些缓存软件可以防止 DDOS 攻击

提醒:

  • 需要进行调优以获得最佳性能
  • 如果缓存命中率较低,则会降低性能

相关教程:

  • 如何在 Ubuntu 12.04上安装 Wordpress,Nginx,PHP 和 Varnish
  • 如何用 Varnish 和 Nginx 配置集群 Web 服务器
  • 如何在 Debian 和 Ubuntu 上用 Apache 配置 Drupal 的 Varnish

5. 主副本数据库复制

与写操作相比,执行多次读操作的数据库系统(如 CMS)的性能得到提高的一种方法是使用主副本数据库复制。 复制需要一个主节点和一个或多个副本节点。 在这种设置中,所有的更新都发送到主节点,读操作可以分布在所有节点上。

用例: 有助于提高应用程序的数据库层的读取性能。

下面是一个主副本复制设置的示例,它只有一个副本节点:

推介:

  • 通过跨副本分布读操作提高数据库读性能
  • 可以通过将主服务器专门用于更新来提高写性能(它不会花费任何时间来处理读请求)

提醒:

  • 访问数据库的应用程序必须有一种机制来确定它应该向哪些数据库节点发送更新和读取请求
  • 对副本的更新是异步的,因此它们的内容有可能过时
  • 如果主服务器失败,则在更正问题之前,不能对数据库执行任何更新
  • 在主节点失败的情况下没有内置的故障转移

相关教程:

  • 如何在 Ubuntu 14.04上使用 MySQL 复制优化 WordPress 性能

例如: 结合概念

除了应用服务器之外,还可以负载均衡缓存服务器,并在单个环境中使用数据库复制。 将这些技术结合起来的目的是在不引入太多问题或复杂性的情况下收获每种技术的好处。 下面是一个服务器环境的示例图:

让我们假设负载均衡器被配置为识别静态请求(如图像、 css、 javascript 等) ,并将这些请求直接发送到缓存服务器,然后将其他请求发送到应用服务器。

以下是用户发送请求动态内容时的情况描述:

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

如果用户请求静态内容:

  1. 负载均衡器检查 cache-backend,以查看请求的内容是否被缓存(cache-hit)或未被缓存(cache-miss)
  2. 如果缓存命中: 将请求的内容返回给负载均衡器,并跳转到步骤7。 如果 cache-miss: 缓存服务器通过负载均衡器将请求转发到 app-backend
  3. 负载均衡器将请求转发到 app-backend
  4. App-backend 读取数据库,然后将请求的内容返回给负载均衡器
  5. 负载均衡器将响应转发到 cache-backend
  6. Cache-backend 缓存内容,然后将其返回给负载均衡器
  7. 负载均衡器将请求的数据返回给用户

这个环境仍然有两个单点故障(负载均衡器和主数据库服务器) ,但是它提供了上面每个部分描述的所有其他可靠性和性能优点。

总结

既然您已经熟悉了一些基本的服务器设置,那么您应该对您自己的应用程序将使用什么样的设置有了一个很好的了解。 如果您正致力于改进您自己的环境,请记住迭代过程最好避免过快地引入过多的复杂性。

在下面的评论中让我们知道你推荐的或者想要了解更多的安装!