摘要:
redis 集群方案主要有两类,一是使用类 codis 的架构,按组划分,实例之间互相独立; 另一套是基于官方的 redis cluster 的方案;下面分别聊聊这两种方案; 类 codis 架构 这套架构的特点: 分片算法:基于 slot hash桶; 分片实例之间相互独立,每组 一个master 阅读全文
摘要:
现象 redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请求,导致 redis 短时间不可用; 背景 redis 中的LRU是如何实现的? 1. 当mem_used内存已经超过maxmemory的设定,对于所有的读写请求,都会触发redis.c/freeMe 阅读全文
摘要:
1.12 CLI 的问题 Docker1.12 命令行接口(CLI)有40多个顶级命令,这些命令存在以下问题: 1. 没有归类组织,这让docker 新手很难学习; 2. 有些命令没有提供足够的上下文环境,以至于我们不知道是在操作image 还是container(eg:docker inspect 阅读全文
摘要:
玩转 Ceph 的正确姿势 本文先介绍 Ceph, 然后会聊到一些正确使用 Ceph 的姿势;在集群规模小的时候,Ceph 怎么玩都没问题;但集群大了(到PB级别),这些准则可是保证集群健康运行的不二法门; Ceph 最初的目标是做一个分布式文件系统,直到现在这个目标也不能算完美实现;目前官网上对它 阅读全文
摘要:
Docker 常用命令 操作容器 启动容器 启动容器并启动bash(交互方式): 启动容器以后台方式运行(更通用的方式): ps:这里的 image_name 包含了tag:hello.demo.kdemo:v1.0 附着到容器 附着到正在运行的容器 进入正在运行的容器内部,同时运行bash(比at 阅读全文
摘要:
git常用命令初始化仓库新建仓库 对现有的项目进行管理,进入该项目目录并输入git initps:该命令将创建.git目录,但不会主动将现有项目中的文件纳入管理(需要自行添加);克隆仓库git clone https://github.com/libgit2/libgit2 文件的四种状态未跟踪 untracked 通过以下操作到达未跟踪状态:新建文件 vi aaa从索引区删除文件 git ... 阅读全文
摘要:
从C++到GO 刚开始接触Go语言,看了两本Go语言的书,从c++开发者的角度来看看go语言的新特性,说下自己感触较深的几点: 并发编程 Go语言层面支持协程,将并发业务逻辑从异步转为同步,大幅提高开发效率; 在c++中,做并发编程目前主流的方案是事件驱动(单线程/多线程/多进程模型等),而事件驱动就需要一个IO多路复用的分发器(select/epoll),这样,就造成了业务逻辑的断开... 阅读全文
摘要:
网络编程中的关键问题总结总结下网络编程中关键的细节问题,包含连接建立、连接断开、消息到达、发送消息等等;连接建立包括服务端接受 (accept) 新连接和客户端成功发起 (connect) 连接。 accept接受连接的问题在本文最后会聊到,这里谈谈connect的关键点; 使用非阻塞连接建... 阅读全文
摘要:
Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程 这里的函数式编程的设计以muduo为例进行对比说明; Reactor实现架构对比 面向对象的设计类图如下: 函数式编程以muduo为例,设计类图如下: 面向对象的Reactor方案设计 我们先看看面向对象的设计方案,想想为什么这么做; 阅读全文
摘要:
Redis时延问题分析及应对Redis的事件循环在一个线程中处理,作为一个单线程程序,重要的是要保证事件处理的时延短,这样,事件循环中的后续任务才不会阻塞; 当redis的数据量达到一定级别后(比如20G),阻塞操作对性能的影响尤为严重; 下面我们总结下在redis中有哪些耗时的场景及应对方... 阅读全文