加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

浓缩精华的架构演进过程,我连看了六遍!

发布时间:2020-03-18 12:33:17 所属栏目:Unix 来源:站长网
导读:副标题#e# 【金融特辑】光大****科技部DBA女神带你从0到1揭秘MGR 【51CTO.com原创稿件】业务驱动技术的发展是亘古不变的道理。最开始的时候,业务量少,业务复杂度低,采取的技术也相对简单,基本满足用户对功能的需求。 图片来自 Pexels 随着 IT 信息化的

浓缩精华的架构演进过程,我连看了六遍!

图 4:服务器集群的加入

服务器集群也就是多台服务器扎堆的意思,用更多的服务器来分担单台服务器的负载压力,提高性能和可用性。

再说白一点,就是提高单位时间内服务处理请求的数量。原来是一个服务器处理,现在是一堆服务器来处理。就好像****柜台一样,增加柜员的人数来服务更多的人。

这次架构演进与上次相比,增加了应用服务器的个数,用多台应用服务器形成集群。

应用服务器中所部署的应用服务没有改变,在用户请求与服务器之间加入了负载均衡器,帮助用户请求路由到对应的服务器中。增加服务器的举动表明,系统的瓶颈是在处理用户并发请求上。

针对数据库和缓存都没有做更改,这样仅仅通过增加服务器数量就能够缓解请求的压力。

服务器集群会通过多台服务器来分担原来一台服务器需要处理的请求,在多台服务器上同时运行一套系统,因此可以同时处理大量并发的用户请求。

有点三个臭皮匠顶个诸葛亮的意思,因此对集群中单个服务器的硬件要求也会降低。此时需要注意负载均衡均衡的算法,例如轮询和加权轮询。

我们要保证用户请求能够均匀分布到服务器上面,同一个会话的请求保证在同一个服务器上面处理,针对不同服务器资源的优劣动态调整流量。

负载均衡器加入之后,由于其位于互联网与应用服务器之间,负责用户流量的接入,因此可以对用户流量进行监控,同时对访问用户的身份和权限进行验证。

数据库读写分离

加入缓存可以解决部分热点数据的读取,但缓存数据的容量有限,那些非热点的数据依旧会从数据库中读取。数据库对于写入和读取的性能是不一样的。

在写入数据的时候,会造成锁行或者锁表,此时如果有其他写入操作并发执行,会存在排队现象。

而读取操作比写入操作更加快捷,并且可以通过索引、数据库缓存等方式实现。

因此,推出了数据库读写分离的方案,其架构图如图 5 所示:

浓缩精华的架构演进过程,我连看了六遍!

图 5:数据库读写分离

此时设置了主从数据库,主库(master)主要用来写入数据,然后通过同步 binlog 的方式,将更新的数据同步到从库(slave)中。

对于应用服务器而言,在写数据的时候只需要访问主库,在读数据的时候只用访问从库就好了。

利用数据库读写分离的方式,将数据库的读/写职责分离。利用读数据效率较高的优势,扩展更多的从库,从而服务于读取操作的用户请求。毕竟在现实场景中,大多数操作都是读取操作。

此外,从数据同步技术的角度来说,又可以分为同步复制技术、异步复制技术和半同步复制技术。在数据库读写分离带来益处的同时,架构也需要考虑可靠性的问题。

例如,主库如果挂掉,从库如何接替主库进行工作。主库在恢复以后,是成为从库还是继续担当主库,以及如何同步数据的问题。

反向代理与 CDN

随着互联网的逐渐普及,人们对网络安全和用户体验的要求也越来越高。之前用户都是通过客户端直接访问应用服务器获取服务,应用服务器会暴露在互联网中,容易遭到攻击。

如果在应用服务器与互联网之间加上一个反向代理服务器,它接收用户的请求,然后再转发到内网的应用服务器,充当外网与内网之间的缓冲。

反向代理服务器只是做请求的转发,在它上面没有运行任何应用,因此当有人攻击它的时候,是不会影响到内网的应用服务器的。

这无形中保护了应用服务器,提高了安全性。同时,它也在互联网与内网之间起到适配和网速转换的作用。

例如,应用服务器需要服务公网和教育网,但是两个网络的网速不同,可以在应用服务器与互联网之间放上两台反向代理服务器,一台连接公网,另一台连接教育网,屏蔽网络差异,服务于更多的用户群体。

如图 6,公网客户端和校园网客户端分别来自公网与校园网两个不同的网络:

浓缩精华的架构演进过程,我连看了六遍!

图 6:加入反向代理服务器

由于两个网络访问速度不同,因此会针对两个网络分别设置共网代理服务器和校园网代理服务器,通过这种方式将位于不通网络的用户请求接入到系统中。

聊完反向代理,再来说说 CDN,它的全称是 Content Delivery Network,也就是内容分发网络。

如果把互联网想象成一张大网的话,每个服务器或者客户端就是分布式在网中的一个节点。

节点之间的距离有远有近,用户请求会从一个节点跳转到另外一个节点,最终跳转到应用服务器获取信息。

如果跳转的次数越少,就能够更快地获取信息,因此可以在离客户端近的节点存放信息。

这样用户通过客户端,只需要较少的跳转次数就能够触达信息。由于这部分信息更新频率不高,推荐存放一些静态数据,例如 JavaScript 文件、静态的 HTML、图片文件等。

这样客户端就可以从离自己最近的网络节点获取资源,大大提高了用户体验和传输效率。

加入 CDN 后的架构图如图 7 所示:

浓缩精华的架构演进过程,我连看了六遍!

图 7:加入 CDN

CDN 的加入明显加快了用户访问应用服务器的速度,同时也减轻了应用服务器的压力,原来必须直接访问应用服务器的请求,不用经过层层网络,而只用找到最近的网络节点就可以获取资源。

但从请求资源的角度上来看,这种方式也有局限性,它只能对静态资源起作用,需要定时对 CDN 服务器进行资源更新。反向代理和 CDN 的加入解决了安全性、可用性和高性能的问题。

分布式数据库与分表分库

经历前面几个阶段以后,软件的系统架构相对趋于稳定。随着系统运行时间的增加,数据库中累积的数据越来越多,同时系统还会记录一些过程数据,例如操作数据和日志数据,这些数据也会加重数据库的负担。

即便数据库设置了索引和缓存,但在海量数据查询的时候还会捉襟见肘。如果说读写分离,是将数据库从读写层面进行资源分配,那么分布式数据库就需要从业务和数据层面对资源进行分配。

①对于数据表来说,当表中包含的记录过多时,会将其分成多张表来存储。

例如:有 1000 万个会员记录,就可以将其分成两个 500 万,分别放到两个表中存储。

也可以按照业务将表中的列进行分割,把表中的某些列放到其他表中存储,然后通过外键关联到主表,被分割出去的列通常是不经常访问的数据。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读