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

这种技术可以扩展规模吗?

唐弘和
2023-03-14
问题内容

我的客户要求我建立一个实时应用程序,可以实时聊天,发送图像和视频。他要求我提出自己的技术栈,因此我做了很多研究,发现最容易构建的将是使用低于技术栈的栈

1)Node.js和群集可最大化一个服务器实例的CPU核心-语言

2)Socket.io-实时框架

3)Redis-服务器的多个实例的发布/订阅

4)Nginx-反向代理并负载均衡多台服务器

5)Amazon EC2-运行服务器

6)Amazon S3和CloudFront-保存图像/视频并交付

如果我错了上面的堆栈,请纠正我。我真正的问题是,上述技术堆栈能否每秒扩展1,000,000条消息(文本,图像,视频)?

任何使用过node.js和socket.io的人,都可以为我提供上述堆栈的见解或替代方法。

问候,


问题答案:

我真正的问题是,上述技术堆栈能否每秒扩展1,000,000条消息(文本,图像,视频)?

当然可以。具有正确的设计和足够的硬件。您的客户应该问的问题实际上不是是否可以将其做得那么大,而是可以以什么成本和实用性来完成,并且这些是最佳选择。

让我们看看您提到的每个片段:

node.js- 对于以I /
O为中心的应用程序,它是进行大规模扩展的绝佳选择,并且可以通过在集群中部署多个CPU(每个服务器和多个服务器都具有多个进程)来进行扩展。这种规模的实用性在很大程度上取决于所有这些服务器进程都需要访问哪种共享数据。通常,数据存储最终会成为扩展规模上更难的瓶颈,因为在请求处理时很容易抛出更多服务器。在集中式数据存储中添加更多硬件并非易事。有很多方法可以做到,但是在很大程度上取决于应用程序的要求以及您的操作方式和难度。

socket.io-
如果您需要有效的服务器推送小消息,那么socket.io可能是最好的方法,因为它是推送到客户端的最有效方法。但是,这并不是在所有类型的运输中都很好。例如,我不会通过socket.io来移动大型图像或视频,因为有更多专门构建的方式可以做到这一点。因此,socket.io的使用在很大程度上取决于应用程序到底要使用它的用途。如果您想将视频推送到客户端,也可以只推送一个URL,然后让客户端转转并使用众所周知的大规模技术通过常规http
URL请求视频。

Redis - Again, great for some things, not great at everything. So, it
really depends upon what you’re trying to do. What I explained earlier is that
the design of your data store and the number of transactions through it is
probably where your real scale problems lie. If I were starting this job, I’d
start with an understanding of the data storage needs for a server,
transactions per second of various types, caching strategy, redundancy, fail-
over, data persistence, etc… and design the high scale access to data first.
I wouldn’t be entirely sure redis was the preferred choice. I’d probably
suggest you need a high scale database guy as a consultant early in the
project.

Nginx-
许多使用nginx的大型站点,因此它无疑是一个很好的工具。对于您而言,它究竟是不是正确的工具取决于您的设计。我可能会在最后一部分进行工作,因为它似乎在设计中不太重要,一旦系统的其余部分布置完毕,您就可以在此处考虑所需的内容。

Amazon EC2-
几种可能的选择之一。这些选择很难直接进行比较。大型系统是使用EC2构建的,因此在那里有概念证明,并且通用体系结构似乎很合适。如果您想知道真正的gremlins在哪里,则需要一名在EC2上进行过大规模研究的顾问。

亚马逊S3- 我个人知道使用S3录制视频和图像的一些存储和带宽很高的站点。为此。

因此…如果正确使用这些工具,通常可能是不错的工具。根据实际应用程序的存储需求,Redis将是一个问号(您提供的需求为零,而不能选择需求为零的数据库)。一个更合理的答案是基于将一系列高级要求组合在一起,这些要求分析了系统为满足1,000,000的服务能力而需要做的工作。可以将这些需求与某些组件的已知功能进行比较,以开始扩展系统规模。然后,您必须将一些基准测试组合在一起,才能在系统的某些部分上运行某些测试。失败的成功很大程度上取决于应用程序的构建方式和工具的使用方式,以及选择工具的方式。您可以使用许多不同类型的工具成功进行扩展。哎呀,Facebook在PHP上运行(嗯,高度修改,定制的PHP在运行时根本不是典型的PHP)。



 类似资料:
  • 问题内容: 我有我需要共享某些网络资源(的要求,,,,在不同等)的基于应用程序。似乎可以用来实现这一目标? 有人可以提供一些有关如何实现此目标的指示吗? 其次,我想知道是否足够成熟,可以用于生产应用程序? 提前致谢! 编辑: 我看了这篇文章,似乎人们可以跨Web应用程序共享Web捆绑包。唯一的区别是他们使用Spring MVC做到了。我想知道是否也可以使用Struts2应用程序来实现? 编辑2:

  • Polar Verity Sense 运行时间: 长达 30 小时的连续训练 每天训练 1 小时可运行 22 天 电池类型: 45 mAh 锂聚合物充电电池 内存容量: 高达 600 小时的训练 Bluetooth 传输范围: 在开放空间内,带固定器时高达 150 米 无固定器时高达 20 米 工作温度: -20 °C 到 +60 °C / -4 °F 到 140 °F 材质: 传感器 ABS、A

  • Grit X 电池型号: 346 mAh 锂聚合物充电电池 工作时间: 训练模式下(GPS 和手腕型心率测量)电池续航可长达 40 小时,手表模式下启用持续心率追踪时续航时间可长达 7 天。提供三种省电模式。多个节能选项甚至可令使用时间长达 100 小时。 工作温度: -10 °C 到 +50 ℃/14 °F 到 122°F 手表材料: 黑色 设备: CORNING GORILLA 玻璃、PA12

  • Vantage V2 电池型号: 346 mAh 锂聚合物充电电池 运行时间: 训练模式下(GPS 和手腕型心率测量)电池续航可长达 40 小时,手表模式下启用持续心率追踪时续航时间可长达 7 天。提供多个省电选项。 多个节能选项甚至可使训练模式下的使用时间长达 100 小时。 工作温度: -10 °C 到 +50 ℃/14 °F 到 122°F 手表材料: 黑色和黑色 设备:CORNING GO

  • A370 电池型号: 100 mAh 锂聚合物充电电池 工作时间: 在 全天候活动监测、连续心率追踪和未开启智能通知每天 1 小时训练的情况下可长达 4 天。 训练模式中的工作时间: 移动 GPS 功能开启时长达13小时。移动 GPS 功能关闭时长达 32 小时。 工作温度: -10 °C 到 +50 °C / 14 °F 到 122 °F 充电时间: 最长两小时。 充电温度: 0 °C 到 +4

  • Polar M600 操作系统 Wear OS by Google 处理器 基于 ARM Cortex-A7 的 MediaTek MT2601 双核 1.2 GHz处理器 电池型号 500 mAh 锂聚合物充电电池 工作时间 (Android) 训练 2 天/8 小时 工作时间 (iOS) 训练 1.5 天/8 小时 工作温度 -10 °C 到 +50 °C / 14 °F 到 122 °F 充