新手向:从不同的角度来详细分析复述

  

最近对华为云分布式缓存产品复述,做了一些研究,于是整理了一些基本的知识拿出来与大家分享,首先跟大家分享的是,如何从不同的角度来详细使用复述。

  

小编将从以下9个角度来进行详细分析,希望可以帮到大家。

  

一、网络模型:

  

复述,使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll, kqueue和选择,对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大,但是复述,也提供了一些简单的计算功能,比如排序,聚合等,对于这些操作,单线程模型实际会严重影响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。

  

二,内存管理:

  

复述,使用现场申请内存的方式来存储数据,并且很少使用空闲列表等方式来优化内存分配,会在一定程度上存在内存碎片,复述,跟据存储命令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致交换也不会剔除任何非临时数据(但会尝试剔除部分临时数据),这点上复述,更适合作为存储而不是缓存。

  

三,数据一致性问题:

  

在一致性问题上,个人感觉复述,没有memcached实现的好,memcached提供了中科院命令,可以保证多个并发访问操作同一份数据的一致性问题。复述,没有提供cas命令,并不能保证这点,不过复述,提供了事务的功能,可以保证一串命令的原子性,中间不会被任何操作打断。

  

四、支持的关键类型:

  

复述,除键/值之外,还支持列表,设置,设置排序,散列等众多数据结构,提供了钥匙进行枚举操作,但不能在线上使用,如果需要枚举线上数据,复述,提供了工具可以直接扫描其转储文件,枚举出所有数据,复述,还同时提供了持久化和复制等功能。

  

五,客户端支持:

  

复述,官方提供了丰富的客户端支持,包括了绝大多数编程语言的客户端,比如我此次测试就选择了官方推荐了Java客户端能。里面提供了丰富的接口,方法使得开发人员无需关系内部的数据分片,读取数据的路由等,只需简单的调用即可,非常方便。

  

六、数据复制:

  

2.8从开始,奴隶会周期性(每秒一次)发起一个Ack确认复制流(复制流)被处理进度,复述,复制工作原理详细过程如下:

  
      <李>   

    如果设置了一个奴隶,无论是第一次连接还是重连到主人,它都会发出一个同步命令;

      李   <李>当主收到同步命令之后,会做两件事:李   
  

)大师执行BGSAVE:后台写数据到磁盘(rdb快照),

  

b)主同时将新收到的写入和修改数据集的命令存入缓冲区(非查询类),

     <李>   

当主人在后台把数据保存到快照文件完成之后,主人会把这个快照文件传送给奴隶,而奴隶则把内存清空后,加载该文件到内存中,

  李   <李>   

而主人也会把此前收集到缓冲区中的命令,通过里德命令协议形式转发给奴隶,奴隶执行这些命令,实现和主人的同步;

  李   <李>   

主/从此后会不断通过异步方式进行命令的同步,达到最终数据的同步一致。

  李   <李>需要注意的是主人和奴隶之间一旦发生重连都会引发全量同步操作。但在2.8之后,也可能是部分同步操作。      

2.8开始,当主人和奴隶之间的连接断开之后,他们之间可以采用持续复制处理方式代替采用全量同步。

  

主端为复制流维护一个内存缓冲区(内存中的待办事项列表),记录最近发送的复制流命令;同时,主人和奴隶之间都维护一个复制偏移量(复制抵消)和当前主人服务器ID (Masterrun ID)。

  

当网络断开,奴隶尝试重连时:

  

。如果MasterID相同(即仍是断网前的硕士服务器),并且从断开时到当前时刻的历史命令依然在主人的内存缓冲区中存在,则主会将缺失的这段时间的所有命令发送给奴隶执行,然后复制工作就可以继续执行了;

  

b。否,则依然需要全量复制操作。

  

七,读写分离:

  

复述,支持读写分离,而且使用简单,只需在配置文件中把复述,读服务器和写服务器进行配置,多个服务器使用逗号分开如下:

  

八、水平动态扩展:

  

历时三年之久,终于等来了期待已由3.0的复述。新版本主要是实现了集群的功能,增删集群节点后会自动的进行数据迁移。实现复述,集群在线重配置的核心就是将槽从一个节点移动到另一个节点的能力,因为一个哈希槽实际上就是一些键的集合,所以复述,集群在重哈希(重复)时真正要做的,就是将一些键从一个节点移动到另一个节点。

新手向:从不同的角度来详细分析复述