一、APP架构与WEB架构的最大不同

移动APP的架构和传统PC的WEB架构有三点不同:

1、连接的稳定性。在传统的web端连接成功后就可以认为它是稳定的,但在移动端、无线端,APP连接非常敏感,可能进出电梯、隧道、地铁,连接就会断,所以连接的稳定性是很显著的区别,也是很大的挑战。

2、流量的敏感性。传统PC和web的应用架构可能不太关注数据量、流量,但移动端、无线端,流量有限,用户非常关注。所以在架构和协议设计以及数据上,要给予非常重点的关注。

3、消息的可达性。在PC和web端一般认为消息发出就能够收到,而APP可能连接不稳,消息发出去收不到。无线端在消息的可达性问题上,需要在架构上额外做一些事情来保证。

二、58在APP稳定性的优化实践

现在用的最多的协议一般是两种,一种是HTTP协议,一种是TCP的协议。 58这边主要是有两块优化:

一是针对HTTP的协议。HTTP传统的方式是发一个HTTP请求,先要进行一次DNS的解析,由域名解析出IP,然后根据这个IP访问一个Nginx,再把它转发到对应的后端Web service上,这个过程对DNS敏感要求很高,同时它的路径比较长,需要经过Nginx的转发。在PC上这个架构是完全没有问题的,但如果到了移动端可能流程或处理时间上就过长了。

因此我们针对http做的优化是使用IP直连的方式:不使用域名,直接使用IP去连接,既避免了DNS解析,也减少了一次转发,用来提高稳定性,降低处理时间。

第二是TCP,传统PC和WEB的应用中,TCP与用户后端绑定得非常紧密,一旦TCP断开的话,它的session可能就清除掉了,你再次连接上需要走登陆的流程,成本非常高。WEB出现这种情况的概率小,但在APP端,无线不稳、网络环境不稳时经常断线,如果每次都重新建立session的话,可能耗电量和数据量都非常大。

因此我们针对TCP做的优化是将TCP和session进行解耦。TCP断开的时候,session不进行清除而是继续保持,让用户感觉不到断开,我们后端可能有一些机制探测出来,然后偷偷连上,这个过程对于用户来说是无感知的。

三、58在降低使用流量消耗方面的优化实践

我们采取了一些技术手段来降低流量的传输。举个例子,登陆一个APP的过程中,传统方式可能要从服务端拉取很多数据,比如微信、QQ登录时要拉取好友数据、群组数据、详细信息数据等;APP端也需要拉取这些数据。

其实并不是每次都需要重复拉取这些数据——用户登陆之后,本地已经存储了一些历史数据,我们只要从服务端拉取那些增量变化的,而没有变化的则可以直接使用本地数据。

我们使用了一些机制从服务端拉取变化的最新数据以减少数据量的传输。这是我们使用的方法,希望给同行有所借鉴。

四、58应对流量爆发的架构调整

随着用户量、并发量、数据量越来越大,后端一些架构在可用性、负载均衡和数据量上都有一些挑战。

1、高可用性,任何一台服务器宕机都不能影响服务的可用。解决可用性的问题方向是进行冗余。如果只有一份服务,那么它挂了的话可行性就会受到影响;如果有多份服务,就算挂了,也可以通过负载均衡或者一些导流的方式来保证服务可用。所以站点的可用性就是冗余站点;服务、数据也是这样。这是可用性上的一些调整。

2、负载均衡,在接入层用一些传统的负载均衡方式,在服务层依托连接池,在数据层用数据库的连接值的负载均衡方式来保证负载均衡。

3、非常大的数据量对架构也是极大的挑战,本来在数据层可以选择根据业务进行垂直拆分,但数据量大的话就必须进行水平拆分,用一些拆分的方式来保证大数据量下依然能够响应很高的并发和请求。

五、成为架构师的2个能力

我在最开始也没有非常明确的要在几年内成长为架构师的规划,只是不断地解决现实项目和系统中的问题,然后慢慢接触越来越多的架构、业务和系统,不断解决问题,不断学习和提高。我给一些想成为架构师的同学的建议:

第一,一定要落地在一线。在一线了解项目业务中出现了哪些问题,然后解决它们,在解决问题的过程中能力范围实际是不断提高和成长的。我不具体举例使用什么样的架构或者工具和知识,反正在解决问题的过程中肯定会接触和学习到不同的知识和工具以及相关的技术。

第二,一定要贴近业务。我的观点是任何脱离业务的架构设计都是耍流氓。可能有些公司发展到后期有一些为了架构而架构的技术方案,目的可能不单纯,为了晋升或者是怎么样。但实际上,一旦脱离业务,技术和架构都是空谈。

总而言之,要保持一线,时刻接触业务,这是我的两个建议。

 

【架构师之路】APP架构师必看:面对爆发流量如何进行架构调整的更多相关文章

  1. linux 学习之路(学linux必看)

    很多同学接触Linux不多,对Linux平台的开发更是一无所知. 而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机IT行业从业人员, 掌握Linux是一种很重要的谋生资源与手段. 下来我将 ...

  2. Alink漫谈(二) : 从源码看机器学习平台Alink设计和架构

    Alink漫谈(二) : 从源码看机器学习平台Alink设计和架构 目录 Alink漫谈(二) : 从源码看机器学习平台Alink设计和架构 0x00 摘要 0x01 Alink设计原则 0x02 A ...

  3. 【转】java架构师之路:JAVA程序员必看的15本书的电子版下载地址

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...

  4. Java架构师之路:JAVA程序员必看的15本书

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...

  5. 高焕堂《android从程序员到架构师之路》 YY讲坛直面大师学习架构设计

    <android从程序员到架构师之路>YY讲坛活动:  sundy携手高焕堂老师全程YY答疑 与大师一起,分享android技术 时间:7月21日下午2:00   报名联系QQ:22243 ...

  6. 架构师之路-在Dubbo中开发REST风格的远程调用

    架构师之路:从无到有搭建中小型互联网公司后台服务架构与运维架构 http://www.roncoo.com/course/view/ae1dbb70496349d3a8899b6c68f7d10b 概 ...

  7. J2EE架构师之路

    不经意的回首,工作进入第五个年头了,发现走过了从Java程序员到J2EE架构师的历程. 发现电脑上安装了各种各样的J2EE工具:JBuilder, WSAD, Eclipse, Rose, Toget ...

  8. paip.java 架构师之路以及java高级技术

    paip.java 架构师之路以及java高级技术 1.    Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对 ...

  9. android大牛高焕堂最新力作-android架构师之路

    android大牛高焕堂 个人介绍: Android专家顾问,台湾Android论坛主席,现任亚太地区Android技术大会主席,台湾Android领域框架开发联盟总架构师.发表100多篇Androi ...

随机推荐

  1. MySQL中ALTER ,CHANGE , MODIFY

    ALTER TABLE project_list CHANGE COLUMN descriptionofproj proj_desc VARCHAR(100), CHANGE COLUMN contr ...

  2. (源)VC助手VA破解使用指南

    一般情况下,你下载的破解版的VC助手,要么自带的有一个名为VA_X.dll的文件,要么是有一个可运行的破解程序,根据不同的情况进行如下操作,只要你下载的安装文件没有问题,就能正确打上破解补丁.网上有一 ...

  3. dubbox 的各种管理和监管[转]

    dubbo官方自带了dubbo-admin及dubbo-simple/dubbo-monitor-simple二个子项目用于服务治理及服务监控. 一.dubbo-admin的部署 这个比较简单,编译打 ...

  4. 各大引擎矩阵的矩阵存储方式 ----行矩阵 or 列矩阵

    OpenGL  里面的矩阵 float  m[16]; OpenGL中的矩阵是这样的 m[0] m[4] m[8] m[12] m[1] m[5] m[9] m[13] m[2] m[6] m[10] ...

  5. jmm 和线程安全

    Java的内存模型JMM Java的内存模型JMM(Java Memory Model)JMM主要是为了规定了线程和内存之间的一些关系.根据JMM的设计,系统存在一个主内存(Main Memory), ...

  6. react-router实现tab页面切换,并解决选中样式首页始终选中问题

    import React, {Component} from 'react'; import { BrowserRouter as Router, Route, NavLink } from &quo ...

  7. Windows 下 绿化 Oracle

    既然Oracle在非windows平台上可以很“绿色”的执行,那么在windows平台上有无可能呢? 答案是“Yes-No” 基本上,除了监听器(lisentner)这个异类外,Oracle实例完全可 ...

  8. ubuntu-14.04.2-desktop-i386.iso:ubuntu-14.04.2-desktop-i386:安装Oracle11gR2

    ubuntu 桌面版的安装不介绍. 如何安装oracle:核心步骤和关键点. ln -sf /bin/bash /bin/sh ln -sf /usr/bin/basename /bin/basena ...

  9. Winform窗体控件自适应大小

    自己写的winform窗体自适应大小代码,代码比较独立,很适合贴来贴去不会对原有程序造成影响,可以直接继承此类或者把代码复制到自己的代码里面直接使用 借鉴了网上的一些资料,最后采用重写WndProc方 ...

  10. windows 下查看端口占用情况

    windows下面查看端口占用情况: netstat -ano|findstr "8888" TCP 127.0.0.1:8888 0.0.0.0:0 LISTENING 6876 ...