27、缓存:进程内缓存要怎么玩?

  • no27:什么是进程内缓存?好处?不足?

    • 定义

      • 将数据缓存在站点或者服务的进程内,如 map 或 leveldb,可存 json、html、object 等
    • 好处
      • 1.节省内网带宽
      • 2.时延更低
    • 不足:一致性难以保证
  • no27:如何保证进程内缓存的一致性?
    • 方案一,单节点通知其它节点

      • 缺点
        • 同一功能在集群内的多个节点相互耦合在一起,当节点比较多的时候,连接关系会相对比较复杂
    • 方案二,MQ 解耦,通知其它节点
      • 缺点
        • 接触了结点耦合,但引入了 mq,增加系统复杂度
    • 方案三,放弃实时一致性,定期从后端更新数据
      • 缺点
        • 必须一定程度上接受读旧数据
  • no27:使用进程内缓存的场景是哪些?为什么不能频繁使用进程内缓存?
    • 场景

      • 1.只读数据
      • 2.并发极高,透传后端压力极大
      • 3.允许一定程度上数据不一致
    • 原因
      • 违背了「站点无状态、服务无状态」的设计准则

28、缓存:很多时候我们都用错了!

  • no28:缓存有哪 4 种误用的情况?

    • 1.服务与服务之间不要通过缓存传递数据,数据传递使用 MQ 更合适

    • 2.如果缓存挂掉,可能导致雪崩,此时要做高可用缓存,或者水平切分
    • 3.调用方不宜再单独使用缓存存储服务底层的数据,容易出现数据不一致,以及反向依赖.
    • 4.不同服务,缓存实例要做垂直拆分,不宜共用缓存

29、缓存:互联网最佳实践!

  • no29:互联网缓存最佳实践 Cache Aside Pattern 是什么?

    • 读实践

      • 先缓存,命中返回,未命中读数据库,再设置缓存
    • 写实践
      • 淘汰缓存而不是修改缓存,先操作数据库,而不是先淘汰缓存

30、缓存:一致性优化!

  • no30:数据库主从、数据库缓存什么时候会发生数据不一致问题?

    • 数据库主从:写后立即读,短时间内,读旧数据

    • 数据库缓存:写后立即读,短时间内,旧数据入缓存
  • no30:缓存不一致的优化思路和两个方案是什么?
    • 思路:在从库同步完成之后,如果有旧数据入缓存,应该及时把这个旧数据淘汰掉
    • 方案一:二次淘汰法(在从库异步淘汰,或服务中异步淘汰)
      • 通过工具订阅从库的 binlog,如 DTS 或 canal,或自己订阅和分析 binlog,然后从库执行异步淘汰缓存的操作
    • 方案二:为允许 cache miss 的场景,设定超时时间

31、缓存:并发更新的大坑!

  • no31:缓存并发更新获取 token 会出现什么问题?如何解决?

    • 问题

      • 两个并发请求的token申请,可能导致 token 迭代过期了
    • 解决
      • 线上服务 s1 和 s2 只从缓存中读取 token,token 的更新由一个异步的服务 asy-Master 定期更新,避免并发的更新
      • 缺点
        • 读取服务和更新的服务会直接调用缓存实例,如果缓存实例变更,读的服务和写的服务配置同步变更,导致耦合,违背了两个服务不应访问同一服务的通用性原则,同时违反了 cache aside pattern 的淘汰而不是更新缓存的设计准则
      • 数据存储在 DB,缓存应该淘汰,有时候,数据不在数据库,缓存需要更新,如调用第三方服务需要申请 token

32、缓存:究竟选redis,还是memcache?

  • no32,什么时候选 Redis,什么时候选 memcache?

    • 选 Redis

      • 1.复杂数据结构
      • 2.持久化
        • 优点是,缓存挂了再重启,可以快速恢复,不需要 cache 的预热功能
        • 但不建议使用,因为可能会导致缓存和数据库不一致
      • 3.天然高可用,支持主从复制,读写分离,提供了 sentinel 的集群管理工具,能够实现主从服务的监控,故障自动转移,mc 需要二次开发,但绝大多数缓存不需要做高可用
      • 4.存储内容比较大,mc 的 kv 存储的 value 最大只支持 1M
    • 选 memcache
      • 纯 kv
      • 原因:
        • 1.预分配内存池
        • 2.redis 的 VM 机制更慢
        • 3.redis 的 CPU 计算复杂
        • 4.多线程可利用多核
    • 其它
      • 1.redis 源码可读性好
      • 2.redis 和 mc 都需要手动水平切分

《沈剑架构师训练营》第6章 - 缓存架构相关推荐

  1. mysql双主架构沈剑_58 沈剑 - 数据库架构师做什么-58同城数据库架构设计思路

    1.数据库架构师做什么? 58同城数据库架构设计思路 技术中心-沈剑 shenjian@58.com 2.关亍我-@58沈剑 • 前百度高级工程师 • 58同城技术委员会主席,高级架构师 • 58同城 ...

  2. .NET 云原生架构师训练营(设计原则设计模式)--学习笔记

    ▲ 点击上方"DotNet NB"关注公众号 回复"1"获取开发者路线图 学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第180篇原创文章 ...

  3. .NET 云原生架构师训练营(系统架构)--学习笔记

    ▲ 点击上方"DotNet NB"关注公众号 回复"1"获取开发者路线图 学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第176篇原创文章 ...

  4. .NET 云原生架构师训练营(模块二 基础巩固 安全)--学习笔记

    2.8 安全 认证 VS 授权 ASP .NET Core 认证授权中间件 认证 JWT 认证 授权 认证 VS 授权 认证是一个识别用户是谁的过程 授权是一个决定用户可以干什么的过程 401 Una ...

  5. .NET 云原生架构师训练营(模块二 基础巩固 REST RESTful)--学习笔记

    2.3.1 Web API -- REST && RESTful 什么是 REST,什么是 RESTful RESTful API 设计 RESTful 成熟度模型 什么是 REST, ...

  6. .NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记

    2.2.3 核心模块--配置 IConfiguration Options ASP.NET Core 中的配置:https://docs.microsoft.com/zh-cn/aspnet/core ...

  7. .NET 云原生架构师训练营(模块二 基础巩固 日志)--学习笔记

    2.2.2 核心模块--日志 ILogger 的使用 日志的 ID 日志的分类 日志的级别 LoggerProvider 日志的最佳实践 .NET Core 和 ASP.NET Core 中的日志记录 ...

  8. .NET 云原生架构师训练营(模块二 基础巩固 依赖注入)--学习笔记

    2.2.1 核心模块--依赖注入 什么是依赖注入 .NET Core DI 生命周期 服务设计 服务范围检查 ASP.NET Core 依赖注入:https://docs.microsoft.com/ ...

  9. .NET 云原生架构师训练营(模块二 基础巩固 引入)--学习笔记

    2.1 引入 http协议 web server && web application framework .net 与 .net core asp .net core web api ...

  10. 高级架构师_Redis_第3章_Redis持久化

    高级架构师_Redis_第3章_Redis持久化 文章目录 高级架构师_Redis_第3章_Redis持久化 Redis 持久化 1.1 为什么要持久化 1.2 RDB 介绍 1.3 RDB 执行流程 ...

最新文章

  1. SUSE11sp3 perf工具安装过程
  2. Luogu 4721 【模板】分治 FFT
  3. SQL Server游标
  4. git统计当前项目代码行数
  5. Python中的条件判断和循环
  6. docker安装教程
  7. somachineV4.1的注册
  8. java实现微信H5支付和回调的Demo源码
  9. Ubuntu桌面卡死、You are in emergency mode
  10. LeetCode 1091 二进制矩阵中的最短路径问题[BFS 队列] HERODING的LeetCode之路
  11. 库存管理习题:第三章
  12. MPC控制学习笔记——输入权重对系统控制的影响
  13. C/C++_随机数生成函数详解
  14. java的byte和C#的byte的不同之处
  15. 计算机三维机械设计基础答案,电子科技大学《计算机三维艺术设计》rhino答案.doc...
  16. Yocto系列讲解[实战篇]85 - 制作ubi镜像和自动挂载ubifs文件系统
  17. 【硅谷课堂】腾讯云点播WEB上传方式代码(第二种方式)
  18. 全球与中国笔式万用表市场现状及未来发展趋势2022-2028
  19. php 压缩视频大小,视频压缩软件如何压缩视频文件大小
  20. 使用Crypto++5.5.2完成RSA加解密,真正的把公钥放在字符串内,而不是放在文件内

热门文章

  1. python 爬虫 微博 github_GitHub - bubblesran/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...
  2. 滴滴云GPU服务器做深度学习之tensorflow object detect 对象检测 实践
  3. axure变成一个小手了_Axure教程:这几个小技巧你一定要知道
  4. 乐鑫ESP32模组如何查看内部flash芯片支持的工作模式(QIO、QOUT、DIO、DOUT)?
  5. 第三方登陆:微信官方登陆
  6. VBS奇葩操作 “我是猪”
  7. 深入理解AQS之ReentrantReadWriteLock详解
  8. 【windows10】 解决PPT不能播放视频
  9. SwiftUI TextField 限制只能输入数字
  10. offlineimap读取qq邮箱