任务队列池的概念方法



假设我有一个分布式任务队列来处理电子邮件。需要提取和解析的每个电子邮件都会在队列中创建一个新作业。

现在电子邮件提供者的速率限制为每个电子邮件帐户的并发连接数为n,因此当我的工作人员启动一个任务时,它将获得一个"连接"(这里的连接只是指现在有n-1个可用连接供其他工作人员访问该帐户)。如果没有空闲连接,工作线程将该任务返回给代理,并继续尝试下一个任务。

我尝试用原子锁来解决这个问题,工作线程在访问连接池之前必须首先获得锁,但是遇到了一个突发的群体问题——工作线程有时恰好可以同时获得锁,从而抛出计数并超过速率限制。

对于这种情况有没有更优雅的方法?

基本上有两种解决方法:

  1. 你有一个服务来处理锁计数。通过这种方式,您也可以在程序代码中锁定对原子锁本身的访问,并确保永远不会超过最大锁数。
  2. 当你想要一种分布式的方式来放弃连接,而不需要一个民选的领导者,唯一的其他方法,我知道这样做,就是Paxos算法。

相关内容

  • 没有找到相关文章

最新更新