![将 MySQL 服务器与 Web 服务器分离](https://linux22.com/image/568727/%E5%B0%86%20MySQL%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8E%20Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%88%86%E7%A6%BB.png)
你好,ServerFault 社区,
我通常是 StackOverflow 的潜水员/贡献者,但是最近我一直在玩服务器云服务,并希望您能提供想法。
我构建 Web 应用程序(通常规模较小到中等,流量较低),目前我有 3 个虚拟机在 Debian 上运行,并通过 Apache 提供 Web 文件,并通过 MySQL 提供数据。每个 VPS 运行 10 到 30 个网站;一些自定义应用程序、一些 Wordpress 和一些静态 HTML 网站。
借助我正在使用的新云服务(目前处于测试阶段,因此是免费的!),我可以随心所欲地启动/停止和扩展服务器。我列表中的第一个实验是用 Nginx 替换 Apache,到目前为止进展顺利。但是,我开始怀疑,如果将一台服务器“优化”为通过 Nginx 提供文件并存储媒体文件,然后将另一台服务器“优化”为通过 MySQL 运行和提供数据,是否会有什么好处。
我不知道您是否可以做很多事情来优化每个服务器以进行网络或数据库托管,或者将服务分开是否还有其他好处?如果您对此事有任何想法/评论以及我可能错过的任何其他选项,我将不胜感激。
边注:使用云服务,我可以选择完全动态定制服务器,包括内存、磁盘空间和磁盘速度(SATA、SAS、SSD)。
答案1
一般来说
- 数据库希望将尽可能多的数据(如果不是全部)存储在内存和 CPU 中,而 HDD 速度则不太重要。
- HTTPD 需要 HDD I/O,因为文件是从磁盘提供的。
如果您可以指定任何类型的服务器,那么我认为没有理由不能创建高规格的服务器并在同一台机器上运行 DB 和 HTTPD,但是除了成本之外,我认为这些是主要的优点和缺点:
优点
- 其中一个负载不会影响其他负载
- 可以根据需要独立扩展
- 可以根据当前任务具体应用内核调整
- 根据需求指定机器(DB=RAM、HTTPD=SSD)
- 更易于配置/管理(我的想法)
- 将来更容易迁移到 CDN [?]
- 隔离的机器意味着更少的潜在安全漏洞
缺点
- MySQL TCP/IP 与 Unix SOCK(数据库延迟)
- 故障点数量增加一倍
不确定成本适合于哪里(哪个更昂贵)。
虽然不是专门针对拆分服务器,但有一件事可能会有用,那就是将 Web 内容拆分为静态内容和动态内容,以减少处理静态内容的开销(如果您只是发送静态文件,则无需加载 PHP)。
个人备注:我们在数据中心(租用一些刀片)和本地都运行 VMware。我更喜欢将 DB/HTTPD 分开。我们在数据中心有单独的 DB/HTTPD VM,但在本地没有。我更喜欢前者,虽然我没有统计数据,但数据中心的 VM 运行在比我们组合的 HTTPD/DB VM 本地低得多的规格上,性能问题较少。