transfer统计接收及转发的QPS
接收数,http接收数,rpc接收数,socket接收数(每分钟,QPS)
转发graph,judge,tsdb的总量,成功数,失败数(每分钟,QPS)
发送graph,judge,tsdb缓存大小
transfer内部数据结构:
一致性哈希环,记录了judge和graph服务节点
JudgeNodeRing *ConsistentHashNodeRing
GraphNodeRing *ConsistentHashNodeRing
发送缓存队列
TsdbQueue list 线程安全链表
JudgeQueues map[string][list]
GraphQueues map[string][*list]
rpc连接池
JudgeConnPools *cpool.SafeRpcConnPools
TsdbConnPoolHelper *cpool.TsdbConnPoolHelper
GraphConnPools *cpool.SafeRpcConnPools
跟踪,过滤
RecvDataTrace,RecvDataFilter
transfer转发数据:
被动接受指标数据,调用RecvMetricValues()异常处理后,发送graph,judge,tsdb发送队列
1.Push2GraphSendQueue:根据rrdtool数据规范step最小30s,counterType为Counter的转为derive,timestamp转为当前时间的整数时间,如12:30:22转12:30:00
拼接PK = endpoint/metric/tags,通过PK在一致性哈希环中获取节点,存GraphQueues[node+addr]{graphItem}
更新发送计数器
2.Push2JudgeSendQueue:构造PK,哈希环中获取节点,整数化时间戳,存JudgeQueues[node]{judgeItem}
启动sendTask处理缓存队列数据,graph/judge每个node一个协程,通过rpc发送数据到下游,每次失败会重试最大三次间隔10毫秒,默认发送间隔50毫秒
网友评论