【架构师之路】APP架构师必看:面对爆发流量如何进行架构调整
一、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架构师必看:面对爆发流量如何进行架构调整的更多相关文章
- linux 学习之路(学linux必看)
很多同学接触Linux不多,对Linux平台的开发更是一无所知. 而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机IT行业从业人员, 掌握Linux是一种很重要的谋生资源与手段. 下来我将 ...
- Alink漫谈(二) : 从源码看机器学习平台Alink设计和架构
Alink漫谈(二) : 从源码看机器学习平台Alink设计和架构 目录 Alink漫谈(二) : 从源码看机器学习平台Alink设计和架构 0x00 摘要 0x01 Alink设计原则 0x02 A ...
- 【转】java架构师之路:JAVA程序员必看的15本书的电子版下载地址
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...
- Java架构师之路:JAVA程序员必看的15本书
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...
- 高焕堂《android从程序员到架构师之路》 YY讲坛直面大师学习架构设计
<android从程序员到架构师之路>YY讲坛活动: sundy携手高焕堂老师全程YY答疑 与大师一起,分享android技术 时间:7月21日下午2:00 报名联系QQ:22243 ...
- 架构师之路-在Dubbo中开发REST风格的远程调用
架构师之路:从无到有搭建中小型互联网公司后台服务架构与运维架构 http://www.roncoo.com/course/view/ae1dbb70496349d3a8899b6c68f7d10b 概 ...
- J2EE架构师之路
不经意的回首,工作进入第五个年头了,发现走过了从Java程序员到J2EE架构师的历程. 发现电脑上安装了各种各样的J2EE工具:JBuilder, WSAD, Eclipse, Rose, Toget ...
- paip.java 架构师之路以及java高级技术
paip.java 架构师之路以及java高级技术 1. Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对 ...
- android大牛高焕堂最新力作-android架构师之路
android大牛高焕堂 个人介绍: Android专家顾问,台湾Android论坛主席,现任亚太地区Android技术大会主席,台湾Android领域框架开发联盟总架构师.发表100多篇Androi ...
随机推荐
- array_multisort—对多个数组或多维数组进行排序
From: http://www.cnblogs.com/lwbqqyumidi/archive/2013/01/31/2887188.html PHP中array_multisort可以用来一次对多 ...
- MyEclipse连接CVS,如果中间经过一层代理,就没法直接联接到CVS了,哪位知道怎么办?
- Objective-C语法之NSSortDescriptor
main.m #import <Foundation/Foundation.h> #import "Person.h" /** NSSortDescriptor 可以实 ...
- kafka学习之-java api测试
1.配置 package com.storm.storm_my.kafka; /** * * @author Peng.Li * */ public class KafkaConfigApiConst ...
- 【NLP】Stanford
http://web.stanford.edu/class/cs224n/syllabus.html https://www.youtube.com/watch?v=OQQ-W_63UgQ&l ...
- 3. beeGo 自己写Controller 和 请求数据处理
Controller Controller等同于Django里的view,处理逻辑都是在Controller里面完成的,下面就写一个最简单的Controller. 我们在写自己的controller的 ...
- Android开发学习笔记-splash画面的显示
贴代码: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=&qu ...
- ajax+json+Struts2实现list传递(转载)
一.首先需要下载JSON依赖的jar包.它主要是依赖如下: json-lib-2.2.2-jdk15 ezmorph-1.0.4 commons-logging-1.0.4 c ...
- struts2防止反复提交的办法
<? xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC " ...
- Java使用for循环输出杨辉三角
杨辉三角形由数字排列,可以把它看做一个数字表,其基本特性是两侧数值均为1,其他位置的数值是其正上方的数字与左上角数值之和.编写程序,使用for循环输出包括10行在内的杨辉三角形. 思路是创建一个整型二 ...