架构要素:
1、性能:响应时间,tps(每秒事务数、吞吐量)、系统性能计数器
优化手段:
浏览器端:浏览器缓存、使用页面压缩、合理布局页面、减少cookie、使用CDN、反向代理,缓存热点文件
服务器端:本地缓存、分布式缓存、异步操作用户请求(使用消息队列)、使用集群
代码端:多线程。改善内存管理
数据库端:索引、缓存、sql优化
2、可用性
主要手段是冗余、应用服务器在多台服务器同时提供访问、数据库存储在多台服务器上互相备份
多台服务器通过负载均衡组成一个集群
3、伸缩性
通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求
数据库很难做到大规模的伸缩性,需要在外部使用解决方案,譬如Nosql
4、扩展性
业务的增加对业务产品的影响,主要手段是事件驱动架构和分布式服务 。
5、安全
不多说。
网站高性能架构
性能测试指标
1、响应时间
2、并发数
3、吞吐量 tps(每秒事务数)、hps(每秒http请求数)、qps(每秒查询数)、
系统吞吐量最先是逐渐增加,到达一个极限后,随着并发数的增加反下降,达到系统崩溃后,系统资源耗尽,吞吐量为0
4、性能计数器
性能测试方法:
性能测试、负载测试、压力测试、稳定性测试
反向代理
具有保护网站安全的作用,代理服务器可以配置缓存功能加速web请求
反向代理可以实现负载均衡,通过负载均衡构建的应用集群,可以提高系统总体处理能力,进而改善网站高并发情况下的性能
应用服务器性能优化(缓存、集群、异步)
1、分布式缓存
缓存的本质是一个内存hash表
网站性能优化第一定律:使用缓存
网站数据访问同城遵循28定律
数据缓存方案:
设置失效时间:这样需要应用容忍一段时间数据不一致。
及时更新缓存:会带来更多的系统开销和事务的一致性。
缓存雪崩:缓存服务器崩溃的时候,数据库承受不了压力而宕机,导致整个网站不可用
通过分布式缓存服务器集群,将缓存数据分布到集群中多台服务器上,可以改善缓存的可用性。
缓存预热:对一些热点数据进行预加载如缓存
缓存穿透:持续高并发请求一个缓存不存在的数据,由于缓存不存在该数据,则所有请求会落到数据库里面,对数据库造成很大的压力。
对于策略,将不存在的资源也进行缓存起来,让其值为null。
2、异步操作
使用消息队列
3、代码优化
多线程
使用多线程原因:IO阻塞与多CPU。
当前线程进行IO的时候会阻塞释放cpu以等待io操作完成,由于io通常会执行比较长的时间,这时CPU就可以调度其他线程进行处理,最大限度使用cpu
启动线程数=【任务执行时间/(任务执行时间-IO等待时间)】*CPU核数
多线程需要注意线程安全的问题
将对象设计为无状态对象
使用局部对象
并发访问资源时使用锁
资源复用:单例和对象池
b+树、lsm树
目前数据库多采用二级索引B+树、树的层次最多三层,因此可能需要5次磁盘访问才能更新一条记录(三次获取索引ID,一次读,一次写)
目前多数nosql都采用lsm树,主要都是在内存中操作
lsm数是N介合并树,数据的操作都会创建一条记录(修改会记录新的数据值,删除会记录一个删除标志)。
网站高可用架构
可用性度量与考核
DNS会被劫持、CND可能挂、网站服务可能宕机、网络交换可能失效、硬盘会损坏、网卡会松掉、机房停电、空调失灵、程序BUG、黑客攻击、促销大访问量、第三方不可用
网站不可用时间(故障时间):故障修复时间-故障发现时间
网站年度可用性指标:(1-王赞不可用时间/年度总时间)
主要手段:数据和服务的冗余备份以及失效转移,服务器宕机则进行切换服务器,磁盘损坏则从备份磁盘读取数据
分层架构模型
应用层:文库、贴吧、知道、百科
服务层:账户服务、session服务、登录服务
数据层:数据库服务、文件服务、缓存服务、搜索服务
应用层通常会通过负载均衡设备将一组服务器组成一个集群共同对外服务,当负载均衡设备通过心跳检测等手段监控到某台服务不可用时,就将他从集群上面提出,从而实现高可用
集群情况下的session管理
session复制,只适合于集群规模比较小的
session绑定,利用hash算法总是将同一ip请求发布到同一台服务器上,但是服务器宕机之后,session就全部不复存在。很少使用
可用cookie记录session:cookie大小受限制,每次请求都发送cookie很影响性能,存在用户禁用cookie的可能性
session服务器,例如:利用session集成单点登录、用户服务。
高可用服务
分级管理:核心应用和业务优先使用更好的硬件
超时设置:由于服务器宕机、线程死锁等原因。
异步调用:快速响应用户请求。
服务降级:拒接服务以及关闭服务。
拒绝服务:拒绝低优先级调用,减少服务器的并发
关闭服务:比如淘宝双11的时候在最繁忙的阶段关闭评价和确认收货
高可用数据
主要手段:数据备份、失效转移
cap原理:为了保证数据的高可用,网站通常会牺牲数据库一致性的这个指标
数据持久性
数据可访问性
数据一致性
数据备份
数据热备分为两种:异步热备和同步热备
关系型受苦备份机制就是master-slave同步机制,通常使用读写分离的方法
失效转移
三部分:失效确认(心跳检测和应用程序访问失败报告)、访问转移、数据恢复
自动化发布
灰度发布
网站运行监控
不运行没有监控的系统上线
网站的伸缩性架构
通过不断的向集群添加服务器来增强整个集群的处理能力。
http重定向负载均衡
用户访问地址之后,负载均衡根据算法获取一台实际物理服务器的地址返回给浏览器,浏览器在请求新的地址。
优点是简单,缺点是浏览器需要两次请求才能完成,性能比较差。
dns域名解析负载均衡
在DNS中配置多个A记录,譬如:www.a.com in a 113.100.80.1 、www.a.com in a 113.100.80.2
利用dsn域名解析负载均衡优点是将负载均衡交给DNS,但是如果某太服务器下线了,就没办法处理,所以很多网站,使用dns解析的时候不是真是服务器地址,而是同样提供负载均衡的内部服务器,这组服务器在进行负载均衡、将请求发送到真是地址里。
反向代理负载均衡
用户访问的时候是反向代理服务器,代理服务器在根据一台服务器获取真实服务器地址,并把请求发送给服务器,处理完之后返回给代理服务器,代理服务器在发送给用户。
又叫应用层负载均衡。,优点是反向代理服务器集成功能,缺点是反向代理服务器是请求的中转站,可能性能存在瓶颈
ip负载均衡
用户请求到底114.111.11.11之后,负载均衡在操作系统内核进程中获取玩过数据包,根据负载均衡算法得到一台真是web服务器ip地址,然后将数据目的ip地址修改为10.0.0.1,不需要通过用户进程处理,处理完之后响应数据包在回到负载均衡,在修改地址为114.11.11.11发送给用户。
数据链路层负载均衡
是指通信协议的数据链路层修改mac地址进行负载均衡的。最常用的负载均衡手段
负载均衡算法
轮询(每天负载数量相同)
加权轮询(在轮询基础上配置权重请求)
随机
最少连接
源地址散列:通过hash地址计算
数据库存储服务器集群的伸缩性
mycat
nosql数据库的伸缩性
网站的可扩展性
待续
网站的安全架构
xss攻击:使用js获取用户的cookie信息,防止用httpony访问cookie
注入攻击:sql注入
csrf 跨站点请求伪造,以合法的用户生进行非法操作,如转账交易,发飙评论。核心是利用浏览器的cookie或者服务器的session。使用表单验证码和token、还有referer
其他攻击
错误回显
html注释
文件上传路径遍历
对称加密:DES算法、RC算法
非对称加密:RSA算法