多机分布式系统ID的问题与处理

2024-06-05 18:08

本文主要是介绍多机分布式系统ID的问题与处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

起因

当数据库有单个数据库转变为水平分库,原来单个系统中的ID(Sequence)以及自增id的做法需要改变
我们主要需要解决下面的两个问题:

  • 唯一性
  • 连续性

问题与处理

  • 当我们只考虑id的唯一性的问题的时候,我们可以使用UUID等方式来自动生成,虽然这样生成的id保证了唯一性,但是在分布式系统中的连续性是一个巨大的问题

  • 进而,我们可以想到,我们可以将所有id都存放在一个地方进行集中分类管理,分布式系统中的每台单独机器使用id时都从这个id生产器中去取,这里有如下几个关键问题需要解决

    • 性能问题。每次远程取id都会存在资源消耗,一种方案是一次取一段id,然后缓存到本地,这样就不需要每次都去远程的id生成器上取id了。但是如果一旦发生宕机,那么一些id就会被浪费了。
    • 生成器的稳定性问题。id生成器作为一个无状态的集群存在,其可用性要靠整个集群来保证
    • 存储的问题。底层存储的选择空间比较大,需要根据不同类型进行对应的容灾方案。下面介绍两种方式

      • 第一种,在底层使用一个独立的存储来记录每个id序列当前的最大值,并控制并发更新,这样以来id生成器的逻辑就很简单了
        这里写图片描述

      • 第二种,直接把id生成器舍去,把相关的逻辑放到需要生成id的应用本身,就行了。即我们上述所说的,读取可用的id或者id段,然后给应用的请求使用,如图
        这里写图片描述

不过因为第二种方式没有中心的控制点,并且我们不希望生成器之间还有通信(这回使得系统非常复杂),因此数据的id并不是严格的按照进入数据库的顺序而增大的。在管理上也需要有额外的功能,这些是需要权衡的地方

参考 大型网站系统与Java中间件实践

这篇关于多机分布式系统ID的问题与处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1033788

相关文章

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

浅析Java中如何优雅地处理null值

《浅析Java中如何优雅地处理null值》这篇文章主要为大家详细介绍了如何结合Lambda表达式和Optional,让Java更优雅地处理null值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录场景 1:不为 null 则执行场景 2:不为 null 则返回,为 null 则返回特定值或抛出异常场景

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu