Yuque Archive
工作资料

resolve文件源码分析

  1. 进入主方法

  2. 初始化配置

  3. 订阅 'snapshot:****{}

获得ping发布的消息;收到消息说明ping开始新一轮ping可到达的节点了

取出所有 opendata 的成员,实例化 Resolve() 对象

       调用 Resolve的 resolve_addresses() 方法,opendata 作为参数(最多支持1000个)

key = resolve:****{} (address)

遍历 opendata,就把 key 对应的地址放到一个字典数组里(最多1000个)

如果 key 快过期了

resolved['hostname'] = [ address ]

resolved['geoip'] = [ address ]

遍历 resolved['geoip'] 中的每一个地址,

从数据包里匹配出每个地址的信息,包括 国家、经纬度、时区 等

遍历 resolved['hostname'] 中的每一个地址,启动数量相当的线程,调用 set_hostname() 方法

每一个线程里面都调用 socket 的 gethostbyaddr() 方法,获取每一个ip的 hostname

把解析出来的信息存到 redis 里

对于 geoip 解析的数组,设值 resolve:****{},  geoip,  geoip

对于 hostname 解析的数组

设值 resolve:****{},  hostname,  hostname

设值 resolve:****{},  hostname,  hostname 的过期时间

  1. resolve:****{} (magic_number)

问题:

  • 部署在docker里的探针没有export数据

  • 看日志发现这个 resolve 文件这儿报错了,超过redis最大连接数的设值。默认 10000 个,到这个文件之前就已经 9000 多个。增大redis连接数的配置之后,连接数总共 23000 左右。

  • 后来找到原因 redis 连接没设置过期时间