【问题标题】:facebook's scribe queue issuesfacebook的抄写员队列问题
【发布时间】:2012-01-15 19:07:09
【问题描述】:

我们像这样使用抄写员:

  • Web 服务器(SA) --->本地 Scribe 服务器(SB)

    • Web 服务器 (SA) 和本地 Scribe 服务器 (SB) 在一台机器上;
    • Web 服务器只是将每个日志发送到 scribe 最多 3 次,重试 2 次后我们就丢弃它们。
    • Lo​​cal Scribe Server 使用缓冲存储,主使用网络存储将日志发送到下一个 Collector Scribe BJ,辅助将日志写入本地磁盘,我们设置 max_queue_size=1000000000 和 max_queue_length=20000000。李>
  • ---->Collector Scribe BJ(SC)----ssh隧道(gzip压缩)---vpn--->Collector Scribe SH(SD)

    • 一个 LAN 上的 Collector Scribe BJ(SC) 和 Local Scribe Server(SB)。
    • Collector Scribe BJ(SC) 使用多存储,store0 使用缓冲存储,store0 主要使用网络存储将日志发送到下一个 Collector Scribe SH,并且 store0 辅助将日志写入本地磁盘,并且我们设置 max_queue_size=10000000 和 max_queue_length=2000000。
    • Collector Scribe BJ(SC) 使用 store0——缓冲存储——主存储网络将日志发送到本地端口,并通过 ssh 隧道将消息从 IDC BJ 发送到 IDC SH。
    • 最后,收集器 scribe SH(SD) 使用 std 文件存储将日志写入其磁盘。

这是我的问题。

  • 问题 1: 我在 scribe 源代码中找不到 max_queue_length 选项的用法。而且我还发现 googlegroup 中提到的一些信息 max_queue_length 已被弃用。所以这里使用“max_queue_length=20000000”没有什么效果?

  • 问题 2: 只需选项 max_queue_length “如果队列中的消息数超过此值,缓冲存储将切换到写入辅助存储(在 githup wiki 中描述)”可以控制缓冲存储抄写员何时可以将主存储切换到二级商店。当max_queue_length没用时,如何控制缓冲存储切换主存储到备存储?

  • 问题 3: 当Local Scribe Server(SB)二级存储的写入速度大于Web server(SA)的输入速度时,无论如何Local Scribe Server(SB)不会丢失数据?

  • 问题 4: 我还在 inder.pall 提到的 googlegroup 中找到了一个图表。这里 是链接:http://scribe-server.googlegroups.com/attach/979f9ffbe00f5eb3/Screen+Shot+2011-11-22+at+9.12.32+AM.png?gda=FIJ3I0cAAACFwDSo_bUG96Wo0CVG6AlpKMzYsToU_WRZEGbv_RKdbkT0wWvVm1xmkWqWMWNxOm4bQwFxJw55cVwemAxM-EWmeV4duv6pDMGhhhZdjQlNAw&view=1&part=4 我认为只有当抄写员不可用(不活动和超时)或其队列大小大于 max_queue_size 时,它​​才会将 TRY_LATER 返回给上游抄写员。这时候它的上游抄写员会把消息备份到二级吗?

  • 问题 5: 如问题 4 所述,当 vpn(BJ--SH) 非常繁忙且延迟非常大,但隧道可用且收集器 scribe SH(SD) 不返回 TRY_LATER 时,显然收集器 Scribe BJ(SC)' s输入速度大于其进入隧道的输出速度,所以Collector Scribe BJ(SC)的mem会不断增加,不使用二级存储?

【问题讨论】:

    标签: facebook ssh-tunnel facebook-scribe


    【解决方案1】:

    上个月我遇到了相同/相似的问题。感谢使用 scribe 的人们,我找到了一些答案:

    1. 所以这里使用“max_queue_length=20000000”没有任何效果? 回答:您是正确的 max_queue_length 已被贬低,并且没有其他任何东西可以替代该功能。我认为 max_queue_length 比乍一看更重要。例如: max_queue_length 可以帮助抑制和防止在输入缓冲区(写入服务器)已满时导致的 TRY_AGAIN(s)。如果您愿意,您可以恢复将 max_queue_length 从抄写员代码中取出的更改。这是变更集:https://github.com/facebook/scribe/commit/1b5d5c89a40c737ed7fa9a028f490bf336cd0da8

    2. 当 max_queue_length 无用时,如何控制缓冲存储将主存储切换到辅助存储? 答:您将等到主存储发送错误(EAGAIN - 资源不足)或再次尝试,或者您的 scribe 服务器的 max_queue_size 已达到,然后您开始写入辅助存储。在这种情况下,主存储连接进入 DISCONNECTED 开始。一旦重新建立连接(基于 retry_interval 和 retry_interval_range),来自辅助存储的消息将被“重播”到主存储。

    3.当Local Scribe Server(SB)二级存储的写入速度大于Web server(SA)的输入速度时,无论如何Local Scribe Server(SB)不会丢失数据? 回答:我想不会,除非您有异步附加程序写入某个地方的 scribe 服务器,或者辅助存储是一个已满的磁盘! ...或者您的抄写员服务器崩溃,在这种情况下,我会吃掉等于 max_size 的消息。

    1. ...TRY_LATER 到它的上游抄写员。这时候它的upriver scribe 会把消息备份到secondary 吗? 回答:是的。正如我在回答你的第一个问题时提到的那样。

    2. ...Collector Scribe BJ(SC)的内存会不断增加,不使用二级存储? 答:我猜,你现在已经猜到答案了。在这个场景中,您的 scribe 服务器将向上游发送一个 TRY_AGAIN 并期望写入它的附加程序会限制它们的写入速度。

    您也可能会觉得这很有帮助:http://groups.google.com/group/scribe-server/browse_thread/thread/ec2b1b641a968c0b

    -阿比纳夫

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 2012-06-08
      相关资源
      最近更新 更多