写点什么

第四周总结

用户头像
jizhi7
关注
发布于: 2020 年 11 月 16 日

一、互联网系统面临的问题:

1、高并发,大流量:

需要面对高并发用户,大流量访问。

2、高可用:

系统需要 7X24 小时不间断提供服务,因为互联应用每个人每时每刻都有可能会来访问。

3、海量数据:

面向的用户量多。

4、用户分布广泛,网络情况复杂

5、安全环境恶劣:

由于是互联网应用,每个人都能访问,使得网站更容易受到攻击。

6、需求快速变更,发布频繁:

互联网产品为了快速适应市场,满足用户需求,其产品的发布频率就会很高。

7、渐进式发展:

几乎所有的大型互联网网站都是从一个小型网站开始的,逐渐发展壮大。好的互联网产品都是慢慢运营出来的。

二、解决方案:

1、高并发:

1. 垂直伸缩:

具体实现:增强单一服务器的处理能力,如更新 cpu、内存、网络,小型机->中型机->大型机等。

缺点:一开始增加的成本和达到的性能是线性的,但到达某个程度后,需要投入更多的成本。

2. 水平伸缩:

具体实现:通过增加服务器数量,来提升整体的计算能力。

缺点:需要对软件设计作出修改,应对服务器集群,系统会变得复杂。

3. 一般而言,互联网架构都是使用水平伸缩,当水平伸缩解决不了的时候,或者说太复杂的时候可以考虑垂直伸缩。

三、分布式架构演进:

1、第零阶段(单一服务器):

单一的服务器:系统应用、数据库、文件系统全部放在一台服务器上,是最简单的架构。

缺点:用户访问时,应用系统计算和数据库查询数据以及文件系统,会争抢 cpu、内存等资源,会出现资源不足,相应缓慢,甚至服务器崩溃。

2、第一阶段(应用数据分离):

应用数据分离:将应用程序、数据可、文件系统分离,分别放在三台服务器上部署。

优点:修改较小,数据库系统换成远程访问,文件系统远程访问 amont。

缺点:数据都是放在硬盘上的,访问时,速度比较慢。

3、第二阶段(使用缓存):

使用缓存改善系统应用性能,将频繁访问的数据放在缓存中。分别本地缓存和远程分布式缓存集群。

优点:降低数据库压力,加快数据返回速度。

缺点:单一的应用服务器支撑不了高并发访问压力。

4、第三阶段(应用服务器集群):

使用应用服务器集群改善系统的并发处理能力。搭建一个应用服务器集群,负载均衡服务器分发用户的请求到不同的服务器上。

缺点:用户的并发请求高了,但是数据库服务器只有一台,每次写数据时都要往着一台服务器写,如果数据库的处理速度比较慢,应用程序的用户线程就要阻塞等待了。这时数据库的访问压力就比较大了。

5、第四阶段(数据库读写分离):

将数据库部署为一个主服务器、一个从服务器,实现读写分离。当有数据写的时候写入主服务器中,然后通过主从复制,将数据复制到从服务器中。当由读数据请求的时候,读取从服务器中的数据。这样就减轻了主服务器的访问压力。

优点:通过数据库的读写分离,提升数据库的处理能力,降低数据处理对整个系统造成的影响。以此来提升整个系统的并发处理能力。

6、第五阶段(反向代理和 CND 缓存):

使用反向代理和 CDN 加快网站相应速度。

CDN:是内容分发网络,是部署在运营商机房的一台缓存服务器。可以将一些静态资源缓存放在 CDN 中,CDN 离用户近,就近为用户提供服务。网络的资源大头都是一些静态资源。

反向代理服务器:缓冲,查看请求的资源在本机有没有,有的话直接的返回,没有就通过负载均衡服务器分发到应用服务器中。

7、第六阶段(分布式文件系统和数据库):

使用分布式文件系统和数据库系统。当由很多的数据是,比如一亿多条数据,单一的服务器已经不能很好的提供服务了,所以需要分布在不同的数据库中,这样也提升数据库的写入性能。文件系统也是类似。

8、第七阶段(NoSQL 和搜索引擎):

使用 NoSQL 和搜索引擎,数据库的模糊查找支持不是很好,复杂查询操作执行也比较慢。这样就进一步提高数据的存储能力,和数据的查询速度。

9、第八阶段(业务拆分):

为了满足不同的用户需求,系统会变得越来越复杂,越来越庞大。可以按照业务划分将其拆分为不同的模块,并在不同的服务器上集群部署,通过 mq 消息中间件通信或者 rpc 框架。

经过业务拆分可以让开发变得更加简单,只需要关注自己的。集群的扩容伸缩单一业务可以变得更加简单。

10、第九阶段(微服务及中台化):

将系统公用的服务拆分出来,构成的微服务集群,给别的应用调用。

11、第十阶段(大数据和智能化):

根据不同的用户提供不同的服务。通过构建大数据平台,分析和挖掘数据。

四、架构模式与要素:

架构模式

1、分层():

将系统在横向维度上切分成几个部分,每个部分负责一部分相对单一的职责,然后通过上层依赖下层和调用组成一个完整的系统。

视图层、应用逻辑层、公共服务层、基础设施层、存储层。(分了层的不同的层依然可以继续分成,并且部署在不同的服务器上)

2、分割(业务层功能面):

在纵向方面对系统进行切分,将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元。一方面有利于软件的开发和维护、另一方面便于不同的模块分布式部署。提高网站的并发处理能力和功能上的扩展。

3、分布式:

经过分层和分割后,就要将不同的模块分布式部署。通过远程调用协同工作。

如:分布式应用服务器、分布式静态资源服务器、分布式数据和存储、分布式计算。

4、集群:

将相同功能的模块部署在不同的的服务器集群化,通过负载均衡,共同对外提供服务。

5、缓存:

将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段。

如:CDN、反向代理、本地缓存、远程缓存。

6、异步:

系统解耦。

提高系统的可用性、加快网站相应速度、消除并发高峰。

7、冗余:

服务器宕机是必然事件,想要保证在服务器宕机的情况下网站依然可以继续服务,数据不会丢失,就需要一定程度的服务器冗余运行,数据冗余备份。

8、自动化:

运维方面,自动监控,部署。

9、安全:

 

架构要素

1、高性能

2、高可用

3、可伸缩

方便的向集群中添加服务器。

4、可扩展

主要手段:事件驱动架构和分布式服务。

5、安全


用户头像

jizhi7

关注

还未添加个人签名 2018.09.08 加入

还未添加个人简介

评论

发布
暂无评论
第四周总结