首页 > 代码库 > 《大型网站技术架构》笔记
《大型网站技术架构》笔记
最近又把《大型网站技术架构》看了一遍.而中间读了一本《计算机操作系统》的教材后,感觉对大型网站的技术架构有更深的了解。在此结合对这两本书的理解做一些笔记
传统的OS(Operator System)有四个基本的功能:
- 处理机管理:以进程为基本单位,对其创建和撤销
a) 进程控制
b) 进程同步
c) 进程通信
d) 调度
- 存储器管理
a) 内存分配
b) 内存保护
c) 地址映射
d) 内存扩充
- 设备管理:完成I/O请求.提高CPU和I/O设备的利用率,提高I/O速度.方便用户使用I/O设备
a) 缓冲管理
- i. 如果在I/O和CPU之间引入缓冲区,则可有效的缓和它俩速度不匹配的矛盾,提高CPU的吞吐量,进而提高系统的吞吐量
b) 设备分配
c) 设备处理:设备处理器又被成为设备驱动程序
- 文件管理
a) 文件存储空间的管理
b) 目录管理
c) 文件的读/写管理和保护
架构的演变过程
一、起初的网站直接用LAMP(Linux+Apache+MySQL+PHP)部署在一台服务器上
这样会造成:
- 用户所有的请求都由这台服务器的多线程处理
- 所有的内存都在此服务器上(内存的获取速度比磁盘读取快N倍.最好把经常需要读取的数据放在内存中)
- 请求的处理(数据的处理:mysql中的数据都是通过磁盘存取的,这时候务必会涉及I/O处理)
- 用户上传的所有文件都在此服务器上
综上所述:
- 这台服务器必须要有足够多的CPU处理器来同事处理用户的请求
- 必须有足够大的内存存储空间
- 磁盘存取的速度必须够快(例如固态硬盘)
- 硬盘必须足够大来存储文件
除此之外,还有一些其他的问题.例如网络宽带等
如我的博客服务器上行100k/s ,10个人就没人10K,2M的图片就得20秒,如果100人的话..
综上所述,需对单一服务器进行分开部署:
- 请求服务器(多处理器.专门处理用户的请求)
- 缓存服务器(内存足够大.用于存储经常访问的数据.如用redis)
- 数据库服务器(采用固态硬盘)
- 文件服务器(足够大的硬盘空间)
通过分开部署.每台服务器都发挥自己的特长,大大提高了效率
而衡量一个网站的优越性,经常会考虑到一下五点
- 高性能
a) 加载页面时,将静态文件部署到CDN第三方供应商服务器.以减少向服务器请求资源.
b) 使用缓存.命中资源便立即返回,减少数据库读取操作(磁盘读取数据的速度比缓存慢N倍)
c) 采用分布式.不同业务采用单独的服务器分开(避免请求集中化)
d) 进行分布式集群.通过负载均衡算法把请求分发到集群服务器中的某台(一般用nginx反向代理服务器进行集群)
e) 分布式缓存.让所有的缓存集中在这些专门做缓存的服务器(如redis)
f) 将数据库的读写分离.(后期业务做大还有分库的可能)
g) 采用消息队列(也就是异步)把次要的事件加到消息队列不用等待返回结果立即响应用户.最典型的例子就是12306的订单邮件提醒,一般买到票后好一段时间后才收到.这就是把邮箱提醒功能加到消息队列中
- 可用性
a) 对于用户而言,网站7*24小时可用不间断.这个是理想状态,一般来说4个9(99.99%)就差不多了
b) 任意一台服务器的宕机都不会造成网站不可用.并且集群服务器之间有互相备份的功能,任何一台服务器宕机后不会影响应用的整体可用或者导致数据丢失
- 可拓展性
a) 当增加功能时只是增加开放接口,而不会对原有的功能产生影响,达到松耦合的效果
b) 增值性业务的拓展.也是不会影响到其他业务
c) 网站可收缩性的主要手段是事件驱动架构和分布式服务
- 可伸缩性
a) 向集群中增加或减少服务器的时候可以平滑过渡.用户的请求依然可以高命中.
所以缓存路由算法非常重要(一般来说会用nginx负载均衡.的用轮询算法.像哈希求余等效果不好)
- 安全性
a) 能够防御XSS攻击
b) 脚本注入的方式
c) 发无效的源地址tcp包
《大型网站技术架构》笔记