大型网站架构要素整理
2016-11-08 00:12:29 251 举报
AI智能生成
架构一个大型网站需要考虑的点和主要手段
作者其他创作
大纲/内容
大型网站架构要素(满足功能需求)
性能
网站的性能测试
不同视角下的网站性能
用户视角的性能
用户看到网页的时间包括三点计算机和网站服务器通信的时间、网站服务器处理的时间、用户计算机浏览器构造请求解析响应数据的时间
优化手段
优化页面HMTL样式
利用浏览器端的并发和异步特性
调整浏览器缓存的策略
使用CDN服务
反向代理
开发人员视角的网站性能
系统本身和相关子系统的性能
响应延迟
系统吞吐量
并发处理能力
系统稳定性
主要优化手段
缓存加速数据读取
使用集群提高吞吐量
使用异步消息加快请求响应以及实现削峰
代码优化手段改善程序性能
运维人员视角的网站性能
关心点
基础设施的性能
资源利用率
主要手段
购买带宽
服务器硬件配置
数据中心网络架构
服务器和网络带宽的资源利用率
性能测试的指标
开发和测试人员视角
性能的指标
响应时间
常用操作时间统计
打开一个网站:几秒
在数据库中查询一条记录:十几毫秒
在机械磁盘一次寻址定位:4毫秒
从机械磁盘顺序读取1MB数据:2毫秒
从SSD磁盘顺序读取1MB数据:0.3毫秒
从远程分布式缓存Redis读取一个数据:0.5毫秒
从内存中读取去1MB数据:十几微秒
java程序本地方法调用:几微妙
网络传输2KB数据:1微妙
模拟请求测试
记录收到响应和发出请求之间的时间差(1w次取平均值)
并发数
网站系统用户数>>网站在线用户数>>网站并发用户数
通过多线程模拟并发用户的办法来测试系统的并发处理能力。为了真实模拟用户行为,测试程序并不是启动多线程然后不停的发送请求而是在两次请求之间加一个随机等待的时间。这个世时间作为思考时间
吞吐量
单位时间内系统处理的请求数量,体现系统的整体处理能力
请求数/秒、页面数/秒、访问人数/天、处理业务数/小时。
TPS(每秒事务数)
HPS(每秒HTTP请求数)
QPS(每秒查询数)
系统吞吐量、系统并发数、系统响应时间
吞吐量是每天通过收费站的车辆数目(可以换算成收费站收取的高速费)并发数是告诉公路上正在行驶的车辆数量,响应时间是车速。车辆很少时,车速很快,收到的费用也相应较少。随着车辆增多,车速收到影响但是告诉费增加如果车辆越来越多。车速变慢了。高速越来越堵收费不增反降。
性能计数器
描述服务器或操作系统性能的一些数据指标
System load
系统负载
当前正在被CPU执行和等待被执行的进行数目总和
load数值等于CPU数时时比较完美的。
高于CPU表示有进程在等待CPU调度系统资源不足
低于CPU存在资源浪费
对象和线程数
CPU使用
磁盘与网络IO指标
性能测试方法
性能测试
负载测试
压力测试
稳定性测试
性能测试报告
性能优化策略
性能分析
排查一个网站的瓶颈和一个程序的性能瓶颈是一致的
检查请求处理的各个环节日志
分析哪个环节响应时间不合理、超过预期
然后检查监控数据,分析影响性能的主要因数内存、磁盘、网络、还是CPU、还是代码问题还是架构设计不合理或者是系统资源不足
性能优化
根据网站的分层有三个方面的优化
web前端性能优化
应用服务器性能优化
存储服务器性能优化
Web前端性能优化
浏览器优化
减少HTTP请求
合并CSS、javascript、合并图片
如果每张图片都有不同的超链接,可以使用CSS偏移量响应鼠标点击操作,构造不同的URL
使用浏览器缓存
将静态资源设置浏览器缓存,通过设置http 头中的cache-control和Expires的属性可以缓存数天
浏览器缓存策略在网站更新静态资源时,应采用逐量更新的方法
比如要更10个图片,不宜一次吧十个图片全部更新。中间设置间隔
启用压缩
gzip压缩80%
但是压缩对服务器和浏览器产生一定的压力。在通信带宽良好而服务器资源不足的情况下需要权衡
css置顶javascript置底
选渲染页面
减少Cookie传输
cookie包含在每个请求中
静态资源使用独立的域名
CDN(Content Distribute NetWork)内容分发网络
CDN本质就是缓存,将数据缓存在离用户最近的地方
CDN服务器,当CDN存在浏览器请求的资源时从CDN直接返回给浏览器,最短返回想用,加快用户访问速度减少数据中心负载压力
CDN一般都是缓存一些静态资源(图片、文件、CSS、javascript)
安全功能
通过配置缓存功能加速web请求,wiki百科、微博缓存在反向代理服务器上。通过内部通知机制通知反向代理缓存失效
负载均衡
应用服务器优化(重点)
分布式缓存
优化网站的第一定律:优先考虑使用缓存优化性能
缓存原理
合理使用缓存
频繁修复的数据读写比2:1
没有热点的访问
数据不一致
缓存可用性
缓存预热LRU(最近最久未使用算法)
缓存穿透
将不存的数据也缓存起来 value 为null就ok 啦
分布式缓存框架
JBOSS cache 需要同步
memcached
简单的通信协议TCP协议UDP也支持
丰富的客户端程序
高性能的网络通信
高效的内存管理
互不通信的服务器集群架构
redis
异步
使用消息队列将调用异步化
kafka
Flume
削峰作用
任何可以晚点做的事情都应该晚点做
使用集群
负载均衡nginx
使用服务器的并发请求数目控制在最佳运行区间,获得最佳的访问请求延迟
代码优化
多线程
从资源利用的角度
IO阻塞
磁盘IO
网络IO
多CPU
启动线程数=【任务执行时间/(任务执行时间-IO等待时间)】*CPU内核数
线程安全的解决方法
将对象设计为无状态的对象
使用局部对象
并发访问资源时使用锁
资源复用
单例(singleton)
对象池(Object Pool)
数据结构
垃圾回收
heap和stack的理解
堆heap 的分代垃圾回收
young generation
old generation
存储服务器的优化
机械硬盘和 固态硬盘
B+树VS LSM树
可用性
网站可用性的度量
可用性度量
网站不可用实际(故障时间)=故障修复时间-故障发现时间
网站年度可用时间=1-网站不可用时间*100%
可用性考核
网站故障权重
事故级别的故障(严重故障网站整体不可用)100
A类故障 (网站访问不流畅或者核心功能不可用)20
B类故障(非核心功能不可用,或者核心功能少数用户不可用)10
C类故障(以上故障以外的)
子主题
伸缩性
扩展性
安全性
0 条评论
回复 删除
下一页