etcd-raft节点变更

说明 从etcd-raft的架构来看,节点变更功能的实现需要应用和底层核心协议处理层互相配合。客户端发起节点增加或移除的命令,应用获得该请求,并将其转换为一个节点变更指令交给底层的raft协议核心处理层。

etcd-raft日志管理

说明 日志是实现一致性协议的最重要手段。客户对应用发起的状态更新请求首先都会被记录在日志中,待主节点将更新日志在集群多数节点之间完成同步以后,便将该日志项内容在状态机中进行应用,进而便完成了一次客户的更新请求。

最长子串问题

问题描述 Given a string, find the length of the longest substring without repeating characters. Examples: Given “abcabcbb”, the answer is “abc”, which the length is 3. Given “bbbbb”, the answer is “b”, with the length of 1. Given “pwwkew”, the answer is “wke”, with the length of 3. Note that the answer must be a substring, “pwke” is a subsequence and not a substring.

Google File System

写在前面 最近没什么论文好看,于是乎又翻阅起了分布式存储系统的老祖宗GFS。开始愈发理解之前的领导花总说的:常读常新。 之前也阅读过GFS的论文,但总是一带而过,很多问题没有想的特别清楚。于是,趁着这次阅读,将我对于GFS的理解总结下来,希望有所帮助。 再次阅读GFS,给我最大的感触是:许多的问题,只能这么做,而且最好就这么做,也充分体会到了简洁优雅的系统设计给我带来的冲击。

单节点部署试玩Dynomite

说明 dynomite使用netflix开源的一个开源将非分布式的缓存系统改造成分布式的缓存系统,根据亚马逊的Dynamo进行设计,是一个高可用,高性能,支持跨数据中副本的分布式存储代理层。根据Dynomite的拓扑图,我们创建一个单DC单Rack单个服务节点的dynomite存储层,后端存储使用的是redis。

vector clock 向量时钟算法

说明 先说一下需要用到向量时钟的场景。我们在写数据时候,经常希望数据不要存储在单点。如db1,db2都可以同时提供写服务,并且都存有全量数据。而client不管是写哪一个db都不用担心数据写乱问题。但是现实场景中往往会碰到并行同时修改。导致db1和db2数据不一致。于是乎就有人想出一些解决策略。向量时钟算是其中一种。简单易懂。但是并没有彻底解决冲突问题,现实分布式存储补充了很多额外技巧。 这里反向叙述方式, 介绍向量时钟。先举实际例子让读者有个感性认识,然后再说算法规则。

PacificA:微软设计的分布式存储框架

说明 随着信息量的急剧增长,大规模的分布式存储系统变得越来越重要。这些系统往往采用廉价的商用机器或硬件,失效出错成为了分布式存储系统的常态,因此,容错是这类系统实现可用性和可靠性的关键。众所周知已然被证明是正确的的复制协议“大有人在”,但是理论距离现实还是有一定差距的,理论可以不管不顾消息在网络中传递的次数,系统性能,吞吐量,系统设计的难易问题等等,但是真实的系统设计必须以整体的性能为根本依据,因此如何权衡理论和现实系统,设计一个可用,正确,高效的复制协议变得尤为重要。这个难题同样摆在了微软的面前,相比于单纯为了需求而设计一个具体的,特定的复制协议算法,微软高明地选择设计一个简单,实用,具有普适适用性的复制框架,这样不同的策略都可借助于该框架实现,并且有助于不同的策略优劣的比较。

mongodb集群化部署(sharding + replication)

说明 Mongodb是一个非关系型的分布式数据库,它可以通过自身的群集技术组成mongodb群集,进而实现数据库的横向扩展和数据库的高可用功能。Mongodb数据库群集分为Replica Sets(复制集)和Sharding(分片)两个部分。其中Replica Sets实现了mongodb数据库的高可用功能,Sharding分片实现了数据库的横向分布式扩展。在生产环境中搭建mongodb群集时一般都采取了Replica Sets+Sharding的解决方案。