【发布时间】:2015-12-31 17:08:16
【问题描述】:
我有 50 个 EC2 实例都在爬网。现在他们在后端使用 Redis 来跟踪已经被抓取的 URL;但是,ElastiCache 的成本越来越高,我一直遇到打开太多连接的问题。我一直在考虑实现一个布隆过滤器作为后端,但我不明白我该如何做到这一点,以便所有 50 台服务器共享同一个布隆过滤器。我不希望每个人都有自己独立的布隆过滤器,否则他们基本上都在做同样的任务。
【问题讨论】:
-
我会从一个稳定的散列算法开始,比如主机名的散列。
-
我了解如何在每个实例上实现布隆过滤器。我不明白的是如何在所有 50 个实例之间共享一个布隆过滤器,以确保即时 A 不做与实例 B 相同的工作。
-
您对工作进行分区。这样,只有一台机器将为该机器完成工作。例如
if (hostname.hashCode() & MASK % machines = thisId) /* do work */ -
你想实现一个分布式BloomFilter吗?这不是一件容易的事。你最好使用现有的数据库
-
@DanielAmaya 制作分布式 Bloom 过滤器很可能比想出另一种方法来处理同样的问题更困难。
标签: java web-crawler bloom-filter