exporter
<p>[TOC]</p>
<h3>简要描述</h3>
<p>完成 exporter 数据上报服务的主逻辑。</p>
<p>exporter 的任务之一是读取 btcd 通过 logger 输出的日志,包括如下工作:</p>
<ul>
<li>直接主动读取日志</li>
<li>先被动监听日志,然后再主动读取日志</li>
<li>自动切换日志分组和分片</li>
</ul>
<p>exporter 的另一任务是,依赖 receiver 服务完成 exporter 注册、退出和数据上报,包括如下工作:</p>
<ul>
<li>启动 exporter 时将在 receiver 中注册元信息</li>
<li>数据上报时同时上报数据和当前的进度信息</li>
<li>退出 exporter 时将在 receiver 中清除元信息</li>
</ul>
<h3><code>ExporterServer</code> 数据结构</h3>
<pre><code class="language-golang">type (
// ExporterServer 串行化的,无需加锁
ExporterServer struct {
conf config.ExporterConfig
watcher *fsnotify.Watcher
// 进度信息,用于同步和恢复启动
currentProgress protocol.ReceiverProgress
// filepath = LogFileBasePath + "/" + loggerName + "/" + currentDay + "/" + currentFileID + ".log"
currentFilepath string
// 设置的同步时间间隔
pollInterval time.Duration
// 当前的同步时间间隔
currentPollInterval time.Duration
stopCh <-chan struct{}
}
)</code></pre>
<h3>方法接口列表</h3>
<ul>
<li><code>func (s *ExporterServer) Run()</code></li>
<li><code>func (s *ExporterServer) poll()</code></li>
<li><code>func (s *ExporterServer) watch(waitWatchCh chan<- bool)</code></li>
<li><code>func (s *ExporterServer) export() (nextDay, nextFile bool, err error)</code></li>
</ul>
<h3><code>Run</code> 方法接口</h3>
<h5>方法参数介绍</h5>
<ul>
<li>无</li>
</ul>
<h5>返回值介绍</h5>
<ul>
<li>无</li>
</ul>
<h5>调用逻辑</h5>
<ul>
<li>Run 启动一个 exporter server 的运行。</li>
<li>启动前会先向 receiver 注册 exporter。</li>
<li>并且如果 receiver 返回的历史进度信息不为空,则将历史进度初始化到 exporter 中,实现进度信息的恢复。</li>
</ul>
<h5>注意事项</h5>
<ul>
<li>无</li>
</ul>
<h3><code>poll</code> 方法接口</h3>
<h5>方法参数介绍</h5>
<ul>
<li>无</li>
</ul>
<h5>返回值介绍</h5>
<ul>
<li>无</li>
</ul>
<h5>调用逻辑</h5>
<ul>
<li>poll 是一个循环的逻辑,通过定时轮询和被动监听相结合的方式从日志文件中获取数据。</li>
<li>并且根据获取的结果自动完成日志分组和分片的切换。</li>
</ul>
<p>其中,定时轮询的日志获取方式,是在权衡了在日志输出频率过高,日志文件过大、日志 IO 阻塞严重等对性能、实时性的限制情况下,所设计的一种方式,与 logger 的日志分组分片是协同工作的。</p>
<p>另外,在日志输出频率正常、日志 IO 阻塞正常的情况下,为了优化定时轮询所带来的的实时性延迟,同时引入了被动监听的方式。</p>
<p>两种方式可以自动在最适合的选择中无缝切换。</p>
<h5>注意事项</h5>
<ul>
<li>无</li>
</ul>
<h3>其他方法接口</h3>
<p>详细设计:<a href="https://github.com/BitTraceProject/BitTrace-Exporter/blob/main/server/export.go">BitTraceProject/BitTrace-Exporter/server/export.go</a></p>