第四周课程总结
一、系统架构概述:当今互联网面临的挑战
高并发、大流量 — 面对高并发的用户,大流量的访问
高可用 — 系统7*24小时不间断服务,大型互联网站的宕机事件通常会成为新闻焦点;服务器可以停机,但是系统要高可用
海量数据 — 需要存储、管理海量数据
用户分布广发,网路情况复杂
安全环境恶劣
需求快速变更,发布频繁 — 互联网产品为快速适应市场,满足用户需求,其产品发布频率也是极高的。
渐进式发展 — 不同于传统软件产品或者企业应用系统,一开始就规划好全部的功能和非功能需求,几乎所有的大型互联网站都是从一个小网站开始,渐进的发展起来的。
二、应对业务高并发挑战的两个技术方向
用户变多 — 处理的数据变多 — 资源(cpu、内存、数据库、网络)需求多
1.垂直伸缩
概念:通过升级硬件和网络吞吐能力可以实现垂直伸缩;
优势:架构不需要改变,软件不需要动,只需要花钱,升级机器硬件能力就可以实现;
垂直伸缩的方案:
通过使用RAID(独立冗余磁盘阵列)增加I/O吞吐能力
垂直伸缩的缺点:
有边际效应,到某个临界点以后,增加计算能力需要花费更多的钱
2.水平伸缩
概念:不是增强硬件,而是通过增加服务器提升计算能力的一类架构方法
优势:
可以克服垂直伸缩带来的单位计算成本随着计算能力增加而迅速飙升的问题
三、互联网架构演化
阶段0:最简单的互联网应用架构
应用程序、数据库和文件存储系统全部都在一台服务器上;
阶段一:应用数据分离
由原来的一台服务器通过拆分,拆分为三台服务器,分别是应用服务器、文件服务器、数据库服务器
阶段二:使用分布式缓存改善系统性能
阶段三:使用应用服务器集群改善系统的并发处理能力
通过负载均衡服务器构建应用服务器集群,通过增加应用服务器,提升计算资源,增强计算能力,从而服务更多的用户;
阶段四:数据库读写分离
对于更多的请求,就会有更多的读和写的操作,而且读的数据并不是总能在缓存中找到,这样就会导致数据库的压力就会增大。这个时间的解决方案通过主从复制的方式,把数据库的数据复制到另一个数据库服务器上,然后通过读写分离的方式,降低单一数据库的读写压力,系统可用性增加;
缓存服务器是通过内存进行处理的,内存密集型的服务器
应用服务器是主要消耗的cpu,是cpu密集型的服务器
数据库服务器是个硬盘密集型的服务器,硬盘相对速度比较差;
所以数据库一般来说是整个架构中,比较脆弱的一部分
阶段五:使用反向代理和CDN加速网络响应
CDN服务器:本质是一个缓存服务器,就近给用户提供服务的缓存服务器,我们的网络接到运营服务商,运营服务商帮我们的网络通过骨干网络接到淘宝的服务器机房里面去,返回的数据一大部分都是静态资源(比如说一些图片)。能否在运营服务商的接入机房中放一台淘宝的服务器,然后在请求一个图片时,就可以就近的淘宝服务器来返回。
反向代理服务器: 通过代理机房服务器,来对外提供服务。CDN服务器的请求先进入到反向代理服务器,反向代理服务器先检查自己的服务器中有没有请求的资源,如果有就返回,如果没有的话,再转发请求到下一层。
通过这种方式减轻了数据中心网络带宽的压力,通过也减轻了应用服务器的CPU压力;
阶段六:使用分布式文件系统和分布式数据库系统
数据库主从复制存在两个问题:
1、大量写的请求,写的压力很大;
2、数据量庞大的问题
阶段七:使用NoSQL和搜索引擎
使用搜索引擎提供查询功能,本身数据库资源比较宝贵。
而有些数据没有什么事务性的要求,而且数据量很大,就可以使用Nosql服务器来解决
阶段八、业务拆分
进行系统拆分,不同的应用部署到不同的服务器上,每个服务器的职责和功能相对单一;
阶段九、微服务及中台化
阶段十、大数据与智能化
四、互联网架构模式
每个模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心,这样,你就能一次有一次的使用该方案而不必要做重复工作
模式的关键在于模式的可重复性,问题域场景的可重复性带来解决方案的可重复使用
互联网架构模式就是试图去描述那些为解决互联网系统高性能、高可用、易扩展、可伸缩、安全等目标,被很多互联网应用重复使用的一些解决放哪,这些解决方案是互联网软件系统的重要组成部分;
1、分层
将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层依赖和调用组成一个完整的系统。
2、分割
纵向方面对软件进行切分,系统越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,一方面有助于软件的开发和维护,另一方面,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力
3、分布式
对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用(RPC/HTTP)协同工作,分布式意味着解决同样的问题可以使用更多的计算机,计算机越多,CPU、内存、存储资源也就越多,能够处理的并发访问和数据量就越大
分布式应用和服务
分布式静态资源
分布式数据和存储
分布式计算
使用分布式虽然已经将分层和分割后的模块独立部署,但是对于用户访问集中的模块,比如网站的首页,还需要将独立部署的服务器集群化,即多态服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务;
5、缓存
缓存就是将数据存放在距离计算最近的位置以加快处理速度,缓存是改善软件性能的第一手段,现代CPU越来越快的一种重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在,大型网站架构设计在很多方面都使用了缓存设计;
CDN
反向代理
本地缓存
远程缓存
6、异步
异步就是将一个业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作
提供系统可用性
加快网站相应速度
消除并发访问高峰
7、冗余
互联网应用需要7*24小时连续运行,但是服务器总有可能出现故障,特别是服务器规模比较大的时候,服务器宕机是必然事件,要想保证在服务器宕机的情况下网站依赖可以继续服务,数据不会丢失,就需要一定程度的服务器冗余运行,数据冗余备份
8、自动化
无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态,目前互联网的自动化架构设计主要集中在运维方面
五、互联网系统架构核心要素『如何衡量一个系统的架构设计』
高性能
高可用 7*24保证可用
可伸缩 — 通过不断向集群中加入服务器的手段来缓解不断上升的用户并发压力和不断增长的数据存储需要
可扩展 — 互联网应用快速发展,功能不断发展,如何设计系统的架构使其能够快速响应需求变化,是系统可扩展架构主要的目的;业务扩展的时候,能够快速的增加新功能
安全性 — 保证系统安全可靠
六、互联网架构技术
1、前端架构
App以及Web开发技术
浏览器以及Http优化技术
CDN
动静分离
图片服务
反向代理
DNS
2、网关及应用层架构
网关架构
负载均衡
动态页面静态化
业务拆分
3、服务层架构
微服务框架
分布式消息队列
分布式缓存
分布式一致性(锁)服务
4、存储层架构
分布式文件
分布式关系数据库
NoSQL数据库
5、后台架构
大数据平台
搜索引擎
推荐 引擎
数据仓库
6、运维与安全
数据采集与展示
数据监控与报警
攻击与防护
数据加密与解密
七、互联网网站案例分析:维基百科
八、互联网网站案例分析:淘宝
九、互联网网站案例分析:宅米
评论