Tagged: 分布式

支持分库分表的分布式ID生成规则

在分布式环境中的系统,全局唯一ID生成的设计尤为重要。每个公司都会根据自身实际情况,设计出针对自身环境的唯一ID的系统。 一、MongoDB的ObjectID: 开源软件也不例外,MongoDB是一款支持分布式环境(Shard)的非关系型数据库,在分布式全局唯一ID生成的设计上有哪些值得学习的地方呢? 首先,我们看一下官方对BSON ObjectID的解释(Learn more from ObjectId):

ObjectID是一个用16进制字符表示的,总长度为12Bytes的字符串。 分别由4字节时间戳+5字节进程唯一ID+3字节的计数器,这样便保证了在分布式环境中且多个进程生成的ID是唯一的。 但是如果要以这样一个12Bytes的字符串来进行分库分表的操作,该怎样计算呢?我们完全可以按照ObjectID的设计思路,来设计...

分布式系统事务一致性的几种解决方案

写在前面 在 OLTP (联机事务处理)系统领域,我们在很多业务场景下都会面临事务一致性方面的需求,例如最经典的 Bob 给 Smith 转账的案例。传统的企业开发,系统往往是以单体应用形式存在的,也没有横跨多个数据库。 我们通常只需借助开发平台中特有数据访问技术和框架(例如 Spring、JDBC、ADO.NET),结合关系型数据库自带的事务管理机制来实现事务性的需求。关系型数据库通常具有 ACID 特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 而大型互联网平台往往是由一系列分布式系统构成的,开发语言平台和技术栈也相对比较杂,尤其是在 SOA 和微服务架构盛行的今天,一个看起来简单的功能,内部可能需要调用多个“服务”并操作多个数据库或分片来实现,情况往往会复杂很多。单一的技术手段和解决方案,已经无法应...