本文的内容来自阿里巴巴员工李智慧的著作《大型网站技术架构核心原理与案例分析》,这本书很值得一看,故整理之。
一、大型网站的架构演化
1.1大型网站软件的特点
(一)高并发、大流量
(二)高可用:系统7*24小时不间断提供服务
(三)海量数据
(四)用户分布广泛
(五)安全环境恶劣
(六)需求变更快,发布频繁
(七)渐进式发展
1.2大型网站架构演化发展历程
(一)初始阶段的网站架构:例如LAMP架构
(二)应用和数据服务分离:三台服务器:应用服务器,文件服务器和数据库服务器
(三)使用缓存改善网站性能:分为两种,缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器的远程缓存
(四)使用应用服务器集群改善网站并发处理能力:通过负载均衡调度服务器来分发请求到应用服务器集群中的任何一台机器
(五)数据库读写分离:主写从读。
(六)使用反向代理和CDN加速网站响应:这两者基本原理都是缓存。反向代理部署在网站的中心机房,CDN 部署在网络提供商的机房。
(七)使用分布式文件系统和分布式数据库系统:将不同的业务分布,将不同的业务的数据库部署在不同的机器上。
(八)使用NoSQL和搜索引擎: 源自互联网技术,对可伸缩的分布式有更好的支持。
业务拆分:将整个网站通过分而治之的手段将网站业务分成不同的产品线。
(九)分布式服务:比如最近流行的微服务,横行、纵向切片,将服务集群化,相互关联化。
1.3大型网站架构演化的价值观
大型网站架构的核心价值是随网站所需灵活应对
驱动大型网站技术发展的主要力量是网站的业务发展
1.4网站架构设计误区
一味追随大公司的解决方案
为了技术而技术
企图用技术解决所有问题
二、大型网站架构模式
2.1网站架构模式
(一)分层
(二)分割
(三)分布式
1.分布式应用和服务
2.分布式静态资源
3.分布式数据和存储
4.分布式计算
(四)集群
(五)缓存
1.Cdn
2.反向代理
3.本地缓存
4.分布式缓存
(六)异步
1.提供系统可用性
2.加快网站响应速度
3.消除高并发访问高峰
(七)冗余服务器冗余运行,数据库冗余备份
(八)自动化
(九)安全:防止XSS攻击、sql注入
三、大型网站核心架构要素
性能
可用性
伸缩性不断地向服务器集群加服务器
扩张性
四、瞬时响应:网站的高性能架构
4.1网站性能测试
(一)不同视角下网站的性能
1.用户视角网站性能响应时间
2.开发人员视角的网站性能响应时间、并发亮
3.运维人员视角的网站性能资源
(二)性能测试指标
1.响应时间
2.并发数
3.吞吐量qps tps hps
4.性能计数器
(三)性能测试方法
1.性能测试
2.负载测试
3.压力测试
4.稳定性测试
(四)性能测试报告
(五)性能优化策略
1.性能分析
2.性能优化
4.2 web前端性能优化
(一)浏览器访问优化
1.减少http请求
2.使用浏览器缓存
3.启用压缩
4.css放在网页最上面 js最下面
5.减少cookie传输
(二)CDN加速。(content distribute network)
(三)反向代理
4.3应用服务器性能优化
分布式缓存
缓存的基本原理
合理的使用缓存
频繁修改数据
没有热点的访问
数据不一致与脏读
缓存可用性
缓存预热
缓存穿透缓存不存在,直接访问数据库
分布式缓存架构
Memcached
异步操作
使用集群
代码优化
多线程
资源复用
数据结构
垃圾回收
4.4存储性能优化
(一)机械硬盘vs.固态硬盘
(二)B+树 vs. LSM 树
(三)RAID vs. HDFS
五、万无一失:网站的高可用架构
5.1网站可用性的度量和考核
网站可行性度量
网站可用性考核
5.2高可用的网站架构
5.3高可用的应用
(一)通过负载均衡进行无状态服务的失效转移
(二)应用服务器集群的session管理
1.session复制
2.session绑定
3.利用cookie记录 session
4.session服务器
5.4高可用的应用
(一)分级管理
(二)超时设置
(三)异步调用
(四)服务降级随机拒绝访问(twitter)
(五)幂等性设计
5.5高可用的数据
(一)CAP原理
1.数据持久性
2.数据可访问性
3.数据强一致性
4.数据用户一致性
5.数据最终一致性
(二)数据备份
(三)失效转移
1.失效确认
2.访问转移
3.数据恢复
5.6高可用软件质量保障
(一)网站发布
(二)自动化测试
(三)预发布验证
(四)主干开发,分支发布
(五)分支开发,主干发布
(六)自动化发布
(七)灰度发布
5.7网站运行监控
(一)监控数据采集
1.用户行为日志收集
2.服务器性能检测
3.运行数据报告
(二)监控管理
1.系统报警
2.失效转移
3.自动优雅降级
六、永无止尽:网站的伸缩性架构
6.1网站伸缩性设计
不同功能进行物理分离实现伸缩
单一功能通过集群实现伸缩
6.2应用服务器集群伸缩设计
(一)http重定向负载均衡
(二)Dns域名解析负载均衡
(三)反向代理负载均衡
(四)ip负载均衡
(五)数据链路层负载均衡
(六)负载均衡算法
轮询
加权轮询
随机
最少链接
原地址散列
6.3分布式缓存集群的伸缩性设计
Memcached分布式缓存集群的访问模型
Memcached分布式缓存集群的伸缩性挑战
分布式缓存的一致性hash算法
6.4数据存储服务器集群的伸缩性设计
关系数据库集群的伸缩性设计
Nosql数据库的伸缩性设计
七、随机应变:网站的可扩展性架构
7.1构建可扩展性的网站架构
7.2利用分布式消息队列降低系统耦合性
事件驱动架构
分布式消息队列
7.3利用分布式服务打造可复用的业务平台
(一)web service与企业级分布式服务
(二)大型网站分布式服务的需求与特点
1.负载均衡
2.失效转移
3.高效的远程通信
4.整合异构系统
5.对应用最少侵入
6.版本控制
7.实时监控
(三)分布式服务框架设计
7.4可扩展的数据结构
7.5利用开放平台建设网站生态圈
api接口
协议转移
安全
审计
路由
流程
八、固若金汤:网站的安全架构
8.1道高一尺魔高一丈的网站应用攻击与防御
(一)xss攻击
1.消毒
2.httponly
(二)注入攻击
1.开源
2.错误回显
3.盲注
4.消毒
5.参数绑定
(三)csrf攻击
1.表单token
2.验证码
3.referer check
(四)其他攻击和漏洞
1.error code
2.html注释
3.文件上传
4.路径遍历
(五)web应用防火墙
(六)网站安全漏洞扫描
8.2信息加密技术及密钥安全管理
单向散列加密
对称加密
非对称加密
密钥安全管理
8.3信息过滤与反垃圾
文本匹配
分类算法
黑名单
8.4电子商务风险控制
(一)风险
1.账号风险
2.买家风险
3.卖家风险
4.交易风险
(二)风控
1.规则引擎
2.统计模型
网友评论