Redis Replication 实现原理

    对于 Master/Slave 模式,在我们常用的Mysql中你一定有或多或少的了解,应该知道它的一些价值,比如灾备、读写分离。就灾备一项就足以使我们必须使用它,因为一旦服务器软硬件故障,可能造成数据永不可恢复。你可能会说,可以提前做好数据文件备份,但是要远比修改一个 IP 更加复杂与时间开销更大。在Master/Slave 模式下还可以结合LVS/Keepalived 实现故障自动转移,使其具体业务方无感知。

    在 Redis 2.8 版本之前,Master/Slave 之前只支持全量同步(full resync),从 2.8版本开始支持了部分重同步(partial resynchronization),使得在短暂的网络中断恢复后,不需要进行全量数据同步,而是只同步最近新增的数据即可。那么如何理解这个“短暂”,其实是取决于配置参数与实际场景,下面将带大家一起抽丝剥茧,找出真相。

阅读剩余部分...

11
Dec 2018
AUTHOR WiFeng
CATEGORY Redis
COMMENTS No Comments

Javascript Ajax 跨域之 CORS 实战

众所周知,在javascript中使用ajax请求外部资源时有跨域限制。我们在讲解实战之前有必要搞清楚浏览器为什么要加这个限制,也就是要知其然也需要知其所以然。

不过,我们还应该先了解Cookie,在一个已经登录过的站点,浏览器会保存一个登录凭证,这个凭证就是保存在cookie中的其中一个值。有了登录凭证,在短时间内是不需要重新登录就可以访问该站点上属于用户的任何内容的。当我们登录了一个站点A,上面有一个按钮,其中显示“抽奖”,你也许会去点一下碰碰运气。但是这个抽奖按钮实际执行的动作也许你并不能从页面信息中准确无误的获取到,那如果这个按钮的背后行为是从你的银行账户转出一笔金额到一个盗窃者账户,现在你还敢点那个按钮吗? 

阅读剩余部分...

18
Nov 2018
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

Redis Cluster 实现原理

1. 简介

Redis Cluster 是 Redis 官方提供的集群模式。在Redis 3.0 版本开始支持,是在原有的 Redis 版本中增加了集群相关的实现,是同一个项目。Redis Cluster 方式各个节点其实是一样的,都是Redis节点,本身支持执行Redis的所有命令,也是数据的存储节点,只是额外支持一些 Cluster 命令。但是 Redis Sentinel 模式中,Sentinel 则是一个全新的角色,并不是数据的存储节点,不允许执行常规的 set / get / inc 等操作,主要运用于故障检测、故障发现、故障转移这些场景。

在之前的一篇文章中记录了关于 Redis Cluster 的学习笔记,其中是按照程序执行顺序编排的,也包括了一些细节方面的说明,对于研究 Redis 源码的同学可能有帮助,基本每一小节内容对应源码中的一小段程序。而这篇文章将是以一个使用者的角度去理解 Redis Cluster,所以更加宏观一些,某些细节可能就不会提到。关于细节可以参考:Redis Cluster 学习笔记

阅读剩余部分...

19
Oct 2018
AUTHOR WiFeng
CATEGORY Redis
COMMENTS No Comments

Redis Cluster 学习笔记


  1. 启动节点
  2. 通过命令配置集群(a. 加入节点  b. 分派slot  c. 添加slave)
  3. 接受命令处理
    1. 根据key,转发到不同的节点
    2. 特殊的标记{…},可以分派key到相同的节点,{} 不能在key的结尾。如果有{…} ,hash算法则使用{与}中间的字符串来计算,所以一定要在{}中间有字符,不然所有的key将会分配到一个节点。
    3. 命令中有多个key,如果这些key不在相同的slot(即使在相同的节点也不行),则返回错误(getNodeByQuery)
    4. 根据key获取节点(getNodeByQuery)

阅读剩余部分...

30
Sep 2018
AUTHOR WiFeng
CATEGORY Redis
COMMENTS No Comments

搭建调用链路监控系统

现在微服务非常盛行的年代,在公司内,有各种各样的微服务相关的实践。今天我们不展开微服务具体是什么,只需要了解在一个互联网服务系统内部可能是由N多个子服务组成,每个子服务独立开发、部署、维护,通过API/RPC与其他服务通信,而不是直接共同操作相同的数据库、表来实现数据交互。在这样的架构之下,服务间的调用链路关系可能是这样的:

a -> b -> d -> e
a -> c -> d -> b -> f

以这个单向的调用为例,实际场景可能是更加复杂的网状形式。比如 a 是对用户提供服务,其内部的2个功能分别会有2个不同的调用链路。这时如果 a 检测到一个错误发生,那么怎么确定是 a 自身异常导致的,还是由于上游服务 b/d/e 异常导致的。如果不能很好的、快速的定位最根本的异常产生在哪里,那么势必会影响故障恢复时间,进而影响到服务的可用性。

阅读剩余部分...

5
Jun 2018
AUTHOR WiFeng
CATEGORY Web
COMMENTS 5 Comments

搭建ELK日志监控平台那些事

ELK 是 elasticsearch / logstash / kibana 这三个英文单词的缩写,也即表明,这个技术栈中包含这三个组件,都是一家公司出品(www.elastic.co)。

kibana 负责展示,数据从elasticsearch中获取 
logstash 负责收集并解析日志数据,然后输出指定格式到elasticsearch
elasticsearch 负责保存数据,并提供检索功能。

这些组件可以在具体场景中按需组合使用,也可以单独使用。其中最有名气的当属 elasticsearch,是基于 Lucene 实现的高可用,高性能的搜索服务。现在,众多中大型企业级搜索就是使用的它,值得我们去好好学习一下。

阅读剩余部分...

23
May 2018
AUTHOR WiFeng
CATEGORY Asset
COMMENTS No Comments

Redis Sentinel 高可用原理

现在 B/S C/S 架构的软件系统设计时,我们通常需要把服务端设计为高可用系统,比如 3个9(99.9%),4个9(99.99%),5个9(99.999%)。这是由于随着用户请求量的增加,服务端系统需要处理的事务会增加,进而可能会导致服务端系统无法快速、正确响应用户请求,使得用户体验变得非常糟糕。最终可能会使得用户流失,对广告、会员等这部分收入产生严重影响。另外,Redis作为基础组件,一旦出现故障,可能会使得好多业务出现异常。因此高可用是非常有必要的,也是一个软件开发者应该具备的基本能力之一。

阅读剩余部分...

20
Apr 2018
AUTHOR WiFeng
CATEGORY Redis
COMMENTS 2 Comments

Redis Sentinel 通信流程

准备工作:

1. 配置 master slave 、修改sentinel 配置,如下:
Redis.conf 
monitor <Master1> <host> <port> <quorum> 
monitor <Master2> <host> <port> <quorum>
2. 启动 master / slave 节点,然后再启动 sentinel 节点

阅读剩余部分...

29
Mar 2018
AUTHOR WiFeng
CATEGORY Redis
COMMENTS 2 Comments

Redis RDB 文件存储实现

redis通过把内存数据保存为rdb文件来实现快照,是整个redis内核中不可缺少的一部分,为实现服务高可用提供了强有力的支撑。有以下2点作用:
1. 持久化 (比 aof 恢复速度更快,也占用更小的磁盘空间,因此作为默认的持久化方式)

2. 主从同步 (开启主从后,需要首先把master上的历史数据同步到slave,这时slave就会拉取master的rdb文件,然后解析加载rdb文件到内存)

阅读剩余部分...

25
Jan 2018
AUTHOR WiFeng
CATEGORY C/C++,Redis
COMMENTS No Comments

redis命令汇总

如果图片不清晰,请鼠标右键打开查看原图

19
Dec 2017
AUTHOR WiFeng
CATEGORY Web,Redis
COMMENTS No Comments