• 分布式ID算法uuid,snowflake,leaf


    分布式ID算法uuid,snowflake,leaf

    SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上是保持自增的。

     优点:

            (1)高性能高可用:生成时不依赖于数据库,完全在内存中生成。

            (2)容量大:每秒中能生成数百万的自增ID。

            (3)ID自增:存入数据库中,索引效率高。

    缺点:

            (1)依赖与系统时间的一致性,如果系统时间被回调,或者改变,可能会造成id冲突或者重复。 

            (2)不一定是全局递增的

    UUID(Universally Unique Identifier)的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的36个字符,示例:550e8400-e29b-41d4-a716-446655440000,到目前为止业界一共有5种方式生成UUID,详情见IETF发布的UUID规范 A Universally Unique IDentifier (UUID) URN Namespace。

    优点:

    (1)性能非常高:本地生成,没有网络消耗。

    缺点:

    (1)不易于存储:UUID太长,16字节128位,通常以36长度的字符串表示,很多场景不适用;

    (2)信息不安全:基于MAC地址生成UUID的算法可能会造成MAC地址泄露,这个漏洞曾被用于寻找梅丽莎病毒的制作者位置。

    (3)ID作为主键时在特定的环境会存在一些问题,比如做DB主键的场景下,UUID就非常不适用:

    1、MySQL官方有明确的建议主键要尽量越短越好[4],36个字符长度的UUID不符合要求。
     2、对MySQL索引不利:如果作为数据库主键,在InnoDB引擎下,UUID的无序性可能会引起数据位置频繁变动,严重影响性能。 

    Leaf是美团的方案,这个名字是来自德国哲学家、数学家莱布尼茨的一句话: >There are no two identical leaves in the world > “世界上没有两片相同的树叶”

    优点:

    • Leaf服务可以很方便的线性扩展,性能完全能够支撑大多数业务场景。
    • ID号码是趋势递增的8byte的64位数字,满足上述数据库存储的主键要求。
    • 容灾性高:Leaf服务内部有号段缓存,即使DB宕机,短时间内Leaf仍能正常对外提供服务。
    • 可以自定义max_id的大小,非常方便业务从原有的ID方式上迁移过来。

    缺点:

    • ID号码不够随机,能够泄露发号数量的信息,不太安全。
    • TP999数据波动大,当号段使用完之后还是会hang在更新数据库的I/O上,tg999数据会出现偶尔的尖刺。
    • DB宕机会造成整个系统不可用。



  • 相关阅读:
    WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
    Django安装与使用
    初识Django
    python学习之xlrd的使用
    python 学习笔记
    根据当前日期生成一个唯一标识的名称
    用Python生成组织机构代码,附源码
    IO流基础
    多线程
    日期时间类
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/16540782.html
Copyright © 2020-2023  润新知