六,软件架构 - 348052148/learnGraph GitHub Wiki

  • 一, 系统层面
  1. 单机模式
  2. 分布式
  • 二,软件层面
  1. 单体应用
  2. 面向服务(SOA
  3. 微服务
  • 三,软件架构模式
  1. 分层模式 (传统的三层架构,现在的领域驱动4层
  2. 客户端服务端模式
  3. 主从模式 (数据库软件
  4. 管道过滤器模式 (编译器
  5. 代理模式 (消息队列作为代理,mycat作为数据库代理
  6. 点对点模式 (文件分享网络
  7. 事件总线模式 (esb
  8. mvc 模式
  9. 黑板模式
  10. 解释器模式
  • 四,架构模式
  1. DCI 是一种特别关注行为的模式(可以对应GoF行为模式),而MVC模式是一种结构性模式
  2. DDD
  3. CQES
  4. ES
  5. EDA 事件驱动架构
  • 五,分布式问题
  1. 分布式事务(一致性问题 CAP BASE 方案: 两阶段提交,TCC,本地消息,saga。
  2. 分布式同步(一致性问题
  3. 分布式锁 (一致性问题的手段 方案: 可能使用zookeeper,redis实现
  4. 服务注册,服务发现
  5. 客户端负载均衡(多个服务节点情况下
  6. 熔断,限流,一般在客户端实现
  7. 服务降级 基于配置
  8. 服务监控 zikpen 普利米修斯
  9. RPC框架
  10. 传输协议
  11. 分布式id
  12. 分布式session
  1. 服务网关,做一下鉴权,限流的操作

消息队列 AMQP协议

https://blog.csdn.net/weixin_37641832/article/details/83270778 协议图

缓存问题

缓存穿透

缓存穿透是指 每次查询一个不存在的数据,都会访问数据库。缓存失去意义

解决方案

  1. 最为常简的是采用布隆过滤器,将所有可能存在的数据哈希到一个足够发的 bigmap 中,一个一定不存在的数据会被该 bigmap 拦截掉,从而避免对底层存储系统造成查询压力
  2. 对null 数据也设置一个最长不超过5分钟的缓存

缓存雪崩

缓存雪崩是指,大量缓存key同时过期,或者缓存服务器宕机后key丢失。

解决方案

  1. 针对1,采用随机过期时间
  2. 针对2, 限流降级,提前预热数据

缓存并发

缓存并发 是指一个key的访问量很大,key过期会导致同时很多请求进入访问数据库,导致缓存失效 解决方案

  1. 锁 根据情况 使用分布式锁 还是 本地锁
  2. 软过期。 比如在数据里存储过期时间,判断这个时间来处理是否过期
思考缓存是set 还是淘汰,思考 数据更新时缓存的更新的方案

关于实现程序级别缓存