一、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. 一个 JAR 文件可以用于

    用于发布和使用类库 作为应用程序和扩展的构建单元 作为组件.applet 或者插件程序的部署单位 用于打包与组件相关联的辅助资源 package Com.Table; import java.util ...

  2. gtest日志在工程项目中的应用

    网上有各种gtest的入门教学,这里就不一一重复了.本文的目的是讲解如何将gtest应用于工程应用中.利用测试驱动开发这样的理论,来先写测试代码,当自动化测试跑通以后,主工程的代码也就编写完了. 这里 ...

  3. zabbix server端自动发现和zabbix agent端自动注册

    一.zabbix自动发现 利用zabbix的discovery功能可以实现自动批量添加主机的功能. Zabbix自动发现实现自定义主机名: 通过自动发现添加的客户端主机的Host name 是以IP地 ...

  4. C# listview控件右击导出数据到txt文本

    private void 导出成功点击ToolStripMenuItem_Click(object sender, EventArgs e) { ) { MessageBox.Show("列 ...

  5. iOS: block参数

    先看一下 NSArray 是怎么传递 block 参数的 ... @interface NSArray (NSExtendedArray) … #if NS_BLOCKS_AVAILABLE - (v ...

  6. Logback中文文档(三):配置

    在第一部分,我们将介绍配置 logback 的各种方法,给出了很多配置脚本例子.在第二部分,我们将介绍 Joran,它是一个通用配置框架,你可以在自己的项目里使用 Joran. Logback里的配置 ...

  7. Linux中Subversion配置实例

    一.安装 yum install subversion 二.配置 本系统采用为每个项目单独建一版本库的策略.配置文件,密码文件,访问控制文件等都放在版本库的conf目录下. 所以每次开始一个新项目都必 ...

  8. hql Hibernate.gethibernatetemplate()

    1. find(String hql);  //普通查询 示例:this.gethibernateTemplate().find("from User"); 2. find(Str ...

  9. node.js和socket.io实现im

    im——Instant Messaging 即时通讯 基本技术原理 (1)通过IM服务器登陆或注销 (2)用户A通过列表找到B,用户B获得消息并与之交谈 (3)通过IM服务器指引建立与B单独的通讯通道 ...

  10. Android 内存

    memory usage of this progress under 15MB for 1GB RAM device Android内存机制分析下篇:分析APP内存使用情况http://mobile ...