resolve文件源码分析
进入主方法
初始化配置
订阅 '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 的过期时间
- resolve:****{} (magic_number)
问题:
部署在docker里的探针没有export数据
看日志发现这个 resolve 文件这儿报错了,超过redis最大连接数的设值。默认 10000 个,到这个文件之前就已经 9000 多个。增大redis连接数的配置之后,连接数总共 23000 左右。
后来找到原因 redis 连接没设置过期时间