两个镜像数据库服务器,或一个功能强大两倍的服务器

两个镜像数据库服务器,或一个功能强大两倍的服务器

我正在考虑为我的一个应用程序设置一个单独的数据库服务器,该应用程序目前在 3 台服务器上运行;1 台前端服务器和 2 台应用程序/数据库服务器。但出于性能原因,我希望将数据库移到它自己的机器上。

所以归根结底,我是否最好购买两台服务器并将它们设置为彼此的副本。还是只使用一台服务器但使其功能强大一倍?

到目前为止我想到的事情;
使用一台服务器:

  • 更易于管理
  • 由于操作系统仅占用一批资源,因此数据库可以使用更多的 CPU/内存/磁盘
  • 更多的存储空间(如果数据库被复制,我需要 2 倍的磁盘存储空间来存储相同的数据)
  • 更便宜(租用服务器只会便宜一点点,但我想购买服务器会更便宜)

有两台服务器:

  • 更好的冗余(内核崩溃/磁盘故障/操作系统故障/网络故障,整个数据库仍然可以工作,但可能会慢一点)
  • 每个服务器的磁盘/网络 IO 更少(这会使其更快吗?)

一些特定于我的情况的技术细节;
服务器将在名为 StormOnDemand 的云服务上运行,因此我们实际上不会遇到太多硬件可靠性问题。我们还可以根据需要垂直扩展或缩减。
我们使用 4 种不同的数据库系统:Postgresql、MongoDB、Redis 和 Memcached*
上次我检查时,Postgres 上平均每天有超过 200 万笔交易,Mongo 上大约有 250 万笔交易,不确定 Redis 和 Memcached 是否如此,但我们都将它们用于缓存,所以我想它们差不多。
所有服务器都通过 1GB/s 本地网络连接。
我认为数据库大约是中等大小(Postgresql:32GB,MongoDB:16GB,Redis 和 Memcached 都使用内存进行存储,但我认为它们目前运行的 Redis 大约为:12GB 和 4GB)
我打算购买的服务器将是单台服务器的 8CPU 和 30GB RAM,或两台服务器的 4CPU 和 8GB RAM

为了实现冗余,这是一个 Web 应用程序,而且我们的绝大多数访问者都是经常访问的,因此,尽管我们不希望出现停机,但我们愿意每月花几个小时来节省单台服务器的成本。使用 SOD 的 6 个月里,我们从未出现过停机,但这并不是说将来不会发生停机。

如果我遗漏了任何有用的细节,我很乐意提供,但我会尽可能地包含所有细节。

*Memcached 将继续在应用服务器上运行,我们将其用作一种“本地缓存”,因此它不会在服务器之间复制/分片,而是使用 Redis 作为分布式缓存

答案1

通常,数据库受益于大型机器。一般来说,添加额外的机器有助于提高 Web 和应用服务器的性能 - 但对于数据库来说,答案是通常以获得更大、更快的机器。

但另一方面,拥有更多等效节点总是会提高可用性和性能 - 考虑一下,如果您花 3000 美元购买一台闪亮的服务器,它在其生命周期内发生故障的概率可能为 1%。或者,您可能会购买 2 台故障概率为 5% 的基本规格机器。您是否更愿意将钱花在闪亮的机器上?如果您查看两台基本机器发生故障的概率,则要小得多 - 0.05*0.05*100=0.25%,即可靠性提高 4 倍。

但很大程度上取决于您使用的 DBMS。NoSQL 数据库旨在跨大量服务器扩展。MySQL 复制相对可靠且高效。但 mysql 和 nosql 数据库往往不会实时复制。如果您需要跨集群的一致性,那么您需要像 Oracle RAC 这样的多节点系统 - 而 IME,它会产生大量的节点间聊天 - 在这种情况下,您最好购买更大的系统。

因此,对于您而言,mongoDB 和 Redis 肯定会支持多节点解决方案。我对 PostGreSQL 集群的了解有限,但考虑到它对查询一致性的支持,我预计它的行为会更像 Oracle(即增加本地磁盘和网络 I/O 的数量)。

我本来想说你的数据集太小了——事实上,我很担心你使用 4 种不同的基础来管理数据——并强烈建议将它们合并

答案2

我不得不说,无论你认为你能做什么,只要数据丢失的风险最小就行。你谈到使用云存储,在我看来,对于单个服务器来说,云存储更实用。你还提到了几次成本,所以我认为钱很难赚,增加单个系统的规格比获得另一个功能较弱的系统完全匹配要容易得多。总是问自己“我真的需要这个吗?”你永远不会出错。

相关内容