无线APP时代HTTP请求DNS优化
2016-03-24 23:04
330 查看
无线APP时代HTTP请求DNS优化
缘起:无线时代,网络稳定性差,应用流量敏感,APP与server之间每次HTTP请求都需要DNS解析,有没有优化方法呢?
一、PC时代,HTTP请求处理过程
(1)浏览器、或者PC客户端访问DNS服务器,由域名拿到IP(一般来说是个nginx的IP)
(2)浏览器、或者PC客户端用IP访问nginx
(3)nginx将请求分发给实际处理HTTP请求的web-server
二、无线APP时代的特点
(1)DNS解析的时间不能忽略
(2)一旦DNS被劫持,整个APP就挂了(还记得N年前baidu的域名被劫持的事情么?)
三、一种不需要DNS解析的HTTP请求优化方案
(1)第一次访问时,先拉取server的ip-list保存到本地,访问过程与普通HTTP访问过程相同
(2)未来访问时,客户端直接使用ip-list中的IP来访问server,不再需要DNS
(3)如果DNS被劫持,直接尝试使用ip-list中的IP访问
四、潜在的问题
(1)虽然少了一步DNS查询和一步nginx中转,那怎么做负载均衡呢?
答:APP随机访问ip-list中的IP
(2)使用nginx可以方便的增加后端的服务,不使用nginx如何做水平扩展呢?
答:直接在ip-list中增加ip即可
(3)每次访问都要访问ip-list,还是挺废流量的,还有其他优化方案么?
答:增加一个版本号,第一次拉取ip-list时,不但把ip-list放到APP本地,并把版本号也拿到。未来不用每次都拿ip-list,而是先拿版本号,如果版本号不变,直接使用本地的ip-list。只有版本号变化时,才需要重新拉取ip-list
(4)还有其他什么好处?
答:使用nginx不好做异构服务器的负载均衡,即难以根据后端服务的处理能力来分配负载。使用ip-list,只要加上一个权重参数,即可实现异构服务器的负载均,例如:
192.168.1.1, 10
192.168.1.2, 10
192.168.1.3, 20
可以看到,第三个后端服务的处理能力是前两个的两倍,APP做负载均衡时考虑上第二个参数即可
五、再次总结这种方案的好处
(1)不需要每次请求做DNS解析,节省时间
(2)不需要每次请求做nginx转发,节省时间
(3)不需要每次拉取拉取ip-list,节省流量
(4)DNS被劫持时仍可以使用本地ip
缘起:无线时代,网络稳定性差,应用流量敏感,APP与server之间每次HTTP请求都需要DNS解析,有没有优化方法呢?
一、PC时代,HTTP请求处理过程
(1)浏览器、或者PC客户端访问DNS服务器,由域名拿到IP(一般来说是个nginx的IP)
(2)浏览器、或者PC客户端用IP访问nginx
(3)nginx将请求分发给实际处理HTTP请求的web-server
二、无线APP时代的特点
(1)DNS解析的时间不能忽略
(2)一旦DNS被劫持,整个APP就挂了(还记得N年前baidu的域名被劫持的事情么?)
三、一种不需要DNS解析的HTTP请求优化方案
(1)第一次访问时,先拉取server的ip-list保存到本地,访问过程与普通HTTP访问过程相同
(2)未来访问时,客户端直接使用ip-list中的IP来访问server,不再需要DNS
(3)如果DNS被劫持,直接尝试使用ip-list中的IP访问
四、潜在的问题
(1)虽然少了一步DNS查询和一步nginx中转,那怎么做负载均衡呢?
答:APP随机访问ip-list中的IP
(2)使用nginx可以方便的增加后端的服务,不使用nginx如何做水平扩展呢?
答:直接在ip-list中增加ip即可
(3)每次访问都要访问ip-list,还是挺废流量的,还有其他优化方案么?
答:增加一个版本号,第一次拉取ip-list时,不但把ip-list放到APP本地,并把版本号也拿到。未来不用每次都拿ip-list,而是先拿版本号,如果版本号不变,直接使用本地的ip-list。只有版本号变化时,才需要重新拉取ip-list
(4)还有其他什么好处?
答:使用nginx不好做异构服务器的负载均衡,即难以根据后端服务的处理能力来分配负载。使用ip-list,只要加上一个权重参数,即可实现异构服务器的负载均,例如:
192.168.1.1, 10
192.168.1.2, 10
192.168.1.3, 20
可以看到,第三个后端服务的处理能力是前两个的两倍,APP做负载均衡时考虑上第二个参数即可
五、再次总结这种方案的好处
(1)不需要每次请求做DNS解析,节省时间
(2)不需要每次请求做nginx转发,节省时间
(3)不需要每次拉取拉取ip-list,节省流量
(4)DNS被劫持时仍可以使用本地ip
相关文章推荐
- iOS网络通信类库用AFNetworking替换ASHttpRequest的解决方案
- Linux基础--网络管理
- 网络流(最大流):COGS 28 [NOI2006] 最大获利
- 梯度下降优化算法综述(翻译)
- iOS网络请求数据的JSON解析的新旧方法对比
- 部署LAMP之WordPress, PMA(https), Discuz
- Wrong03-App Transport Security has blocked a cleartext HTTP (http://) resource load since it is i
- socket编程之自定义TCP帧数据包
- [疯狂Java]TCP:半关闭Socket
- 大型网站的HTTPS实践一:HTTPS协议和原理
- 20160324servlet学习笔记HttpServletRequest对象中文乱码解决方法
- c# .net2 httphelper
- 网络7层协议
- tcp为什么要三次握手,而不能二次握手?
- TCP、UDP、HTTP、SOCKET介绍
- TCP基础知识
- TCP之RST发送场景
- https://segmentfault.com/a/1190000003496009
- TCP协议中的三次握手和四次挥手(图解)
- Web初识