架构师训练营 - 第⑤周总结
分布式缓存架构
缓存概念:存储在计算机上的一个原始数据复制集以便于访问;是介于访问者和原始数据源之间的一种高速存储,当数据需要多次读取时,用于加快读取速度。
无处不在的缓存:
cpu缓存
操作系统缓存
jvm编译缓存
数据库缓存
CDN缓存
分布式数据缓存
应用程序缓存
代理与反向代理缓存
缓存数据结构:hash表
缓存关键指标-缓存命中率,影响命中率的因素:
缓存键集合大小:数量越小效率越高
缓存内存空间大小:内存空间决定了缓存的平均大小和对象数量,能缓存的对象越多命中率越高
缓存对象的生存时间:缓存时间越长,命中率就越高
缓存类型:
代理缓存
反向代理缓存
多层反向代理缓存(前端+后端)
内容分发网络CDN
CDN同时配置静态文件和动态内容
通读缓存:缓存服务器返回数据给客户端,并在缓存未命中时获取实际数据
旁路缓存:应用程序先查询缓存服务,未命中时主动连接数据源查询,并写入缓存
浏览器缓存
本地对象缓存&本地对象缓存构建分布式集群
远程分布式对象缓存
分布式对象缓存的一致性hash算法&基于虚拟节点的一致性hash算法
缓存如何显著提升性能:
通常来自内存,比磁盘有更快的响应速度
缓存的数据通常是最终形态,不需要中间计算,减少cpu资源消耗
缓存降低数据库、磁盘、网络的负载压力,使这些设备有更好的IO响应
缓存是系统优化的利器:技术简单、性能提升显著、应用场景丰富
合理使用缓存:
过分依赖缓存反而成为累赘
频繁修改的数据不适合
缓存是宝贵资源,没有访问热点数据不适合
当心数据不一致和脏读
缓存雪崩:缓存服务器崩溃或大量缓存同时失效,数据库不能承受压力而崩溃
缓存预热:缓存中放置的是热点数据,某些数据最好在系统启动时就全部加载到缓存
缓存穿透:不存在的数据会导致请求落到数据库,可以对这部分数据做一个较短时间的缓存
消息队列与异步架构
同步调用&异步调用
有回调的异步调用、多次异步调用(不阻塞调用方线程)
消息队列构建异步调用框架:生产者、消费者、消息队列
消息队列模型:点对点模型&发布订阅模型
优势
更好的伸缩性
削峰填谷
失败隔离和自我修复
解耦、服务器间的隔离了简化部署和管理
负载均衡
http重定向负载均衡(效率低用得少)
DNS负载均衡(大厂必备)
反向代理负载均衡
IP负载均衡
数据链路层负载均衡
负载均衡算法:
轮询&加权轮询
随机&加权随机
最少连接
源地址散列
应用服务器的session管理
session复制(效率低扩展性差)
session绑定,基于规则路由到指定服务器
利用cookie记录session
session服务器(集中管理,效率高可扩展)
分布式数据库
主从复制&一主多从复制(分摊负载、专机专用、便于冷备、高可用)
主主复制
主主复制的两个库不能并发写入
复制只是增加了数据库的读并发能力,没有增加并写能力和存储能力
更新表结构会导致巨大的同步延迟
数据分片
硬编码实现数据分片
映射表外部存储
挑战
大量额外代码,处理逻辑复杂
无法执行多分片联合查询,无法使用数据库事物
随着数据增长,如何扩展是难题
分布式数据库中间件
评论