0

我们像这样使用抄写员:

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

    • Web 服务器(SA)和本地 Scribe 服务器(SB)在一台机器上;
    • Web 服务器只是将每个日志发送到 scribe 最多 3 次,重试 2 次后我们就丢弃它们。
    • Local Scribe Server 使用缓冲存储,primary 使用网络存储将日志发送到下一个 Collector Scribe BJ,然后将 log 写入本地磁盘,我们设置 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 primary 使用网络存储将日志发送到下一个 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中描述)”可以控制缓冲存储scribe何时可以切换主存储存储到二级存储。当 max_queue_length 无用时,如何控制缓冲存储将主存储切换到辅助存储?

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

  • 问题 4:我还在 inder.pall 提到的 googlegroup 中找到了一张图表。Here is the link: 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 返回给其上游抄写员。这时候它的upriver scribe 会把消息备份到secondary 吗?

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

4

1 回答 1

0

上个月我遇到了相同/相似的问题。感谢使用 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. ...收藏家抄写员BJ(SC)的内存会不断增加而不使用二级商店?答:我猜,你现在已经猜到答案了。在这个场景中,您的 scribe 服务器将向上游发送一个 TRY_AGAIN 并期望写入它的附加程序会限制它们的写入速度。

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

-阿比纳夫

于 2012-01-03T16:04:34.630 回答