架构师训练营 - 第⑤周总结

发布于: 2020 年 07 月 08 日
架构师训练营 - 第⑤周总结

分布式缓存架构

缓存概念:存储在计算机上的一个原始数据复制集以便于访问;是介于访问者和原始数据源之间的一种高速存储,当数据需要多次读取时,用于加快读取速度。
无处不在的缓存:
  • cpu缓存

  • 操作系统缓存

  • jvm编译缓存

  • 数据库缓存

  • CDN缓存

  • 分布式数据缓存

  • 应用程序缓存

  • 代理与反向代理缓存

缓存数据结构:hash表
缓存关键指标-缓存命中率,影响命中率的因素:
  • 缓存键集合大小:数量越小效率越高

  • 缓存内存空间大小:内存空间决定了缓存的平均大小和对象数量,能缓存的对象越多命中率越高

  • 缓存对象的生存时间:缓存时间越长,命中率就越高

缓存类型:
  • 代理缓存

  • 反向代理缓存

  • 多层反向代理缓存(前端+后端)

  • 内容分发网络CDN

  • CDN同时配置静态文件和动态内容

  • 通读缓存:缓存服务器返回数据给客户端,并在缓存未命中时获取实际数据

  • 旁路缓存:应用程序先查询缓存服务,未命中时主动连接数据源查询,并写入缓存

  • 浏览器缓存

  • 本地对象缓存&本地对象缓存构建分布式集群

  • 远程分布式对象缓存

  • 分布式对象缓存的一致性hash算法&基于虚拟节点的一致性hash算法

缓存如何显著提升性能:
  • 通常来自内存,比磁盘有更快的响应速度

  • 缓存的数据通常是最终形态,不需要中间计算,减少cpu资源消耗

  • 缓存降低数据库、磁盘、网络的负载压力,使这些设备有更好的IO响应

缓存是系统优化的利器:技术简单、性能提升显著、应用场景丰富

合理使用缓存:
  • 过分依赖缓存反而成为累赘

  • 频繁修改的数据不适合

  • 缓存是宝贵资源,没有访问热点数据不适合

  • 当心数据不一致和脏读

  • 缓存雪崩:缓存服务器崩溃或大量缓存同时失效,数据库不能承受压力而崩溃

  • 缓存预热:缓存中放置的是热点数据,某些数据最好在系统启动时就全部加载到缓存

  • 缓存穿透:不存在的数据会导致请求落到数据库,可以对这部分数据做一个较短时间的缓存

消息队列与异步架构
  • 同步调用&异步调用

  • 有回调的异步调用、多次异步调用(不阻塞调用方线程)

  • 消息队列构建异步调用框架:生产者、消费者、消息队列

  • 消息队列模型:点对点模型&发布订阅模型

  • 优势

  • 更好的伸缩性

  • 削峰填谷

  • 失败隔离和自我修复

  • 解耦、服务器间的隔离了简化部署和管理

负载均衡
  • http重定向负载均衡(效率低用得少)

  • DNS负载均衡(大厂必备)

  • 反向代理负载均衡

  • IP负载均衡

  • 数据链路层负载均衡

负载均衡算法:
  • 轮询&加权轮询

  • 随机&加权随机

  • 最少连接

  • 源地址散列

应用服务器的session管理
  • session复制(效率低扩展性差)

  • session绑定,基于规则路由到指定服务器

  • 利用cookie记录session

  • session服务器(集中管理,效率高可扩展)

分布式数据库
  • 主从复制&一主多从复制(分摊负载、专机专用、便于冷备、高可用)

  • 主主复制

  • 主主复制的两个库不能并发写入

  • 复制只是增加了数据库的读并发能力,没有增加并写能力和存储能力

  • 更新表结构会导致巨大的同步延迟

  • 数据分片

  • 硬编码实现数据分片

  • 映射表外部存储

  • 挑战

  • 大量额外代码,处理逻辑复杂

  • 无法执行多分片联合查询,无法使用数据库事物

  • 随着数据增长,如何扩展是难题

  • 分布式数据库中间件

用户头像

牛牛

关注

还未添加个人签名 2018.02.27 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - 第⑤周总结