【2】手机OS成为核心
手机凭借通话和短信这两项基本功能,积累了用户,开拓了市场。但是用户的需求是永无止境的,对于手机制造商来说,紧跟用户需求,拓展手机功能,是机会也是挑战。
1988年第一款数码相机,在日本上市。数码相机的关键是感光芯片。最初的数据相机,使用的是CCD芯片。1990年代初,美国宇航局的科学家Eric
Fossum发明了CMOS感光芯片,体积更小,感光效果更好。如果把CMOS感光芯片集成到手机上去,那么手机就可以兼具照相机和摄像机的功能。
但是事情没有那么简单,给手机配上镜头以及CMOS感光芯片只是起步,接下去还有其它问题需要解决。1. 微控制器的处理能力需要加强。2.
操作系统需要增添相应的驱动程序,同时改进任务调度的机制。3.
多媒体播放器,在液晶显示屏上(LCD)显示照片,播放视频,同时协调扬声器同步播放视频的声音。4.
不仅可以在手机本地存储并显示照片和视频,还要支持连网,支持用户上传和下载多媒体文件。
1997年,硅谷工程师Philippe
Kahn制成了世界第一台具有摄像功能的手机。与相机手机同时出生的,是他的女儿。Philippe用手机给襁褓中的女儿拍了照片,并转发给2000多名
【1】MTK亮相的历史背景
如果说1960年代是大型机(Mainframe)的时代,1970年代是小型机(Microcomputer)的时代,那么1980年代无疑是个人电脑(PC)的时代,而1990年代则是互联网的时代。2000年以后呢?或许是移动互联网的时代。
与电脑的发展历程类似,移动互联网的发展轨迹,看来也同样是以硬件的改进为先导,软件的繁荣紧随其后,带动整个行业的井喷式的爆发性增长。
Figure 2. 第一代手机,俗称大哥大。
Courtesy
http://farm3.static.flickr.com/2711/4149584622_1338223724_o.jpg
1980年代,手机开始商用。第一代手机俗称大哥大,特点是无线网络通讯信道中传输的是模拟信号。传输模拟信号有两个缺点,一是耗电,二是同一频段能够同时容纳的用户数量少。因为耗电,所以手机必须携带大块的电池,导致体积庞大,形如板砖。街头流氓打架时,常常捡起地上的板砖砸人,如果随身携带着大哥大,
情急之时也可以把大哥大当板砖用。
山寨手机的兴起,离不开
MTK(联发科)。MTK为手机制造提供了一揽子解决方案,其中既包括硬件,也包括软件。软件方面最重要的,是操作系统。MTK方案的软件的稳定性非常高,一方面是因为其硬件系统变化不大,另一方面,得益于MTK在系统软件上投入的巨额的资金和大量的人力。MTK采用的操作系统是Nucleus
RTOS。Nucleus的优势主要在于占用CPU时间短,以及占用Memory空间少。随着手机硬件的发展,Nucleus的优势不再那么重要,而日益突出的问题,是需要功能更强大的手机操作系统。
2007年11月,Google发布Android
OS,剑指手机操作系统市场,并开源免费。两年来,Android获得了相当热烈的市场回应。有没有可能用Android取代Nucleus,实现山寨手机的升级换代?
这个问题不容易回答,因为涉及到的方方面面比较多。
1. MTK的下一代硬件[1],既能支持Android,也能支持Windows
Mobile。为什么MTK没有选择人气正旺,而且免费开源的Android,反而选择联姻WinMobile呢[2]?
2.
2009年3月,微软与MTK宣布结盟,共同开发针对中国TD-SCDMA手机市场的芯片[3]。时至今日,8个月过去了,为什么没有实际成果?
3. MTK
解剖Twitter 【9】结语(2009-11-19 09:14)
【9】结语
这个系列讨论了Twitter架构设计,尤其是cache的应用,数据流与控制流的组织等等独特之处。把它们与抗洪抢险中,蓄洪,引流,渠道三种手段相对比,便于加深理解。同时参考实际运行的结果,验证这样的设计是否能够应付实际运行中遇到的压力。
解剖一个现实网站的架构,有一些难度。主要体现在相关资料散落各处,而且各个资料的视点不同,覆盖面也不全。更严重的问题是,这些资料不是学术论文,质量良莠不齐,而且一些文章或多或少地存在缺失,甚至错误。
单纯把这些资料罗列在一起,并不能满足全景式的解剖的需要。整理这些资料的过程,很像是侦探办案。福尔摩斯探案的方法,是证据加推理。
1.
如果观察到证据O1,而造成O1出现的原因,有可能是R1,也有可能是R2或者R3。究竟哪一个原因,才是真正的原因,需要进一步收集更多的证据,例如
O2,O3。如果造成O2 出现的可能的原因是R2和R4,造成O3 出现的可能原因是R3和R5。把所有证据O1 O2
O3,综合起来考虑,可能性最大的原因必然是(R1,R2,R3), (R2,R4), (R3,R5)
的交集,也就是R2。这是反绎推理的过程。
2. 如果反绎推理仍然不能确定什么是最可能
【8】 得过不且过
北京西直门立交桥的设计,经常遭人诟病。客观上讲,对于一座立交桥而言,能够四通八达,就算得上基本完成任务了。大家诟病的原因,主要是因为行进路线太复杂。
当然,站在设计者角度讲,他们需要综合考虑来自各方面的制约。但是考虑到世界上立交桥比比皆是,各有各的难处,然而像西直门立交桥这样让人迷惑的,还真是少见。所以,对于西直门立交桥的设计者而言,困难是客观存在的,但是改进的空间总还是有的。
Figure 10. 北京西直门立交桥行进路线
Courtesy
http://farm3.static.flickr.com/2671/4113112287_86cfb1cffd_o.png
大型网站的架构设计也一样,沿用传统的设计,省心又省力,但是代价是网站的性能。网站的性能不好,用户的体验也不好。Twitter这样的大型网站之所以能够一飞冲天,不仅功能的设计迎合了时代的需要,同时,技术上精益求精也是成功的必要保障。
例如,从Mongrel到MemCached之间,需要一个
【7】 作为一种进步的不彻底
不彻底的工作方式,对于架构设计是一种进步。
当一个来自浏览器的用户请求到达 Twitter后台系统的时候,第一个迎接它的,是Apache Web
Server。第二个出场的,是Mongrel Rails
Server。Mongrel既负责处理上传的请求,也负责处理下载的请求。Mongrel处理上传和下载的业务逻辑非常简洁,但是简洁的表象之下,却蕴含着反常规的设计。这种反常规的设计,当然不是疏忽的结果,事实上,这正是Twitter架构中,最值得注意的亮点。
Figure 9. Twitter internal flows
Courtesy
http://farm3.static.flickr.com/2766/4095392354_66bd4bcc30_o.png
所谓上传,是指用户写了一个新短信,上传给Twitter以便发表。而下载,是指Twitter更新读者的主页,添加最新发表的短信。Twitter下载的方式,不是读者主动发出请求的pull的方式,而是Twitter服务器主动把新内容push给读者的方式。先看上传,Mongrel处理上传的逻辑很简洁
【6】流量洪峰与云计算
上一篇历数了一则短信从发表到被阅读,Twitter业务逻辑所经历的6个步骤。表面上看似乎很乏味,但是细细咀嚼,把每个步骤展开来说,都有一段故事。
美国年度橄榄球决赛,绰号超级碗(Super Bowl)。Super
Bowl在美国的收视率,相当于中国的央视春节晚会。2008年2月3日,星期天,该年度Super
Bowl如期举行。纽约巨人队(Giants),对阵波士顿爱国者队(Patriots)。这是两支实力相当的球队,决赛结果难以预料。比赛吸引了近一亿美国人观看电视实况转播。
对于Twitter来说,可以预料的是,比赛进行过程中,Twitter流量必然大涨。比赛越激烈,流量越高涨。Twitter无法预料的是,流量究竟会涨到多少,尤其是洪峰时段,流量会达到多少。
根据[31]的统计,在Super
Bowl比赛进行中,每分钟的流量与当日平均流量相比,平均高出40%。在比赛最激烈时,更高达150%以上。与一周前,2008年1月27日,一个平静的星期天的同一时段相比,流量的波动从平均10%,上涨到40%,最高波动从35%,上涨到150%以上。
【5】数据流与控制流
前文说到,Twitter有两大看点,缓存(Cache) 与消息队列(Message
Queue)。消息队列的作用,是“隔离用户请求与相关操作,以便烫平流量高峰 (Move operations out of the
synchronous request cycle, amortize load over time)”。
通过让Apache进程空循环的办法,迅速接纳用户的访问,推迟服务,说白了是个缓兵之计,目的是让用户不至于收到“HTTP
503”错误提示,“503错误”是指“服务不可用(Service Unavailable)”,也就是网站拒绝访问。
大禹治水,重在疏导。真正的抗洪能力,体现在蓄洪和泄洪两个方面。蓄洪容易理解,就是建水库,要么建一个超大的水库,要么造众多小水库。泄洪包括两个方面,1.
引流,2. 渠道。
对于Twitter系统来说,庞大的服务器集群,尤其是以MemCached为主的众多的缓存,体现了蓄洪的容量。引流的手段是Kestrel消息队列,用于传递控制指令。渠道是机器与机器之间的数据传输通道,尤其是通往Me
【4】抗洪需要隔离
如果说如何巧用Cache是Twitter的一大看点,那么另一大看点是它的消息队列(Message
Queue)。为什么要使用消息队列?[14]的解释是“隔离用户请求与相关操作,以便烫平流量高峰 (Move operations
out of the synchronous request cycle, amortize load over
time)”。
为了理解这段话的意思,不妨来看一个实例。2009年1月20日星期二,美国总统Barack
Obama就职并发表演说。作为美国历史上第一位黑人总统,Obama的就职典礼引起强烈反响,导致Twitter流量猛增,如Figure
4 所示。
Figure 4. Twitter burst during the inauguration of Barack Obama,
1/20/2009, Tuesday
Courtesy
http://farm3.static.flickr.com/2615/4071879010_19fb519124_o.png
其中洪峰时刻,Twitter网站每秒钟收到350条新短信,这个流量洪峰维持了大约5分钟。根据统计,平均每个Twitter用户被120人“追”,这就
是说,这350条短信,平均每条都要发送120次 [16]。这意味着
【3】Cache == Cash
Cache ==
Cash,缓存等于现金收入。虽然这话有点夸张,但是正确使用缓存,对于大型网站的建设,是至关重要的大事。网站在回应用户请求时的反应速度,是影响用户体验的一大因素。而影响速度的原因有很多,其中一个重要的原因在于硬盘的读写(Disk
IO)。
Table 1
比较了内存(RAM),硬盘(Disk),以及新型的闪存(Flash),在读写方面的速度比较。硬盘的读写,速度比内存的慢了百万倍。所以,要提高网站
的速度,一个重要措施是尽可能把数据缓存在内存里。当然,在硬盘里也必须保留一个拷贝,以此防范万一由于断电,内存里的数据丢失的情况发生。
Table 1. Storage media comparison of Disk, Flash and RAM [13]
Courtesy
http://farm3.static.flickr.com/2736/4060534279_f575212c12_o.png
Twitter
工程师认为,一个用户体验良好的网站,当一个用户请求到达以后,应该在平均500ms以内完成回应。而Twitter的理想,是达到200ms-
300ms的反应速