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

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

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

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

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

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

克里斯

最佳答案

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

  • 从用户
  • 接受项目
  • 可能对其进行预处理/验证(?)
  • 放入一些队列
  • 过程数据
  • 返回结果。

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

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

    关于rest - 陷入对如何构建可扩展系统的了解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46232601/

    10-11 12:20