![](https://i-blog.csdnimg.cn/blog_migrate/a0aae5bc0c5a89a09908373c734c8254.jpeg)
演化历程
图例可参考:
![](https://i-blog.csdnimg.cn/blog_migrate/87d1e11fdc41497391390f67c123e664.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/3dfe99cd44a68ede9c4b33cec94764ae.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/dad854658a1a8db916269da3c33c0609.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/8b7f1eab3fd45235b45632a36507e03b.jpeg)
演化的价值观
-
大型网站架构的核心价值是随网站所需灵活应对
-
驱动大型网站技术发展的主要力量是网站的业务发展
误区
-
一味追随大公司的解决方案
-
为了技术而技术
-
企图用技术解决所有问题
架构模式 模式的关键在于模式的可重复性
-
分层:横向切分
-
分割:纵向切分
-
分布式:分层和分割的主要目的是为了切分后的模块便于分布式部署。常用方案:
-
分布式应用和服务
-
分布式静态资源
-
分布式数据和存储
-
分布式计算
-
分布式配置,分布式锁,分布式文件,等等
-
-
集群:多台服务器部署相同的应用构成一个集群,通过负载均衡设备共同对外提供服务
-
缓存:将数据放距离计算最近的位置加快处理速度,改善性能第一手段,可以加快访问速度,减小后端负载压力。使用缓存 两个前提条件:1.数据访问热点不均衡;2.数据某时段内有效,不会很快过期
-
CDN
-
反向代理
-
本地缓存
-
分布式缓存
-
核心要素 架构是“最高层次的规划,难以改变的规定”。主要关注五个要素:
-
性能
-
可用性(Availability)
-
伸缩性(Scalability)
-
扩展性(Extensibility)
-
安全性
性能测试方法:
-
性能测试
-
负载测试
-
压力测试
-
稳定性测试
性能优化,根据网站分层架构,可以分为三大类:
-
Web 前端性能优化
-
保护网站安全
-
通过配置缓存功能加速 Web 请求
-
实现负载均衡
-
减少 http 请求
-
使用浏览器缓存
-
启用压缩
-
CSS 放在页面最上面,Java 放在页面最下面
-
减少 Cookie 传输
-
浏览器访问优化
-
CDN 加速:本质是一个缓存,一般缓存静态资源
-
反向代理
-
-
应用服务器性能优化:主要手段有 缓存、集群、异步
-
多线程(设计为无状态,使用局部对象,并发访问资源使用锁)
-
资源复用(单例,对象池)
-
数据结构
-
垃圾回收
-
分布式缓存(网站性能优化第一定律:优化考虑使用缓存优化性能)
-
异步操作(消息队列,削峰作用)
-
使用集群
-
代码优化
-
-
存储服务器性能优化
-
机械硬盘 vs. 固态硬盘
-
B+ 树 vs. LSM 树
-
RAID vs. HDFS
高可用
-
高可用的网站架构:目的是保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问,主要手段数据和服务的冗余备份及失效转移
-
高可用的应用:显著特点是应用的无状态性
-
Session 复制
-
Session 绑定
-
利用 Cookie 记录 Session
-
Session 服务器
-
通过负载均衡进行无状态服务的失效转移
-
应用服务器集群的 Session 管理
-
-
高可用的服务:无状态的服务,可使用类似负载均衡的失效转移策略,此外还有如下策略
-
分级管理
-
超时设置
-
异步调用
-
服务降级
-
幂等性设计
-
-
高可用的数据:主要手段是数据备份和失效转移机制
-
失效确认
-
访问转移
-
数据恢复
-
冷备:缺点是不能保证数据最终一致和数据可用性
-
热备:分为异步热备和同步热备
-
数据一致性(Consisitency)
-
数据可用性(Availibility)
-
分区耐受性(Partition Tolerance)
-
CAP 原理
-
数据备份
-
失效转移:由以下三部分组成
-
-
高可用网站的软件质量保证
-
主干开发、分支发布
-
分支开发、主干发布
-
网站发布
-
自动化测试
-
预发布验证
-
代码控制
-
自动化发布
-
灰度发布
-
-
网站运行监控
-
警报系统
-
失效转移
-
自动优雅降级
-
用户行为日志采集(服务器端和客户端)
-
服务器性能监控
-
运行数据报告
-
监控数据采集
-
监控管理
伸缩性 大型网站的“大型”是指:
-
用户层面:大量用户及大量访问
-
功能方面:功能庞杂,产品众多
-
技术层面:网站需要部署大量的服务器
伸缩性的分为如下几个方面
-
网站架构的伸缩性设计
-
纵向分离(分层后分离)
-
横向分离(业务分割后分离)
-
不同功能进行物理分离实现伸缩
-
单一功能通过集群规模实现伸缩
-
-
应用服务器集群的伸缩性设计
-
轮询(Round Robin, RR)
-
加权轮询(Weighted Round Robin, WRR)
-
随机(Random)
-
最少链接(Least Connections)
-
源地址散列(Source Hashing)
-
HTTP 重定向负载均衡
-
DNS 域名解析负载均衡
-
反向代理负载均衡(在 HTTP 协议层面,应用层负载均衡)
-
IP 负载均衡(在内核进程完成数据分发)
-
数据链路层负载均衡(数据链路层修改 mac 地址,三角传输模式,LVS)
-
负载均衡算法
-
-
分布式缓存集群的伸缩性设计
-
Memcached 客户端(包括 API,路由算法,服务器列表,通信模块)
-
Memcached 服务器集群
-
Memcached 分布式缓存集群的访问模型
-
Memcached 分布式缓存集群的伸缩性挑战
-
分布式缓存的一致性 Hash 算法(一致性 Hash 环,虚拟层)
-
-
数据存储服务集群的伸缩性设计
-
关系数据库集群的伸缩性设计
-
NoSQL 数据库的伸缩性设计
可扩展 系统架构设计层面的“开闭原则”
-
构建可扩展的网站架构
-
利用分布式消息队列降低耦合性
-
事件驱动架构(Event Driven Architecture)
-
分布式消息队列
-
-
利用分布式服务打造可复用的业务平台
-
Web Service 与企业级分布式服务
-
大型网站分布式服务的特点
-
分布式服务框架设计(Thrift, Dubbo)
-
-
可扩展的数据结构(如 ColumnFamily 设计)
-
利用开放平台建设网站生态圈
安全 XSS 攻击和 SQL 注入攻击是构成网站应用攻击最主要的两种手段,此外还包括 CSRF,Session 劫持等手段。-
攻击与防御
-
Error Code
-
HTML 注释
-
文件上传
-
路径遍历
-
表单 Token
-
验证码
-
Referer Check
-
避免被猜到数据库表结构信息
-
消毒
-
参数绑定
-
SQL 注入攻击
-
OS 注入攻击
-
消毒(即对某些 html 危险字符转义)
-
HttpOnly
-
反射型
-
持久型
-
XSS 攻击:跨站点脚本攻击(Cross Site )
-
XSS 防御手段
-
注入攻击
-
注入防御
-
CSRF 攻击:跨站点请求伪造(Cross Site Request Forgery)
-
CSRF 防御:主要手段是识别请求者身份
-
其他攻击和漏洞
-
Web 应用防火墙(ModSecurity)
-
网站安全漏洞扫描
-
-
-
信息过滤与反垃圾
-
文本匹配
-
分类算法
-
黑名单
-
-
-
-
-
-