Aeron:Log Buffers & Images

本文详细介绍了Aeron中的日志缓冲区结构,包括Term的状态及其在数据传输中的作用。文章还讨论了报文顺序保持、TermBufferLengths的设置以及Aeron如何处理阻塞和解阻塞的情况。
摘要由CSDN通过智能技术生成

在 Aeron 中,日志缓冲区(Log Buffer)是一个内存映射文件,分为四个部分:

  • 三个大小相等的部分 — 每个Term都有一个唯一的Term ID — 用于保存报文头和报文数据;
  • 元数据部分,位于文件末尾。

每个术语(Term)可以处于三种逻辑状态之一:

  • clean术语(term)尚未写入数据(clean terms have yet to have data written to them)
  • active术语(term)是指正在写入数据的地方(an active term is where data is being written to,)
  • dirty(脏数据)项所包含的数据已不再有效,但暂时可用于重新传输。

在典型运行过程中,术语(term)从cleanactive再到dirty的循环。当每个术语(term)完成一个循环时,Term IDs 会递增。当向publication提供信息时,会创建一个 Aeron header,并将header和信息数据写入日志缓冲区(log buffer)的一个术语(term)中。向订阅(subscription)提供数据时,有时您会收到显示admin action操作的响应。当 Aeron 忙于轮换术语(term)时,就会发生admin action操作。

每个publication都会收到自己的日志缓冲区。images是订阅(subscription)复制发布(publication)流。您很少需要直接与images对象交互,最常用的是通过 Aeron 群集快照加载过程。

一、重建流(Reconstructing a stream)

UDP 报文可能而且经常会不按顺序到达。Aeron 可确保信息流中的信息顺序得以保留。日志缓冲区通过使用每条报文中的报文头数据,将数据正确放置在日志缓冲区中,从而帮助正确重建有序的报文流。

​​​​​​​

收到信息后,它们会被放置在日志缓冲区的正确位置。高水位(rcv-hwm)可追踪日志缓冲区中接收到数据的最远点,而完成位置(rcv-pos)则标志着已接收到连续序列的最高点。这两个值在 AeronStat 工具中均可见 - 请参阅 Aeron Tooling

只有在完成位置向前移动后,订阅(subscription)才会收到新的片段。以上面的动画为例,在收到顶部信息后,订阅(subscription)会收到有片段可用的通知。只有在底部信息写入日志缓冲区后,订阅(subscription)才会收到下一个片段。

二、Term Buffer Lengths

术语缓冲区(Term buffer)长度是通过系统属性 aeron.term.buffer.lengthaeron.ipc.term.buffer.length 设置的。也可以使用 publicationTermBufferLengthipcTermBufferLength 在 Media Driver context 中进行设置。

  • 最小的术语缓冲区(term buffer)长度为 65536 字节;
  • 最大的术语缓冲区(term buffer)长度为 1,073,741,824 字节;
  • 大小必须是 2 的幂;
  • 最大报文长度为 16 兆字节或术语缓冲区长度 / 8 的最小值;
  • 如果需要,可以设置单个publication的术语缓冲区(term buffer)长度。请参阅How to send messages over 8kb
  • 如果应用程序将在 /dev/shm 目录中托管日志缓冲区(log buffer),则需要确保有足够的空间。

三、Unblocking

当客户端或发布失败导致日志缓冲区(Log Buffer)被阻塞时,Aeron会执行解阻塞操作。当publication被关闭且仍有请求时,或者当客户端意外断开连接时,Aeron将在后台解除阻塞。为了让日志缓冲区(Log Buffer)继续运行,Aeron 将重置头,并在达到解锁超时(默认为 15 秒)后解除对日志缓冲区(Log Buffer)的阻塞。

注:

您可以使用 Aeron Stat 工具观察publication和控制命令解锁事件的数量。请参阅 Aeron Tooling,特别是 Unblocked PublicationsUnblocked Control Commands

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值