完整社交APP需求分析原型设计整体架构前端后端架构

上传人:壹****1 文档编号:498097946 上传时间:2022-09-10 格式:DOCX 页数:9 大小:397.45KB
返回 下载 相关 举报
完整社交APP需求分析原型设计整体架构前端后端架构_第1页
第1页 / 共9页
完整社交APP需求分析原型设计整体架构前端后端架构_第2页
第2页 / 共9页
完整社交APP需求分析原型设计整体架构前端后端架构_第3页
第3页 / 共9页
完整社交APP需求分析原型设计整体架构前端后端架构_第4页
第4页 / 共9页
完整社交APP需求分析原型设计整体架构前端后端架构_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《完整社交APP需求分析原型设计整体架构前端后端架构》由会员分享,可在线阅读,更多相关《完整社交APP需求分析原型设计整体架构前端后端架构(9页珍藏版)》请在金锄头文库上搜索。

1、一种社交p需实现的功能顾客关注的常规社交功能、活动、地理位置、摸索功能、新鲜事、视频照片分享等等,需要提供的功能不胜枚举,因此从技术角度来说,开发者需要解决的问题也是异常复杂的。当一款社交App发布之初,顾客访问量比较小,使用一台服务器就可以支撑所有的访问压力和数据存储需求,但是互联网应用品有病毒式的传播特点。一款App很也许会面临一夜爆红的现象,访问量和数据量在短时间内呈现爆发式增长,这时候会面临的局面是每天上亿、数百万新增顾客和活跃顾客、流量飙升至每秒数百兆。这些对于一种只部署了简朴后端架构的应用来讲是无法支撑的,会直接导致服务器响应缓慢甚至超时,以及在高峰期时服务呈现瘫痪状态,使得后端的

2、服务完全无法使用,顾客体验急剧下降。本文将会通过一种真实的案例来分享一种社交应用如何构建一种具有高伸缩性的后端系统。社交pp最初部署的后端架构解析社交pp在最初的时候,后端架构相对比较简朴,最初是部署在基本网络之上。最前面放置一台绑定了公网IP的ngn服务器作负载均衡,背面放置台应用服务器来负责解决所有业务上的祈求,最背面搭建一台MyQ atbase数据库。构建私有网络随着产品的不断迭代、顾客数的持续增长、数据量的积累,App就需要改善自己的后端架构,即开始构建私有网络。顾客可以使用私有网络构建自己的网络拓扑创立路由器和私有网络,将后续加入的用于运营内部服务的主机放置在私用网络中,可以有效地和

3、云平台其她顾客主机,在网络上实现1二层隔离。主机对外开放的仅仅只有0端口,这样系统安全性上多了一层保障。在上面的架构图中,最前面的是防火墙,背面接负载均衡器,然后接路由器和私有网络,诸多互联网应用都存在读多写少的状况,这个比例有时可以达到8:2,因此我们一方面通过引入缓存分摊数据库读压力。另一方面,引入负载均衡器,替代最初架构中的gnxproxy,负责均衡器在这里其重要用于分发祈求到后端多台应用服务器,当其中一台应用服务器挂掉,负载均衡器可以进行自动隔离。业务分区与扩展App随着并发访问量和数据量不断增大,一方面想到横向扩容We服务。水平扩容业务服务器的前提是要保证每台服务器都是无状态的,将s

4、esi信息下放到缓存或数据库中存储,保证祈求被负载到任何一台服务器可以正常解决。从上图中看到,在前一步构建私有网络之后,增长了一种新的私有网络来扩展网络层,这里可以运用自有映像功能,将原有的应用服务器制作成模板,后续就可以基于这个模板迅速启动新的主机。此外可以运用Autoscling(自动横向扩展)功能,根据后端服务器的负载祈求,动态调节服务器的数量。一种社交应用的后端会提供诸多服务祈求接口,例如添加好友、刷新新鲜事、浏览页面等,可以通过日记分析每一种接口的耗时,将耗时长但非重要业务的祈求分到单独的Web服务器上进行解决,从而给主Web服务器留出更多资源去解决核心业务的祈求。面向服务的架构随着

5、产品功能的不断迭代,业务代码会越来越复杂,浮现故障的也许性也在加大,当一种局部功能浮现问题时,都会影响整个服务的可用性。此时可以构建面向服务的架构,将一种完整且庞大的服务拆分为一种个的子服务,服务之间通过接口交互。如下图所示:社交App的服务被拆提成了四个子服务新鲜事(New e)、顾客资料(Profile)、广告(s)和摸索(Explore),不同的服务之间通过消息通信框架(例如Zero)来进行交互。把一种大服务拆分为几种小的子服务的好处不言而喻,重要是: 故障隔离:子服务浮现故障不会影响全局,例如广告业务浮现问题并不会让整个pp不能使用,仍然可以查看新鲜事等; 独立扩展:每一种被拆分出的子

6、服务有着不同的访问压力,例如新鲜事的调用相比某些二级页面的顾客资料要高诸多,所此前者会被分派更多的 服务器; 独立部署:一种大服务的配备因功能过多会异常复杂,一旦被拆分就可根据不同的特性需求定制配备项,从而提高可管理性; 团队协作开发:开发者均有着自己精通的方向,从而提高开发效率; 抽象出数据访问:在后续进行数据层面(数据库、缓存)扩展时,可通过修改子服务的Data Servie,实现对下层数据的透明。数据库Replicati业务增长也会给数据库带来诸多问题,当最初架构中单台数据库(数据库同步提供读和写)局限性已支撑起pp访问压力时,一方面需要做数据副本Replicaton。市面上常用的SL、

7、ongoDB等数据库都提供Repiation功能,以MSL为例,从高层来看,Relicatio可提成三步:1. Mr将变化记录到二进制日记(biary log)中(这些记录叫做二进制日记事件,binary log eent);2. Slae将Mtr的inrylog evets拷贝到它的中继日记(rey log);3. Slav重做中继日记中的事件,将变化反映它自己的数据。具体实现该过程的第一部分就是Ms记录二进制日记。在每个事务更新数据完毕之前,Mar在二进制日记记录这些变化。ySQL将事务串行的写入二进制日记,虽然事务中的语句都是交叉执行的。在事件写入二进制日记完毕后,aste告知存储引擎提

8、交事务。下一步就是Sla将Mast的inarylog拷贝到它自己的中继日记。一方面,lae开始一种工作线程IO线程。I/O线程在Mastr上打开一种一般的连接,然后开始blog dump prcss。Biodum rocss从Maer的二进制日记中读取事件,如果已经跟上Mater,它会睡眠并等待aste产生新的事件。线程将这些事件写入中继日记。QLlave thread解决该过程的最后一步。SQL线程从中继日记读取事件,更新Slave的数据,使其与Mater中的数据一致。只要该线程与IO线程保持一致,中继日记一般会位于O的缓存中,因此中继日记的开销很小。此外,在Master中也有一种工作线程:

9、和其他SQL的连接同样,av在ster中打开一种连接也会使得aster开始一种线程。复制过程有一种很重要的限制复制在av上是串行化的,也就是说str上的并行更新操作不能在ae上并行操作。对于云计算使用者来说,只需要懂得数据库的IP和端口即可进行使用。具体实现见下图:第一步要做的是扩大Slave,将单机Master变成Maer+台Slave的架构,而在其中的Slave上搭建一种内网的负载均衡器(LaBalancer),对于最上层的Dt Serice来说,只要配备一种MySQL Master节点和一种B节点即可,此后因业务变化进行增减Slve对上层来说完全是透明的。此做法可以带来两个好处,第一是提

10、高可用性,若是一台Mastr浮现错误,则可以提高某一台的Slae作为Master继续提供服务,从而保证数据可用性;第二个是分摊读压力,对于一种社交Ap来说,读写分离是在数据层优化第一步要做的事情,运用上面的架构可以很容易地做到将读的祈求分担到MySQLSlave上进行查询,而写留给Mster。但是读写分离时会有数据库一致性的问题,即在数据写至se之后同步到Slave有一种延迟的时间,对于社交应用来说,这是可以接受的,只要保证数据的最后一致性即可。在上图的最下面有一种Snshot,即定期对数据进行冷备份,这不同于单纯对L asr进行复制的Slave,由于线上bug或误操作会删除aster上的数据

11、,这时会立即同步到sle上导致数据丢失这时冷备份napsho就会起到数据保护作用。运营过程中肯定需要监控,顾客可以运用ux上的工具进行记录分析top /iop / d / fre stat等工具去监控系统里的各个服务和组件与否正常运营,以及通过日记的信息(ttp acs g / aplictionlog / dabaslw lg )分析各个服务的性能瓶颈。数据分区与扩容下一步业务的调节要进行数据库的分区和扩容。第一,构建缓存集群,在开始的架构中引用了Mmcached缓存,是单机数据库缓存。当数据量增长,,需要把数据分散到多台缓存服务器上,常用的是Hashi算法,好处在于不管是添加结点还是删除结

12、点时,只会使得少部分数据失效。还可以引用SQL数据库,这里用到了Ris把社交数据里对于关系规定不强但对查询效率规定很高的数据从QL里拿到Re里存。Redis特别适合存储列表类数据,例如好友关系列表、排行榜数据等。除此以外可以考虑做数据分区对于MySQ第一步是垂直拆分,把本来单独的数据库按照功能模块分别拆提成:好友新鲜事、顾客资料、广告数据以及摸索数据。对于Rdis也同样,将本来的单台Redis按照功能模块拆成四个,分别为:排行榜数据、好友、广告数据、摸索数据。接下来会遇到的瓶颈是单表过大的问题,这时候我们需要做水平拆分把一种表拆提成多种表,需要选用一种分区Key,例如对顾客表做拆分时,一般选用

13、seD。分区key的选择重要是看所有的查询语句频繁使用哪个查询字段,就选择那个字段作为分区ke这样能保证大部分的查询可以落在单个数据表上,少量没有带分区Key的查询语句,也许要遍历一遍所有切分后的数据表。构建完整的测试环境构建完整测试服务器时需要创立新的路由器和私有网络、独立的网络环境和带宽资源、内网GE隧道打通路由器、VP拨入网络和SSH密钥管理。这个过程你可以创立一种涉及所有系统服务的al-i-one的环境,将其制作成自有映像。如果后续你的团队来新的人,需要独立的完整开发环境,只需基于自有镜像迅速创立主机即可;还可以运用Ur Dta定制化功能,在主机启动执行一段你上传的脚本,来初始化环境。

14、你可以将这两个功能结合起来用,把所有你所需要用的服务所有安装部署完毕后做成映像,并用Uer Dta脚本从代码库里更新代码。由于代码的变动相对于环境的更新更加频繁,不也许每次代码的更新都要构建一种新的自有镜像。通过这种方式构建起一种完整的测试服务器,让每个工程师都可以有自己独立的测试服务器。在p发布上线时需要连到线上环境怎么办?这两个网络自身完全10%隔离,可运用E隧道的功能,把两个路由器打通,实现测试环境网络和线上生产环境网络的完全连通。多机房部署与混合组网为了让后端架构更可靠和业务更稳定,就需要实行多机房部署和混合组网。具体因素有如下三点: 异地容灾:在复杂的网络环境下,机房也许会浮现网络状

15、况,导致某些比较核心性的业务的可用性减少,备份机房后可保证服务不会浮现明显的长时间中断; 负载分摊:单独一种机房也许局限性以支撑所有的祈求,这时可以把一部分的祈求压力分担到另一种机房; 加速区域访问:在国内网络环境下,南方和北方互相之间网络访问时有较高的延迟。通过做多机房部署实现加速区域顾客的访问。如上所示,有三个机房,中间是ingClu北京1区机房,负责主营业务。左边是亚太1区机房,重要服务亚太和海外的客户。这两个机房都使用了inoud私有网络部署,运用路由器,通过GRE隧道或者IPs加密隧道的方式进行互通。如果对数据传播过程的安全性规定较高,可以用IPsec的方式把两个机房互相打通,这时的访问只能通过内网I进行访问。右边是办公室机房,工程师在这个环境下进行开发。在实现混合组网时,只要机房路由器或者网宽设备支持原则的GRE隧道合同、IP隧道合同,就可以将老式物理世界的机房与路由器连通,并最后打通公有云环境。多机房部署一般见的方案有这些:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号