【问题标题】:Handing hundreds of RDS mysql db at same time同时处理数百个RDS mysql db
【发布时间】:2019-03-21 06:49:38
【问题描述】:

我有一个数据库,其中包含大约一百万条在队列中执行的作业记录。每天,大约有 50 000 个新工作岗位被创建和执行。我启动了数十个 AWS Spot 实例,并由主管工作人员执行作业(一次 6 个)。

同时数据库连接总数为260,rds mysql实例类型为t2.medium。当没有作业要做或尚未创建作业时,工作人员将在几秒钟后退出,新的工作人员将再次检查工作是否可用,依此类推。

我注意到,当它们同时连接时,速度会大大降低,即查询可能需要 8 秒而不是 20 毫秒。然后,一旦所有实例都连接到数据库,一切似乎又好了。那么问题来了,我该如何处理这个问题才能让数据库总是超级快呢?

我是否应该尝试不同时启动工人并在工人退出之前添加随机睡眠?

另外,由于有很多读/写操作,我是否应该使用负载平衡器和读取副本来扩展我的数据库?

【问题讨论】:

  • MySQL 不是最适合作业队列的。既然您在亚马逊上,您是否尝试过使用SQS
  • 是的,SQS 和批处理似乎是不错的选择,但对于我需要做的事情来说太基础了。

标签: mysql database amazon-web-services amazon-rds supervisord


【解决方案1】:

速度变慢可能是由您使用的实例类型引起的。 T2 family instances are burstable,表示长时间持续负载,CPU积分余额会耗尽,实例会变慢。

您绝对应该考虑将您的实例类型升级到另一个类(例如 m5 系列),以便实例的性能在持续负载下保持稳定。

【讨论】:

  • 似乎获得更好的实例可行,但我需要获得 m5.4xlarge。我注意到:当所有作业都在运行并且管道中没有待办事项作业时,不执行作业的工作人员会在几秒钟后退出,并启动另一个进程。所以我认为导致问题的原因是,由于管道中没有工作要做,工作人员退出,他们都试图同时重新连接。因此,它们每 3 秒关闭一次,然后重新连接,因此对于 mysql 来说,重新连接可能太多了,因为连接的 CPU 成本很高。你怎么看?
  • 我不确定打开新的数据库连接是否昂贵,但我肯定会尝试减少连接尝试,或者至少引入一些抖动,这样空闲的工作人员就不会尝试全部连接完全相同的时间。
猜你喜欢
  • 2011-09-26
  • 1970-01-01
  • 2015-05-21
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多