当前位置: 首页 > 面试题库 >

为服务/数据/缓存部署多个实例的好处

郎玮
2023-03-14
问题内容

尽管我有很多编写代码的经验。我真的没有太多的部署经验。我正在编写一个项目,该项目使用mongodb进行持久化,使用redis进行元缓存,并使用其播放页面。我正在决定是否要购买专用服务器,还是要从亚马逊/
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. 确保每个连接和端点。

问题答案:

我只能评论技术方面的内容(不能评论成本,可维护性等)

没有提及专用实例是物理盒还是大型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%的吞吐量。



 类似资料:
  • SRS内嵌了http服务器,支持分发hls流和文件。 以分发HLS为例,使用SRS分发RTMP和HLS流,不依赖于外部服务器。 假设服务器的IP是:192.168.1.170 第一步,获取SRS。详细参考GIT获取代码 git clone https://github.com/ossrs/srs cd srs/trunk 或者使用git更新已有代码: git pull 第二步,编译SRS

  • 本文向大家介绍基于Centos7 部署Varnish缓存代理服务器,包括了基于Centos7 部署Varnish缓存代理服务器的使用技巧和注意事项,需要的朋友参考一下 一.Varnish概述 1.Varnish 简介 Varnish是一款高性能且开源的反向代理服务器和HTTP加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合。与传统的squid相比,Varnish具有高性能、速度快、管理更

  • 自 1.5 后就过时了 在 Hangfire 1.5 之后,您不需要额外的配置来支持多个服务实例处理同一个后台任务,可以跳过本文了。现在使用 GUID 生成服务器标识符,因此所有实例名称都是唯一的。 可以同时在一个程序、机器或多台机器上运行多个服务器实例。每个服务实例使用分布式锁来执行协调逻辑。 在上述情况中,每个Hangfire服务器都有一个唯一的由两部分组成的供默认值标识符。最后一部分是一个程

  • 这是我的Compose.yml 我遇到一些问题,当发送消息到服务器时,server1显示连接,并显示GET消息,但下次发送时,server2显示GET消息 如何使其成为“我连接的服务器就是我发送消息到的服务器”?

  • 部署服务 我们使用 docker service 命令来管理 Swarm 集群中的服务,该命令只能在管理节点运行。 新建服务 现在我们在上一节创建的 Swarm 集群中运行一个名为 nginx 服务。 $ docker service create --replicas 3 -p 80:80 --name nginx nginx:1.13.7-alpine 现在我们使用浏览器,输入任意节点 IP

  • 问题内容: 我有一个docker- compose文件,该文件在同一主机中部署8个不同的docker服务。是否可以在不同的主机中部署它?我想在一个主机中远程部署某些服务,而在其他主机中远程部署其他服务。我需要使用docker- swarm吗?还是更简单的方法? 我已经阅读到可以使用DOCKER_HOST来完成此操作,但是如果我使用此变量配置/ etc / default / docker,则所有服