深入分布式缓存读书笔记

缓存为王

为什么使用缓存

提高用户体验

客户端缓存

页面缓存
浏览器缓存
app缓存

网络缓存

反向代理缓存(nginx)

服务端缓存

数据库缓存:

  • mysql的查询缓存

    query_cache_type=0 为off =1为on ,当数据量不频繁更新时候可以使用
    query_cache_size 设置缓存当内存大小
    
  • innodb的缓存性能

    innodb_buffer_pool_size 用来存储innodb索引和数据库内存区域
    

    平台级别缓存

    ehcache :轻量快速、良性伸缩、简洁灵活、标准支持(jsr 107)

    应用级别缓存

    • 使用redis的缓存应用

    • 多级缓存实例

    • 缓存算法

      缓存命中、存储成本、缓存失效、替代策略
      
    • lru(least-recently-used)

      最近请求最少的对象,把数据加入一个链表中,按访问时间排序,发生淘汰的时候,把访问时间最旧的淘汰掉
      浏览器一般都是使用lru作为缓存算法

    • lfu(least-frequentyl-used)

      访问次数最少的缓存
      把数据加入到链表中,按频次排序,一个数据被访问过,把它的频次+1,发生淘汰的时候,把频次低的淘汰掉
      某些数据,只是最开始使用频率比较高,后面都不再使用,这样就会导致这些缓存一只常驻内存

    • fifo

      先进先出,最先使用当缓存会先失效
      
    • random cahe

      随机取

      公有云缓存服务

      动态扩容、
      数据多备份、
      自动容灾、
      成本比较低

分布式系统理论

分布式系统概念

  • 进程与线程
  • 并发
  • 锁(分离锁)
  • 并行 (多cpu)
  • 集群
  • 系统重发与幂等性
  • 硬件异常

    1、服务器宕机
    2、网络异常
    3、磁盘故障
    4、机房级异常
    

分布式系统理论

CAP理论

AP:高可用,众多nosql用的比较多
CA:关系型数据库用的比较多
CP:分布式事物、Zookeeper

CAP三选二原则,CA适用于支付、交易、票务等强一致性的行业,宁愿业务不可用,也不能容忍脏数据
因为,在分布式系统内,P 是必然的发生的,不选 P,一旦发生分区错误,整个分布式系统就完全无法使用了,
这是不符合实际需要的。所以,对于分布式系统,我们只能能考虑当发生分区错误时,如何选择一致性和可用性。
开源的分布式系统往往又被分为 CP 系统和 AP 系统

CP 系统,经典的比如 Zookeeper
AP、 Eureka

为什么cap只能二选一

1:满足C和A,那么P能不能满足呢?
满足C需要所有的服务器的数据要一样,也就是说要实现数据的同步,那么同步要不要时间?肯定是要的,并且机器越多,同步的时间肯定越慢,这里问题就来了,我们同时也满足了A,也就是说,我要同步时间短才行。这样的话,机器就不能太多了,也就是说P是满足不了的
2:满足C和P,那么A能不能满足呢?
满足P需要很多服务器,假设有1000台服务器,同时满足了C,也就是说要保证每台机器的数据都一样,那么同步的时间可就很大,在这种情况下,我们肯定是不能保证用户随时访问每台服务器获取到的数据都是最新的,想要获取最新的,可以,你就等吧,等全部同步完了,你就可以获取到了,但是我们的A要求短时间就可以拿到想要的数据啊,这不就是矛盾了,所以说这里A是满足不了了

3:满足A和P,那么C能不能满足呢?

满足P的话,需要多台服务器,而满足C的话,只有一台服务器才可以满足,这和P矛盾。

BASE

BASE 理论是对 CAP 理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)

分布式系统涉及策略

如何检测你还活着
如何保证高可用
容错处理
重拾机制
负载均衡
  • 心跳检测

    周期性检测心跳机制
    累积性失效检测机制
    
  • 高可用设计

    主备模式
    互备模式
    集群模式
    
  • 容错性

    缓存失效防止雪崩解决方案
    
  • 负载均衡

    轮询、最少连接、ip地址hash、权重
    

分布式系统设计实践

  • 全局ID生成
    uuid、数据库自增生成ID、snowflake算法、数据库+批量生成ID(Leaf-segment)
  • 哈希取模

  • 一致性哈希

    解决哈希取模扩容后数据迁移的影响的范围

  • 数据拆分

手动写缓存