移动互联网系统架构特点及实践--手机凤凰网

    本文整理自:http://www.cnblogs.com/sunli/archive/2011/02/19/mobile_architecture.html

    今天参加了InfoQ组织的百度技术沙龙活动“移动互联网基础技术解析——无线搜索与HTML5开发”,在最后的Open Space环节主持了一个话题“移动互联网系统架构的特点”,现在把讨论的一些重点给记录一下。

    (一)并发性
    相对于有线互联网,移动互联网的网速还是窄带时期,大部分的网络访问都属于慢速连接。一个请求占用的网络连接的时间比有线互联网一个请求占用网络连接的时间要长。在同等的服务器端QPS下,并发连接数要比有线互联网模式的要高。虽然web服务器的并发连接数问题非常容易通过增加机器来进行扩展,但是这个问题需要注意。 尽量使用异步网络IO。
    (二)流量

    相对于有线互联网的包月付费模式,移动互联网用户基本都是有限的按流量的包月模式,流量费用昂贵。用户会首选耗用流量低的系统使用,这正是UC浏览器成功的原因。
    所以在系统架构的时候,如果客户端浏览器支持gzip,那么尽量gzip压缩内容。如果是app的客户端程序,最好使用压缩传输内容。
    web网页内容尽量简洁,url连接尽量压缩,省略BaseUrl。
    (三)安全
    有线互联网的在线支付目前非常成熟,在支付的时候可以跳到银行的网站或者客户端进行支付,让用户觉得很安全。 而移动互联网可能是服务端通过api支付,用户也觉得不安全。这样某些网站也有可能盗用用户的钱。但是银行通过短信认证即可解决这个问题。
    手机丢失带来的财产损失问题,由于手机丢失,可能造成被人恶意支付。然后提出挂失的功能。来自飞信的朋友说,飞信可以推出直接进行手机号挂失,圆满解决这个问题。
    (四)速度优化
    由于移动网络的速度慢,速度优化就更加要得到重视。比如js,css文件的合并。
    app与服务器端的交互是否使用自定义的协议进行提速。
    网络操作的失败处理。
    (五)兼容性
    移动互联网的终端类型,屏幕分辨率,浏览器类型千变万化。就算同一个手机的同一个浏览器也有适应屏幕模式和缩放模式。如此多的种类给页面的兼容开发带来了很大的难度。往往公司的移动终端测试机器多达几十种,虽然有厂商提供这种服务测试服务,但是对于开发人员来讲,难度可不低。而有线互联网的网站之需要调试下IE,Firefox,chrome几个浏览器即可。
    (六)与有线互联网统一
    很大部分网站都是以有线互联网为主,同时推出移动互联网版本的。但是往往移动版本的功能有缩减,导致某些功能缺失。所以从产品的角度也应该把功能进行统一。
    所以涉及到有线互联网、移动网站、app 客户端的功能统一。
    (七)统计分析
    app客户端软件的用户行为分析统计,可以进行定期往服务器发送。客户端把用户的操作行为先收集起来,进行分析后把结果定期压缩打包发送给服务器。 移动网站可以通过服务器端记录日志,js探针(wap2.0的只能手机可能支持)等综合的方式统计。
    (八)测试环境模拟

     有人说,公司开发一款app客户端软件,在公司测试非常完美。等有一天,开发人员在火车上,地铁上拿出手机使用的时候,发现在网络不稳定的时候频繁崩溃。那么这种场景如何进行模拟测试?
    (九)用户真实访问速度的监控
    虽然目前有厂商进行移动网络对移动互联网进行速度监控和分析。但是他们的点基本都是固定的,可能是信号较好的地方。那么我们的应用的真实用户访问的速度到底是怎么样的,如何统计?
    根据应用的类型,有些应用可能在家,公司等有wifi ,信号好的地方使用。而有些应用很多情况下在信号差的地方使用,所以使用第三方的监控还不完全可靠。
    (十)需求变更更频繁
    由于移动业务的特点,需求变更的实时性要求更高。如何快速,高效完成需求的变更,而又不影响系统性能?这给移动开发者也提出了一些挑战。难道就只能加班?

    总结:以上为今天讨论的移动互联网架构相对于有线互联网的特点,其中大部分还是跟有线互联网是一样的,比如数据库架构,存储的架构等等。

    下面整理自:http://www.cnblogs.com/sunli/archive/2010/12/20/imcp.html

    下面以手机凤凰网为例来介绍移动互联网系统的架构实践。

    我相信一个好的系统架构是需要从产品需求出发的,同时我也相信一个系统的性能优化也要站在产品需求之上,所以我花了很多时间从产品设计的角度来分析为什么要设计内容平台,以及如何去设计这样一个系统,这就是系统架构,最后才在这个系统架构基础之上提出怎么进行性能优化,满足非功能性需求。
     作为开发人员,我经历了固定互联网的一个高速发展时期。曾经,我们会频繁的开发出不同的网站,比如图片展示的系统,新闻站点等等以内容为主的系统,为了提高开发效率,摒弃开发网站的复杂性,出现了CMS系统。比如中小型网站比较通用的CMS系统(php168,phpcms等)和门户型CMS(定制化的大型CMS系统),CMS系统简化了网站的开发的难度,而且不需要特别的技术,就能构建出高性能,稳定的站点。
     今年开始,移动GPRS资费的下调,3G网络的发展,智能手机的铺天盖地的流行,我们手机凤凰网的流量出现了非常大的增长,据我了解,很多公司都出现了大量的流量增长(见PPT第三页)。
     移动互联网的发展给程序员提出了更高的挑战:
    1、多运营商(电信,移动,联通,wifi用户),互访速度跟固定互联网的网通电信南北互通一样
    2、多终端(超级多的手机类型,屏幕,系统,浏览器),出现更多的适配问题(不像固定互联网只是IE6,IE7和firefox,chrome的兼容)
    3、 需求多变(要求快),由于快速的开发,导致开发的系统过一段就性能低下,经常宕机,程序员的压力很大,很大,很大。(ps:某某公司的无线技术人员已经死了两个了)
    4、 访问量节节飙升 ,需要系统具有更高的性能和可扩展性。
    5、页面几乎不能静态化(适配,按客户端等客户信息输出不同的内容),固定互联网可以生成静态html,使用cdn,来提高性能,由于不能静态化,移动互联网对性能的要求就更高。
    手机凤凰网的上一版本(WAPCMS)系统的架构使用了普通的JSP+Mysql+Linuxi架构。(PPT的第5,6页)。通过Mysql的主从复制进行扩展,前端通过一个自行开发的反向代理进行cache(融入了业务逻辑代码)。由于频繁的代码更新,增加很多新的合作站点(jsp),代码非常的难于维护,性能也非常低下。当时10多台机器才应付1000多万pv/日,还会出现宕机。你可能会说,这个系统性能还可以优化,是的,还可以优化,性能非常低,但是由于要疲于应付提出的新的需求,就算优化了,没过多久,就又会出现性能下降。所以我们需要一个系统,像facebook在会上提出的那样,“如何让网站一直都很快”,是的,要让网站一直都很快,性能高,稳定,不管开发人员怎么折腾,系统总是很快的,性能很高的,所以,我们开发了IMCP系统。
    IMCP(Ifeng Mobile Content Platform)不只是我们的wap网站的系统,还提供了凤凰移动台,视频客户端,凤凰新闻客户端,支持活动直播,在线代码开发,平均单机性能最高达到1800+万pv/日。开发人员在我们的平台上,无需考虑性能问题,只需要简单的调用系统提供的sdk的方法就能开发出高性能的网站。
    到ppt第9页。为了尽可能设计出一个通用的系统平台,我们对网页进行了拆分。我们认为,网页都是由可拆分的块组成的。这些块包含可编辑的静态的html块(手工编辑的),自动产生的列表(文章列表)块,推荐位(由编辑手工选择的列表),内容文档块。一般固定互联网的新闻站点都可以由这些块组成,我们移动互联网由于是基于动态页面,所以我们还加入了逻辑块,来控制所有的块的逻辑。
    由于要开发人员要经常为一些合作站点,比如要为诺基亚开发一个跟主站类似的站点,只是某些内容不一样的站点,一般都要拷贝一份代码。所以我们又计划把代码拆分成逻辑块进行重用,页面也尽可能的重用,可以在线的建立站点,不需要运维部门的参与。所以就计划把我们的代码是存储在nosql代码库中,由NoSQL管理所有的代码存储,通过后台进行在线编辑。前台访问的时候再去nosql取代码进行运行。通过NOSQL的主从复制实现跨机器,跨机房的代码自动部署。
    在这样的模式下面,开发人员只需要在后台进行在线开发,不需要关心代码运行在什么IP的服务器上,需要去连接什么IP的存储,数据库,一切都是透明的,要取某个文章的内容,就直接getDoc(id)就可以了。
    ppt13-22页进行了一些后台界面的演示
    ppt后面的内容都基本能看明白了,其中非常有意义的就是我们的前端完全基于nosql数据,这也算是nosql 的一个成功利用的案例吧,由于ppt比较清楚,我就不详细阐述了。最后一页的代码运行性能监控我相信对很多朋友也有参考意义,通过对代码运行状态监控,可以实时的看到系统的相信运行性能状态。
    这次velocity china 2010给我最大的感受就是,各个公司都有底层团队在致力于帮助开发人员简化开发的复杂度,自动化的提高系统的性能,稳定性(让开发人员不再关心这些问题)。我们的IMCP系统也是这样,开发人员无需关心cache,无需关心性能,只要利用我们SDK提供的功能搭建系统,网站总是非常高效,而且开发速度还非常快。

你可能感兴趣的:(Web&分布式架构,移动互联网,架构)