一、序言
在系列产品《一》里我们了解到互联网优化通常会必选优化DNS,而接下去的HTTP协定正式成为优化的重点项目,通常优化者会优先选择协定转换,分拆允诺,简化报文大小不一等方式来对HTTP协定展开优化,细致的说这都不属于保定网站制作互联网优化的专业领域。
HTTP协定的此基础是相连,因此他们的系列产品《二》相连优化不断涌现,期望对我们在互联网路径的自学和课堂教学略有协助。
二、大背景
相连优化须要化解三个核心理念难题
1. 相连创建费时极短,引致允诺的总时数变短保定网站制作,从而负面影响使用者新体验。
2. 在明快的互联网自然环境下,相连创建的操作过程可能会失利,引致错误率上升,从而负面影响使用者新体验。
腾讯App贯穿着亿左右网络流量,对每两个允诺都须要崇尚费时短,锯叶的新体验。从协定视角起程,怎样才保定网站制作能努力做到这一点儿呢?具体来说他们上看下创建相连费时的基本原理。
创建相连费时的基本原理
从上图他们能明晰的窥见
1. DNS Query须要1个RTT(Round-Trip Time,即往返时间),腾讯App都是基于HTT保定网站制作PDNS服务的,因此大部分会命中缓存,如果降级走了系统DNS,也会命中缓存,命中不了的由于是基于UDP协定,因此在相连费时上没有太大的负面影响,线上的数据也能说明这点。
2. TCP要经历SYN,SYN/A保定网站制作CK,ACK三次握手的1.5个RTT,不过ACK和ClientHello分拆了,因此就是1个RTT。
3. TLS(Transport Layer Security,即传输层安全性协定)须要经过握手和密保定网站制作钥交换2个RTT。
综上所述,DNS,TLS,TCP握手阶段用了4个RTT才到了ApplicationData阶段,也就是数据开始传输阶段。
通过上面的分析可以总结出,如果他们能尽量的将TLS和TCP的R保定网站制作TT减少,将会大大降低相连费时的时间。
三、相连优化他们都能做什么
腾讯App的优化目标分为两类,一类是TLS的相连优化,一类是TCP的相连优化。
TLS的相连优化
TLS的相连优化,须要服务端和客户端都须要保定网站制作支持,共同完成优化方式,包括Session Resumption和False Start。
Session Resumption
Session Resumption中文意思是会话复用,下图讲解了Sess保定网站制作ion Resumption的协定基本原理。
Session Resumption的协定基本原理
通过上图可以窥见TLS密钥协商交换的操作过程没有了,但具体是怎样实现的呢?包含两种方式,一种是Sesssion Ide保定网站制作ntifier,一种是Session Ticket。
1)Session IdentifierSession Identifier中文为会话标识符,更像他们熟知的session的概念。是 TLS 握手中保定网站制作生成的 Session ID。服务端会将Session ID保存起来,客户端也会存储Session ID,在后续的ClientHello中带上它,服务端如果能找到匹配的信息,就可以完成一次快速握手。
2保定网站制作)Session TicketSession Identifier存在一些弊端,比如客户端多次允诺如果没有落在同一台机器上就无法找到匹配的信息,但Session Ticket可以。Session Ti保定网站制作cket更像他们熟知的cookie的概念,Session Ticket用只有服务端知道的安全密钥加密过的会话信息,保存在客户端上。客户端在ClientHello时带上了Session Ticket,服保定网站制作务器如果能成功解密就可以完成快速握手。
不管是Session Identifier还是Session Ticket都存在时效性难题,不是永久生效,对这两种方式我们可以查看参考资料【4】。腾讯App的网保定网站制作络协定层对这两种方式都是支持的,省去了TLS握手操作过程中证书下载,密钥协商交换的环节,节省了1个RTT的时间。
False Start
False Start的中文意思是抢跑,下图讲解了False Star保定网站制作t的协定基本原理。
False Start的协定基本原理
上图很明晰的说明在TLS第一步握手成功后,客户端在发送Change Cipher Spec Finished的同时开始数据传输,服务端在TLS握手完成时直保定网站制作接返回应用数据。应用数据的发送实际上并未等到握手全部完成,因此称之为抢跑。
从结果看省去了1个RTT的时间。False Start有三个前提条件,一是要通过应用层协定协商ALPN(Application保定网站制作 Layer Protocol Negotiation)握手,二是要支持前向安全的加密算法。False Start在未完成握手的情况下就发送了数据,前向安全可以提高安全性,具体协定实现,我们可以查看参保定网站制作考资料【3】。腾讯App的互联网协定层对False Start是支持的。
这里说句题外话,其实TCP层有个类似的相连优化方式叫Fast Open,感兴趣的同学,可以查看参考资料【5】。
Session Re保定网站制作sumption和False Start的区别
两者对TLS来说都是节省两个RTT,Session Resumption在第一次握手时还是须要2个RTT,在第二次握手时才能复用减少到1个RTT。Fal保定网站制作se Start是端上的行为,故每次都会减少到1个RTT。
---此处内容较多 休息下再继续阅读吧---
TCP的相连优化
TCP的相连优化,他们先从相连池说起,具体来说让他们来认识下相连池都有哪些类型。
1. 保定网站制作相连池
相连池的类型
上图展示了相连池的不同类型,都是我们耳熟能详的协定相连池,有低级相连池,包含TCP相连池(管理HTTP允诺的相连)和WebSocket相连池(管理WebSocket相连)。
有高级相连保定网站制作池,包括HTTP代理相连池(管理HTTP代理允诺的相连),SpdySession相连池(管理SPDY和HTTP/2允诺的相连),SOCKS相连池(管理SOCKS和SOCKS5代理的相连),SSL相连池保定网站制作(管理HTTPS允诺的相连)。
不同类型的相连池以组合的形式互相复用能力。
1)SSL相连池管理的是SSLSocket,但SSLSocket又依赖于TCP相连池提供的TCPSocket。
2)HTTP代理连保定网站制作接池如果走HTTP协定,那么就须要TCP相连池提供TCPSocket,如果走HTTPS协定,那么就须要SSL相连池提供SSLSocket。
3)SpdySession相连池依赖SSL相连池提供SSLSo保定网站制作cket,这里须要说明下,虽然HTTP/2协定没有强制绑定HTTPS,但是在实际开发中确实都是绑定HTTPS,腾讯App使用ALPN来协商HTTP/2。
4)SOCKS相连池管理的SOCKSSocket保定网站制作和SOCKS5Socket都须要依赖TCP相连池提供的TCPSocket,虽然SOCKS5支持UDP,但cronet互联网库暂时没有实现。
5)WebSocket相连池依赖TCP相连池提供的TCPSock保定网站制作et,声明下这里没有说明WSS(Web Socket Secure)的情况。
TCP相连优化是两个比较复杂的内容,腾讯App做了针对性场景优化,包括预相连,相连重建,备用相连,复合相连。
2. 预相连
预保定网站制作相连和相连重建
预相连,预先创建好的相连。它化解的场景是在App使用阶段可以无费时的获取相连。下面用四个问答来解释预相连。
难题一:预相连是否能化解所有互联网允诺的提前相连创建?
答:答案是否定的,预相连须要保定网站制作业务方展开核心理念业务的评估,针对核心理念的域名展开预相连的创建。
难题二:预相连既然针对的是特定的域名,那么是怎样配置的呢?
答:采用域名+相连数的方式展开配置,比如https://a.baidu.com|2,保定网站制作表示给a.baidu.com这个域名配置两条预相连,这里要说明下,在HTTP/1.x协定下,互联网库的实现都会对单域名有最大相连数的限制,不同互联网库的个数限制不一样,有5个也有6个,但对HTTP/2保定网站制作协定,这个相连数就只能是1个。
难题三:预相连是怎样创建的?
答:在互联网库初始化的时候,会根据使用者的配置延迟5s展开预相连的创建,主要是考虑互联网库在冷启动下对启动性能的负面影响,为了保证互联网库的整体性能,保定网站制作预相连的总个数限制在20个。
难题四:预相连是怎样保持的?
答:在互联网库初始化的时候,除了展开预相连的创建,还会创建两个预相连的定时器,这个定时器会每隔31s,这个值的设定取决于BFE(Baidu Fro保定网站制作nt End,是七层网络流量的统一接入系统)和BGW(Baidu Gate Way,腾讯自主研发的四层负载均衡平台)对超时的最小值设定,根据使用者的配置重新创建相连。
3. 相连重建
相连重建,将相连重新建保定网站制作立。它化解的场景是App互联网状态发生变化,IP地址变化,引致相连不可用。下面用三个问答来解释相连重建。
难题一:相连重建是否针对相连池里的所有相连?
答:答案是肯定的。
难题二:相连重建的操作过程是什么样的?
答保定网站制作:在互联网状态变化的时候,第一步会清除掉相连池里的idle socket,何为idle socket?即空闲socket,对从未使用过的空闲socket超过60秒清除,对使用过的空闲socket超过保定网站制作90秒清除。第二步重建相连须要等待200ms,目的是等待DNS先重建完成。
难题三:相连重建对性能有负面影响吗?
答:出于性能考虑,相连重建的相连个数限制是100个。
4. 备用相连
备用相连和复合相连
备用连保定网站制作接,预备的相连。它化解的场景是正常发送两个允诺当group内无相连可用的时候(何为group?group是管理socket的最小单元,内部包含活跃socket,空闲socket,相连任务,等待允诺)。保定网站制作下面用三个问答来解释备用相连。
难题一:备用相连是否针对所有允诺?
答:答案是肯定的。
难题二:备用相连的操作过程是什么样的?
答:当有允诺来临时,相连池内无相连可用,会启动两个定时器开启备用相连,定时器的间隔时保定网站制作间是250ms,与主相连展开竞争,如果主相连因为互联网抖动或者互联网状态不好,引致相连失利,那么备用相连就直接发送允诺。如果主相连成功,那么备用相连就被取消掉。
难题三:备用相连的目的是什么?
答:在相连池无保定网站制作相连的情况下,务必是要创建相连的,在主相连之外加两个备用相连,会大大提升创建相连的错误率,从而提升使用者新体验。
5. 复合相连:
复合相连,即多条相连。它化解的场景是为了多个IP地址的相连选取难题。下面用保定网站制作三个问答来解释复合相连。
难题一:复合相连是否针对所有允诺?
答:答案是肯定的。复合相连可以全局开关,腾讯App现阶段暂时没有开启复合相连。
难题二:复合相连的操作过程是什么样的?
答:众所周知域名DNS查询通常保定网站制作情况下会返回多个IP,他们以域名查询返回三个IP为例
1)如果结果中存在IPv6的地址,那么会优先选用IPv6的地址,这个规则follow HappyEyeBall机制(可参考系列产品一对HappyEye保定网站制作Ball的介绍)。
2) 接下去这三个IP会按照顺序尝试创建相连,如果第两个IP返回失利,将立即开始相连第二个IP。
3)如果第两个IP率先成功返回,那么第二个IP将被加入相连尝试列表并停止所有尝试相连。保定网站制作
4)如果第两个IP失利,会立刻开始第二个IP的相连。
5)如果第两个IP处于pending状态,那么会启动两个定时器,默认延迟2s会发起第二个IP的相连,如果是多个IP将会递归相连,须要特别说明下,不同保定网站制作的互联网制式延迟时间会不一样,这样新体验也会更好。
难题三:复合相连的目的是什么?
答:复合相连的好处是提供最优的IP选取机制,但也会带来服务端的高负载,因此使用的时候须要展开综合评估。
四、相连优化的最佳课堂教学保定网站制作
腾讯App目前客户端互联网架构由于历史原因还未统一,不过他们正朝着这个目标努力。
他们的中心思想是以系统互联网库的API调用接口为中心,上层创建互联网门面,供外部便捷调用,底层通过系统机制以AOP的方式将cr保定网站制作onet(chromium的net模块)注入进系统网路库,达到双端互联网架构统一,能力复用。
下面着重介绍下相连优化在Android和iOS互联网架构中的位置及课堂教学。
1. 相连优化在Android互联网架构保定网站制作的位置及课堂教学
相连优化在Android互联网架构的位置
腾讯App的Android互联网网络流量目前都在okhttp之上,上层展开了互联网门面的封装,封装内部的实现细节和对外友好的API,目前他们正在展开重构,默认保定网站制作采用Android标准的互联网接口HttpURLConnection,它的底层由系统提供的okhttp的实现。
订制方面利用URL Stream Protocol机制将HttpURLConnection底保定网站制作层互联网协定栈接管为cronet,供各个业务和此基础模块使用,相连优化的所有内容在cronet互联网库内部实现。
2. 相连优化在iOS互联网架构的位置及课堂教学
相连优化在iOS互联网架构的位置
腾讯App的iOS网保定网站制作络网络流量目前都在cronet之上,上层他们使用iOS的URL Loading System机制将cronet stack注入进URLSession里,这样他们就可以直接使用URLSession的API进保定网站制作行互联网的操作而且更易于系统维护,在上层封装了互联网门面,供各个业务和此基础模块使用。
在cronet内部实现了预相连(主要针对腾讯App的几个核心理念域名展开预连和保活),相连重建(针对所有允诺),备用相连(针保定网站制作对所有允诺),复合相连(iOS上暂时没有开启),Session Resumption(针对所有允诺),False Start(针对所有允诺)。
五、收益
相连优化的收益主要体现在互联网时延和互联网错误率上,这保定网站制作两点收益须要结合业务来说,以腾讯App Feed刷新这个典型业务场景为例。
Feed刷新文本允诺互联网时延降低16%,Feed刷新图片允诺互联网时延降低12%,可谓收益相当明显。
错误率方面,Feed刷新文本保定网站制作允诺错误率提升0.29%,Feed刷新图片允诺错误率提升0.23%,也是非常不错的收益。
六、结语
相连优化是个持续性的话题,没有最优只有更优。上面介绍的腾讯App的一些经验和做法并不见得完美,但他们会继保定网站制作续深入的优化下去,持续提升腾讯App的互联网性能。
以上优化由腾讯App团队,内核团队,OP团队共建完成。最后感谢我们的辛苦阅读,期望对你略有协助,后面会继续推出-腾讯App互联网广度优化系列产品《三》弱网优化保定网站制作,敬请期待。
七、参考资料
1. https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_build_instruction保定网站制作s.md
2. https://chromium.googlesource.com/chromium/src/+/HEAD/docs/ios/build_instructions.md
3. http保定网站制作s://tools.ietf.org/html/rfc7918 False Start
4. https://tools.ietf.org/html/rfc5077 Session Resumptio保定网站制作n
5. https://tools.ietf.org/html/rfc7413 TCP Fast Open
拓展阅读:
请立即点击咨询我们或拨打咨询热线: ,我们会详细为你一一解答你心中的疑难。项目经理在线