2017-09-15 144 views
2

我需要一些关于如何正确构建能够扩展的系统的指导。我会给你一些关于我想要做的事情的信息,然后问我的具体问题。了解如何构建可扩展系统

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

我卡在什么是采取这张贴数据存储它,然后将它与引用用户的ID相关联的好方法,因为我无法足够快地处理数据以便将其返回给用户一段合理的时间?

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

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

任何指导都将非常感激,因为我没有任何同事反弹,也没有很多人知道我可以自由提问的领域知识。如果这不是问这个问题的恰当地方,你能否指出我应该问哪里的正确方向?

克里斯

回答

4

如果我有你的权利,你的管道是:

  1. 从用户接受项目

  2. 可能预处理/验证它

  3. (?)放入队列

  4. 过程数据

  5. 返回结果。

你在舞台(3)上使用一个或几个队列。来自用户的实体被添加到其中一个队列中。如果足够大,它可以存储在S3或类似的存储中,只有关于它的信息放入队列:链接,添加日期,用户标识(或类似的电子邮件)。处理器可以从队列中提取项目并向用户提供反馈。

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

+1

啊漂亮!这给了我一些关于如何去做的想法。 – ozfive