有 10 个 IP 资源, 有 10 个固定数量的 worker , 有 1 个先进先出的 queue ,在 13:59 分左右,大约 n ( 1-100 )个 job 进入队列,同时 worker 开始消费队列。 在每个 job 里,要取得一个 IP ,进行一些请求,大约持续 1-600 秒。请问如何保证在同一时间,每个 worker 在使用 unique 的 IP ?
1
ne6rd OP 还有这种问题有没有什么关键词可以 google ,尝试一些搜出来都是无关的。
|
2
libook 2022-09-05 16:44:01 +08:00
你只有 10 个 IP 资源,又要求同一时间只能有一个 worker 用同一个 IP ,那同一时间就最多只能有 10 个 worker 在请求。
你可以搞个 IP 池,每个 worker 要发起请求前限去池子里获取一个 IP ,没有就等待;池子每发出一个 IP 就把这个 IP 设为不可再次发放,直到 worker 告诉它释放资源; worker 获取到 IP 就发送请求(你也可以在每个 worker 做个请求队列),发送完请求就告诉池子释放这个 IP ,然后继续处理接下来的任务。 这个 IP 池你可以自己写个服务,也可以用 Redis 之类的进行管理。 |
3
ne6rd OP @libook 请问用 redis 实现相比数据库比如 postgres 有啥优势吗?除了快之外,redis 有啥特殊机制能方便实现这种资源的分配和释放吗?
|
4
libook 2022-09-05 16:58:32 +08:00
@ne6rd #3 我是感觉,你只有 10 个 IP 需要管理的话,怎么方便怎么来,如果以前在用 Redis 就顺便用,没有 Redis 也不值得为了这个单独架一个,除非没有比开个 Redis 更简单省事的方法了。
比如你本来没有 Redis ,但你有 PG ,也可以考虑在 PG 里开个表来管理这 10 个 IP ,没啥问题。 Redis 的优势主要是内存存储比较快,比如你有 1000 万个 IP 要维护,那可能比 PG 效率要高一些。 |
5
Lax 2022-09-05 17:22:34 +08:00
10 个 IP-10 个 worker ,为什么不直接一一对应?
|