【架构师之路】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 ...
随机推荐
- 对 /etc/rc.d/init.d 目录的一点理解
转载 一.Linux的引导过程 系统启动之后,在进入init.d之前,我们先来看看系统都做了什么工作.系统加电之后,首先进行的硬件自检,然后是bootload对系统的初始化,加载内核. 内核被加载到内 ...
- (转)LCD:LCD常用接口原理篇
关键词:android LCD TFT TTL(RGB) LVDS EDP MIPI TTL-LVDS TTL-EDP平台信息:内核:linux2.6/linux3.0系统:android/a ...
- CI框架 -- 核心文件 之 Input.php(输入数据处理文件)
class CI_Input { //用户ip地址 protected $ip_address = FALSE; //用户浏览器地址 protected $user_agent = FALSE; // ...
- php模拟post提交请求与调用接口
/** * 模拟post进行url请求 * @param string $url * @param string $param */ function request_post($url = '', ...
- sublime3 docblocker插件定制自己的注释,配置步骤
DocBlockr很好用,不仅仅可以自动生成注释,还可以手动编辑注释的格式. 安装方法: Cmd+Shift+P -> Install Package -> docblockr wi ...
- 正则表达式sed
sed 能实现grep查找的功能,还可以替换指定的字符. 匹配查找文件中root字符(其中的 -n表示段落,p表示打印出来print) [root@localhost sed]# sed -n '/ ...
- 腾讯爱玩某处csrf导致骚扰用户(QQ弹窗+QQ会话+微博)
点击提醒,然后抓包: POST /dyid_proc.php HTTP/1.1 Host: tx.qq.com User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW ...
- vue父组件向子组件动态传值的两种方法
在一些项目需求中需要父组件向子组件动态传值,比如我这里的需求是,父组件动态通过axios获取返回的图片url数组然后传给子组件,上传图片的子组件拿到该数组后进行遍历并展示图片,因为有时候获取到的会是空 ...
- 5 云计算系列之glance镜像服务安装
preface 在上节中我们了解了keystone服务,下面就看看glance管理镜像的服务吧. glance组成 glance有两部分组成: glance-api 接受云系统镜像的创建,删除,读取请 ...
- MongoDB的php可视化管理工具
使用MongoDB命令查看很不方便 于是想把爬来的数据导出来,看爬来的数据是否正确 打开cmd,执行 mongoexport -d test -c blogs --csv -f title,link, ...