分布式 | dble 中分布式时间戳方式的全局序列

3、分布式实时系统中的全局时间管理 本文深入探讨了分布式实时系统中的全局时间管理问题,涵盖了时间与顺序的基本概念、时钟特性、时间标准的选择、时间测量的限制、不同时间基的应用以及内部和外部时钟同步的方法。文章还分析了实际应用中的挑战,如时钟漂移、网络延迟、拜占庭故障等,并探讨了未来发展趋势,如更高精度的时钟技术和智能化的同步算法。通过系统性的分析和总结,为分布式系统设计者提供了理论支持与实践指导。 阅读详情

作者:吴金玲
爱可生 dble 项目团队成员,主要负责 dble 相关的日常测试工作,擅长对 dble 中出现的问题进行排查。热爱测试工作,余生欲将测试工作进行到底。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


dble 中目前有 4 种方式的全局序列,分别是 MySQL offset-step 方式、时间戳方式、分布式时间戳方式、分布式 offset-step 方式全局序列。本文将会从测试的角度简单讲述一下分布式时间戳方式的全局序列的环境搭建及使用。

一、分布式时间戳方式的全局序列简介

此种方式提供一个基于 Zookeeper(以下简称 ZK)的分布式 ID 生成器,可以生成全局唯一的 63 位(首位恒为 0,保证全局序列为正数)二进制 ID。

正数的 63 位模式如下:

其中:

  • a - e 为从高位到低位;

  • a 为线程 id 的低 9 位值;

  • b 为 5 位实例 id 值;
    此值为配置文件 sequence_distributed_conf.properties 中的 INSTANCEID 值或者从 zookeeper 服务器获取的值;

  • c 为 4 位数据中心 id 值;
    即配置文件 sequence_distributed_conf.properties 中的 CLUSTERID 的值;

  • d 为 6 位自增长值;

  • e 为系统当前时间戳的低 39 位值(可以使用 17 年)。

二、搭建使用分布式时间戳方式的全局序列的环境

1. 配置 ZK 环境

搭建 dble & ZK 环境请参见社区的另外一篇文章《利用 ZooKeeper 手工部署 dble 集群环境》。本文中一个 ZK 管理 3 台 dble(dble-1,dble-2,dble-3)构成集群,3 台 dble 的版本均为 2.20.04.0。

2.dble 的配置要求

1)集群中各 dble 的 sequence_distributed_conf.properties 配置

dble-1 中的 sequence_distributed_conf.properties 配置为:

INSTANCEID=zk
CLUSTERID=01
START_TIME=2010-11-04 09:42:54

dble-2 中的 sequence_distributed_conf.properties 配置为:

INSTANCEID=zk
CLUSTERID=02
START_TIME=2010-11-04 09:42:54

dble-3 中的 sequence_distributed_conf.properties 配置为:

INSTANCEID=zk
CLUSTERID=03
START_TIME=2010-11-04 09:42:54

sequence_distributed_conf.properties 中:

INSTANCEID:指定实例 ID 值,可以为‘zk’或者 n(n 为区间 [0,31] 中的一个整数)。如果配成 zk,则序列的维护(主要是 INSTANCEID 值的维护)用 zookeeper 的临时自增节点来维持。每次生成全局序列时,向 zk 申请一个临时自增节点,通过计算自增节点数 %32 获取 INSTANCEID。如果 INSTANCEID 值不为’zk’, 序列的维护仅依赖于单实例(主要是 INSTANCEID 值的维护),此时序列类似于时间戳方式。

CLUSTERID:指定组 ID 值,可以为 m(m 为区间 [0, 15] 中的一个整数)。

START_TIME:指定开始时间,时间格式固定,必须为 2010-11-04 09:42:54 这种格式。

2)将 dble-1 中的 schema.xml 及 server.xml 配置修改如下:

schema.xml 关键配置为:

<schema name="schema1" dataNode="dn1">
<table name="tb_autoIncre" dataNode="dn1,dn2,dn3,dn4" rule="hash-four" cacheKey="id" incrementColumn="id"/>
</schema>

server.xml 关键配置为:

<system>
    <pro
perty name="sequenceHandlerType">3</property>
</system>

3)登录 dble-1 的管理端口并执行管理命令 reload @@config_all,然后依次重启 3 台 dble,使配置在集群中生效。

三、操作及结果验证

1.建表及插入数据

创建一张含有 bigint 类型的自增列的表,登录 dble-1 的业务端口,执行:

mysql -p111111 -utest -P8066 -Dschema1 -e "create table tb_autoIncre(id bigint,time char(120));"

插入数据,执行:

datestr=`date +%Y%m%d`
mysql -p111111 -utest -P8066 -Dschema1 -e "insert tb_autoIncre values('${datestr}');"

查询插入的数据,执行:

mysql -p111111 -utest -P8066 -Dschema1 -e "select * from tb_autoIncre ;"

2.验证插入的 id 自增列值是否正确:

上图中的 id 是个正数,将此正数转化成二进制,然后按照上文简介中的 63 位二进制数组成规则反推各组成部分的是否和设计一致。具体步骤如下:

1)将步骤二中得到的 id 转换成二进制记录为 (a),若结果不足 64 位,前面加 0 补足 64 位

select conv(id, 10, 2) from  tb_autoIncre;


所以补足 64 位后的二进制为:0000000000000000001000000100011000100001001011100011111101011000

2)记录二进制 (a) 的前 [16~19] 位闭区间为 0001,转化为十进制为 1,值与配置中 CLUSTERID 值相等;取前 [11~15] 位闭区间为 00000,转化为十进制为 0,而 zk 中临时自增节点 instance 值为,

0%32 也为 0,所以符合预期;截取二进制的后 39 位为一个新的二进制 100011000100001001011100011111101011000,记为 (b)‬。

3)将二进制 (b) 转化成十进制

select conv(100011000100001001011100011111101011000, 2, 10);


所以 (b) 转化为十进制为:301204389720,记为 ©。

4)将 © 转化成日期 (t1)

set @unixtime=301204389720/1000;
select from_unixtime(@unixtime);

5)将得到的日期 (t1)-1970/01/01,得到时间差记为 (t2)

select datediff('1979-01-08 08:53:58.752000','1970-01-01');


6)用 start time(2010/11/04 09:42:54) + (t2) 得到最终的时间 (t3):

select date_add('2010-11-04 09:42:54', interval 3486 day);


(t3) 与 select 出的 time 列的值近似相等。

结论:从以上分析可以看出,插入到自增列的值是正确的。

Clockkit:准确的分布式时间戳服务 从各种硬件同步收集数据 卡米尔·古德塞恩(Camille Goudeseune)和布雷登·科威兹(Braden Kowitz) UIUC贝克曼研究所综合系统实验室 该软件于2020年在GitHub上进行了修订和发布。 最初于2004年发布在 (已停用)上。 我们描述了用于联网商用PC的准确的开源C ++分布式时钟。 无需额外的硬件,该时钟就可以将来自多台PC的传感器数据(头部和眼动仪,生物特征数据,捕获的视频,驾驶模拟器数据)相关联,其延迟和抖动平均不到10微秒,最坏情况下只有100微秒。 PC驱动的执行器(例如运动基座和音频/视觉/触觉警告系统)也以相同的精度进行控制。 这使我们能够准确地测量驾驶员的响应时间(刹车灯,直视危险,接听电话)。 硬件供应商通常认为系统集成围绕他们自己的设备进行。 尽管有这样的假设,此时钟也会使设备同步。 即使没有实时优先级或繁忙等待,该时钟也比Micr 立即下载

相关推荐

vue 获取el-table多选的选中行

<el-table :data='tableData' ref="multipleTable" v-loading='loading' border max-height='700' style='width: 100%' size="mini"> <el-table-column type="selection" width="55"></el-table-column> <el-table-column label

且听风吟的博客 6649

分布式系统概念 | 分布式时钟:物理时钟、逻辑时钟、Lamport 时间戳、向量时钟、版本向量

分布式系统概念 | 分布式时钟:物理时钟、逻辑时钟、Lamport 时间戳、向量时钟、版本向量

凌桓丶的博客 5155

Python + Google AI 自动修复 Sonar Bug 实践

在工作中总会遇到种种不期而至的需求,比如前段时间突然要修复所有 Sonar Bug,涉及各种琐碎的代码风格问题,包括但不限于语法不规范、废弃注释等问题。这些项目都已经持续开发几年了,Sonar 上的问题层出不穷,各种问题已经累积到了上万个,手动修复不但费时费力,而且过程异常枯燥。

子洋 Blog 2414

分布式并发控制中时间戳排序算法与本地计数器同步的改进方法

论文翻译:An Advanced Approach of Local Counter Synchronization to Timestamp Ordering Algorithm in Distributed Concurrency Control

卡兹戴尔 692

一文读懂AI大模型时代的RAG技术

RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合检索技术与生成模型的技术架构,旨在通过动态引入外部知识库增强大语言模型(LLM)的生成能力。其核心思想是通过检索系统从外部数据源(如企业知识库、实时文档等)获取相关信息,并将检索结果作为上下文输入生成模型,以提高生成答案的准确性、时效性和专业性

awei0916的专栏 2118

分布式事务中的时间戳详解

时间戳(timestamp)是分布式事务中绕不开的重要概念,有意思的是,现在主流的几个分布式数据库对它的实现都不尽相同,甚至是主要区分点之一。 本文聊一聊时间戳的前世今生,为了把讨论集中在主题上,假设读者已经对数据库的 MVCC、2PC、一致性、隔离级别等概念有个基本的了解。 为什么需要时间戳? 自从 MVCC 被发明出来之后,那个时代的几乎所有数据库都抛弃(或部分抛弃)了两阶段锁的并发控制方法,原因无它——性能太差了。当分布式数据库逐渐兴起时,设计者们几乎都选择 MVCC 作为并发控制方案。

SSL加密技术 1013

NX二次开发新建组件

NXOpen新建组件

qq_39541524的博客 329

mysql squence分布式_分布式 | dble 中分布式时间戳方式的全局序列

作者:吴金玲爱可生 dble 项目团队成员,主要负责 dble 相关的日常测试工作,擅长对 dble 中出现的问题进行排查。热爱测试工作,余生欲将测试工作进行到底。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。dble 中目前有 4 种方式的全局序列,分别是 MySQL offset-step 方式、时间戳方式、分布式时间戳方式、分布式 offse...

weixin_32256355的博客 216

FOC 电流采样方案对比(单电阻/双电阻/三电阻)

电流采样的作用 在FOC算法中,电流采样在反馈环节是相当重要的一部分,通常交流三相同步电机在进行坐标变换的时候,需要实时测量相电流,最终通过SVPWM实现电机转子磁场和定子磁场的同步转动,那么这里有三种方案,单电阻采样,双电阻采样,三电阻采样。本文参考ST的单电阻和三电阻采样以及TI的双电阻采样,结合实际中可能需要注意的地方进行总结分析。 单电阻采样 双电阻采样 三电阻采样 ...

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 4万+

Sigrity Power Tree如何生成电源树操作指导

Sigrity Power Tree可以方便地生成电源树,仅需要网表文件就能将系统的电源树直观的显示出来,生成的电源树文件可以用Power DC,optimizePI进行直流和交流仿真,下面介绍如何生成电源树。Base on [Device_TYPE and VALUE]就是识别网表中器件的Device_TYPE作为power tree中的模型的名字。Allegro layout netlist file,就是从Allegro layout文件中输出的netlist第三方网表文件。如何生成电源树操作指导。

weixin_54787054的博客 1532

时间戳转换成日期 c++_分布式 | dble 中分布式时间戳方式的全局序列

作者:吴金玲爱可生 dble 项目团队成员,主要负责 dble 相关的日常测试工作,擅长对 dble 中出现的问题进行排查。热爱测试工作,余生欲将测试工作进行到底。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。dble 中目前有 4 种方式的全局序列,分别是 MySQL offset-step 方式、时间戳方式、分布式时间戳方式、分布式 offse...

weixin_39948277的博客 153

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

13位时间戳转换_分布式 | dble 中分布式时间戳方式的全局序列

作者:吴金玲爱可生 dble 项目团队成员,主要负责 dble 相关的日常测试工作,擅长对 dble 中出现的问题进行排查。热爱测试工作,余生欲将测试工作进行到底。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。dble 中目前有 4 种方式的全局序列,分别是 MySQL offset-step 方式、时间戳方式、分布式时间戳方式、分布式 offse...

weixin_33817338的博客 213

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【dble 介绍】

dble是上海爱可生信息技术股份有限公司基于mysql的高可扩展性的分布式中间件,存在以下几个优势特性:   dble 是基于开源项目MyCat的,专注于MySQL是一个更好的选择。 所以取消了对其他数据库的支持,对兼容性,复杂查询和分布式事务的行为进行了深入的改进/优化。       数据水平拆分 随着业务的发展,您可以使用dble来替换原始的单个MySQL实例。 ...

1707

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

dble 不支持的关键字 mysql_分布式 | DBLE Release Notes 详细解读 2.19.09.0

以下对 DBLE 2.19.09.0 版本的 Release Notes 进行详细解读,文章主要分为以下三部分内容:一、DBLE 项目介绍二、新版本主要更新解读三、完整 Release Notes 及翻译一、DBLE 项目介绍DBLE — 企业级开源分布式中间件,江湖人送外号 “MyCat Plus”;以其简单稳定,持续维护,良好的社区环境和广大的群众基础得到了社区的大力支持;DBLE 官方项目...

weixin_32893479的博客 351

分布式 | DBLE Release Notes 详细解读 2.19.07.0

2.19.07.0 版本 DBLE Release Notes 一、DBLE 项目介绍 DBLE 是企业级开源分布式中间件,江湖人送外号 “MyCat Plus”;以其简单稳定,持续维护,良好的社区环境和广大的群众基础得到了社区的大力支持; DBLE 官方项目: https://github.com/actiontech/dble 如对源码有兴趣或者需要定制的功能的可以通过源码编译安装 ...

ActionTech的博客 514

sql 拆分_分布式 | Global 表 Left Join 拆分表实现原因探究

作者:郭奥门爱可生 DBLE 研发成员,负责分布式数据库中间件的新功能开发,回答社区/客户/内部提出的一般性问题。本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文关键字:JOIN、原理解析、分库分表相关文章推荐:分布式 | DBLE 之通过 explain 进行 SQL 优化分布式 | dble 中分布式时间戳方式的全局序列问题前几天...

weixin_39708854的博客 183

【分布式】分布式中的时钟

时钟的存在主要是为了标识事件的发生顺序。分布式系统不使用物理时钟记录事件,分布式系统中每个节点记录的时间并不一样,即使设置了 NTP 时间同步节点间也存在毫秒级别的偏差所以需要有另外的方法记录事件顺序关系,这就是逻辑时钟。

kazuhura的博客 1046

分布式事务中的时间戳怎么搞?

点击关注公众号,Java干货及时送达作者:Eric Fu链接:https://ericfu.me/timestamp-in-distributed-trans/时间戳(timestamp)...

Java技术栈,分享最主流的Java技术 636

TSO(Timestamp Oracle,时间戳预言机)概念简述

TSO(Timestamp Oracle,时间戳预言机)是分布式系统中用于生成全局唯一且递增的时间戳的服务或组件。在分布式数据库和事务管理系统中,TSO扮演着至关重要的角色,它确保了事务的顺序性和一致性,是实现分布式事务一致性算法(如Google的Percolator、Apache HBase中的时间戳管理等)的关键。

坚定目标,超越自我 1337

MyCat中对分库分表、ER表、全局表、分片规则、全局序列等的实现与基本使用操作

在MyCat中进行MySQL的分库分表,以及ER表、全局表、常用分片规则、全局序列等的实现与基本使用操作。

积跬步,至千里。 1132

mysql tookit 之 dble(2)修改一些配置

修改一些配置测试 1.修改test表的主键通过dble全局自增 1.修改schema.xml 2.重新加载配置: 登入管理端口,重新加载配置: dryrun; reload @@config 3.测试: insert into testdb.test(userid,other) values(100006,'22222'); 能自动生成全局的序列 这默认是时间戳方式全局的序列 2.新建分区表的步骤1.在schema.xml新增表;2.reload reload @@config3.创建表: create

pool_Sneaker的博客 234
上一篇: 技术分享 | kubernetes 环境测试部署 MySQL 的随想
下一篇: 技术分享 | InnoDB 的索引高度
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值