facebook的抄写队列问题

时间:2011-12-08 10:21:46

标签: facebook ssh-tunnel facebook-scribe

我们使用这样的抄写员:

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

    • 一台计算机上的Web服务器(SA)和本地Scribe服务器(SB);
    • Web服务器只需将每个日志发送至最多3次,重试2次后我们就会丢弃它们。
    • 本地Scribe服务器使用缓冲存储,主要使用网络存储发送日志到下一个收集器Scribe BJ,并且辅助将日志写入本地磁盘,我们设置max_queue_size = 1000000000和max_queue_length = 20000000。
  • ----> Collector Scribe BJ(SC)---- ssh tunnel(压缩gzip)--- vpn --->收藏家Scribe SH(SD)

    • 收集器Scribe BJ(SC)和本地Scribe服务器(SB)在一个LAN上。
    • 收集器Scribe BJ(SC)使用多个存储,store0使用缓冲存储,store0主要使用网络存储发送日志到下一个收集器Scribe SH和store0辅助写入日志到本地磁盘,并且我们设置max_queue_size = 10000000和max_queue_length = 2000000。
    • 收集器Scribe BJ(SC)使用store0 - 缓冲存储 - 主存储网络将日志发送到本地端口,并通过ssh隧道将消息从IDC BJ发送到IDC SH。
    • 最后,收集者抄写员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服务器(SA)的输入速度时,无论如何Local Scribe Server(SB)都不会丢失数据?

  • 问题4: 我还在google.com中找到了inder.pall提到的图表。这里 是链接: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)非常繁忙且滞后非常大时,隧道可用且收集器划线SH(SD)不返回TRY_LATER且显然收集器Scribe BJ(SC)'输入速度大于进入隧道的输出速度,因此收集器Scribe BJ(SC)的内存会不断增加而不会使用二级存储?

1 个答案:

答案 0 :(得分:0)

上个月,我在同样/类似的问题上挣扎。感谢那些使用抄写员的人,我找到了一些答案:

  1. 所以使用“max_queue_length = 20000000”在这里没什么效果? 答:你是正确的max_queue_length是被删除的,没有别的东西取代了这个功能。我认为max_queue_length更重要,乍一看是可见的。例如:max_queue_length可以帮助控制和防止在(划线服务器的)输入缓冲区已满时引起的TRY_AGAIN。如果您愿意,可以恢复从划线代码中取出max_queue_length的更改。以下是变更集:https://github.com/facebook/scribe/commit/1b5d5c89a40c737ed7fa9a028f490bf336cd0da8

  2. 当max_queue_length没用时,如何控制缓冲存储切换主存储到辅助存储? 答:您将等到主要商店发送错误(EAGAIN - 超出资源)或TRY AGAIN,或者您的划线服务器的max_queue_size已达到,然后您开始写入您的辅助商店。在这种情况下,主存储连接将转到DISCONNECTED start。重新建立连接后(基于retry_interval和retry_interval_range),辅助存储中的消息将“重播”到主存储。

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

    1. ... TRY_LATER到其上游抄写员。此时它的上游抄写员会将消息备份到辅助消息? 答:是的。正如我在回答你的第一个问题时提到的那样。

    2. ...收藏家Scribe BJ(SC)的内存会不断增加而不会使用二级商店? 答:我想,你现在已经猜到了答案。在这个场景中,您的划线服务器将发送一个TRY_AGAIN上游,并期望写入它的appender将限制其写入速度。

    3. 此外,您可能会发现这有用:http://groups.google.com/group/scribe-server/browse_thread/thread/ec2b1b641a968c0b

      -Abhinav