《大型网站技术架构》笔记

最近又把《大型网站技术架构》看了一遍.而中间读了一本《计算机操作系统》的教材后,感觉对大型网站的技术架构有更深的了解。在此结合对这两本书的理解做一些笔记

传统的OS(Operator System)有四个基本的功能:

  1. 处理机管理:以进程为基本单位,对其创建和撤销

a)         进程控制

b)         进程同步

c)         进程通信

d)         调度

  1. 存储器管理

a)         内存分配

b)         内存保护

c)         地址映射

d)         内存扩充

  1. 设备管理:完成I/O请求.提高CPU和I/O设备的利用率,提高I/O速度.方便用户使用I/O设备

a)         缓冲管理

  1. i.              如果在I/O和CPU之间引入缓冲区,则可有效的缓和它俩速度不匹配的矛盾,提高CPU的吞吐量,进而提高系统的吞吐量

b)         设备分配

c)         设备处理:设备处理器又被成为设备驱动程序

  1. 文件管理

a)         文件存储空间的管理

b)         目录管理

c)         文件的读/写管理和保护

架构的演变过程

一、起初的网站直接用LAMP(Linux+Apache+MySQL+PHP)部署在一台服务器上

这样会造成:

  1. 用户所有的请求都由这台服务器的多线程处理
  2. 所有的内存都在此服务器上(内存的获取速度比磁盘读取快N倍.最好把经常需要读取的数据放在内存中)
  3. 请求的处理(数据的处理:mysql中的数据都是通过磁盘存取的,这时候务必会涉及I/O处理)
  4. 用户上传的所有文件都在此服务器上

综上所述:

  1. 这台服务器必须要有足够多的CPU处理器来同事处理用户的请求
  2. 必须有足够大的内存存储空间
  3. 磁盘存取的速度必须够快(例如固态硬盘)
  4. 硬盘必须足够大来存储文件

除此之外,还有一些其他的问题.例如网络宽带等

如我的博客服务器上行100k/s ,10个人就没人10K,2M的图片就得20秒,如果100人的话..

综上所述,需对单一服务器进行分开部署:

  1. 请求服务器(多处理器.专门处理用户的请求)
  2. 缓存服务器(内存足够大.用于存储经常访问的数据.如用redis)
  3. 数据库服务器(采用固态硬盘)
  4. 文件服务器(足够大的硬盘空间)

通过分开部署.每台服务器都发挥自己的特长,大大提高了效率

而衡量一个网站的优越性,经常会考虑到一下五点

  1. 高性能

a)         加载页面时,将静态文件部署到CDN第三方供应商服务器.以减少向服务器请求资源.

b)         使用缓存.命中资源便立即返回,减少数据库读取操作(磁盘读取数据的速度比缓存慢N倍)

c)         采用分布式.不同业务采用单独的服务器分开(避免请求集中化)

d)         进行分布式集群.通过负载均衡算法把请求分发到集群服务器中的某台(一般用nginx反向代理服务器进行集群)

e)         分布式缓存.让所有的缓存集中在这些专门做缓存的服务器(如redis)

f)          将数据库的读写分离.(后期业务做大还有分库的可能)

g)         采用消息队列(也就是异步)把次要的事件加到消息队列不用等待返回结果立即响应用户.最典型的例子就是12306的订单邮件提醒,一般买到票后好一段时间后才收到.这就是把邮箱提醒功能加到消息队列中

  1. 可用性

a)         对于用户而言,网站7*24小时可用不间断.这个是理想状态,一般来说4个9(99.99%)就差不多了

b)         任意一台服务器的宕机都不会造成网站不可用.并且集群服务器之间有互相备份的功能,任何一台服务器宕机后不会影响应用的整体可用或者导致数据丢失

  1. 可拓展性

a)         当增加功能时只是增加开放接口,而不会对原有的功能产生影响,达到松耦合的效果

b)         增值性业务的拓展.也是不会影响到其他业务

c)         网站可收缩性的主要手段是事件驱动架构和分布式服务

  1. 可伸缩性

a)         向集群中增加或减少服务器的时候可以平滑过渡.用户的请求依然可以高命中.

所以缓存路由算法非常重要(一般来说会用nginx负载均衡.的用轮询算法.像哈希求余等效果不好)

  1. 安全性

a)         能够防御XSS攻击

b)         脚本注入的方式

c)         发无效的源地址tcp包

时间: 2024-12-20 13:16:58

《大型网站技术架构》笔记的相关文章

SQL 笔记 By 华仔

-------------------------------------读书笔记------------------------------- 笔记1-徐 最常用的几种备份方法 笔记2-徐 收缩数据库的大小的方法 笔记3-徐 设置数据库自动增长注意要点 笔记4-徐 模仿灾难发生时还原adventurework数据库 示例 stopat 笔记5-徐 检查日志文件不能被截断的原因 笔记6-徐 检测孤立用户并恢复孤立用户到新的服务器 解决数据库镜像孤立用户问题 笔记7-徐 SQLSERVER日志记录

SQL笔记---多表左联

这是实际场景当中的一个例子,拿出来分析总结思路. -- SQL 查询 --SELECT  orderQuery.Rk_SkuCode ,        orderQuery.SkuName,        SUM(ISNULL(orderQuery.OrderTotal, 0))        - SUM(ISNULL(removeQuery.RemoveTotal, 0))        - SUM(ISNULL(pickQuery.PickTotal, 0))        - SUM(IS

SQL笔记---分页

随用随想,随用随记. 通过实际应用掌握SQL语句. 一. SQL分页 1. 第一种方法:利用ID大于多少进行筛选 SELECT TOP 20        *FROM    dbo.WMS_StockWHERE   ( Rk_SkuCode > ( SELECT MAX(Rk_SkuCode)                         FROM   ( SELECT TOP 40                                            *           

《HeadFirst SQL》笔记

规范化 0 约束 1 原子性 2 第一范式 1NF 3 数据模式 4 依赖 5 联接查询 6 交叉联接(AKA 笛卡尔联接,叉积) 7 内联接 8 子查询 9 外联接 10 自联接 11 集合 12 事务 13 ACID 14 管理事务 15 常用语句 16 注意 17 规范化 约束 NOT NULL UNIQUE PRIMARY KEY DEFAULT FOREIGN KEY:引用父表的某个唯一值引用完整性:插入外键列的值必须已经存在于父表的来源列中 --创建外键 create table i

SQL笔记1:SELECT及SELECT高级应用

T-SQL笔记1:SELECT及SELECT高级应用 本章摘要 1:安装AdventureWorks 2:基本运算符和表达式 3:between 4:like 5:escape 6:TOP 7:GROUP BY 7.1:GROUP BY ALL 7.2:HAVING 8:SELECT字句技术 8.1:使用DISTINCT消除重复值 8.2:返回拼接的结果 8.3使用INTO字句 9:子查询 9.1:子查询类型 9.2:代替表达式的查询 9.3:多层嵌套 10:比较使用 EXISTS 和 IN 的

金典 SQL笔记(6)

page223-索引 --利用SQL 语句创建索引 --CREATE INDEX 索引名称on 表名(字段 ,字段, 字段字段n) --索引名称必须为唯一的,字段 ,字段, 同意一个到多个 --范例为T_person 表中给FName创建索引索引名为 idx_person_name CREATE INDEX idx_person_name ON T_Person (FName) --删除索引 --drop index 表名索引名 DROP INDEX T_person.idx_person_na

Mybatis 项目开发实际常用SQL笔记总结

parameterType 和 resultType parameterType:单个参数用String,多个参数用map resultType:   可以是 Integer.String.Object    <select id="countGroupMasterByUid" parameterType="String" resultType="Integer">      SELECT              COUNT(id)

sql笔记/分页存储过程

[email protected]c#中进行++操作可以是整数或小数,sql中只能对整数进行++操作.char类型 适合存储长度波动较小不回收效率高varchar 类型 适合存储长度波动较大可以回收nchar代表unicode 存储内容包括汉字时候考虑加n SQL语句特点1不区分大小写2没有双引号所有字符串都包含在单引号3没有逻辑相等,逻辑相等和赋值一样都是用=4没有bool值得概念,但是在视图中可以输入true/false5也有关系运算符.6也有逻辑运算符 &&-- and || --o

sql笔记

1. 看下面sql,重点有两个,一个是distinct  ,一个是树形结构查询 select DISTINCT t.unit_code from t_unit_relation t where t.corp_tn='jiaozhougongan' start with t.unit_code='0001' connect by prior t.unit_code = t.unit_upcode 分析: ① distinct:去重复值 ② 树形结构查询,这个博客:http://www.cnblog

HeadFirst SQL 读书摘要

数据库都是用 圆柱形表示的. 数据库中包含表 表中包含行和列 行又叫记录record,  列又叫 字段field 创建数据库 create database mypipe_l; 选择数据库 use mypipe_l; 创建表 create table doughnut( name VARCHAR(10), type VARCHAR(6) ); 查看表 desc doughnut; 删除表 drop table doughnut; 插入数据 insert into doughnut (name,