美团点评的移动端网络优化实践:大幅提升连接成功率、速度等

作者:jcmp      发布时间:2021-05-10      浏览量:0
1、引言网络优化对于移动端App产品的用

1、引言

网络优化对于移动端App产品的用户体验至关重要,也与公司的运营和营收息息相关。

这里列举两个公开的数据:

“《页面加载超过3秒,57%的用户会离开》” “《Amazon页面加载延长1秒,一年就会减少16亿美金营收》”

网络性能对于用户体验的影响,将非常直接地反馈到业务的运营上。

而且,移动网络固有的弱网问题、DNS问题、连接性能等等都无法跟传统的固定网络相比。所以,优化移动端网络,显的尤其必要。

对于即时通讯应用(IM、消息推送)的开发者来说,无论是短连接还是长连接优化,都会直接体现在APP的体验上,必竟IM或类IM应用都是用户使用频度很高的场景,网络有关的体验问题稍有懈怠,就会被用户无限放大,所以回避也不是解决问题的正确之道。

有鉴于此,即时通讯网整理收集了相当多有关移动弱网的文章(包括本篇),希望能为你移动端网络优化带来一些启发。

2、本文作者

周辉: 美团点评移动技术专家,移动架构负责人。移动端开发10年以上经验。

* 领导和参加过公司大部分移动客户端产品的架构设计和业务开发; * 2010 年加入原大众点评,现专注于美团点评客户端底层架构的开发和维护; * 2016 年所负责的移动端通信架构获得公司级别技术突破大奖。

3、相关文章

4、内容概述

如何防止网络通信被劫持? 如何提升用户页面打开速度? 老板反馈页面打不开时你该怎么办?

来看看美团点评客户端网络优化实践中的经验分享吧。

在这篇文章里你可以了解到美团点评移动架构团队在提升移动通信质量方面所做的尝试,以及逐渐发展出的一整套监控和通信方案,为你优化自己App的网络通信质量打开新的思路。

5、问题现状

在讨论解决方法之前,我们来梳理一下,在移动网络请求过程中,主要都出现了哪些最常见的问题?

▼ 首先:是网络不可用问题。主要由以下几种原因导致:

1)GFW的拦截,原因你懂的; 2)DNS的劫持,端口的意外封禁等; 3)偏远地区网络基础设施比较差。 ▼ 其次:是网络加载时间长问题。这些原因包括:

1)移动设备出于省电的目的,发出网络请求前需要先预热通信芯片; 2)网络请求需要跨网络运营商,物理路径长; 3)HTTP请求是基于Socket设计的,请求发起之前会经历三次握手,断开时又会进行四次挥手。 ▼ 最后:是HTTP协议的数据安全问题。具体的原因有:

1)HTTP协议的数据容易被抓包; 2)Post包体数据经过加密能够避免泄露,但协议中的URL和header部分还是会暴露给抓包软件(HTTPS也面临相似的问题); 3)运营商数据恶意篡改严重。 如下图中,App的网页中就被运营商插入了广告:

当然,上述问题并非我们凭空想象。在美团点评,监控团队开发了基于端到端的客户端监控平台。这里要先解释一下“端到端”的含义:是指请求从客户端发出到服务端响应返回的整个过程。它区别于后台服务监控,是一种从用户角度观察到的真实体验监控。

通过美团点评的监控工具,可以很清晰地看到各种网络原因和占比:

6、短连接优化方案1:域名合并

面对上节中提到的网络问题,我们首先在HTTP短连请求中进行了一些优化尝试。

随着开发规模逐渐扩大,各业务团队出于独立性和稳定性的考虑,纷纷申请了自己的三级域名。

App中的API域名越来越多,如下所示:

search.api.dianping.com ad.api.dianping.com tuangou.api.dianping.com waimai.api.dianping.com movie.api.dianping.com … ...

App中域名多了之后,将面临下面几个问题:

1)HTTP请求需要跟不同服务器建立连接,增加了网络的并发连接数量损耗; 2)每条域名都需要经过DNS服务来解析服务器IP。 如果想将所有的三级域名都合并为一个域名,又会面临巨大的项目推进难题。因为不同业务团队当初正是出于独立性和稳定性的考虑才把域名进行拆分,现在再想把域名合并起来,势必会遭遇巨大的阻力。

所以我们面临的是:

1)既要将域名合并; 2)又要提升网络连接效率; 3)又不能改造后端业务服务器。 经过讨论,我们想到了一个折中的方案。

如上图所示,该方案的核心思想在于:保持客户端业务层代码编写的网络请求与后端业务服务器收到的请求保持一致,请求发出前,在客户端网络层对域名收编,请求送入后端,在SLB(Server Load Balancing)中对域名进行还原。

▼ 网络请求发出前,在客户端的网络底层将URL中的域名做简单的替换,我们称之为“域名收编”。

例如: URL “http:// ad.api.dianping.com/command?param1=123" 在网络底层被修改为 “http:// api.dianping.com/ad/command?param1=123" 。

这里,将域名“ad.api.dianping.com”替换成了”api.dianping.com”,而紧跟在域名后的其后的”ad”表示了这是一条与广告业务有关的域名请求。

依此类推,所有URL的域名都被合并为“api.dianping.com”。子级域名信息被隐藏在了域名后的path中。

▼ 被改造的请求被送到网络后端,在SLB中,拥有与客户端网络层相反的一套域名反收编逻辑,称为“域名还原”。

例如:“http://api.dianping.com/ad/command?param1=123" 在SLB中被还原为 “http://ad.api.dianping.com/command?param1=123" 。 SLB的作用是将请求分发到不同的业务服务器,在经过域名还原之后,请求已经与客户端业务代码中原始请求一致了。

该方案具有如下优势:

在线客服 在线客服 QQ咨询
返回顶部 返回顶部 返回顶部