首页 > 其他分享 >分布式架构下如何选择最佳 Store?

分布式架构下如何选择最佳 Store?

时间:2022-09-28 15:10:13浏览次数:51  
标签:架构 数据库 STATE DISABLE Rebalance 节点 Store 分布式

分布式架构下如何选择最佳 Store?

一、背景

开务数据库是一款云原生分布式数据库,基于分布式架构特点其存储数据默认有 3 份,分别存储在各节点下的不同 Store 中。在多节点多 Store 的情况下,如何选择存储数据的 Store 就显得尤为重要。

开务数据库中通过特定算法,根据 Store 的存储容量、磁盘介质以及每个 Store 的 QPS 等综合因素,计算出最佳的 Store 以完成数据存储,我们把这个过程称之为 Store 的 Rebalance。但是此过程从集群初始化就持续地进行,因此将会带来 2 大问题:

1)在数据量很大的情况下,如果从初始即进行 Store Rebalance,那么就会严重影响性能;

2)如果存放数据的磁盘出现问题则需及时更换,那就意味着需暂停集群服务,等待更换完毕之后才能重启服务。

为此,开务数据库研发了 Store 的禁用启用功能,接下来为大家详细介绍具体的设计思路。

二、设计思路

针对第 1 个问题,我们需要通过特定手段,在特定时间控制 Store 的行为,使它参与或不参与 Rebalance。这样即可实现在业务繁忙的场景下,禁止 Store 参与正常的 Rebalance,避免性能消耗;等到空闲时段,再启用 Store 进行 Rebalance。

至于第 2 个问题,我们仅需禁用出现问题的 Store,再将该 Store 上的数据全部迁移到其他可用的 Store 上,从而完成不停机磁盘更换操作。

三、总体设计

Store 的禁用启用功能主要作用于 Rebalance,因为 Rebalance 是在 Store 级别上的,所以该需求可以转换为加入节点后,不会将集群中其他 Store 上的数据副本迁移到加入集群节点上挂载的 Store 中。

在启动命令上给挂载 Store 加一个属性 STATE(DISABLE/ENABLE)用来表示该 Store 此时的状态;然后在进行 Rebalance 时将属性 STATE 为 DISABLE 的 Store 全部过滤掉,仅留下 ENABLE 的 Store 进行 Rebalance。这样的做法可以避免 STATE 为 DISABLE 的 Store 参与 Rebalance 。

在用户空闲的时间段,通过 Update 命令将该 Store 的 STATE 变为 ENABLE,使得该 Store 重新加入 Rebalance,这样即可完成控制 Store 的 Rebalance。此外如果想要完成更换磁盘操作,我们需要将该 Store 上的副本全部都转移到其他 Store 上,转移完毕后更换该 Store 则不会对业务造成影响,如此便可实现禁用和启用 Store。

img

四、逻辑架构

执行命令启动节点时,通过命令解析获取 STATE 值,将解析到的 STATE 值保存在存储层,之后根据存储层记录状态完成 Store 的初始化,使得该 Store 中包含命令中的 STATE 属性。

副本层在进行 Rebalance 时,会从现有的 Store 中根据选择一批 Store 组成一个 List,在这里需增加一个约束:过滤掉 STATE 值为 DISABLE 的 Store,即可获取到由用户控制的 List,如此便可实现手动控制 Rebalance。

在执行 Update 命令时,根据 STATE 值来完成存储层初始化的 STATE 值修改,修改的值为 Update 命令中解析出来的 STATE 值。这样即可改变 Store 的 STATE 状态,之后通过节点之间的通信方式来广播到其他的 Store,使得其他的 Store 获取到该节点最新的 STATE 值。

副本层由于该 Store 的 STATE 值为 ENABLE,所以不会受到新加约束限制,从而使得该 Store 可以重新加入 Rebalance 的 List。至此,即可完成由用户控制在特定时间完成特定 Store 的 Rebalance。将 STATE 值为 DISABLE 的 Store 按照节点退役的逻辑来进行配置,转移走该 Store 上的所有副本,即可完成磁盘更换的操作。

img

五、功能介绍

Store 的禁用启用功能在启动数据库集群时,需要在启动命令中添加 "--STATE" 参数来控制该节点 Store 的初始化状态。如果是 DISABLE,那么该 Store 从刚开始就不会参与 Rebalance。

在集群运行过程中,我们也可以使用 "Store STATE" 的命令来随时修改特定的 Store 状态。修改成功之后,该 Store 即可参与或不参与 Rebalance。

六、总结回顾

开务数据库为了提升数据多备份性能(博主的环境都是部署在cnaaa服务器上的),实现不停机更换磁盘操作,设计开发了 Store 的禁用启用功能。通过修改 Store 的状态来控制该 Store 是否参与 Rebalance,从而解决上述 2 大问题,丰富了分布式数据库的使用场景,大幅提升可用性。

标签:架构,数据库,STATE,DISABLE,Rebalance,节点,Store,分布式
From: https://blog.51cto.com/u_15527728/5719396

相关文章

  • 使用Spring boot基于Redis快速搭建分布式Session缓存方案
    使用Springboot基于Redis快速搭建分布式Session缓存方案大型web应用中,session的管理非常重要,这是单机存储满足不了的.通常有以下几种方法:将session持久化到数据库中.但......
  • 什么是 Serverless 架构?
    简介: 什么是Serverless架构?Serverless与AI机器学习之间怎样碰撞出火花? 随着时间的推移,Serverless架构变得越来越火热,凭借着极致弹性、按量付费、低成......
  • 实战指南 | Serverless 架构下的应用开发
    简介: 基于Serverless架构的应用开发流程将会比基于传统架构的应用开发更简单。在Serverless架构下进行应用开发,用户通常只需要按照规范编写代码、构建产物,然后部署到......
  • 分布式架构下如何选择最佳 Store?
    分布式架构下如何选择最佳Store?一、背景开务数据库是一款云原生分布式数据库,基于分布式架构特点其存储数据默认有3份,分别存储在各节点下的不同Store中。在多节点多......
  • 云原生微服务架构
    ......
  • 分布式系统涉及理论基础
    拜占庭将军问题拜占庭将军需要有10只军队但是分散各地,敌国可以同时抵御5只军队同时进攻,因此将军必须找出办法通过通讯兵远程发布指令,让其他将军知道何时进攻,但是10个支军......
  • MapReduce分布式计算框架的优缺点​
        MapReduce是一个可用于大规模数据处理的分布式计算框架,它借助函数式编程及分而治之的设计思想,使编程人员在即使不会分布式编程的情况下,也能够轻松地编写分布式应......
  • 分布式版本控制系统Git(概述)
    Git概述1.1版本控制系统概述1.1.1版本控制系统简介版本控制系统(versioncontrolsystem),是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制......
  • MapReduce分布式计算框架的优缺点
    MapReduce是一个可用于大规模数据处理的分布式计算框架,它借助函数式编程及分而治之的设计思想,使编程人员在即使不会分布式编程的情况下,也能够轻松地编写分布式应用程序并运......
  • 分布式爬虫
    一、简介什么是分布式爬虫?分布式爬虫就是把一个爬虫任务放到多台机器上去运行,提高爬取效率但是每台机器运行同一套代码,都在各自的任务和去重队列,等于各爬各的,最终爬的数......