大学学课程都是从小处开始往大处走。
好比学汽车制造 今天发动机 明天轮胎 后天安全系统 其实挺难懂的。散碎明白不了。倒不如先整体学学 车是啥玩意 我们为什么需要车,车为啥做成这样。在这个过程我们需要什么。我们需要发动机提供动力。需要轮胎转换动力为速度。…………
所以倒不如先看看互联网架构是啥,站在高处去思考我们学的那些有啥用。究竟是先有楼还是想法还是先用工具,所以学工具是啥子咋做的还要先知道这工具用来干啥。
站在架构上看回头再看 缓存是为啥 分布式是为啥 网络为啥如此设计 ……
先有问题和需求 才有解决思路和办法 再造出来工具来重复使用。
【参考书目】
《大型网站技术架构》:阿里巴巴技术专家——李智慧
【架构的演化概述】
都是小网站有小网站技术。然后变大变大。架构也要变。
大型网站的特点
- 高并发:某个时刻并发访问人数太多,一秒几万。那么服务器临时接不过来。PV指标。
- 大流量:总的人多。
- 高可用:7*24小时不间断服务哦。不能宕机
- 海量数据:存储管理海量数据。。比如图片 收录的商品数 需要大量服务器来存储。所以为什么限制用户的空间。就是太大数据咯
- 用户分布和网络情况复杂:海外无法访问呢 数据库就要国外也来一个存储国外的用户
- 产品频繁上线更改:
【网站架构】
最初小网站:
- 应用程序、数据库、文件在一台服务器(大型计算机)上。
- LMPA架构哦: 操作系统用linux 数据库mysql 应用程序PHP 部署在apache上
- 一个二手廉价服务器和各种开源软件即可。
用户多了。业务多咯。数据多咯。一台服务器不够用了,忙不过来。
那么数据服务和应用程序服务分离:
随着业务变多应用程序跑起来太慢,数据越来越多存储空间不足。那么按照硬件资源不同就分开这三台服务器。
分为三台服务器:
- 应用程序服务器:处理业务逻辑,CPU要强大。
- 文件服务器:存储用户文件,大量的硬盘来存储。
- 数据库服务器:存储和读取访问磁盘里数据,所以需要访问更快的硬盘和更大的内存。
用户多了,数据太多啊。数据库撑不住。访问太慢延迟太大。oracle也不行咯。
那么就是给数据库加缓存,把二八定律里的20%的核心数据存储在缓存里,加快访问:
- 淘宝里的优势商品,百度的热点词,新浪的热点新闻和经常上的用户——小部分数据。
- 把这些小部分数据 缓存到内存,提高数据库访问磁盘的压力啊。缓存是缓存在内存不是放在一个啥地方。啥地方也不如内存快速。
- 缓存分为
-
- 缓存在应用服务器上的本地缓存。——就是放在应用程序那个服务器的CPU里面
- 缓存在专门的分布式缓存服务器的远程缓存。——分布式
-
- 注意:
本地缓存:
是在和应用程序服务器的内存里,那肯定和应用程序 CPU最近快一点啊,但是你是缓存应用程序服务器的内存里。那么应用程序执行是要加载到内存的执行,那么,就那么点内存给呢。所以缓存的数量有限。而且会出现缓存数据和应用程序抢夺内存资源。
远程缓存:
使用
集群的方式
部署大内存的服务器专门做缓存服务器。
缓存加完还是慢。绝大部分数据读写访问都可以不通过数据库直接通过缓存在内存里的数据就能完成。那么别的一部分数据缓存访问不命中也就是缓存里没有,或者缓存过期。还是要读写访问数据库。
那么就是数据库读 写分离。主流数据库oracle mysql都可以提供主从热备功能。就是配置那数据库服务器呗。一台主一台从。
- 应用程序服务器 写数据 时候写到主数据库。
- 然后通过 [ 主从复制机制 ] 把数据更新到 从数据库。那么读数据时候就向从数据库服务器读取。
- 就是 写入主数据库服务器 读取从数据库服务器。应用服务器使用专门的数据访问控制模块,使数据库读写对应用透明。
用户多了,请求计算多啊。那么应用服务器一台是不够的,应付不过来计算。
那么就是变成 应用服务器集群啊,改善并发处理能力:
集群:
使用集群是解决高并发 海量数据的常用手段。也就是一台服务器不行里。不要去高富帅一样买好的大的服务器。你加的再大也有上限。
所以最好增加服务器来分担压力。也就是集群的办法。
只要通过增加一台可以改善负载压力。就可以持续增加服务器改善性能。从而实现可伸缩性啊。可扩充可回收。
负载压力:
负载均衡:
通过负载均衡调度服务器:
将来自用户浏览器的访问请求 分发 (就是调度到合理的服务器去计算,不同的服务器上放上不同的业务对应的应用程序)到应用服务器集群里的任何一台服务器上。更多用户加入更多服务器。
用户网络情况复杂,那么会导致访问慢啊,
有的地方会慢的一比
:
那么就加速访问速度,用
反向代理和CDN:
- 反向代理
- CDN
- 反向代理和CDN基本原理都是缓存,目的都是尽早返回数据给用户,加快用户访问速度同时减去后端服务器负载压力。
-
- 区别在于CDN部署在网络提供商(联通电信)的机房,使得用户访问时候,可以从用户最近的网络提供商机房获得数据,
- 反向代理部署在 网站的中心机房。 用户请求到中心机房之后首先访问服务器的是反向代理服务器。如果反向代理服务器中缓存着用户请求的资源,那么就将其直接返回给用户。
然后继续就是 分布式数据库服务器啊 分布式文件服务器啊
——全部是进行服务器的分布式
——首先按照业务不同放在不同的数据库服务器。一个业务的业务量实在太大就分布式。
数据库台继续庞大,关系型数据库就无能为力里。那么非关系型数据库Nosql查询技术 和 搜索引擎就牛逼了。
然后就是业务拆分:
把网站的哥哥业务分成不同的产品线啊。大型购物网站变成首页 商铺 订单 卖家 买家不同的产品线,分归不同的业务团队管。
分布式服务:
云计算其实本质就是分布式服务还是这种计算基础的支持。然后把这些水平形象化变成云计算。大网站克服这个技术之后。提供给小网站。那么中小网站不需要管架构和服务器这些,只需要专注你的业务即可,技术就很少了,会技术的产品经理和运营这些还是要火啊。去阿里云啥的买就可以啊。哈哈。主抓业务即可。比如知乎变大之后才开始自己建设机房买服务器。
其实云计算就是架构。分布式集群各种计算资源 服务器然后按需可拓展来使用啊。哈哈哈。没那么神奇。
【网站核心架构要素】
- 高性能
-
- 性能测试
- 性能优化
-
- 前端优化的办法
- 服务器端优化
- 存储优化
- 可用性
-
- 可用性的考核度量
- 高可用类型
-
- 应用
- 数据
- 服务
- 软件质量
- 运行监控
- 可伸缩性
-
- 架构伸缩性伸缩性设计
- 服务器集群伸缩性设计
- 分布式缓存集群伸缩性设计
- 数据存储伸缩性设计
- 拓展性
-
- 分布式消息
- 安全性
-
- 安全防御
- 信息加密和密钥管理
- 信息过滤和反垃圾