大型网站技术架构
2019-01-10 16:57:57 0 举报
AI智能生成
大型网站技术架构
作者其他创作
大纲/内容
高性能架构
网站性能测试
Web前端性能优化
浏览器访问优化
减少http请求
使用浏览器缓存
启用压缩
CSS放在页面最上面,JavaScript放在页面最下面
减少Cookie传输
CDN(Content Distribute Network,内容分发网络)加速
反向代理
保护浏览器安全
缓存功能
负载均衡
应用服务器性能优化
分布式缓存
缓存的基本原理
本质是一个内存Hash表
二八定律:80%的访问落在20%的数据上
缓存的合理使用
缓存可用性
缓存预热
缓存穿透
将null值存入redis,设置过期时间
BloomFilter
数据一致性
缓存读写比高的数据
热点数据
分布式缓存架构
缓存部署在多个服务器组成的集群中,以集群方式提供缓存服务
架构方式
需要更新同步的分布式缓存,如 JBoss Cache
不互相通信的分布式缓存,如 Memcached
Memcached
通信协议简单
TCP(UDP也支持)通讯
客服端程序丰富
网络通信性能高
Memcached服务端通信模块基于Libevent,一个支持事件触发的网络通信程序库
内存管理高效
固定空间分配
将内存空间分围一组slab,每个slab里又包含一组chunk,同一个slab里的每一个chunk的大小都是固定的,
拥有相同大小chunk的slab被组织在一起叫做slab_class
拥有相同大小chunk的slab被组织在一起叫做slab_class
存储数据时根据数据的Size大小,寻找一个大于Size的最小chunk将数据写入
避免了内存碎片管理的问题,内存的分配和释放都是一chunk为单位的
会带来内存浪费的问题
LRU,最近最久未访问算法
服务器集群架构互不通信
一致性Hash算法
Redis
持久化
rdb
aof
异步操作
消息队列
削峰作用
使用集群
使用负载均衡技术为一个应用构建一个有多台服务器组成的服务器集群
子主题
代码优化
多线程
使用多线程的主要原因
IO阻塞
多CPU
解决线程安全的手段
将对象设计为无状态对象
使用局部对象
并发访问资源时使用锁
资源复用
单例
对象池
数据结构
垃圾回收
存储性能优化
机械硬盘 VS 固态硬盘
B+树 VS LSM树
RAID VS HDFS
高可用架构
网站可用性的度量与考核
网站可用性度量
网站可用性考核
高可用的网站架构
分层架构模型
应用层
服务层
数据层
高可用的应用
通过负载均衡进行无状态服务的失效转移
应用服务器集群的Session管理
Session复制
Session绑定
Session服务器
利用Cookie记录Session
高可用的服务
分级管理
超时设置
异步调用
服务降级
拒绝服务
关闭功能
服务限流
信号量(Semaphore)
令牌桶(RateLimiter)
Redis
服务熔断
幂等性设计
在服务层保证服务重复调用和调用一次产生的结果相同
脑裂
如何防止HA集群脑裂
仲裁
当两个节点出现分歧时,由第3方的仲裁者决定听谁的。这个仲裁者,可能是一个锁服务,一个共享盘或者其它什么东西。
fencing
当不能确定某个节点的状态时,通过fencing把对方干掉,确保共享资源被完全释放,前提是必须要有可靠的fence设备
集群容错
Failover
失败自动切换,当出现失败,重试其它服务器
失败自动切换,当出现失败,重试其它服务器
通常用于读操作,但重试会带来更长延迟
Failfast
快速失败,只发起一次调用,失败立即报错
快速失败,只发起一次调用,失败立即报错
通常用于非幂等性的写操作,比如新增记录
Failsafe
失败安全,出现异常时,直接忽略
失败安全,出现异常时,直接忽略
通常用于写入审计日志等操作
Failback
失败自动恢复,后台记录失败请求,定时重发
失败自动恢复,后台记录失败请求,定时重发
通常用于消息通知操作
Forking
并行调用多个服务器,只要一个成功即返回
并行调用多个服务器,只要一个成功即返回
通常用于实时性要求较高的读操作,但需要浪费更多服务资源
Broadcast
广播调用所有提供者,逐个调用,任意一台报错则报错
广播调用所有提供者,逐个调用,任意一台报错则报错
通常用于通知所有提供者更新缓存或日志等本地资源信息
高可用的数据
CAP原理
指标
数据持久性
保证数据可持久存储
数据一致性
Consistency
Consistency
所有应用程序都能访问得到相同的数据
数据强一致
数据用户一致
数据最终一致
数据可访问性
Availability
Availability
任何时候、任何应用程序都可以读写访问
分区耐受性
Partition Tolerance
Partition Tolerance
系统可以跨网络分区线性伸缩
含义
一个提供数据服务的存储系统无法同事满足数据一致性、数据可访问性、分区耐受性这三个条件
BASE原理
基本可用(Basically Available)
软状态( Soft State)
最终一致性( Eventual Consistency)
分布式锁
Memcached
add
Redis
高可用分布式锁RedLock
SET <KEY> NX EX
Zookeeper
基于异常(使用临时节点)
基于相互监听(使用临时带序号节点)
分布式事务
seata
TC - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM - 资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
Atomikos
JTA(Java Transaction API,XA的JAVA实现方案)
Atomikos是JTA的实现
单服务,多数据源
2PC 两阶段提交
Two-phase Commit
Two-phase Commit
TCC
Try-Confirm-Cancel
Try-Confirm-Cancel
Try
Confirm
Cancel
开源框架:ByteTCC,TCC-transaction,Himly
数据备份
失效转移
失效确认
访问转移
数据恢复
高可用网站的软件质量保证
网站发布
自动化测试
预发布验证
代码控制
自动化发布
灰度发布
上线部署方案
蓝绿部署
金丝雀发布(灰度发布)
AB测试
网站运行监控
监控数据采集
监控管理
伸缩性
网站架构的
伸缩性设计
伸缩性设计
不通功能进行物理分离实现伸缩
纵向分离(分层后分离)
横向分离(业务分割后分离)
单一功能通过集群规模实现伸缩
应用服务器集群的
伸缩性设计
伸缩性设计
HTTP重定向负载均衡
DNS域名解析负载均衡
反向代理负载均衡
IP负载均衡
数据链路层负载均衡
负载均衡算法
轮询(Round Robin,RR)
加权轮询(Weighted Round Robin ,WRR)
随机(Random)
最少链接(Least Connections)
源地址散列(Source Hashing)
分布式缓存的集群的
伸缩性设计
伸缩性设计
Memcached分布式缓存集群的访问模型
Memcached分布式缓存集群的伸缩性挑战
分布式缓存的一致性Hash算法
数据存储服务器集群的
伸缩新设计
伸缩新设计
关系数据库集群的伸缩性设计
NoSQL数据库的伸缩性设计
可扩展
构建可扩展的网站架构
利用分布式消息队列降低系统耦合性
事件驱动架构
分布式消息队列
利用分布式服务打造可复用的业务平台
利用开放平台建设网站生态圈
安全架构
网站应用攻击
XSS攻击
注入攻击
CSRF攻击
跨站请求伪造(Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF
是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
网站应用防御
信息加密技术及密钥安全管理
单向散列加密
对称加密
非对称加密
密钥安全管理
认证
Oauth2
OLTU
JWT(JSON Web Token)
0 条评论
下一页