`
iamzhongyong
  • 浏览: 806455 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

“网易云阅读”-移动架构

 
阅读更多

       过年回家,手机中有两个应用是爱不释手的,一个是微信,一个就是网易云阅读了。这里不谈论微信了,说说网易云阅读。刚刚接触网易云阅读,是偶然的,具体咋知道的已经忘了。这个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中基本上介绍了“网易云阅读”这款产品的情况,十分详尽,后面作者有提到关于产品设计以及需求处理方面,这里就不多讲了。​ 

 

分享到:
评论

相关推荐

    网易云课堂(页面架构)1

    总的来说,"网易云课堂(页面架构)1"的描述涵盖了网页设计中的关键概念,包括CSS Reset确保样式一致性,响应式设计适应不同设备,以及文件压缩优化加载速度。这些技术共同构建了一个跨平台、高性能的网页体验。

    防网易云音乐

    这里提到的“防网易云音乐appcan混合开发”可能是指一个项目,其目标是创建一个类似网易云音乐的应用,但具有防止用户在工作或学习时分心的功能。AppCan是一个流行的HTML5移动应用开发平台,它支持混合应用的开发,...

    Qt---网易云音乐

    "Qt---网易云音乐"项目表明,开发者使用Qt来实现了一个Windows版的网易云音乐客户端。网易云音乐是一款广受欢迎的在线音乐服务,它提供了丰富的音乐库、个性化推荐、歌单分享等功能。使用Qt来开发该应用,意味着...

    Ubuntu 网易云音乐Linux32位和64位版

    网易云音乐提供了两个Deb格式的安装包,分别是针对32位(i386架构)和64位(amd64架构)系统的。这两个文件分别是: 1. `netease-cloud-music_1.0.0_i386_ubuntu14.04_32.deb` - 这是专为32位Ubuntu 14.04系统设计的...

    Qt高仿网易云音乐界面源码

    【Qt高仿网易云音乐界面源码】是一个基于Qt库创建的项目,旨在实现与网易云音乐客户端相似的用户界面。这个源码是Qt开发者学习和研究界面设计、交互实现以及Qt库应用的一个良好实例。Qt是一个跨平台的C++图形用户...

    仿网易云音乐.小程序源码

    本资源“仿网易云音乐.小程序源码”提供了开发类似网易云音乐小程序的完整代码,这对于想要学习小程序开发或者想要构建音乐播放类小程序的开发者来说,是一个极其宝贵的参考材料。 首先,我们要了解小程序的基本...

    swift-ReactNative模仿网易云音乐手机客户端兼容安卓和IOS两个平台。

    这个项目“swift-ReactNative模仿网易云音乐手机客户端”旨在利用这两种技术的优势,创建一个兼容安卓和iOS两个平台的音乐播放应用,模仿知名音乐流媒体服务——网易云音乐的用户界面和功能。 在Swift开发中,知识...

    仿制网易云小程序解决登录问题,用二维码登录

    在当今移动互联网时代,小程序因其轻量级、便捷的特性深受用户喜爱,而网易云音乐作为国内知名的音乐平台,其小程序的登录体验至关重要。尚硅谷作为一个教育机构,提供了相关的教程来帮助开发者掌握这一技术。 首先...

    微信小程序demo:仿网易云音乐

    这个“仿网易云音乐”的微信小程序Demo,旨在模拟网易云音乐的主要功能,让用户能够在微信环境中体验到类似的应用服务。虽然它并未完全实现网易云音乐的所有特性,如主体登录功能,但基础的核心功能已经具备,如: ...

    微信小程序 仿网易云音乐 (源码).rar

    总的来说,这个项目为学习微信小程序开发提供了很好的实践案例,同时也对前端开发者理解移动应用的架构和交互设计有一定的帮助。通过深入研究和修改这个源码,开发者不仅可以提升自己的编程技能,还能为自己的项目...

    ArchSummit 2023 全球架构师峰会 北京站 PPT(公开)

    01-从NewSQL到全新的HTAP分布式架构演进-张潇 01-从互联网到 ToB 服务 - 私有化部署对架构师的挑战-张铎 01-金融级系统海量流量下的高可用架构实践-康杨 ...03-陌陌云原生微服务架构落地实践-袁世超 ...

    类似网易云音乐的YY音乐微信小程序源码.zip

    近期,一款名为YY音乐的小程序进入了公众视野,其源代码包“类似网易云音乐的YY音乐微信小程序源码.zip”的发布,不仅为开发者提供了一个学习和开发的机会,同时也为音乐爱好者们带来了一个新的选择。 YY音乐小程序...

    一款基于网易云音乐UI,使用wanandroid、GankIo及时光网api开发的符合Google Material Desgin阅读类的开源项目

    一款基于网易云音乐UI,使用wanandroid、GankIo及时光网api开发的符合Google Material Desgin阅读类的开源项目。项目采取的是Retrofit2 + RxJava2 + MVVM-DataBinding架构开发。

    微信小程序实战教程:模仿—网易云音乐

    微信小程序实战教程:“模仿—网易云音乐”是一个项目,旨在教授如何使用微信小程序开发一个功能齐全的音乐播放器。这个教程特别关注了如何利用 Leancloud 作为后端服务,以及如何巧妙地应用数据绑定和Promise来处理...

    仿网易云音乐.zip

    【标题】"仿网易云音乐.zip"所代表的是一个微信小程序的开发案例,该案例旨在模仿知名的音乐流媒体平台——网易云音乐的功能和界面设计。这个压缩包包含了完成这一项目所需的全部源代码和资源文件,适合于那些希望...

    仿网易云音乐.rar

    【标题】"仿网易云音乐.rar"所代表的是一个模仿网易云音乐应用的项目压缩包。这个项目可能是由开发者或爱好者创建的,旨在提供类似网易云音乐的用户体验,可能包括音乐播放、歌单推荐、评论互动等功能。由于没有具体...

    基于flutter的仿网易云音乐播放器.zip

    8. **学习与实践**:对于想要学习Flutter或提高移动应用开发技能的开发者,这是一个很好的实战项目,通过阅读和分析源码,可以深入理解Flutter的架构设计和组件使用。 9. **社区支持**:Flutter有一个活跃的开发者...

    微信小程序:仿网易云音乐 + 源代码 + 详细文档

    这个项目是基于微信小程序框架开发的,旨在模仿网易云音乐的界面和功能,为用户带来类似的音乐体验。源代码的提供使得开发者可以学习到实际项目的实现细节,而详细文档则有助于理解代码结构和功能实现。 1. 微信小...

Global site tag (gtag.js) - Google Analytics