别理我 烦着呢

2011年7月11日星期一

Push S01E04

为了讲Push,要先说说移动通信的一小部分原理。
基站到手机,称为前向,手机到基站,称为反向,是两条路。
先说前向。
打个比方,你住在楼上,楼下院子门口有个传达室,有个大爷在里面。你就是手机。传达室大爷就是基站。而数据,就是你要收的包裹。
你每天早上起来,打开窗户看一眼传达室,发现大爷在里面,好,这个行为就是手机在听导频信道。英文pilot。
包裹送到大爷这里了,大爷就扯着嗓子喊:孩纸,你的包裹到了!这就叫寻呼信道。英文page。
然后你满头大汗跑下楼拿包裹,签字,拿上楼,这叫建立业务信道。英文traffic。
满头大汗的意思是,建立业务信道传输数据的时候是手机最费电的部分。因为手机天生是要监听导频和寻呼信道的,但是业务信道是按需建立。

但是,如果送的不是包裹,是个电报之类的短消息,就有两说了,大爷可以直接扯着嗓子对你喊:"孩纸,你媳妇明天升了"。这叫做从寻呼信道下发短信。或者大爷可以扯着嗓子对你喊:孩纸,有你的电报,然后你满头大汗跑下楼拿一个信封,签字,上楼,打开一看,里面一行字:"亲爱的我明天要升了!"这叫做从业务信道下发短信。
区别显而易见,前者对手机来说省电,但是有可能会丢消息。后者费电,也费宝贵的空口资源,但是能确保短信下发成功。实际上,运营商可以决定把网络配置成哪种方式。

现在搞懂了前向的导频,寻呼,业务三个信道了,因为Push主要是前向的事情,就不再说反向了。

说Push之前,再说说一般的数据业务。数据业务需要手机有个IP地址,这就保证了网络层以及以上都是建立好了的。但是如果手机和服务器之间的物理层,链路层一直保持连接,就意味着手机和基站要不停的交换数据,太费电。所以,就有了这么一个状态:网络层以及上层是活着的,下面2层(物理层和链路层)被临时拆掉了。有数据包的时候再把物理层重新建起来。这个过程对应用层的软件不是透明的,需要应用层的软件做修改来适应这种模式。比如,合理设置心跳等。
很多人买智能手机的时候最关心的问题是能不能后台挂QQ。这个真是要把3G的架构师给气绝的一个需求。设计3G的时候针对的是视频电话,VoIP,互动游戏,Push
to Talk(比如QQ微信,后面会详细说这个业务)等对称实时应用,而QQ这样的IM应用的特点完全和3G不搭调:非实时,低流量,长时间在线。而且时不时的更新个消息啊,状态啊,业务信道拆了吧,要不停的反复的重建,不拆吧,嗷嗷费电。怎么办?
在塞班时代腾讯推出了QQ节能模式,大意就是隔一阵上线一会,在费电和消息的实时性方面折中。

现在开始说Push。其实和从寻呼信道下发短信一样,3G时代也有一个模式,是从寻呼信道下发数据包,只是这个数据包不能太大。但是对Push消息来说,那实在是太合身了。这样手机就不必长时间建立业务信道等消息。看,Push的道理,说起来就这么简单,但是为了说明一个简单的道理,前面要加上那么多的铺垫。
不过呢,就像运营商可以配置短信是从寻呼信道下发还是建业务信道下发一样,运营商也可以配置是否打开这种"从寻呼信道下发小数据包"的功能,理由一样,一个省电但不确保可靠,一个费电但可靠。

中国移动的139Pushmail, 走的是短信Push的方式。 iOS的Push
Notification走的是数据业务Push的方式。方法不同,目的都是为了实时且省电。短信Push和数据Push的区别,就好象FTP里面的字符模式和二进制模式的区别一样。

物理层数据链路层网络层等底层的问题解决了,应用层也有一堆问题需要解决。要能被Push到,显然手机里面需要有一个或者多个守护进程听Push消息。也要有对应的服务器负责发Push消息。问题就来了,谁建立这个Push服务器?看看产业链不难得出结论,手机制造商,手机操作系统制造商,运营商,应用程序开发者。苹果和诺基亚选择的是以手机制造商的身份亲自搭建。微软选择的是以OS制造商的身份搭建。谷歌很不负责任的把这个任务下发给了各个应用开发者。黑莓则是为了让各个企业放心,让各个企业用户自己搭建。

苹果模式的好处是手机上只需要一个守护进程,就可以收所有开发者的Push消息。而且苹果对开发者控制的也很好。

微软模式类似,而且因为微软是非开放式的OS,手机制造商不能轻易裁剪掉Push Daemon。

安卓模式比较�,如果我想听ESPN,微信,QQ,facebook,4sq,MSN,twitter,开心,大众点评,股票的Push,要开多少个Daemon啊。当然安卓用户可以自豪的大声说我们是多任务!不过这怎么也不能掩盖一个事实就是:和安卓这种模式比起来,苹果的Push更加"云计算",每增加一种类型的Push消息,手机上的开销约等于0.而安卓手机上的开销则是线性增加的。不过呢,安卓也在做,C2DM框架已经出现了,就看什么时候能部署了。多说两句,我觉得安卓对智能设备最大的贡献是改变了Quit的法则。苹果随后就学习了这一先进之处。

运营商模式,估计大家经过了前几年的SP噩梦之后再也不想看到运营商在产业链中强势起来了,还是尽可能绕过运营商吧。

开发者模式,比如腾讯的Q计算,然后腾讯在手机上装一个Daemon(这种事情比较可能在Symbian和Android上发生),所以其他依靠在Q平台的开发者都可以借用腾讯的服务器去Push消息,因为一个小开发者很难说服用户在有限的手机资源里开一个Daemon守着他的消息。当然,干同样的事情的还有360.这就回到了3Q大战的时候暴露出来的一个道理:装机量为王,客户端为王。

最后要批评一下守旧的黑莓。
曾经,Push是黑莓的看家法宝。但是黑莓很不大度的和运营商紧密合作,紧密到了,让运营商专门配置接入点给购买BES服务的企业来绑架企业用户。而且推送的东西也仅仅限于BES/BIS的邮件和BBM的消息。结果有一天,有个叫苹果的公司不愿意像黑莓那样蹲在运营商的裤裆下面赚钱,很有骨气的蹬鼻子上脸,骑到运营商头上去了,推出了门槛低得多的Push服务,不需要企业购买硬件,不需要运营商专门配置接入点,只要有网络,就能推。于是开发者和用户一下子就沸腾了。谁都能推。霸气外露的腾讯能向用户推消息,一个白手起家的小开发商给苹果付点保护费也可以向用户推消息,当然,前提是他开发的软件有值得推的东西,比如,你关心的球队比赛比分之类的。运营商只管提供可靠的3G网络,收流量费,其他事情少特么操心。于是,在Push这个战场上,黑莓就洗洗睡了。可以想象到,在那一年的WWDC上,苹果演示Exchange的推送,同步,远程擦除功能的时候,黑莓的CxO们那复杂的心情啊。

0 条评论:

发表评论

订阅 博文评论 [Atom]



<< 主页