带你读《2022技术人的百宝黑皮书》——移动域全链路可观测架构和关键技术(9)https://developer.aliyun.com/article/1340960?groupCode=taobaotech
请求精简提速-极简调用实践
以MTOP请求作为一个场景,链路主要涉及「MTOP到网络库」的交互,通过对全链路线程模型现状分析,从MTOP发起到网络层接收到会几点会导致请求慢:
数据拷贝多:现有网络层机制,网络库存在hook拦截处理,基于NSURLConnection + "URL Loading System" 转发到网络库进行网络传输,涉及多次数据拷贝,中转拦截处理非常耗时。
线程切换多:线程模型过于复杂,完成一次请求频繁切换线程。
异步转同步:原有请求使用一个队列 NSOperationQueue 来处理任务,底层维护的这个队列把请求和响应绑在一起,使得发送之后要等待响应结果回来才会释放,"HTTP Operation" 占住完整的一个HTTP收发过程的全部IO,违背了网络请求的并行性,operation queue容易打满阻塞。
以上几点问题,在大批量请求、系统资源竞争激烈场景下下(冷启动,几十个请求一拥而上),更为明显。
(图21 线程模型优化前后-极简调用)
改造方案,通过MTOP直接调用网络库接口来获得较大性能体验提升
简化线程模型: 跳过系统URL Loading System hook机制,完成收发数据线程切换,减少线程切换。避免弱网阻塞:数据包Sending 与 Receiving 拆分处理,空口长RT不影响 I/O 并发容量;
汰换废弃API:升级老旧NSURLConnection 到直接调用 网络库API。
数据效果:可以看到,在系统资源更为紧张环境下,如低端机上优化幅度更为明显。
(图22 极简调用AB优化幅度)
弱网策略优化-Android网络多通道实践
在WIFI信号差、弱网环境下,有时候多次重试对成功率提升效果并不明显。系统提供了一种能力,允许设备在WIFI环境下将请求切换蜂窝网卡的能力。网络应用层可以利用该技术,减少请求的超时等一类错误,提升请求的成功率。
在Android 21之后,系统提供了新的获取网络对象的方式,即使设备当前具有通过以太网的数据连接,应用程序也可以使用此方法来获取连接的蜂窝网络。所以,当用户设备同时存在WIFI和蜂窝网络的情况下,可以在特定策略下将不同请求同时调度到以太网和蜂窝网两个网卡通道上,实现网络加速。
带你读《2022技术人的百宝黑皮书》——移动域全链路可观测架构和关键技术(11)https://developer.aliyun.com/article/1340958?groupCode=taobaotech