由于以下三个问题,我们想要改变在 AWS 上部署 MongoDB 的方式:
- 共享数据库太大(一些客户端是共享的)
- 甚至独立的数据库也会出现邻居嘈杂问题,因为服务器本身保存了太多数据(达到糟糕的 IOPS 水平)
- 我们希望有更好的灾难恢复
因此,我想将事物拆分为副本集,每组有三个 EC2 实例,处理 1 到 N 个数据库。一些客户端有预算来获得自己的集合,其他客户端仍需要以某种方式共享,以避免 EC2 实例过多的最低成本。我想避免分片,只使用不同的服务器设置,我们使用内部工具分别管理这些服务器。我的问题是:如何确定在每组 3 个服务器副本上放置多少个数据库和多大数据库?是否有好的启发式方法来确定这一点?或者学习这种黑暗艺术的特别好的资源?我意识到这很笼统,但我不认为这是基于意见的,所以希望没问题。
答案1
在这种情况下有很多变量(使用的存储类型、实例配置、平均数据库大小、平均数据库复杂度、平均查询/插入/更新复杂度......)。所以我只能提供一般指导,但这些可能会为您指明正确的方向:
在当前配置中:估计每个客户的当前平均数据集大小、每个客户的并发用户数。这将让您大致了解您的平均客户。
在当前配置中:如果您有可用的分析工具,请获取有关查询响应时间、数据加载/更新时间、共享资源(缓存、缓冲区等)上发生的错误的一些基准数字。
答:现在您已经知道您所在位置的一些详细信息了。
您能否确定您的哪些客户比其他客户使用了更多的资源?(单独数据库或实例的候选。)
您的哪些客户拥有小型数据集或需要少量资源——可供共享。
B. 估算新设置所需的配置(EC2 的计算选项)和存储大小。您可能需要取平均值,然后乘以所需的实例数。
C. 确定所需的 AWS EC2 实例总数、总存储量、用户数(每组实例的总数和并发数)。
D. 使用计算器帮助确定新设置的成本和更多详细信息。
一些用途:拥有成本:https://cloud.netapp.com/tco-calculator
AWS 服务成本(尚处于测试阶段): https://calculator.s3.amazonaws.com/index.html