我正在尝试在我们的服务上获取一堆用户的电子邮件。我首先得到一个消息列表,如果消息不在 DataStore 中,那么我们获取它们。但是,我使用延迟库来避免 DeadlineExceeded 错误。目前的算法是:
- 将每个用户任务放在一个队列中
- 对于每个用户,获取消息列表
- 对于此列表中的每 10 条消息,排队以一次获取 10 条消息。
但是,我意识到这也超出了速率限制,因为我每秒可以执行超过 10 个查询。当我尝试一次只发送 1 条消息而不是 10 条消息时,包括获取消息列表(这对每页电子邮件发出 1 个网络请求),我收到一个错误消息,说我使用了太多内存并且我的过程是关闭。什么是最好的算法,这样我就可以确保我的 GMail 始终低于 10 qps 并且不会耗尽内存?