一、导言
在“百度应用移动网络深度优化实践分享(一):域名系统优化”中,我们知道域名系统通常是网络优化的首选,下一个HTTP协议成为优化的焦点。通常,优化器会选择协议交换、合并请求、减小数据包大小等方式来优化HTTP协议,这完全超出了网络优化的范围。
HTTP协议的基础是连接,所以我们的“百度APP移动网络深度优化实践共享(二):网络连接优化”应运而生,希望对大家在网络方向的学习和实践有所帮助。
该系列文章的目录如下:
“百度应用移动网络深度优化实践分享(一):域名系统优化”
“百度应用移动网络深度优化实践分享(二):网络连接优化”(*本文)
“百度APP移动网络深度优化实践分享(3):移动弱网络优化”
二、相关文章
TCP/IP的详细说明-第17章TCP:传输控制协议
TCP/IP的详细说明-第18章TCP连接的建立和终止
TCP/IP的详细说明-第21章TCP的超时和重传
易于理解——对TCP协议的深刻理解(一):理论基础
易于理解——对TCP协议的深刻理解(ⅱ): RTT,滑动窗口,拥塞处理
理论经典:三次握手和四波TCP协议详解
现代移动网络短连接优化方法综述:请求速度、弱网络适应和安全保障
“移动即时通讯开发者必须阅读(1):易于理解,理解移动网络的“弱”和“慢”(*必须阅读好的文本)
移动即时消息开发者必须阅读(2):历史上最全面的移动弱网络优化方法总结
“爱奇艺移动网络优化实践分享:网络请求成功率优化”
"美团点评移动网络优化实践:大大提高连接成功率和速度等."
三。技术背景
连接优化需要解决两个核心问题:
1)建立连接需要很长时间,这导致总请求时间更长,进而影响用户体验;
2)在多变的网络环境中,连接建立过程可能会失败,导致成功率下降,从而影响用户体验。
百度应用程序承载着数十亿的流量,每一个请求都需要以短时间消耗和高成功率来体验。从协议的角度来看,我们如何实现这一点?首先,让我们看看建立连接的耗时原则。
百度应用移动网络深度优化实践分享(2):网络连接优化_1.jpg
▲耗时连接建立的原则
从上面的图片我们可以清楚地看到:
1)DNS查询需要一个RTT(往返时间Time,即往返时间)。百度的应用程序都是基于HTTPDNS服务的,所以它们中的大部分都会进入缓存。如果系统的域名系统被降级,它们也会命中缓存。如果他们打不中,他们是基于UDP协议,所以它对连接时间没有太大影响,在线数据也可以解释这一点;
2)传输控制协议必须经过同步、同步/确认和确认三次握手的1.5 RTT,但是确认和客户端你好被合并了,所以它是一个RTT;
3)传输层安全性需要两个RTT握手和密钥交换。
总的来说,在域名系统、顶级域名系统和TCP的握手阶段,需要四个RTT才能到达应用数据阶段,即数据传输阶段。
通过以上分析,可以得出这样的结论:如果我们能够尽可能地减少传输流和传输控制协议的RTT,将会大大减少连接时间。
四.连接优化我们能做什么?
百度应用的优化目标分为两类,一类是顶级域名系统连接优化,另一类是TCP连接优化。
接下来,我们将介绍基于这两个优化的思想和实践总结。
V.连接优化“张力腿系统连接优化”
TLS的连接优化需要服务器和客户端双方的支持,并共同完成优化手段,包括会话恢复和误启动。
5.1邮件恢复
会话恢复在中文中意味着会话重用,下图说明了会话恢复的协议原理。
百度应用移动网络深度优化实践分享(2):网络连接优化_2.jpg
▲会话恢复的协议原则
从上图可以看出,TLS密钥协商和交换的过程已经过去,但如何具体实施呢?有两种方法,一种是会话标识符,另一种是会话票证。
1)会话标识符:
会话标识符是汉语中的会话标识符,更像是人们熟悉的会话概念。是在TLS握手中生成的会话标识。服务器将保存会话标识,客户端也将存储会话标识,并将其带到后续的客户端您好。如果服务器能找到匹配的信息,它就能完成快速握手。
2)会话票证:
会话标识符有一些缺点,例如,如果客户端的多个请求不在同一台机器上,它们就找不到匹配的信息,但是会话票证可以。会话票证更像是人们熟悉的cookie概念。会话票证使用只有服务器知道的安全密钥对会话信息进行加密,并将其保存在客户端。当客户端Hello时,客户端会带来一个会话票证,如果服务器能够成功解密,它就可以完成快速握手。
会话标识符和会话票证都有时效性问题,并且它们不是永久有效的。对于这两种方法,可以参考参考文献[4]。百度应用的网络协议层支持这两种方法,在TLS握手过程中省略了证书下载和密钥协商交换环节,节省了一个RTT时间。
5.2错误启动
真正的开始在中文中意味着逃跑,下图说明了假开始的协议原理。
百度应用移动网络深度优化实践分享(2):网络连接优化_3.jpg
▲误启动协议原理
上图清楚地表明,在第一步TLS握手成功后,客户端在发送变更密码规范完成的同时开始数据传输,服务器在TLS握手完成后直接返回应用数据。事实上,应用程序数据的发送并不等待握手完成,所以它被称为运行。
根据结果,节省了一个RTT时间。错误启动有两个先决条件:
首先是通过应用层协议协商alpn(应用层协议协商)握手。
第二是支持具有前向安全性的加密算法。
假开始发送数据,但不完成握手。前向安全性可以提高安全性。具体协议实现请参考参考文献[3]。百度应用的网络协议层支持误启动。
这里有一个题外话,实际上,TCP层有一个类似的连接优化方法,叫做快速打开。感兴趣的学生可以查阅参考文献[5]。
5.3 5.3停止恢复和错误启动之间的区别
他们两个都为顶级联赛留了一个RTT。第一次握手时会话恢复仍然需要两个RTT,第二次握手时会话恢复可以重用并减少为一个RTT。错误启动是终端上的一种行为,因此每次都会减少到1 RTT。
第六,连接优化“TCP连接优化”
TCP连接优化,让我们从连接池开始,首先让我们知道连接池的类型。
6.1连接池
百度应用移动网络深度优化实践分享(2):网络连接优化_4.jpg
▲连接池的类型
上图显示了不同类型的连接池,它们都是众所周知的协议连接池。有低级连接池,包括TCP连接池(管理HTTP请求连接)和网络套接字连接池(管理网络套接字连接)。
有高级连接池,包括HTTP代理连接池(管理HTTP代理请求)、SpdySession连接池(管理SPDY和HTTP/2请求)、SOCKS连接池(管理SOCKS和SOCKS5代理连接)和SSL连接池(管理HTTPS请求)。
不同类型的连接池可以组合使用;
1)SSL连接池管理服务请求,但服务请求依赖于服务请求;由TCP连接池提供;
2)如果采用了HTTP协议,则HTTP代理连接池需要TCP连接池提供的TCP数据包,否则就需要数据包;如果采用HTTPS协议,则由SSL连接池提供。
3)服务请求连接池依赖于SSL连接池来提供服务请求。这里需要说明的是,虽然HTTP/2协议没有强制绑定HTTPS,但在实际开发中确实绑定了HTTPS,百度应用使用ALPN来协商HTTP/2;
4)由SOCKS连接池管理的SOCKS套接字和SOCKS 5套接字需要依赖于由TCP连接池提供的TCPSocket。虽然SOCKS5支持UDP,但是cronet网络库还没有实现;
5)网络套接字连接池依赖于由TCP连接池提供的TCP套接字,这里没有说明WSS(网络套接字安全)。
TCP连接优化是一个复杂的内容。百度应用做了有针对性的场景优化,包括预连接、连接重建、待机连接和复合连接。
6.2预连接
百度应用移动网络深度优化实践分享(2):网络连接优化_5.jpg
▲预连接和连接重建
预连接:预创建的连接。它解决了在应用阶段不需要时间就可以获得连接的情况。这里有四个问题和答案来解释预连接。
问题1:预连接能否解决所有网络请求的早期连接建立问题?
答案是否定的。预连接要求业务方评估核心业务,并为核心域名建立预连接。
问题2:由于预连接是针对特定的域名,它是如何配置的?
答:域名+连接号码用于配置,如https://a.baidu.com|2,这意味着为a.baidu.com域名配置了两个预连接。这里,应该解释的是,在HTTP/1.x协议下,网络库的实现对于单个域名将具有最大连接数,并且不同网络库的数量是不同的,5和6,但是对于HTTP/2协议。
问题3:预连接是如何建立的?
答:网络库初始化时,会根据用户5s的配置延迟来设置预连接,主要考虑网络库对冷启动时启动性能的影响。为了确保网络库的整体性能,预连接的总数限制为20。
问题4:如何维护预连接?
答:当网络库初始化时,除了建立预连接外,还会创建一个预连接定时器,每31秒设置一次。该值的设置取决于BFE(百度前端)和BGW(百度自主开发的四层负载平衡平台百度关口)设置的最小超时,连接将根据用户配置重新建立。
6.3连接重建
重新建立连接。它解决了应用程序网络状态改变和IP地址改变的情况,这导致连接不可用。这里有三个问题和答案来解释连接重建。
问题1:连接池中的所有连接都是连接重建吗?
答:答案是肯定的。
问题2:连接重建的过程是什么?
答:当网络状态改变时,第一步是清除连接池中的空闲套接字。什么是空闲插座?即空闲套接字,对于未使用的空闲套接字,空闲套接字被清除的时间超过60秒,对于已使用的空闲套接字,空闲套接字被清除的时间超过90秒。在第二步中,需要200毫秒来重新建立连接,以便等待首先重新建立域名系统。
问题3:连接重建会影响性能吗?
答:出于性能原因,连接重建的连接数限制为100。
6.4备用连接
百度应用移动网络深度优化实践分享(2):网络连接优化_6.jpg
▲备用连接和复合连接
备用连接。它解决的情况是在组中没有可用连接时正常发送请求(什么是组?组是管理套接字的最小单元,它包含活动套接字、空闲套接字、连接任务和等待请求。这里有三个问题和答案来解释备用连接。
问题1:是否所有请求都有备用连接?
答:答案是肯定的。
问题2:待机连接的过程是什么?
回答:当请求到来时,连接池中没有可用的连接,将启动一个计时器来启动备用连接。定时器间隔为250毫秒,与主连接竞争。如果主连接由于网络抖动或不良网络状态而失败,备用连接将直接发送请求。如果主连接成功,备用连接将被取消。
问题3:备用连接的目的是什么?
答:当连接池中没有连接时,有必要创建一个连接。向主连接添加备用连接将大大提高创建连接的成功率,从而增强用户体验。
6.5复合连接
复合连接,即多个连接。它解决了多个IP地址的连接选择问题。这里有三个问题和答案来解释复合连接。
问题1:所有请求都是复合连接吗?
答:答案是肯定的。复合连接可以在全球范围内切换,但百度应用目前还没有启动复合连接。
问题2:复合连接的过程是什么?
众所周知,域名域名解析系统查询通常会返回多个IP。让我们以域名查询返回两个IP为例
1)如果结果中有IPv6地址,IPv6地址将是首选。这条规则遵循快乐电子邮件机制(参见第一系列中快乐电子邮件的介绍)。
2)接下来,这两个IP将尝试按顺序建立连接。如果第一个IP返回故障,它将立即开始连接第二个IP。
3)如果第一个IP首先成功返回,第二个IP将被添加到连接尝试列表中,并停止所有尝试的连接。
4)如果第一个IP失败,第二个IP的连接将立即开始。
5)如果第一个IP处于未决状态,将启动一个计时器,默认延迟2s将启动第二个IP的连接。如果多个IP递归连接,需要特殊说明,不同网络标准的延迟时间会不同,体验会更好。
问题3:复合连接的目的是什么?
答:复合连接的优点是提供了最佳的IP选择机制,但它也会给服务器带来很高的负载,因此在使用它时需要进行综合评估。
七.连接优化的最佳实践
目前,由于历史原因,百度应用的客户端网络架构还没有统一,但我们正在朝着这个目标努力。
我们的中心思想是以系统网络库的API调用接口为中心,上层建立一个外部方便调用的网络门面,底层通过系统机制以AOP的方式将cronet(网络模块Cronet)注入系统网络库,从而实现双端网络架构的统一和功能的重用。
以下重点介绍安卓和iOS网络架构中连接优化的位置和实践。
7.1安卓网络架构中连接优化的定位与实践
百度应用移动网络深度优化实践分享(2):网络连接优化_7.jpg
▲连接优化在安卓网络架构中的位置
目前,百度应用的安卓网络流量在okhttp之上,上层由网络门面封装,封装了内部实现细节和外部友好的API。目前,我们正在对其进行改造,默认采用安卓标准网络接口HttpURLConnection,其底层由系统提供的okhttp实现。
在订阅方面,使用了网址流协议机制来接管作为cronet的HttpURLConnection的底层网络协议栈,它可以被各种服务和基本模块使用,并且连接优化的所有内容都在cronet网络库中实现。
7.2 iOS网络架构中连接优化的定位和实践
百度应用移动网络深度优化实践分享(2):网络连接优化_8.jpg
▲连接优化在iOS网络架构中的位置
目前,百度应用的iOS网络流量都在cronet之上。在上层,我们使用iOS的URL加载系统机制将cronet栈注入到URLSession中,这样我们就可以直接使用URLSession的API来操作网络,使系统的维护更加容易。在上层,我们封装了每个业务和基本模块的网络外观。
在cronet中,实现了预连接(主要针对百度应用的几个核心域名的预连接和保活)、连接重建(针对所有请求)、备用连接(针对所有请求)、复合连接(尚未在iOS上打开)、会话恢复(针对所有请求)和误启动(针对所有请求)。
八.实际收入
连接优化的好处主要体现在网络延迟和网络成功率上,这需要结合业务,以百度应用订阅源刷新这一典型业务场景为例。
Feed刷新文本请求的网络延迟降低了16%,Feed刷新图片请求的网络延迟降低了12%,效益十分明显。
从成功率来看,订阅源刷新的文本请求和图片请求的成功率分别提高了0.29%和0.23%,利润也非常可观。
九.本文的结论
连接优化是一个持续的话题,没有最好的,只有更好的。以上介绍的百度应用的一些经验和做法并不完善,但我们将继续深入优化,不断提高百度应用的网络性能。
上述优化由百度应用团队、内核团队和操作团队完成。最后,感谢您的辛勤阅读。我希望这对你有帮助。稍后,我们将继续推出百度应用网络深度优化系列“3”弱网络优化。请期待它。
----------------------------------------------------------------------------------
哇谷im_im即时通讯_私有云_公有云-哇谷云科技官网-JM沟通
IM下载体验 - 哇谷IM-企业云办公IM即时聊天社交系统-JM 沟通下载
IM功能与价格 - 哇谷IM-提供即时通讯IM开发-APP搭建私有化-公有云-私有化云-海外云搭建
新闻动态 - 哇谷IM-即时通讯热门动态博客聊天JM沟通APP
关于哇谷-哇谷IM-提供企业即时通讯IM开发-语音通话-APP搭建私有化-公有云-私有化云-海外云搭建
联系我们 - 哇谷IM-即时通讯IM私有化搭建提供接口与SDK及哇谷云服务
公有云和私有云之间有什么区别?类似融云、环信云、网易云、哇谷云?