【问题标题】:Developing a scalable Twitter data adaptor开发可扩展的 Twitter 数据适配器
【发布时间】:2012-06-24 05:50:17
【问题描述】:

我们正在为我们的产品平台构建一个 Twitter 适配器,以使用 Search API 和 Streaming 来收集推文 API。我们开发了一个原型,使用 Java Executor Service 和 Twitter4j 来收集推文并提交 他们加入我们的推文队列。

以下是一些我们希望提出建议的设计决策:

  1. 如何使适配器客户端具有可扩展性和容错性?
  2. 如何防止检索重复推文?
  3. 如何在不达到速率限制的情况下使用多个用户 ID 最大限度地检索推文?

【问题讨论】:

    标签: java twitter scalability


    【解决方案1】:

    一些答案​​,但请记住,自从我使用 twitter API 以来已经有一段时间了 -

    为了使适配器具有可扩展性和容错性,您可以考虑以下技术 -

    1. 使用客户端的多个实例(即集群)- 这实际上取决于它的作用,但您可以决定使用主动-主动或主动-被动集群模型
    2. 如果您选择集群 - 您是否有客户端连接到适配器?如果是这样,您将需要一个支持粘性会话的负载均衡器(因此在给定会话期间,客户端会寻址相同的适配器实例) - 检查 [this][1] 链接以获取一些信息。
    3. 我建议您对 twitts 使用缓存 - 如果我们将缓存视为键到值的映射,那么您的键可能是您用来从 Twitter API 获取信息的 URL(如果我记得, API 是某种 RESTful Web 服务)
      您应该在缓存上设置驱逐策略(即 - 数据被认为与您相关的时间) - 这可以帮助您提高性能,并减少数量访问 twitter 的次数(我指的是你关于速率限制的问题的一部分)。
    4. 也许您应该看看是否可以在用户之间共享信息 - 但这会涉及一些逻辑。
      举个例子 - 如果用户 A 关注用户 B,而 B 关注 A,他们可能有更多的共同关注者或他们关注的用户,并且您可以共享数据。
    5. 如果您按照我之前的建议进行集群,您的缓存应该是分布式的。您可以为此使用EHCache
    6. 如果您将信息存储在数据库中 - 尝试通过构建线程本地基础缓存系统来最小化数据库访问(因此在一个线程中,如果您对同一实体执行两次获取相同 ID 的操作,而无需写入,您不会访问数据库两次...)

    总之,这只是建议的冰山一角,您应该仔细了解您的需求、用例和流程,并了解如何优化它们中的每一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      相关资源
      最近更新 更多