• 分布式生成唯一id


    一、使用UUID

      使用 UUID, UUID 的目的是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。

      UUID是基于当前时间、计数器(counter)和硬件标识(通常为无线网卡的MAC地址)等数据计算生成的。


      优点:
      1)简单,代码方便。
      2)生成ID性能非常好,基本不会有性能问题。
      3)全球唯一,在遇见数据迁移,系统数据合并,或者数据库变更等情况下,可以从容应对。

      缺点:
      1)没有排序,无法保证趋势递增。
      2)UUID往往是使用字符串存储,查询的效率比较低。
      3)存储空间比较大,如果是海量数据库,就需要考虑存储量的问题。
      4)传输数据量大
      5)不可读。

    二、使用 redis 

      当使用数据库来生成ID性能不够要求的时候,我们可以尝试使用Redis来生成ID。这主要依赖于Redis是单线程的,所以也可以用生成全局唯一的ID。可以用Redis的原子操作 INCR和INCRBY来实现。

      比较适合使用Redis来生成每天从0开始的流水号。比如订单号=日期+当日自增长号。可以每天在Redis中生成一个Key,使用INCR进行累加。

      优点:
      1)不依赖于数据库,灵活方便,且性能优于数据库。
      2)数字ID天然排序,对分页或者需要排序的结果很有帮助。

      缺点:
      1)如果系统中没有Redis,还需要引入新的组件,增加系统复杂度。
      2)需要编码和配置的工作量比较大

    三、利用zookeeper生成唯一ID

      zookeeper主要通过其znode数据版本来生成序列号,可以生成32位和64位的数据版本号,客户端可以使用这个版本号来作为唯一的序列号。

      很少会使用zookeeper来生成唯一ID。主要是由于需要依赖zookeeper,并且是多步调用API,如果在竞争较大的情况下,需要考虑使用分布式锁。因此,性能在高并发的分布式环境下,也不甚理想。

  • 相关阅读:
    持续集成概念
    性能测试,负载测试,压力测试有什么区别
    安全测试
    接口测试及常用接口测试工具
    python-Csv 实战
    Python3 + Appium学习链接
    python-Txt实践
    python-ddt实践
    保险--总结
    selenium与页面的交互
  • 原文地址:https://www.cnblogs.com/Jomini/p/13848097.html
Copyright © 2020-2023  润新知