SequoiaDB 系列之四 :架构简析
在本系列的第一篇中,简述了SequoiaDB的安装,以及一个(伪)集群的部署
第二篇和第三篇对SequoiaDB的集群,做了简单地操作。
在本篇中,将对SequoiaDB的架构进行简单的分析。
因为自身能力有限,对于架构这么高大上的主题,不敢轻言。因此本文会摘抄SequoiaDB官方的描述,加上自己的理解,达到共同学习的目的。
在解析之前,先简单叙述一下分布式系统的CAP理论:
C:代表一致性,即在某时刻,分布式系统中节点数据应该是相同的;
A:代表可用性,即有求必应,在分布式系统中某节点后,统一集群内的其它节点依然能处理远程的请求;
P:代表分区容忍性,即系统中某节点无法连接(故障)后,同属集群内的其它节点能继续提供服务。
由于某些原因,例如网络环境恶劣,灾备处理缺乏等,没有任何一个分布式产品全部实现了CAP。故目前的分布式系统,都是在C和A中做出选择。
如果考虑C,就必须对节点做多个备份,在写数据时,同步写其它备份节点,都完成才返回。大并发情况下,无法及时响应,导致不可用。
如果考虑A,就无法保证数据(真的)写入多个备份节点,而访问备节点的请求获取到的数据可能是过期的数据。
SequoiaDB中,在大规模分布式环境中提供了数据最终一致性的保障。并且提供方式,切合用户业务场景,使数据库系统既具备一定的安全性,又具备一定的可用性。
- 写操作只在某几个节点上执行后即返回,其它备节点后台定时向主节点同步,在此模式下,高可用性;
- 写操作在所有节点上执行后再返回,在此模式下,数据更安全,满足一致性。
用户可以权衡自己的应用场景,在创建Collection(集合)的时候,合理设置ReplSize的数值。
SequoiaDB的整体架构图如下:
数据库系统提供一组协调节点,供客户程序访问。可以理解成为数据库的代理。
既然是代理,因此协调节点仅保持客户端的连接,作为请求分发节点将用户请求分发至相应的数据节点,并不保存任何用户数据,。
在协调节点之后,有数据节点组和编目节点组。
编目节点保存系统的元数据信息,像该数据库有几个用户,有几个数据组,数据组中有哪些cs,又有哪些cl,以及创建cl时候的一些选项值等。协调节点通过与编目节点通讯从而了解数据在数据节点中的实际分布。一个或多个编目节点可组成复制组集群。
用户的数据保存在数据节点中。一个或多个数据节点可以构成一个数据节点组(官方称之为分区组,复制组)。数据节点组中每个数据节点都存储该复制组的一份完整数据,又称为复制组实例(或分区组实例);复制组中的数据节点之间采用最终一致性同步数据,不同的复制组中保存的数据无重复。
一个数据节点组,必须有一个主节点,来处理用户的写请求。在考虑更高可用性的场景下,用户的写操作,会先写在主节点上,然后通过同步机制,备节点可以从主节点获取到用户的操作和数据,对节点的数据进行更新和存储。而对于用户的读操作,可以从数据节点上的任何一个节点上得到处理。
其实在集群环境中,所有的读、写等请求,都是从协调(coord)节点分发下来的(当然,直连数据节点组中的节点的情况除外)。上图所描述的,是把协调节点省略掉了(不信?可以看看源码中的pmd模块和rtn模块)。
当集群中,主节点故障了,在集群节点中的通信机制发现之后,会发起选举,从备节点中选择新的主节点,继续接受和处理客户端的请求。关于选举部分,可以通过“二次选举”关键字搜索,维基百科上描述得比较详细 :)
选举是有条件的,在SequoiaDB中,选举的发起,必须是除故障节点外所有节点的数目,大于集群内所有节点数据的一半。可能我描述得不太准确,用公式说明吧。
假设一个集群内,所有节点数是 T(total),故障的节点数是D(Dump),选举的发起条件则是: true == (T-D) > T/2。当然,在正常情况下,集群中的主节点也会自发的在各个节点中进行切换,选择最佳的节点作为集群主节点。
当发现节点故障了,dba对故障进行了处理,并恢复了故障节点。这个时候,恢复的节点会在启动之后,充当从节点,从主节点中拉取数据,做到数据的备份。
图示如下:
SequoiaDB整体架构基于上述机制,但是如何做到,就得慢慢分析其源码。更多简介,请去SequoiaDB官网信息中心获取。
唉,花了好久时间,感觉讲的还是不太清楚,而且只是业务上的架构,并没有涉及技术层面的架构。
在写完上一篇的高级功能之后,才发现居然没有把SequoiaDB的事务处理招牌写上去。
真是败笔啊。
我再找时间,去尝试一下SequoiaDB的事务功能是如何使用的。据说,MongoDB在目前的版本中,也没有提供事务的功能。看样子,其实国产软件,不一定输国外软件。
拙陋之处,敬请海涵。有讲述错误之处,请指出。感谢您能耐心看到这里。
下一篇,可能新写一篇关于SequoiaDB的事务功能的使用介绍,也可能是接着主题,开始分析SequoiaDB的源码部分。敬请关注。
PS:说到国产软件,不禁就会想起给自己和朋友配电脑时候,CPU,硬盘,内存,核心配件,居然都是国外的。龙芯火过一阵之后,也慢慢销匿。在软件产品方面,游戏引擎、数据库等软件,也大都出自国外。在NoSQL慢慢升温的情况下,杀出一个能和MongoDB这个行业老大竞争的SequoiaDB数据库,作为软件从业者,其实心里还是感到很自豪的。由衷希望国内会出现更多的牛逼软件产品,为我国人争光。
=====>THE END<=====
SequoiaDB 系列之四 :架构简析的更多相关文章
- Spring系列.@EnableRedisHttpSession原理简析
在集群系统中,经常会需要将Session进行共享.不然会出现这样一个问题:用户在系统A上登陆以后,假如后续的一些操作被负载均衡到系统B上面,系统B发现本机上没有这个用户的Session,会强制让用户重 ...
- REST架构简析(原论文整理)
0 引言 目前,互联网在社会中扮演的角色越来越重要.通过互联网为广大群众提供服务,也是互联网成功的关键.互联网服务架构目前大多数都是基于REST架构来完成的.REST从它诞生至今,可以说 ...
- muduo库整体架构简析
muduo是一个高质量的Reactor网络库,采用one loop per thread + thread loop架构实现,代码简洁,逻辑清晰,是学习网络编程的很好的典范. muduo的代码分为两部 ...
- Nginx服务器架构简析
一.Nginx的模块化 模块化结构的思想是一个很久的概念,但也正是成熟的思想造就了Nginx的巨大优越性. 我们知道Nginx从总体上来讲是有许多个模块构成的.习惯将Nginx分为5大模块分别为:核心 ...
- 构建 CDN 分发网络架构简析
构建 CDN 分发网络架构 CDN的基本目的:1.通过本地缓存实现网站的访问速度的提升 CDN的关键点:CNAME在域名解析:split智能分发,引流到最近缓存节点
- EasyPlayer RTSP安卓Android播放器架构简析
本文转自EasyDarwin开源团队成员John的博客:http://blog.csdn.net/jyt0551/article/details/73310641 EasyPlayer 是一款小而美的 ...
- Spring系列.AOP原理简析
Spring AOP使用简介 Spring的两大核心功能是IOC和AOP.当我们使用Spring的AOP功能时是很方便的.只需要进行下面的配置即可. @Component @Aspect public ...
- SequoiaDB 系列之六 :源码分析之coord节点
好久不见. 在上一篇SequoiaDB 系列之五 :源码分析之main函数,有讲述进程开始运行时,会根据自身的角色,来初始化不同的CB(控制块,control block). 在之前的一篇Sequ ...
- NETGEAR 系列路由器命令执行漏洞简析
NETGEAR 系列路由器命令执行漏洞简析 2016年12月7日,国外网站exploit-db上爆出一个关于NETGEAR R7000路由器的命令注入漏洞.一时间,各路人马开始忙碌起来.厂商忙于声明和 ...
随机推荐
- 解决ubuntu sudo not found command的问题
将/etc/sudoers 中Defaults env_reset改成Defaults !env_reset取消掉对PATH变量的重置, 然后在/etc/bash.bashrc中最后添加alias s ...
- 用VB实现点名程序
用vb实现点名程序主要是随机变量的产生和数据的读取和存储以及计时器程序的设计,读取的文件命名为data.txt,书写格式为第一行为总人数下面的每行为一个人名,在应用时最好把data文件和程序文件放在一 ...
- selenium验证车贷计算器算法
1.验证页面上的车贷计算器算的结果是否与需求中给的公式结果一致. 页面图片: 代码如下(简单实现,需要优化): package com.test; import java.math.BigDecima ...
- 【转载】jQuery Validate验证框架 + CKEditor 无法验证问题的解决方法
文章1:http://yangzhihuan.iteye.com/blog/717254 CKEDITOR.instances["page_content"].on("i ...
- ifrog-1028 Bob and Alice are playing numbers(trie树)
题目链接: Bob and Alice are playing numbers DESCRIPTION Bob and his girl friend are playing game togethe ...
- PAT 1063 Set Similarity (25)
题意:给你n个集合,k次询问,每次询问求两个集合的(交集)/(并集). 思路:k有2000,集合大小有10000.先将每个集合排序,对每个询问分别设两个指针指向两个集合的头.设a[i]为指针1的值,b ...
- 只有 DBA 才能导入由其他 DBA 导出的文件
两句话搞定问题: grant dba to testuser ; 如果还不行,再执行: alter user testuser default role DBA:
- java 15 - 6 List的方法
List集合的特有功能: A:添加功能 void add(int index,Object element):在指定索引处添加元素 B:获取功能 Object get(int index):获取指定索 ...
- localStroage的用法
Cookie 每个域名存储量比较小(各浏览器不同,大致4K) 所有域名的存储量有限制(各浏览器不同,大致4K) 有个数限制(各浏览器不同) 会随请求发送到服务器 LocalStorage 永久存储 单 ...
- css常用中文字体的英文名称写法
我们知道网页中使用中文字体最好用其对应的英文名称,这样可以避免出现编码问题导致样式中的中文名称出现乱码,从而不识别.下面是网页中常用的中文字体所对应的英文名称.留着,不用翻资料了 中文 英文 宋体 S ...