deepflow-agent技术实现咨询
1.请问下agent中proxy_controller_ip是做什么用的 个人理解是agent上报数据/同步数据到server的时候,先请求proxy_controller_ip,然后由proxy_controller_ip代理到controller_ip
2.请问下agent中analyzer_ip是做什么用的,貌似有关联一个数据节点 没有看明白analyzer_ip的上下游功能
- agent 启动后会根据本地 agent.yaml 配置文件中的 controller-ip 请求 server 的 controller 模块。但为了实现负载均衡,server 会回复一个 proxy-controller-ip 地址,让 agent 后续请求它。主要目的是负载均衡
- 这里 analyzer 的叫法有些陈旧了,实际上是指的 server 中的 ingester 模块。
@TomatoMr 后面找个时间将 agent 中的 analyzer 改为 ingester,改之前先看看是否所有地方语义都能通顺。
关于agent和server通讯方式的疑问
1.看agent数据流图,agent上报网络流量数据到server是通过GRPC。
https://github.com/deepflowio/deepflow/blob/main/docs/design/data-flow.md
2.分析agent源码,agent上报网络流量数据到server是通过TCP/IP(没有使用PB) let result = tcp_stream.write(&buffer[write_offset..]); struct Encoder<T> { id: usize, header: Header,
buffer: Vec<u8>,
_marker: PhantomData<T>,
}
想请教下关于agent和server通讯方式,是由于我自己没有理解源码,还是数据流图没有更新
@taohorse 是 TCP + pb。数据应该是有 pb 序列化的。
不是 grpc
agent中,网络时延是在单点计算的。 对于TCP/ICMP协议来说,可以通过seq_id可以唯一区分同一个会话中某个请求。 请问下对于UDP协议来说,可以通过什么方式唯一区分同一个会话中某个请求。想到一个方式是使用IPID,但是IPID最大到65535就被重置到0了,所以流量大了,使用IPID貌似不太可靠。
agent中,网络时延是在单点计算的。 对于TCP/ICMP协议来说,可以通过seq_id可以唯一区分同一个会话中某个请求。 请问下对于UDP协议来说,可以通过什么方式唯一区分同一个会话中某个请求。想到一个方式是使用IPID,但是IPID最大到65535就被重置到0了,所以流量大了,使用IPID貌似不太可靠。
对,UDP 没有很好的区分方法。但
- 一般使用 UDP 的业务比较少,主要的只有 DNS
- 由于 UDP 是不可靠协议,几乎可以肯定上层应用会有 request_id 之类的信息,我们解析 DNS 时延也是用到了这点
IP ID 确实信息量太低
@taohorse 是 TCP + pb。数据应该是有 pb 序列化的。
不是 grpc
比较好奇server和agent之间的通信方式有两种,部分业务使用gRPC,部分业务使用TCP(PB)。 对于TCP(PB)来说,如果是流需求的话,也可以使用grpc streaming的。其实可以统一使用grpc的。请问下根据业务区分不同通信方式,是有什么考量吗 @sharang