第四周总结
一、互联网系统面临的问题:
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、安全
评论