(一) MdbCluster分布式内存数据库——基础架构介绍
 
  这个项目是怎么开始的我已经有些记不清楚了,大概是原来的内存数据库很不好用,一次次地让我们踩坑,我又自以为是地觉得可以做一个更好的出来。自从拥有自己的团队以来,我思考最多的总是如何带着团队做出有意义和有价值的产品,而不是将时间浪费在无谓的琐事上面。分布式内存数据库恰是这样一个具有挑战性,又在我们能力可控范围内的项目。于是我和团队的两个小伙伴利用工作的空隙完成了这个产品。
 
  每次当我想从头开始做一个软件产品的时候,都会想起《人月神话》里面的章节。编程的乐趣是什么,是什么让我们愿意付出大量的时间和脑力去完成一个软件产品?
  “首先是一种创建事物的纯粹快乐。如同小孩在玩泥巴时感到愉快一样,成年人喜欢创建事物,特别是自己进行设计。”——每次看到自己孩子在堆沙堡的时候,我都会想起这句话,很庆幸在这个年纪还能拥有这样的快乐。
  “整个过程体现出魔术般的力量——将相互啮合的零部件组装在一起,看到它们精妙地运行,得到预先所希望的结果。”——完成的项目越来越复杂,当每次跨过这些难度门槛的时候,也就意味着从此可以驾驭这类等级的产品了。
  “程序员,就像诗人一样,几乎仅仅工作在单纯的思考中。程序员凭空地运用自己的想象,来建造自己的城堡。”——随着产品复杂的提升,设计在我工作中的占比也越来越多,大脑也逐渐习惯这样的工作方式。尽管也还偶尔做一些核心模块的编码,沉浸其中时也能感到时间飞逝。
 
  “数据库”是一个庞大的产品,更何况是分布式内存数据库。设计的时候是如何考虑做减法的?首先,我们用fastdb做基层内存数据库,这不是我们要解决的重点。这方面业界已经很成熟了,包括timesten, altibase等等。其次,在业务层面,我们不需要实现所有数据库的复杂操作,对于内存数据库的使用,为了追求性能,一直推荐进行单表操作的,从而暂时避开了复杂的多表关联问题。最后,我们集中力量解决的是节点分片、节点主备、节点在线扩容缩容、节点故障检测、故障节点恢复、节点状态管理等等分布式的问题。
 
  一、 单体结构
 
  

  根据最初的设计方案,在实现的时候我们进一步做了减法。

  MdbCluster的服务节点:

  a)MdbAgent负责业务和控制消息的接入、校验、推送。

    b)  MdbRWNode负责管理本地内存数据库,数据同步写入内存,异步写入磁盘。

    MdbCluster的客户端节点:

    a)  MdbClient负责与在App的驱动进行同步交互,并通过http2协议与服务端进行通讯。

  二、主备结构

  在MdbCluster设计之初,打算通过二阶段提交的方式来实现数据一致性。并且设计了复杂的二阶段提交流程,足有三大页的流程图。难点不在于二阶段提交本身,而在于异常发生时,系统如何保证数据不丢失,如何从故障中恢复。虽然看起来设计方案很宏伟,但一点也不优雅,实现起来一定会是个灾难。看到Redis也从低版本的二阶段提交改为高版本的主备模式。我们也修改了最初的设计方案。

  Master节点和Slave节点的MdbRWNode通过异步的方式来同步数据。并且通过心跳的方式来检测对端是否异常。

   a) 当Slave节点异常时,数据同步中断。在Slave节点恢复时,先从自己的数据库文件中恢复数据,再对接Master节点,对中断过程中的数据进行恢复。

   b) 当Master节点异常时,MDB2检测到MDB1故障,将自己转为Master节点,承担业务消息。当MDB1恢复时,先从自己的数据库文件中恢复数据,再对接Master节点,对中断过程中的数据进行恢复。并做为Slave节点继续工作。

   c) 在做主备切换时,MdbAgent会对MdbClient进行广播通知。

(一) MdbCluster分布式内存数据库——基础架构介绍的更多相关文章

  1. (转)分布式缓存GemFire架构介绍

    1什么是GemFire GemFire是一个位于应用集群和后端数据源之间的高性能.分布式的操作数据(operational data)管理基础架构.它提供了低延迟.高吞吐量的数据共享和事件分发.Gem ...

  2. 分布式缓存GemFire架构介绍

    1什么是GemFire GemFire是一个位于应用集群和后端数据源之间的高性能.分布式的操作数据(operational data)管理基础架构.它提供了低延迟.高吞吐量的数据共享和事件分发.Gem ...

  3. flume1.8 基础架构介绍(一)

    1. 系统要求 1. Java运行环境 -- Java 1.8及以上 2. 内存 -- 足够的内存供配置的sources,channels 或者sinks使用 3. 硬盘空间 -- 足够的硬盘空间供配 ...

  4. ORM,Entity Framework介绍以及其所包含的基础架构介绍

    一:entity framework 6.0 ORM (实体关系模型) O: Domain Object 领域模型 R: Relational Database 关系型数据库 M: Mapping 映 ...

  5. 基础架构之spring cloud基础架构

    这篇文章是给公司设计的微服务基础架构,包括架构设计.部署流程.部署架构.开发Tip等等.这里分享出来,如果对看官们有点用,我就非常的高兴了. 首页 2. 架构设计 3. 部署流程 4. 部署架构 5. ...

  6. AWS EC2+Docker+JMeter构建分布式负载测试基础架构

    目录 概述及范围 前提条件 Part 1: Local setup-本地配置 Part 2: Cloud端基础架构--Infrastructure 总结: 原文链接 @ 概述及范围 本文介绍有关如何使 ...

  7. 深入浅出node.js游戏服务器开发1——基础架构与框架介绍

    2013年04月19日 14:09:37 MJiao 阅读数:4614   深入浅出node.js游戏服务器开发1——基础架构与框架介绍   游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...

  8. MemSQL分布式架构介绍(一)

    最近在了解MemSQL架构,看了些官方文档,在这里做个记录,原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ ...

  9. MemSQL分布式架构介绍(二)

    接上次的MemSQL分布式架构介绍(一),原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ 首先上张图,是我 ...

  10. LYNC2013介绍和基础架构准备角色

    LYNC2013部署系列PART1:LYNC2013介绍和基础架构准备 前言:LYNC 2013发布已经很久了,本人一直在进行相关的学习和测试,在有限的资源条件下,把能够模拟出来的角色进行了安装部署, ...

随机推荐

  1. for in 和 for of 的区别和v-for指令的三种使用方法

    for...in 循环:只能获得对象的键名,不能获得键值 for...of 循环:允许遍历获得键值 var arr = ['red', 'green', 'blue'] for(let item in ...

  2. 嵌入式-C语言基础:字符串拼接函数strcat

    #include<stdio.h> #include <string.h> //实现字符串拼接 char * mystrcat(char * dest,char * src) ...

  3. 腾讯会议如何在Linux下的安装与使用

    腾讯会议官网https://meeting.tencent.com/download?mfrom=OfficialIndex_TopBanner1_Download下载 腾讯会议官网只提供了deb版的 ...

  4. FCOS论文复现:通用物体检测算法

    摘要:本案例代码是FCOS论文复现的体验案例,此模型为FCOS论文中所提出算法在ModelArts + PyTorch框架下的实现.本代码支持FCOS + ResNet-101在MS-COCO数据集上 ...

  5. Qt_CLion

    目录 安装Qt和CLion 配置 CLion配置Qt的资源文件系统 在项目根文件夹下创建一个资源文件夹 在项目根目录下创建一个qrc文件 安装Qt和CLion 相关的安装网上有很多教程,安装步骤这里不 ...

  6. 【每日一题】【判断栈是否为空的方法】2022年1月9日-NC76 用两个栈实现队列的出队入队【入队简单】

    描述用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能. 队列中的元素为int类型.保证操作合法,即保证pop操作时队列内已有元素 ...

  7. 猿人学web爬虫攻防大战

    这里有1.2.3.4.12.13.15题 1.第一题 import execjs import requests def get_response(): js_code = ""& ...

  8. Kubernetes(k8s)存储管理之数据卷volumes(一):volumes的引入和emptyDir数据卷

    目录 一.系统环境 二.前言 三.Docker数据卷volumes 四.Kubernetes 数据卷volumes 4.1 有状态容器和无状态容器 4.2 Kubernetes 数据卷volumes解 ...

  9. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(36)-掌握Fiddler中Fiddler Script用法,你会有多牛逼-上篇

    1.简介 Fiddler是一款强大的HTTP抓包工具,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有 ...

  10. Windows关闭网络防火墙教程

    Win10操作系统 1. 打开控制面板,点击"系统和安全" 2. 点击"Windows Defender 防火墙" 3. 点击"启用或关闭Window ...