过年回家,手机中有两个应用是爱不释手的,一个是微信,一个就是网易云阅读了。这里不谈论微信了,说说网易云阅读。刚刚接触网易云阅读,是偶然的,具体咋知道的已经忘了。这个APP且不谈交互体验好不好(在交互细节上面只能说还凑活,能够满足需求,但是没有超出期望),但确实解决了我的问题,零碎时间的阅读问题。之前网页端阅读36氪文档以及其他网站的文章,下了个虎嗅的客户端看文章,觉得有点分散,后来这个app有了之后,直接订阅了,减少了看文章来回切换的麻烦了,至此之后,爱不释手呵呵。

正好最近Infoq上面有篇关于移动架构的文章,大体看了一下PPT,觉得写得挺实在,例子就是网易云阅读,所以正好算是简介翻译一下这篇文章,结合我这个菜鸟的理解,也算是学习一下优秀的架构。

网易云阅读的下载地址:http://yuedu.163.com/

移动应用架构策略(infoq地址):http://www.infoq.com/cn/presentations/mobile-application-architecture-strategy (作者和我是一个工种呵呵,IT中的服务端开发)

     1、平台类的应用

第一次使用这个app,就发现他是平台级的应用产品,自己不生产内容,聚合第三方的信息,为用户提供阅读服务,作为用户不需要到处查看文章内容,内容提供者不需要考虑推广等事情,可以专注于自己的内容。

2、移动产品存在的问题

A、目前的网络十分复杂,导致的就是网络速度不均匀,有地地方会出现网络死角、在移动过程中网速不稳定;(根据友盟的数据来看,目前2G和wifi的联网方式各占40%左右,3G的占20%左右)。

B、不同设备的屏幕尺寸不统一,导致需要根据尺寸来进行内容适配,要达到两盒的视觉呈现还是有点费劲的;(IOS系列的产品有十余种,其中iPhone和iPad占比比较大;android系列的产品更是很多,友盟的数据有四十余种  http://umindex.com/#android_device   )。

C、移动设备自身硬件能力具有局限性

移动设备运行着APP,此时就相当于一个独立的服务器啊。首先电池容量小,这要求编写的app要能够省电;内存小,经常会出现应为内存不足而造成app闪退的现象(话说我之前搞的那个玩具在测试的时候也经常闪退呢);CPU处理能力有限,要进行复杂的逻辑处理,做好在云端服务器中处理掉;存储空间有限,这个受限于内存卡,大家都懂的。

  3、服务器端架构

这个的话没有啥特别之处,典型的web应用的架构形式(为app提供http请求的服务,如果是静态图片或者静态文件,会有相应的CDN服务器,来加速这类的请求)。最前端有负载均衡处理器(例如运行的LVS程序的机器);然后是webserver(例如apache或者nginx,目前淘宝系主推tengine,一个改善的nginx的版本,有一个团队在维护);之后是appServer(作为java开发,我就暂且理解为java的web程序,appServer是分布式的,可以动态水平扩展,就是加减机器对于前台请求以及后台数据没有影响);然后再后面是数据库、缓存处理器、分布式文件系统等持久化设施。

对于云阅读产品来说,貌似之前听说有几种获取信息的策略,虽然是坊间传闻,但是我觉得也差不多。

A、开放平台对接,内容提供者通过调用API接口,把最新的文章信息同步给appServer对应的持久化设施,这种最方便,但是需要监控接口的稳定程度;

B、内容提供者把内容维护在网易云阅读提供的后台,在后台直接录入文章等信息;

C、网易云阅读搞一个服务端程序,去抓取内容提供者发布的信息,然后过滤、清洗,存储起来对外提供服务;

下图是抓取服务的架构图:

Manager负责load第三方提供的URL信息,然后Crawler负责抓取信息,之后Analyzer负责分析页面的DOM结构,之后存储在DB中,对外提供服务。

4、客户端架构

从下面这张图来看,客户端设计是分层的,非常清晰。

A、客户端本地数据库,负责存储用户个人信息、系统配置信息,以及缓存数据,这里存储的数据,是需要在服务器端也存储起来的,就是数据要同步,负责我更换了一个手机,之前设置的信息没有同步过来,是一个比较痛苦的事情;

B、View层,总体负责View的展现、UI的优化。动画效果、以及页面回调等,类似web中的View层,就是负责展示的;

C、网络层,我个人理解,负责网络请求的封装(组装参数、发起请求、解析返回结果);

D、逻辑控制、服务组合和数据持久化我认为是一层,就是核心逻辑处理,运行在客户端,数据获取和存储依赖于网络层向服务器端发起请求;

这样,客户端的架构就比较清晰,维护起来也就没那么蛋疼了。

     5、优化策略

A、图片服务器智能化,尽量返回客户端合适的图片,例如pad类的产品,就直接返回他尺寸大一点的图片,手机类的就返回尺寸小一点的图片,图片的剪裁和浓缩在服务器端完成,需要在客户端再来做这些事情;

B、确定是否进行预加载和加载的优先级,图片或者文章,都有“下一页”和“上一页”的翻页操作,可以根据用户的使用习惯,来进行预先加载,例如用户在看文章的时候,习惯进行“下一页”操作,那我们就在用户“阅读当前页面”的时候,把下一页的文章加载进行,这样用户在进行下一页阅读的时候,体验会很好(可以在客户端维持几个变量,把用户的行为转变为可衡量的数字,这样就可以依赖这些变量来判断是否需要预先加载);

C、缓存要进行管理,缓存是否需要失效,需要有判断的原则,一种是请求服务器端,如果数据过期,则直接进行失效即可,另外一种就是客户端根据容量情况来进行失效(这一点类似于服务器端缓存失效策略呵呵);

D、数据压缩,要省流量,需要压缩(使用UC浏览器能省流量,原因也是由于压缩),网易云阅读使用的是GZIP的压缩方式,服务器端在发送数据的时候,把数据通过Gzip来压缩,然后客户端接受之后,再按照协议来解压缩,这样流量就省下了;

E、使用http长连接(因为构建http链接是很耗时的操作,所以可以保值长连接,减少反复握手的网络和资源开销),断点续传(对于较大文件,能够减少网络流量),重连策略(如果网络异常,则可以根据适当的算法来进行重连,但是方法最好是幂等的);

F、消息推送,IOS有自带的通知机制(IOS Push),android的话google有产品,但是在国内不好用,你懂的,需要自己为移动终端自建Push服务。有一个原则是网易云阅读分享出来的,一个是移动终端登录后和Push服务器保持连接,Push服务器主动心跳来保持这个连接(移动终端可以动态调整Push服务器的心跳间隔);

  6、系统复用

A、 尽量使用现有的解决方案,因为成本低、风险小;

B、UI组件复用、源代码复用、开源组件复用,框架设计巧妙,直接插件开发即可;

最理想的情况是,集成现用的系统来创建新的应用。

PPT中基本上介绍了“网易云阅读”这款产品的情况,十分详尽,后面作者有提到关于产品设计以及需求处理方面,这里就不多讲了。

转载地址:http://iamzhongyong.iteye.com/blog/1806357

“网易云阅读”-移动架构相关推荐

  1. 网易云阅读【iPhone2.0】 交互设计回顾

    改版背景 iPhone版网易云阅读在1.5之前的每次改版,都是以增加功能为目标,快速迭代为手段.发布的大大小小的版本中,先后提供了离线下载.书籍阅读.书城等实用功能,满足了用户更多的阅读需求.但是一直 ...

  2. Android性能优化之解密ZAKER,网易云阅读等新闻应用的内容缓存加载方式

    我是比较关注时事的, 每天都会花一点事件去看看新闻什么的. 因此类似ZAKER, 网易云阅读等这类的资讯聚合类应用是我的钟爱, 并且这些应用也确实做得很好,值得学习! 前面一篇文章, 讲了缓存的一些构 ...

  3. 网易云首席安全架构师谈安全新形势:DDoS两三天,游戏玩家数从几万降到几百

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 安全是一个永恒的话题,在业务不断云化.攻击越来越复杂的当下,互联网安全呈现了出什么样的严峻形势?对这些形势,网易云又是如何应对的? 网易云首席安全架 ...

  4. 网易云阅读不更新的原因

    2019独角兽企业重金招聘Python工程师标准>>> 自从认为我的网易云阅读被和谐之后,曾经两次在线提交过问题,但是一直没有得到回应.今天在新浪微博看到他们的官方微博在线,于是@了 ...

  5. “零计划”首批20部作品成功输出,网易云阅读IP潜力大盘点

    12月20日,网易云阅读"零计划"IP版权推荐会在网易北京研发中心内举行,会上宣布 "零计划"中首批由云莱坞代理的33部作品中,20部通过零授权+版权入股的形式 ...

  6. 【技术分享】你想知道的网易云音乐推荐架构解析,都在这里!

    ​本文选自网易云音乐推荐算法负责人-肖强前辈在全球人工智能峰会上的分享,主要介绍了三方面:关于网易云音乐,AI算法在音乐推荐中的应用和AI场景下的音乐思考.这里拿来分享给大家,并加上自己的理解,希望对 ...

  7. 你想知道的网易云音乐推荐架构解析,都在这里!

    本文选自网易云音乐推荐算法负责人-肖强前辈在全球人工智能峰会上的分享,主要介绍了三方面:关于网易云音乐,AI算法在音乐推荐中的应用和AI场景下的音乐思考.这里拿来分享给大家,并加上自己的理解,希望对大 ...

  8. 网易云音乐前副总裁教你如何做产品

    本文为PMCAFF专栏作者Jinkey出品 前言 一直以来都不建议入行的人看产品方面的书籍,而是自己多时间思考分析,多参与项目事件.太多理论没用项目经历支撑是理解不了的,很多人会讲粤语的人,大都未必清 ...

  9. 网易云音乐前副总裁教你如何做产品 —《幕后产品》读书笔记

    原文链接 jinkey.ai/post/produc- 前言 一直以来都不建议入行的人看产品方面的书籍,而是自己多时间思考分析,多参与项目事件.太多理论没用项目经历支撑是理解不了的,很多人会讲粤语的人 ...

最新文章

  1. sed、grep、awk
  2. vmware-tools安装
  3. 【原】关于AdaBoost的一些再思考
  4. 快速学习23种设计模式思想Design Patterns
  5. 简述container与container-fluid的区别
  6. python无符号转有符号_Python | 散布符号
  7. OpenShift 4 之Istio-Tutorial (6) 服务恢复能力(重试、超时、断路器)
  8. 如何查看linux是grub还lilo,Linux下找回忘记root口令(lilo/grub)的方法
  9. 可恨的KYLIN OS:动不动就不支持老机
  10. 安卓beforetextchanged_Android TextWatcher.afterTextChanged与TextWatcher
  11. dos命令安装windows系统
  12. Linux shell 批量改后缀名
  13. [效率提升]webstorm配置Prettier
  14. configure: error: cannot run /bin/bash config/config.sub 解决configure配置问题
  15. spring boot实战
  16. 微信小程序获取用户真实信息
  17. android 多个手指同时点击,处理多点触控手势  |  Android 开发者  |  Android Developers...
  18. 切片和切块 钻取 旋转
  19. 达芬奇PRO板的FPGA功能学习笔记(二)
  20. Goodbye, Minecraft PE !

热门文章

  1. 宏观经济浅学20210711
  2. 【视频资源】c语言全套高清视频打包下载,希望对正在学习c语言的朋友有帮助...
  3. 初中毕业生,选择中职学校也可以升入高等学府
  4. UI设计作品如何判别好坏?
  5. Funbox1:noname靶机渗透练习
  6. c语言英语词典设计案例,c语言课程设计-电子英汉词典(含源码).doc
  7. Python基础下载安装卸载
  8. 02_43_20190921
  9. agx 安装ros opencv_基于paddledetection在ROS中搭建红绿灯检测控制车模运动(1)
  10. c++ 转bcd码_BCD码转10进制字符串(C#、C++)