六,软件架构 - 348052148/learnGraph GitHub Wiki
- 一, 系统层面
- 单机模式
- 分布式
- 二,软件层面
- 单体应用
- 面向服务(SOA
- 微服务
- 三,软件架构模式
- 分层模式 (传统的三层架构,现在的领域驱动4层
- 客户端服务端模式
- 主从模式 (数据库软件
- 管道过滤器模式 (编译器
- 代理模式 (消息队列作为代理,mycat作为数据库代理
- 点对点模式 (文件分享网络
- 事件总线模式 (esb
- mvc 模式
- 黑板模式
- 解释器模式
- 四,架构模式
- DCI 是一种特别关注行为的模式(可以对应GoF行为模式),而MVC模式是一种结构性模式
- DDD
- CQES
- ES
- EDA 事件驱动架构
- 五,分布式问题
- 分布式事务(一致性问题 CAP BASE 方案: 两阶段提交,TCC,本地消息,saga。
- 分布式同步(一致性问题
- 分布式锁 (一致性问题的手段 方案: 可能使用zookeeper,redis实现
- 服务注册,服务发现
- 客户端负载均衡(多个服务节点情况下
- 熔断,限流,一般在客户端实现
- 服务降级 基于配置
- 服务监控 zikpen 普利米修斯
- RPC框架
- 传输协议
- 分布式id
- 分布式session
- 服务网关,做一下鉴权,限流的操作
消息队列 AMQP协议
https://blog.csdn.net/weixin_37641832/article/details/83270778
缓存问题
缓存穿透
缓存穿透是指 每次查询一个不存在的数据,都会访问数据库。缓存失去意义
解决方案
- 最为常简的是采用布隆过滤器,将所有可能存在的数据哈希到一个足够发的 bigmap 中,一个一定不存在的数据会被该 bigmap 拦截掉,从而避免对底层存储系统造成查询压力
- 对null 数据也设置一个最长不超过5分钟的缓存
缓存雪崩
缓存雪崩是指,大量缓存key同时过期,或者缓存服务器宕机后key丢失。
解决方案
- 针对1,采用随机过期时间
- 针对2, 限流降级,提前预热数据
缓存并发
缓存并发 是指一个key的访问量很大,key过期会导致同时很多请求进入访问数据库,导致缓存失效 解决方案
- 锁 根据情况 使用分布式锁 还是 本地锁
- 软过期。 比如在数据里存储过期时间,判断这个时间来处理是否过期