我刚刚开始尝试 AWS。我在 RDS 上有一个 Postgres 微实例,我正在 c4.large 上运行爬虫。当我只有一个蜘蛛(一个线程)时,我得到大约 10 个写入 IOPS。但如果部署了两个蜘蛛(2 个线程),我只得到大约 7 个写入 IOPS。如果我理解正确,因为我分配了 20gb,所以最大 IOPS 总共应该是 60IOPS。我在下面附上了监控。
当只部署一个蜘蛛时:
当第二个蜘蛛被部署在旁边时:
请注意从平均 10 写入 IOPS 下降到平均 7 写入 IOPS。
任何帮助都感激不尽。
您使用的是哪种 I/O 后端?它是机械式的还是闪存 (SSD) 的?
在机械后端的情况下,您观察到的是预期的行为:Postgres 是一个同步写入繁重的应用程序,这意味着即使您增加正在运行的线程,正在进行的写入(队列深度)也将保持在较低水平。同时,您不断地迫使磁盘的磁头移动到(通常)非常不同的位置。
换句话说,您在磁盘上发出了更重的负载,而没有更长队列深度带来的好处。
这就是原因,因为数据库通常部署在具有电池备份的回写缓存的服务器中:回写缓存吸收多个写入并随后合并,从而为磁盘操作提供更高的队列深度。