(1)    Master-Slave架构

这个中间件系统的本质是希望能够用分布式的方式来处理一些数据,但是具体的作用涉及到核心技术,这里不能直接说明。

但是他的核心思想,就是把数据分发到很多台机器上来处理,然后需要有一台机器来控制N多台机器的分布式处理,大概如下图所示。

既然是分布式的处理,就肯定涉及到在Master中要维护这个集群的一些核心元数据。

比如说数据的分发处理是如何调度的,处理的具体过程现在什么进度了,还有就是对集群里存放数据进行描述的一些核心元数据。

(2)    异步日志持久化机制

但是这里有一个问题,假如说Master进程重启,或者是突然宕机了,那么内存里的数据就丢失了。所以针对这个问题,既然已经否决掉了基于外部存储来写入元数据,那么这里就可以采取异步持久化日志的机制,来通过异步化的方式把元数据的更新日志写入磁盘文件。

每次Master收到一个请求,在内存里更新元数据之后,就需要生成一条元数据的更新日志,把这个更新日志需要写入到一个内存缓冲里去。

然后等内存缓冲满了之后,由一个后台线程把这里的数据刷新到磁盘上去

(3)    检查点机制:定时持久化全量数据

每隔一段时间,就需要开启一个后台线程,把内存里的全部核心元数据序列化后写入磁盘上的元数据文件,作为这个时间的一个快照文件,同时清空掉日志文件,这个叫做检查点操作。

下次重启,只要把元数据文件读取出来直接反序列化后方入内存,然后把上次检查点之后的变更日志从日志文件里读出来回放到内存里,就可以恢复出来完整的元数据了。

这种方式,可以让Master重启很快,因为大部分数据都是在检查点写入的那个元数据文件里。

《【架构设计之道】这一波优雅的操作,会把你的中间件系统架构带到另一个Level》阅读笔记的更多相关文章

  1. 阅读《RobHess的SIFT源码分析:综述》笔记

    今天总算是机缘巧合的找到了照样一篇纲要性质的文章. 如是能早一些找到就好了.不过“在你认为为时已晚的时候,其实还为时未晚”倒是也能聊以自慰,不过不能经常这样迷惑自己,毕竟我需要开始跑了! 就照着这个大 ...

  2. RobHess的SIFT源码分析:imgfeatures.h和imgfeatures.c文件

    SIFT源码分析系列文章的索引在这里:RobHess的SIFT源码分析:综述 imgfeatures.h中有SIFT特征点结构struct feature的定义,除此之外还有一些特征点的导入导出以及特 ...

  3. RobHess的SIFT源码分析:综述

    最初的目的是想做全景图像拼接,一开始找了OpenCV中自带的全景拼接的样例,用的是Stitcher类,可以很方便的实现全景拼接,而且效果很好,但是不利于做深入研究. 使用OpenCV中自带的Stitc ...

  4. 阅读《RobHess的SIFT源码分析:综述》笔记2

    今天开始磕代码部分. part1: 1. sift特征提取. img1_Feat = cvCloneImage(img1);//复制图1,深拷贝,用来画特征点 img2_Feat = cvCloneI ...

  5. element-ui button组件 radio组件源码分析整理笔记(一)

    Button组件 button.vue <template> <button class="el-button" @click="handleClick ...

  6. element-ui 组件源码分析整理笔记目录

    element-ui button组件 radio组件源码分析整理笔记(一) element-ui switch组件源码分析整理笔记(二) element-ui inputNumber.Card .B ...

  7. element-ui Carousel 走马灯源码分析整理笔记(十一)

    Carousel 走马灯源码分析整理笔记,这篇写的不详细,后面有空补充 main.vue <template> <!--走马灯的最外层包裹div--> <div clas ...

  8. STL源码分析读书笔记--第二章--空间配置器(allocator)

    声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...

  9. element-ui MessageBox组件源码分析整理笔记(十二)

    MessageBox组件源码,有添加部分注释 main.vue <template> <transition name="msgbox-fade"> < ...

  10. element-ui switch组件源码分析整理笔记(二)

    源码如下: <template> <div class="el-switch" :class="{ 'is-disabled': switchDisab ...

随机推荐

  1. python3练习100题——010

    第10天了,今天的题目跟009类似,都比较水,有时间的话再做一道- 链接:http://www.runoob.com/python/python-exercise-example10.html 题目: ...

  2. Vue中自动获取input焦点

    <input v-focus type="text" name="search" ref="input" autofocus v-mo ...

  3. css 单位之px , em , rem

    px : Pixel像素单位.像素是相对显示器分辨率而言.em : 相对长度单位,基准点为父节点字体的大小,如果自身定义了font-size按自身来计算(浏览器默认字体是16px).rem : 相对单 ...

  4. 用eclipse的同一个tomcat启动两个javaweb项目

    1.右键选择 Add and Remove 2.把左边两个项目add到右边 3.完成之后查看eclipse左边的Servers下的server.xml文件,会自动生成两个Context标签,当然你到第 ...

  5. Virtual Judge POJ 1328 Radar Installation

    贪心 #include<algorithm> #include<iostream> #include<cstdio> #include<cmath> u ...

  6. C++11 auto的用法

    参考博客:https://www.cnblogs.com/KunLunSu/p/7861330.html

  7. Iris路由和路由组

    package main import ( "github.com/kataras/iris" "github.com/kataras/iris/context" ...

  8. 【C语言】用C语言输出一个吃豆人

    大圆盘减去扇形和小圆盘: #include <math.h> #include <stdio.h> int main() { double x, y; ; y >= -; ...

  9. dbGet

    dbGet是Innovus/Encounter DBTCL命令的一种.除了dbGet,DBTCL的命令还包括以下几种: 1. dbSet 2. setDbGetMode/getDbGetMode 3. ...

  10. 第二十三篇 玩转数据结构——栈(Stack)

          1.. 栈的特点: 栈也是一种线性结构: 相比数组,栈所对应的操作是数组的子集: 栈只能从一端添加元素,也只能从这一端取出元素,这一端通常称之为"栈顶": 向栈中添加元 ...