该项目是手机微博研发团队和手机微博技术保障部共同努力的成果,iOS 版本请看 HTTPDNSLib-for- iOS。
如果你对 httpdns 还不了解他是什么!
你可以阅读:【鹅厂网事】全局精确流量调度新思路- HttpDNS服务详解
客户端发送udp数据包到dns服务器,dns服务器返回该域名的相关A记录信息。
客户端发起http请求携带需要查询的域名,通过IP直接访问服务器,该Http服务器接倒请求后返回域名对应的A记录。
1. LocalDNS劫持 2. 平均访问延迟下降 3. 用户连接失败率下降
HttpDns/src/DNSCache --- HttpDns lib库主工程。 HttpDns/src/DNSCacheTest --- HttpDns库测试工程。 HttpDns/doc --- 项目相关的一些文档、流程图、结构图等。 HttpDns/ui/DNSCacheTest --- 存放HttpDns测试项目UI源文件以及切图文件。
检测本地是否有相应的域名缓存 没有记录则根据当前运营商返回内置的ip节点 从httpdns查询域名相应A记录,缓存域名信息 查询模块必须保证响应速度,基于已有设备测试平均在5毫秒左右
根据sp(或wifi名)缓存域名信息 根据sp(或wifi名)缓存服务器ip信息、优先级 记录服务器ip每次请求成功数、错误数 记录服务器ip最后成功访问时间、最后测速 添加 内存 -》数据库 之间的缓存层
根据本地数据,对一组ip排序 处理用户反馈回来的请求明细,入库 针对用户反馈是失败请求,进行分析上报预警 给HttpDns服务端智能分配A记录提供数据依据
本次测速 - 对ip组的每个ip测速打分 官方推荐 - HttpDns接口 A记录中返回的优先级 历史成功 - 该ip7天内成功访问次数 历史错误 - 该ip7天内访问错误次数 最后成功时间 - 该ip最后一次成功时间,阈值24
对每个IP打分,总分100分。 本次测速 - 40分 官方推荐 - 30分 历史成功 - 10分 历史错误 - 10分 最后成功时间 - 10分 总分=本次测速+官方推荐+历史成功次数+历史错误次数+最后成功时间
目前权重分配完全基于主观认识,后期会根据建立的相应基线进行权重分配调整。
使用者需要自己权衡,有可能随机的ip速度都好于权重打分的ip。
PS:给出一副算法计算分数时的细节图,有兴趣的朋友可以一起探讨研究。
测试工程主要最初为了模拟用户使用APP发出的网络请求,进行数据记录和对比。 在页面中能很直观的看到每个任务的相关信息。 比如:任务总耗时,httpdns lib库耗时、http请求耗时、以及设备当前环境信息 等。。 由于UE,UI都是自己设计,对于表达信息的布局和美观可能还有欠缺,本程序猿的能力有限,大家多多包涵。
你未必会需要“它”,上传几张测试工程的截图,提供参考。