数据节点是数据子系统真正执行数据存储访问的服务集群,是数据子系统中主体,其稳定性和服务性能直接决定数据子系统可用性和响应速度,该部分相对较为复杂,面对诸多不稳定因素,需要在设计阶段就开始考虑各种异常情况和极端情况,以便规避由设计带来的系统天生缺陷和短板,制约数据子系统健壮性进而制约整个通用平台健壮性。本人水平有限,尽力把个人对于该部分的设想描述清楚,让各位读者能通过该篇博客了解作者设想的数据节点是如何工作。并希望对于各位读者能有所启发,如果有感兴趣的同行,或是该方面经验更为丰富的大佬指出错误发起讨论指点一二,让大家一起进步。

1. 数据节点功能

数据节点最主要的就是数据存储访问功能,所有功能都是为了该目的而展开,如同机房多个数据节点共同承载该机房产生数据、同机房间数据节点的数据同步、不同机房间数据节点数据同步、等等都是为了数据能正常存储访问为目的,本节简介数据节点功能如下:

(一)数据建立。数据建立是指数据节点在接收到中控发来的数据建立指令,为接收新数据进行一系列准备工作。

(二)数据销毁。数据销毁是指数据节点在接收到中控发来的数据销毁指令,将指定数据销毁,回收各种资源工作。

(三)数据存储访问。数据存储访问是指数据节点根据系统预定义数据结构将发布数据存储起来,同时根据数据子系统提供的协议对外进行相应的数据服务。相应的数据基础操作如增、删、改、查。通用平台考虑到实际应用场景,设计数据子系统需要提供按机房为单位的多点读写能力。

(四)数据节点间相互配合和自适应。大型系统中因为大量数据或是因为数据节点的存储压力,会出现单进程无法承载数据的情况,通用平台在设计之初就考虑该情况下,数据节点间需要如何进行相互配合和自适应数据分片的情况。这种情况相对较为复杂,数据节点间在确定数据分片后,会将不属于自身的数据转移至适合的数据节点,完成数据分片,降低自身存储压力。数据节点在自身存储压力降低后,预算可以承载某类数据全部压力后,可以进行数据合并处理,数据合并能降低子系统复杂度,和更有利于系统资源回收和调度

(五)数据节点间同步。数据节点间同步是指承载修改数据的数据节点(既承载增,删,改功能),需要负责将该部分变化数据同步给所有承载该数据的数据节点。该数据同步可以利用通信子系统群发功能来完成。

(六)数据节点与数据使用方同步。数据子系统为了快速响应数据变化,降低数据延迟,提供数据订阅功能,再有满足订阅需求数据到来后,可以主动通知订阅数据,降低延迟,同样亦可利用通信子系统群发功能完成。数据节点与数据使用方同步除了数据节点主动发送以外,还提供数据使用方主动发起同步,该两种方式都是以同步为目的,只是发起方不同,不过以数据使用方发起较为妥善也较好处理,但该方法一般采用轮询方式不好掌握同步时间间隔过频对于数据节点有处理压力,间隔过大造成数据延迟高。通用平台采用结合方式来解决,既约定同步信息是单调步长递增,如有异常间隔数据使用方丢弃异常数据,改为请求缺失数据既能解决。

(七)数据持久化。目前设计数据节点暂不对外进行数据持久化,该功能被设计仅为运维子系统提供,用于服务升级和配置文件升级提供磁盘文件持久化。详情见下节。

2. 数据节点的数据存储原则

(一)数据以机房为存储单位,且同一机房内无数据冗余,既同一机房只有一份数据。这么设计是为了降低存储压力和数据同步压力,在以机房为通信单位设计前提下,以机房为存储单位较为符合平台特性,既能保证机房内数据使用方的数据请求和数据同步,又能降低存储压力,还能满足一定情况下容灾的数据恢复,所以通用平台采用以机房为存储单位。

(二)数据分片这种情况在各机房是不对等的,这是因为数据节点存储压力不同造成,单一数据节点情况相对较为简单不做描述,本节仅对数据分片该种复杂情况展开讨论,数据分片必然是多个数据节点共同承载某一个数据,这个时候同一组数据节点中不存在任何一条数据重复,以此来降低数据错误可能性。

(三)数据持久化。目前该功能暂不对外提供,因为一旦放开数据持久化很可能使得磁盘存储空间不够的压力,但是引入数据持久化方案后,能大大提升数据节点的存储能力,可以根据数据访问情况将不常修改的半固化数据进行持久化,以便节省内存空间来容纳其他频繁访问数据,这些方案将来通用平台再行引入进行优化。

3. 容灾

(一)数据节点不使用主从模式或数据持久化模式来进行数据恢复。考虑到本平台是通用平台预估数据量可能会较大,如果采用主从模式,可能会导致数据子系统更加复杂化,如果采用数据持久化模式可能导致磁盘存储压力较大,故通用平台不使用这两种模式容灾。

(二)只读节点数据恢复。只读节点数据恢复较为简单,可以直接从可写数据节点进行数据初始化即可。

(三)读写节点数据恢复。读写节点数据恢复相对较为复杂,因为数据以机房为单位,那么分两部分,外机房以可写数据节点进行数据初始化完成数据恢复。本机房数据不能从外机房进行数据恢复,需要通知所有数据发布者,从发布源进行数据恢复。完成数据初始化后,需要通知各机房本机房数据重新初始化。才能保证数据一致性。考虑到单机房可能存在的数据分片情况,可设计数据发布方根据分片取模方式,只进行符合条件数据的恢复重建,其他数据照常不变,无需再发布,这样能将数据恢复代价将至最低,降低消耗。

(四)数据节点在进行数据初始化完毕后,会将初始化数据作为新添数据发送给数据使用方,以便将容灾过程中产生的变化数据及时刷新使用方。虽然该方案代价较高,但也是不得已而为之。数据节点与数据发布者之间同步信息丢失且无法重构,造成数据恢复后与数据使用方同步信息也无从构造,只能全量初始化数据。

4. 其他

(一)数据分片约定。考虑到大数据量可能单进程无法承载原因,约定数据发布方和数据节点以每条数据Key取模进行数据分片,同样该约定数据使用方也许遵守。数据发布方仅在数据节点需要进行部分数据恢复时遵从该约定即可。如果数据量较大,数据使用方需要进行数据分片时,须遵从该约定。

(二)考虑数据节点存储访问数据特性,会涉及到频繁内存操作,需要建立内存池来降低开销。

(三)数据节点需存储承载数据所有组成节点数据,以便进行数据同步。

数据节点是数据子系统中较为复杂的构件,具体将体现在协议设计部分,需要考虑各种数据同步场景和数据恢复协议,本篇并由于时间关系匆忙编写,仅在设计要点上简略介绍并未深入到协议层,不过想来即便将协议部分给出也很可能没多少人看协议部分,篇幅较长,也较为枯燥。通用平台数据子系统实质是一个简版的分布式云,数据节点复杂部分与分布式中节点一般无二,各位感兴趣同行可以借鉴分布式中数据同步来查看本文缺失或错误之处。本文匆匆而就难免有遗漏,等有时间后续再修改补充。如有感兴趣同行可指点一二,也可发起讨论。

数据代理

数据子系统架构

数据子系统之数据节点相关推荐

  1. LINUX IIO子系统分析之二 IIO子系统相关数据结构分析

    上一章我们简要说明了IIO子系统的架构,本章我们通过数据结构的定义,分析IIO子系统的设计实现,本章的主要内容如下: 一.IIO子系统各数据结构说明 二.数据结构间的关联说明 一.IIO子系统各数据结 ...

  2. 驰骋工作流程引擎,ccflow,如何把子线程的数据汇总到合流节点表单中去?

    为什么80%的码农都做不了架构师?>>>    驰骋工作流程引擎,ccflow,如何把子线程的数据汇总到合流节点表单中去?对于分合流程来说,一般的模式就是分流 – 子线程 – 合流. ...

  3. vue el-tree 同时向后台传递选中和半选节点数据 (回显数据勾选问题已解决)

    vue el-tree 同时向后台传递选中和半选节点数据 (回显数据勾选问题已解决) 参考文章: (1)vue el-tree 同时向后台传递选中和半选节点数据 (回显数据勾选问题已解决) (2)ht ...

  4. AB PLC数据的Node-Red简单数据可视化+MQTT数据云共享之节点分享

    介绍 本文主要介绍Node-Red读取AB PLC 数据并做简单的数据可视化设计以及数据的云端局部共享 . 目的只为分享Node-Red节点及使用. 数据读取及发布配置 本节通过Node-Red节点的 ...

  5. Java中高级核心知识全面解析——Redis(集群【概述{主从复制、哨兵、集群化}、数据分区方案、节点通信机制、数据结构简析】)5

    目录 一.[集群]入门实践教程 1.Redis 集群概述 1)Redis 主从复制 2)Redis 哨兵 3)Redis 集群化 2.主从复制 1)主从复制主要的作用 2)快速体验 ①.第一步:本地启 ...

  6. Hdfs NameNode中数据块、数据节点及副本状态概述

    HDFS集群以Master-Slave模式运行,主要有两类节点:一个Namenode(即Master)和多个Datanode(即Slave). ​ 在hdfs文件系统中,NameNode是HDFS中的 ...

  7. linux怎么跨节点访问数据,Apache Cassandra多节点跨数据中心集群配置以及日常操作...

    Cassandra是去中心化的集群架构,没有传统集群的中心节点,各个节点地位都是平等的,通过Gossip协议维持集群中的节点信息.为了使集群中的各节点在启动时能发现其他节点,需要指定种子节点(seed ...

  8. JS 递归树结构数据查找所有叶子节点

    JS 递归树结构数据查找所有叶子节点 export function getAllLeaf (data) {let result = []function getLeaf (data) {data.f ...

  9. 震惊!这篇文章解读数据仓库、数据湖、数据中台等概念,竟然写了4万字!

    点击上方 "zhisheng"关注, 星标或置顶一起成长 Flink 从入门到精通 系列文章 如今,随着诸如互联网以及物联网等技术的不断发展,越来越多的数据被生产出来-据统计,每天 ...

最新文章

  1. linux 软件 web管理系统,如何快速安装Webmin(linux系统web管理配置工具)
  2. PHP文件上传,下载,Sql工具类!
  3. 恢复VMware vSphere已孤立的虚拟机
  4. idea 项目编译不成功-循环依赖的问题
  5. 重磅邀请函来了!首届腾讯云加社区开发者大会免费报名!
  6. Spring Web-Flux – Cassandra后端的功能样式
  7. LeetCode 1816. 截断句子
  8. win11系统如何绕过tpm检测进行安装 Windows11绕过tpm安装的解决方法
  9. 偏微分方程数值解---学习总结
  10. 通过获取图片中的EXIF信息来定位拍摄地点
  11. MPU和MMU、MPU和MCU的区别
  12. 从财富排行到金融科技
  13. android app 清理缓存图片,支付宝APP怎么清理缓存 支付宝安卓版缓存清理方法
  14. 如何修改mc服务器密码是什么意思,mc服务器密码设置密码
  15. python基础学习_01变量
  16. 维克森林大学计算机科学专业好不好,维克森林大学计算机专业怎么样?
  17. 计算机网络管理设计,计算机网络管理系统设计与应用分析
  18. 利用tkinter设计贷款计算器
  19. Postgresql源码(83)执行器的结果接收系统——DestReceiver
  20. windows电脑微信双开 bat 脚本

热门文章

  1. 面试官把我问懵了....
  2. docker使用宿主机代理
  3. 大数据产业发展的国际经验
  4. php js 宽带测速程序,php+js 宽带测速程序!界面简洁漂亮,超赞!
  5. The goal you specified requires a project to execute but there is no POM in this directory问题解决
  6. 基于JAVA毕业设计的美食网站的设计与实现
  7. A/D与D/A转换芯片PCF8591
  8. 使用Matlab-仿真雷达信号处理系统
  9. 从 Element UI 源码的构建流程看前端 UI 库设计
  10. simulink 储能二次调频AGC,风火水储联合二次调频。风电渗透率25%。储能出力随ACE变化。