陷入对如何构建可扩展系统的理解中

rest go architecture rabbitmq distributed-system

60 观看

1回复

68 作者的声誉

我需要一些有关如何正确构建可以扩展的系统的指导。我将为您提供一些有关我要做什么的信息,然后询问我的具体问题。

我有一个网站,希望访问者发送一些要处理的数据。他们将数据输入到文本区域或上传到文件中。简单。在向REST端点发出POST请求之前,已在客户端对数据进行了某种预处理。

我所坚持的是一种很好的方式来处理此发布的数据,然后将其与引用用户的ID相关联,因为我无法足够快地处理数据以至于无法以合理的数量将其返回给用户。时间?

我承认,这个问题有点含糊不清,尚待商opinion。我只需要朝正确的方向推动就可以继续前进。我一直在考虑将数据放入消息队列中,然后让一些工作人员在其他地方处理数据,并且在处理数据时会通过某种形式的S3存储桶或URL链接来提醒用户在哪里找到它。到一个文件。另一个想法是只针对已处理某种循环客户端中各个记录的另一个端点运行要处理的每个项目的请求。这个想法的问题如下:

要处理数据,可能需要30分钟到2个小时,具体取决于要处理的数据量。对于他们来说,仅坐在那里等待其完成取决于他们需要处理的记录数量是不理想的,所以我主要排除了这一点。

由于我没有任何同事可以开展工作,因此任何指导都将不胜感激,我也不认识许多具有我可以自由询问的领域知识的人。如果这不是问这个问题的合适地点,那么您能在正确的方向上指出我的正确方向吗?

克里斯

作者: ozfive 的来源 发布者: 2017 年 9 月 15 日

回应 1


4

7856 作者的声誉

决定

如果我说对了,那么您的渠道是:

  1. 接受用户的项目

  2. 可能对其进行预处理/验证(?)

  3. 放入队列

  4. 处理数据

  5. 返回结果。

您需要在阶段(3)中使用一个或几个队列。来自用户的实体被添加到队列之一。如果足够大,则可以将其存储在S3或类似的存储器中,并且仅将有关它的信息放入队列中:链接,添加日期,用户ID(或类似的电子邮件)。处理器可以从队列中提取项目并向用户提供反馈。

如果您对订单没有严格的要求,事情就会变得简单得多:您之间不需要任何同步。将所有组件视为:将上载接受器,队列,存储和处理器视为独立的进程池。分别监视每个池。如果存在瓶颈-将计算机添加到该池中。

作者: Eugene Lisitsky 发布者: 2017 年 9 月 15 日
32x32