有没有更好的方法来处理100-200 +文件/秒?

就目前而言,我面临的一个挑战就是IOPS和CPU方面的云计算的局限性。 我们的想法是将这些系统长期内部使用,但我认为可以更好地利用可用资源来构build这些系统。

应用程序A每秒从文件系统写入100-200个文件。 这个文件系统曾经是一个远程安装的文件系统,但现在正在本地编写,以获得最多的IOPS。 目前我们正在写封锁存储约200-300MB /秒。

应用程序B远程安装这个文件系统并parsing这些文件并将数据推送到MySQL DB中。 执行此function后,删除文件。 这个应用程序是非常密集的CPU。 我们正在使用更高效的multithreading语言进行重写。

我们正在努力提高parsing器的效率,但在此期间,我们需要find一种方法来改善整个写入/读取过程。

如果我有超过10个parsing服务器处理这些文件,它会在App A的服务器上引起足够的IO等待,以此来提醒它。 如果我们有一个中央文件服务器,它将无法处理IOPS,从而导致极高的负载平均值。

有没有比从文件系统中读/写更好的select?

我现在仅限于基于云计算的产品,将我们目前的解决scheme扩展到我们需要的地方将花费我们超过100万美元/年。

这听起来像是一个AWS Architect Pro考试问题。 解决规模和价格问题似乎相当简单。 有很多select,这是第一个来找我。

如果你说了你使用的云,你可能会得到更好的build议。 大多数云提供类似的function,所以你可能会确定使用哪一个。 无论您使用的是哪种云,都可以使用AWS S3和SQS,但是您应该使用云本地的function来降低成本。 带宽可能很昂贵,延迟可能会有所不同。

  1. 让写入应用程序将文件存储在私有S3存储桶中。 S3会根据您的需要进行扩展。 小心你的文件命名 – 如果你做错了,你会瓶颈自己。 阅读这个 。
  2. 把一条消息放到一个SQS消息队列中,并在S3上加上其他的命令
  3. 如果您需要数据库,请设置RDS数据库。
  4. 有一个从队列中读取并处理文件的自动扩展的专题实例组。 让它根据队列大小进行扩展,这是一个内置的度量标准。 如果您的应用程序不是线程化的,并且每个服务器只能运行一个实例,则使用许多小型实例
  5. 您可以有第二组自动扩展按需实例,这些实例在比现场实例组更高的阈值上扩展。 这可能有点棘手,我不是100%确定该怎么做。

使用现货实例和S3而不是随需应变的实例和文件系统我希望你的账单能够显着下降。 使用SQS和S3需要一点点的开发工作,但并不多,API是好的,并且有很多例子。

也许您可以将这些数据块发送到一个进程(或一个群集),然后将它们串行写入某种归档文件,而不是写入多个文件。 也许tar可能是合适的。 即使在硬盘上写入300MB / sec到单个文件的负载也不是很大。

另外,看看远程文件安装以外的东西。 大量networking文件系统的读写用户build议locking问题,特别是在目录节点上。 可能你会更好地在源计算机上找一些工作,获取文件并将它们发送到某种服务器进程。 例如HTTP PUT直接写入到数据库的进程。

看看工作队列产品。 如RabbitMQ。 这听起来像你可能正在做一些适合这种架构的东西。