就目前而言,我面临的一个挑战就是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来降低成本。 带宽可能很昂贵,延迟可能会有所不同。
使用现货实例和S3而不是随需应变的实例和文件系统我希望你的账单能够显着下降。 使用SQS和S3需要一点点的开发工作,但并不多,API是好的,并且有很多例子。
也许您可以将这些数据块发送到一个进程(或一个群集),然后将它们串行写入某种归档文件,而不是写入多个文件。 也许tar可能是合适的。 即使在硬盘上写入300MB / sec到单个文件的负载也不是很大。
另外,看看远程文件安装以外的东西。 大量networking文件系统的读写用户build议locking问题,特别是在目录节点上。 可能你会更好地在源计算机上找一些工作,获取文件并将它们发送到某种服务器进程。 例如HTTP PUT直接写入到数据库的进程。
看看工作队列产品。 如RabbitMQ。 这听起来像你可能正在做一些适合这种架构的东西。