了解如何构建可扩展系统

时间:2017-09-15 05:55:59

标签: rest go architecture rabbitmq distributed-system

我需要一些关于如何正确构建能够扩展的系统的指导。我会告诉你一些关于我要做什么的信息,然后问我具体的问题。

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

我坚持的是什么是一个好的方法来获取这个发布的数据存储它然后将id与引用用户的id相关联,因为我无法足够快地处理数据以使其返回给用户合理的时间?

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

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

任何指导都会非常感激,因为我没有任何同事可以反弹,我也不会认识很多具有我可以自由提出的领域知识的人。如果这不是正确的问题,你能否指出我应该在哪里询问它?

克里斯

1 个答案:

答案 0 :(得分:4)

如果我找到了你,你的管道是:

  1. 接受来自用户的项目

  2. 可能预处理/验证它(?)

  3. 加入一些队列

  4. 处理数据

  5. 返回结果。

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

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