文章: 手机QQ浏览器技术架构
编者按:由InfoQ主办的 全球架构师峰会将于2012年8月10日-12日在深圳举行,为了更好地诠释架构的意义、方法和实践,InfoQ中文站近期会集中发布一批与架构相关的文章,本篇即为其中之一。InfoQ也欢迎读者亲身参与到本次 全球架构师峰会中,与来自国内外的顶尖架构师进行面对面的交流。报名参会请点击 这里。
手机浏览器作为基础核心应用,一直以来都占据着移动互联网的制高点。5.22日晚,腾讯大讲堂在北京大学举办的第九期对外活动中,腾讯无线浏览器产品部产品总监范跃伟和技术总监张凯强强联手,结合移动互联网的产业特点和智能终端的发展趋势,全面地剖析了未来手机浏览器在智能应用和云服务方面的产品发展方向,以及隐藏在其背后的技术和服务架构。
张凯,华中科技大学硕士。2004年加入腾讯,无线浏览器产品部技术总监。一直致力于无线互联网服务端系统的开发和设计工作,先后负责手机QQ、手机QQ浏览器、手机QQ通讯录等多条产品线以及腾讯无线服务开发框架,分布式存储平台等系统的架构设计与研发工作,见证了无线互联网从2G到3G经历的多次产品和技术变革。
如何让手机用户更方便地“享用”互联网服务?
浏览器作为上网第一入口和第一信息承载平台,用户期望在手机上也能通过浏览器方便、快速的访问互联网站点,而手机和PC相比,在屏幕尺寸、处理器能力、存储器空间等各方面都有局限性,因此手机QQ浏览器充分发挥云端的能力,引入了云中转的解决方案。
云中转的核心思想是浏览器内核云端化,通过在服务端运行“引擎”实例,根据不同终端的能力和需求,针对性的帮助终端完成页面重排版(适配),JS脚本执行,页面渲染等比较复杂和耗时的运算,在满足用户访问互联网站点的同时也加快访问速度。中转过程中,数据的传输采用自定义的加密协议,云端对用户数据透传而不做存储,有效的解决数据安全问题。
云中转结构图
追求快,是一种“修行”
快、省,一直是手机QQ浏览器追求的核心能力。
除了在云中转模式下借助云端的能力为终端简化了页面解析和减少了渲染的消耗,对页面资源本身也进行了大量的优化,例如传输过程中页面数据的压缩,图片资源的压缩,资源的打包传输等等,在保证用户体验的情况下,尽可能的节省流量,起到加速的作用。随着移动互联网的发展,针对移动设备的网站越来越多,页面也越来越丰富,资源的优化处理效果也越来越明显。
相比有线互联网,无线网络在带宽上仍有明显的差距,因此,在“窄带”环境下,如何提高传输的效率也是“加速”的重要方面,手机QQ浏览器采用了就近接入,动态路由等部署和连接策略,在云端通过多地区,多机房大量的服务器部署,让用户尽可能在短距离,同运营商网络中实现接入访问。同时,为了解决无线网络稳定性差的问题,在连接和传输过程中,也通过终端和云端的配合来支持分片、断点等机制。
弱网络下的有效传输
除了在云端优化,在手机QQ浏览器的“X”架构下,也可以看到从终端到网络到云端,每层都有多点缓存,包括本地配置,UI资源,网络链路,静态资源,热点数据,DNS路由等,多级多点的缓存也为提高速度发挥了重要的作用。
“X”架构下的缓存
精品体验,更“智能”的云端
在互联网的高速发展下,信息“爆炸”已经势不可挡,而用户关注和汲取的信息量是有限的,如何在海量的信息中最快最直接为用户提供“最想要”的信息,也是浏览器在云服务中努力的方向,从论坛模式,小说模式,阅读模式到更深度的沉静式的阅读体验,手机QQ浏览器在云端的技术方案也逐步发生着变化,从人工模板到智能转换,从人工运营到机器学习,不仅在内容的抽取和展现上逐步优化,同时也积累了海量的信息资源,为内容更好的聚合提供了基础。
另外,在信息快速流动的过程中,用户对于有价值信息的沉淀需求也在云服务中得到支持,从内容发现、分享、收藏到个人数据的同步,存储,手机QQ浏览器都提供了相应的服务功能并持续为各个场景下的体验进行打磨、优化,让产品成为精品。
工欲善其事,必先利其器
手机QQ浏览器为了能快速满足不同平台下多样化的用户需求,同时又能保证云服务的稳定可靠,自研了云端服务的开发框架TAF(Tencent Application Framework),框架融合了典型中间件的跨平台、多语言、远程对象调用等特性,同时针对运营需求,支持了各种更适合自己云端运营的特性,包括透明部署,集中发布,Set分组,自动切换,过载保护等,另外,提供了多个公共服务模块,并在框架层加入对应的接口,包括远程日志服务,配置服务,统计监控服务,属性上报服务等。
TAF框架结构图
框架的基础通信协议也是自研的WUP(Wireless Uni-Protocol),该协议最大的特点就是灵活的向下兼容并支持多个终端和云端平台,包括c++,java,c#,symbian-c++,mtk-c,object-c,k-java,php,同时也能与json,xml等数据格式方便的进行互转,协议配套的编解码生成工具为开发省去了大量的“联调”时间,提高了开发效率并提升了程序的稳定性。
有趣的海量运营,灰度,染色,监控
随着云服务功能不断的丰富,支持的设备和资源也迅速增加,需求变更成为常态,设备故障成为常态,网络异常成为常态。面临各种常态的“异常”,海量服务下的运营能力便尤为重要,除了有规划的Set化部署,在平滑扩容的同时满足容灾容错需求,还有为了在敏捷开发过程中,能快速发布验证并控制影响范围而引入的灰度放量方案(大到一个Set的灰度,小到一个进程的灰度),也包括在海量调用中能快速定位并收集单个异常请求信息的染色机制,以及为了及时发现故障,建立的立体化监控告警平台,都是不断的在可用性、可靠性以及成本、资源之间寻找平衡,实现集群服务的可运营性。
染色机制运行图
手机QQ浏览器在对各种海量运营需求方案的设计和实施中,尽可能的是基于服务框架来考虑和实现,这样就能最大化的避免重复开发,让开发人员更多的精力关注产品逻辑的实现和变更,同时,抽象和收敛基础底层模块也保证了整个服务集群的质量。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至 [email protected]。也欢迎大家通过新浪微博( @InfoQ)或者腾讯微博( @InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。