Kairbon'Blog.

Kairbon'Blog.

还差的远呢!

基于Raft协议的NoSQL数据库的设计和实现(9)-API
基于Raft协议的NoSQL数据库的设计和实现-API1. 设计展示DistKV自己设计并实现了自己的好用的命令行语言,Demo如下: 1. String concept1234567891011distkv-cli > put "k1" "v1"distkv-cli > okdistkv-cli > str.put "k1" "v1" # the same as `put`distkv-cli > okdistkv-cli > get "k1"distk...
基于Raft协议的NoSQL数据库的设计和实现(8)-DRPC
基于Raft协议的NoSQL数据库的设计和实现-DRPC在分布式领域,必不可少的就是关于远程通信,我们通常把这部分组件抽离出来,并且将其称之为RPC。 RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务。 本地过程调用:如果需要将本地student对象的age+1,可以实现一个addAge()方法,将student对象传入,对年龄进行更新之后返回即可,本地方法调用的函数体通过函数指针来指定。 远程过程调用:上述操作的过程中,如果addAge()这个方法在服务端,执行函数的函数体在远程机器上,如何告诉机器需要调用这个方法呢? ...
基于Raft协议的NoSQL数据库的设计和实现(7)-Algorithm和Data struct
基于Raft协议的NoSQL数据库的设计和实现-Algorithm和Data struct1. 整体流程简介那一个KV对是如何写入我们数据库的呢? 首先,客户端需要从dmeta上先获取全局视图,这是因为我们需要通过一致性hash算法确定我们的key要打入或从哪个partition中获取。 1.1 一致性Hash一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。 但现在一致性...
基于Raft协议的NoSQL数据库的设计和实现(6)-MetaServer
基于Raft协议的NoSQL数据库的设计和实现-MetaServer前面我们提到,Meta Server 主要有这几个功能: 管理监控所有节点。 给出交互接口。 那接下来详细介绍一下每个功能是如何实现的。 1. 监控管理Store Server功能我们之所以要管理监控Store Server,是需要管理Store Process 的存亡,动态拉起注册一个节点或者重启原本节点,使得整个系统处于最大可用状态。因此从技术层面需要做两件事情: 1.1 实时获取更新所有节点的存活状态这个功能我将其拆分为三个问题,首先是如何实时更新?这个我们通过心跳机制来做到。在每个节点上,我们需要配置对应Me...
基于Raft协议的NoSQL数据库的设计和实现(5)-Partition和StoreServer
基于Raft协议的NoSQL数据库的设计和实现-Partition和StoreServer在前文中,已经简单介绍了DistKV关于Partition和Store Server的部分内容。而这部分我们主要将我们在CAP方面的妥协。讲述为什么DistKV的一致性强于Redis,性能弱于Redis。 1. 一致性首先在讲一致性前,先说明我们对比的维度。在通常用户使用kv的增删查改过程中,涉及到同时读,先写后读,先读后写,写后写,在分布式环境下,是否能够保持时序一致。 通常情况下,大部分公司使用的是Redis Sentinel 模式,普通的主从备份,订阅发布的模式由于主节点一旦宕机就会导致不可用...
基于Raft协议的NoSQL数据库的设计和实现(4)-Architecture
基于Raft协议的NoSQL数据库的设计和实现-ArchitectureDistKV有着独特的架构,这使得它在一致性方面的能力尤其出色。如图一 图一 DistKV 分布式架构 1. Store Server在DistKV中,将存储的数据分为无数可横向扩展的Partition,每组Partitation内部都保留着与其他Partition不同的数据。因为每个Partition都保存着唯一的一份数据,因此需要一些容灾策略来保证数据的可用性。我们采用一组Raft集群来做到这点,每当有DML来修改此分片的数据状态时,Raft将会把操作同步执行到每一个机器上。 1.1 数据模型因为DistKV...
基于Raft协议的NoSQL数据库的设计和实现(3)-Raft
基于Raft协议的NoSQL数据库的设计和实现-Raft1. Raft的历史所有共识算法都是由一个基本的问题出发的,就是拜占庭将军问题:拜占庭将军问题是一个协议问,拜占庭帝国军队的将军们必须全体一致的决定是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的,并且将军中存在叛徒。叛徒可以任意行动以达到以下目标:欺骗某些将军采取进攻行动;促成一个不是所有将军都同意的决定,如当将军们不希望进攻时促成进攻行动;或者迷惑某些将军,使他们无法做出决定。如果叛徒达到了这些目的之一,则任何攻击行动的结果都是注定要失败的,只有完全达成一致的努力才能获得胜利。 拜占庭假设是对现实世界的模型化,由于硬件错...
基于Raft协议的NoSQL数据库的设计和实现(2)-History
基于Raft协议的NoSQL数据库的设计和实现-History1. 分布式存储系统传统的集中式存储,主要采用存储区域网络(Storage Area Network,简称SAN)和网络附属存储(Network Attached Storage,简称NAS)。但是随着企业业务的高速发展和存储规模的扩大,这些传统集中式存储逐渐暴露出了维护成本高昂,可用性不高,热点等许多问题,除此之外,因为存储是集中式的方式,所以如果宕机,那么依赖它的一切服务都将会出现问题。当然解决这些可用性问题,业界也有许多方式。从硬件层面的有通过使用RAID,ZFS等技术来防止单磁盘故障导致的不可用,还有比如建设专用的存储...
基于Raft协议的NoSQL数据库的设计和实现(1)-简介
基于Raft协议的NoSQL数据库的设计和实现1. 论文简介近些年来,随着大数据业务和巨型Web网站的增多,如何存储和管理各种数据成为了各大公司棘手的难题。为了存储日益增加的用户个人数据和业务数据,能够灵活简单使用,高可用的,使用简便的NoSQL数据库在工业界的使用越来越多。本课题提出了一种基于Raft一致性协议的内存式NoSQL数据库(下称DistKV),并且支持表结构。本课题对当前NoSQL数据库使用上因为架构设计导致的丢数据,不可用,性能瓶颈等问题进行了探讨和优化,并且尤其对于大数据存储场景做出专项优化。 设计实现DistKV的基本架构,考虑横向扩展,表结构存储等基本需求。 设...
avatar
Kairbon
还差的远呢!