尽管我有很多编写代码的经验。我真的没有太多的部署经验。我正在编写一个项目,该项目使用mongodb进行持久化,使用redis进行元缓存,并使用其播放页面。我正在决定是否要购买专用服务器,还是要从亚马逊/ linode购买多个小型/中型实例(每个,mongo,redis,play一次)。我想到了以下折衷方案,我想知道是否有人可以添加到列表中或提供进一步的见解。我倾向于(b)从linode和amazon购买两组实例,因此,如果其中之一发生故障,它将故障转移到另一提供商。另外,如果有人有任何部署scala / maven群集的技巧或这样做的工具,也非常感谢。
A.将所有东西都放在一个实例中 优点:
缺点 :
B.将每个模块(mongo,redis,play)放在不同的实例中 优点:
缺点:
我只能评论技术方面的内容(不能评论成本,可维护性等)
没有提及专用实例是物理盒还是大型VM。如果应用程序产生了许多到MongoDB或Redis的往返,那么两者之间的差异将非常显着。
使用虚拟机时,I / O,操作系统调度和系统调用的成本较高。这些元素往往代表着高效的远程数据存储(如MongoDB或Redis)的性能成本中的重要组成部分,因此虚拟化的代价更高。
从系统角度来看,如果希望MongoDB数据库大于可用内存,则不会将MongoDB和Redis / Play放在同一盒子上。MongoDB将数据文件映射到内存中,并依靠操作系统执行内存交换。专为此设计。其他过程则没有。如果将MongoDB放在同一盒子中,则由MongoDB引起的交换将对Redis和Play响应时间造成灾难性后果。因此,我至少会将MongoDB与Redis / Play分开。
如果您打算使用Redis进行缓存,则将其与Play服务器保持在同一盒子上是很有意义的。Redis将使用内存,但CPU较低。播放将使用CPU,但不会占用太多内存。因此,这似乎很合适。另外,我不确定Play是否可以提供这种服务,但是如果您使用unix域套接字而不是TCP回送连接到Redis,则可以免费获得约50%的吞吐量。