【问题标题】:The benefits of deploying multiple instances for serving/data/cache为服务/数据/缓存部署多个实例的好处
【发布时间】:2012-01-28 07:58:26
【问题描述】:

虽然我有很多编写代码的经验。我真的没有太多部署东西的经验。我正在编写一个项目,它使用 mongodb 进行持久化,redis 用于元缓存,并使用 play 服务页面。我正在决定是购买专用服务器还是从 amazon/linode 购买多个小型/中型实例(每个一个,mongo,redis,play)。我想到了以下权衡,我想知道是否有人可以添加到列表中或提供进一步的见解。我倾向于 (b) 从 linode 和 amazon 购买两组实例,因此如果其中一个发生中断,它将故障转移到另一个提供商。另外,如果有人对部署 scala/maven 集群或工具有任何提示,非常感谢。

A.将所有内容放在一个实例中
优点:

  1. 数据库和页面 servlet(同一主机)之间的速度更快。
  2. 更便宜。
  3. 需要保护的端点更少。

缺点:

  1. 更难管理。 (在我看来)
  2. 更难升级单个模块。如果出现安装问题,可能会导致整个系统崩溃。

B.将每个模块(mongo、redis、play)放在不同的实例中
优点:

  1. 分片更容易。
  2. 更容易为单一目的创建集群。 (即 redis 集群)
  3. 更容易在模块之间分配资源。
  4. 不太可能同时失败。

缺点:

  1. 模块之间的带宽 -> $
  2. 保护每个连接和端点。

【问题讨论】:

    标签: mongodb deployment redis cluster-computing


    【解决方案1】:

    我只能评论技术方面(不是成本、可维护性等...)

    没有提到专用实例是物理盒子,还是简单的大型虚拟机。如果应用程序生成大量到 MongoDB 或 Redis 的往返,那么差异将非常显着。

    使用虚拟机,I/O、操作系统调度和系统调用的成本更高。这些元素往往是 MongoDB 或 Redis 等高效远程数据存储的性能成本的重要组成部分,并且对它们而言虚拟化代价更高。

    从系统的角度来看,如果 MongoDB 数据库预期大于可用内存,我不会将 MongoDB 和 Redis/Play 放在同一个盒子上。 MongoDB 将数据文件映射到内存中,并依赖操作系统执行内存交换。它就是为此而设计的。其他进程不是。如果它们都在同一个盒子上,那么由 MongoDB 引起的交换将对 Redis 和 Play 响应时间产生灾难性的后果。所以我至少会将 MongoDB 与 Redis/Play 分开。

    如果您打算使用 Redis 进行缓存,那么将它与 Play 服务器放在同一个盒子上是有意义的。 Redis 会使用内存,但 CPU 较低。播放将使用 CPU,但不会占用太多内存。所以看起来很合适。另外,我不确定 Play 是否可行,但如果您使用 unix 域套接字而不是 TCP 环回连接到 Redis,您可以免费实现大约 50% 的吞吐量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 2013-12-13
      • 1970-01-01
      • 2019-12-25
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多