大型网站技术架构:核心原理与技术分析摘要
本文摘录内容是书上第二章——架构核心要素
##高性能
网站性能测试
所谓网站高性能具体指的是什么?从不同角度来看
用户:涉及客户端服务端的通信时间,服务处理和反馈时间。
开发:程序本身的响应时间,系统吞吐量,并发能力,系统稳定性
运维:基础设施资源利用率
关键指标
响应时间
并发数
吞吐量
性能计数器
(基础设施使用数据)
性能测试方法
性能测试
负载测试
压力测试
稳定性测试
大型网站结构复杂,用户从浏览器发出请求到得到响应,中间经历很多环节。通过完整的性能测试,能够知道网站的性能情况,网站负载能力以及网站的潜在问题,这些问题在高并发高负载下会非常致命。通过性能测试数据,我们能够对自己的网站有一个整体的认识,知道网站的短板,并能够有针对性的改善网站性能。
系统性能优化
web前端性能优化
浏览器访问优化
- 减少http请求次数:合并css,js,和资源文件
- 减少请求数据量:浏览器缓存,前端数据压缩
CDN加速
反向代理
应用服务器性能优化
缓存
-
分布式缓存
合理使用缓存,保证缓存的高可用
使用缓存:缓存预热,防止缓存穿透,防止缓存热点
-
本地缓存
异步操作
使用消息队列将系统解耦,同时在高并发的情况下还可以有削峰的作用
服务器集群
配合适当的负载均衡,服务器集群能够有效的分担高并发请求
#####代码优化
多线程处理,资源复用,优化数据结构,jvm性能调优
存储性能优化
硬件方面,分布式存储系统
高可用
网站可用性指标是一个可以量化的数字,业内通常用多少个9来衡量网站的可用性。
网站不可用时间=故障修复时间点-故障发现时间点
网站可用性=(1-网站不可用时间/年度总时间)X 100%
99%是基本可用,网站年度不可用时间小于88小时;99.9%是高可用,年度不可用时间小于9小时;99.99%是具有自动恢复能力的高可用,年度不可用时间小于53分钟;99.999%是极高可用,不可用时间小于5分钟。
网站可用性指标具体到个人可以用故障分来衡量
分类 | 描述 | 权重 |
---|---|---|
事故级故障 | 严重故障,系统整体不可用 | 100 |
A类故障 | 核心功能不可用,网站访问不顺畅 | 20 |
B类故障 | 非核心功能不可用,或核心功能少部分用户不可用 | 5 |
C类故障 | 其他故障 | 1 |
故障分=故障时长(分钟)X 故障权重
高可用网站架构
系统分层使得不同层的服务高可用方案各不相同同。
应用层集群部署,通过负载均衡器平衡流量,监测到某台服务器不可用,通过移除异常服务器让集群服务整体可用。
服务层与应用层类似,可以通过集群实现高可用。在服务内部可以对服务进行分级管理,高级核心服务考虑与其他服务隔离,服务调用有超时设置,通过异步调用解藕服务之间对依赖,服务熔断降级来保护核心服务,设计服务原则保持服务幂等。
硬件损坏概率比较高,数据层的高可用解决方案就是通过复制,同步备份数据,监测到故障发生时快速切换数据源。
系统升级部署应该实现在保证服务可用的情况下部署,热部署,灰度发布。
CAP原理
CAP原理认为,一个提供数据服务的存储系统无法同时满足 一致性(Consistency)
,可用性(Availibility)
,分区耐受性(Patition Tolerance)
这三个条件。
C 一致性
:所有应用获取的数据都是一样的A 可用性
:任何情况下系统都保持可用P 分区耐受性
:系统可以跨网络分区线性伸缩
大型网站系统中,数据是快速扩张的,线性伸缩能力是强需求,所以 P 是必须保证的,C 和 A 会根据业务的需要有所偏向。
网站监控
网站的高可用是建立在拥有完备的系统监控系统的前提下的,因此 不允许没有监控的系统上线
- 服务器性能监控
服务器硬件指标:cpu,内存,网络,磁盘 - 运行数据监控
服务器gc,分布式缓存命中情况,消息消费积压情况,服务调用链时长 - 日志收集
系统访问日志,业务日志,用户行为日志
监控系统不只是监控,还担负着
- 系统报警
- 失效转移
- 自动化伸缩降级
伸缩性
在不改动系统的软硬件情况下,仅仅通过调整部署服务器的数据就能够调整服务的处理能力。通过拆分网站实现系统伸缩。
纵向拆分
:业务处理流程上不同的部分分离部署。具体应用 可复用业务服务 基础服务 数据库
横向拆分
:不同的业务分离部署
应用服务器集群伸缩设计——负载均衡
http重定向
dns域名解析
反向代理
IP
数据链路层
分布式缓存集群伸缩设计
扩容后一致性hash算法,新加入节点负载不均衡可以通过加入一个虚拟层
关系型数据库集群伸缩设计
数据分片开源产品Amoeba和Cobar
NoSQL数据库的伸缩设计
可扩展
在对系统影响最小的情况下,系统功能可持续扩展和提升的能力。
构建可扩展性的系统在于将复杂的系统切分成若干简单的子模块,也就是模块化。降低模块间的耦合,提高模块的复用性。
使用手段有分布式消息队列,分布式服务。
消息队列
分布式服务
可扩展数据结构,nosql,列存储
开放api构建网站生态圈
安全
网站安全涉及
XSS,跨站点脚本攻击
防治办法:过滤html危险字符,对cookie添加httponly属性,防止xss脚本获取用户cookie
注入攻击,sql注入
防治办法:过滤关键字,使用框架参数绑定
CSRF跨站点请求伪造
防治办法:自定义请求token,验证码,检查请求来源
文件上传
防治办法:设置上传文件白名单,接收文件后修改文件名,使用专门存储
路径遍历
防治方法:js,css单独域名部署,禁用静态URL访问文件,禁用参数传递路径
web应用防火墙
网站漏洞扫描
信息加密技术
单向散列加密
原文 + salt + 单向散列算法 = 密文 ,用于处理校验用户密码
对称加密
cookie加密,通信加密
非对称加密
信息安全传输,数字签名
保存密钥的方法
单独隔离保存,数据分片保存,专人管理