12月9日,由InfoQ主办的中国技术开放日广州站将在广州四季酒店举行(欢迎广州同学免费报名,以及注册地址在文末阅读原文)。我们邀请了来自腾讯、阿里、百度、唯品会的技术专家,分享他们一线的移动开发实践。本次开放日,微信高级工程师周志杰将分享《微信Mars:移动互联网下的高质量网络连接探索》。针对这个话题,采访了周志杰,了解微信火星是什么,以及微信在跨平台组件开发方面的一些经验总结。Mars是微信官方终端基础组件。它是一个用C++编写的独立于业务和平台的基础组件。目前已接入微信Android、iOS、Mac、Windows、WP等客户端。目前正在准备开源,主要包括以下几个部分:COMM:基础库,包括socket、线程、消息队列、协程等基础工具;XLOG:通用日志模块,充分考虑移动端的特点,提供高性能、高可用、安全、容错的日志功能;SDT:网络诊断模块;STN:信令传输网络模块,负责终端与服务器之间的小数据信令通道。包含了很多微信端在移动网络上的优化经验和成果,经历了海量微信用户的考验。其中,STN(信令传输网)是核心模块。Mars源于微信的实际开发需求。由于微信多平台、亿级用户,对微信基础功能的修改影响重大。但是,不同平台的不同实现,很难在很多平台上统一。一方面不利于质量控制,可能存在重大隐患。另一方面,也不利于微信基础研究的深入。于是,微信开始了跨平台基础组件的开发,并在微信积累了多年。随着基础组件的发展和稳定,他们希望通过开源的力量进一步提升微信的基础,也期待行业的相互交流和促进,所以他们发起了火星项目。微信的网络层是为很多不同的业务而设计的。微信使用的大部分功能都是基于火星提供的网络组件,包括短信、语音、朋友圈等核心功能。只有少数服务不在范围之内,比如VOIP、Webview等。微信中使用的网络服务大致可以分为两种:信令网和数据网。STN负责信令网络,CDN组件负责数据网络。但由于CDN涉及到腾讯内部的CDN服务,所以CDN部分不在Mars的开源列表中。SDT网络诊断模块提供了最基本的检测能力,需要用户自行组合使用。各平台的ReachabilityAPI只能反映有限的情况,无法应对复杂的网络诊断。事实上,一些开源项目旨在取代系统API。微信由于自身的特点,对网络诊断的要求很高,所以将其作为跨平台的基础组件进行开发和维护。STN是微信的信令传输网络,也可以认为是一个小型的数据传输网络,是微信日常生活中使用频率最高的网络通道。在开源设计上,STN抽象了微信的使用模型,使STN成为业务独立的网络通道,并已应用于包括微信在内的多个腾讯内部应用。不同于AFNetworking、Retrofit、Okhttp等框架,STN不仅是一个跨平台的网络解决方案框架,更侧重于“移动互联网”的特点。结合移动互联网不稳定的特点,做了很多优化工作,而且这些优化都经过了微信长期的验证和使用。除此之外,STN还包含了很多其他实用的设计,包括自定义DNS、??容灾设计、负载考量、APP前后台考量、休眠机制考量、省电机制等等。在实际使用中,STN也提供了比其他网络框架更多的空间:数据监控:STN提供了很多数据回调接口,让应用可以根据这些网络数据建立统计分析、监控等工具,管理实际应用的网络情况;问题定位:STN包含了很多关键日志,日志的设计帮助微信定位了很多网络层的问题。结合Mars提供的XLOG日志机制,应用在运行时也可以打开日志,非常方便定位;参数配置:很多参数在STN中被单独配置,方便应用根据自己的情况进行修改。在网络通道方面,STN目前提供长连和短连两种通道,以满足不同的需求。使用STN后,应用开发者只需专注于业务开发。移动互联网的各种“坑”,STN都能为您搞定。微信火星跨平台组件开发心得客户端跨平台组件一般是指用C++等编写的代码,编译成各个平台的二进制链接库,然后通过平台提供的SDK调用打包到App中.跨平台组件一般是底层函数,与平台无关,与UI无关。第三方游戏引擎和数据库一般以跨平台的形式出现。跨平台的组件可以实现一个代码到处运行,减少开发和维护的工作量。因此,当移动开发团队扩大,业务规模扩大时,将一些通用的、容易出问题的底层功能抽离出来,做成跨平台的组件。必要的。实际上,网络层与系统、UI界面的耦合度很小。除了硬件设备和WebView等需要依赖系统的部分,几乎所有的网络层都可以实现跨平台和一码。但是,微信会把可以抽象成通用模型和通用能力的部分,以组件的形式考虑跨平台。跨平台组件开发过程中需要注意的点也不同于一般的移动开发。微信在火星的发展中,会要求高可用、高性能、低负载、容灾。跨平台组件开发的难点在于,跨平台方案需要考虑API在各个平台的兼容性问题,在技术选型上需要下更多功夫;需要考虑不同平台的特性,比如休眠机制等,根据不同的特性进行设计;跨平台基础组件需要从根本上思考问题,避免复杂的解决方案,避免频繁更改解决方案等。另外,由于跨平台组件对应用的影响很大,对其稳定性和稳定性有更高的要求。测试。不过,只要设计得当,跨平台的组件并不会对应用程序的稳定性构成威胁。从目前微信的使用情况来看,跨平台组件带来的Crash所占比例比较小。在测试方面,微信在各个平台都有相应的测试工具,也有更多的自动化测试来保证组件的健壮性。同时,他们还针对组件的某些特性设计了专门的测试场景。Mars将于近期开源,微信将继续维护Mars开源项目。
