zoukankan      html  css  js  c++  java
  • 统一ID服务

    代码已经修改 调用方式 为restful请求  或者 feign请求  请参考 wiki:   http://192.168.120.46:8090/display/peixun/akucun+Guid

     

    项目组 对接人员 采用的方式 版本 修改最后时间
    订单 贺周群 工具类 1.0.20-SNAPSHOT 已修改,11月15日上线
    支付 崔宏辉 工具类 本地 暂时不做修改
    旧订单 王硕星 工具类 1.0.20-SNAPSHOT 已修改,最迟11月20日上线
    旧版会员 蔡建 zuul akucun-base-data-new 11月15日修改

     

     

    guid ID 18 三个环境 

    restful 调用方式
    dev: http://192.168.120.97:8080/base/guid/31/31
    test: http://172.19.1.198:8080/base/guid/31/31
    prod: http://addr.infra.aikucun.com/base/guid/31/31

    feign调用方式: 

    <dependency>
    <groupId>com.akucun.base.data</groupId>
    <artifactId>base-data-facade-stub</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    </dependency>

    调用其中的接口:  com.akucun.base.data.stub.GuidRemote

    已下内容已经过期 , 供参考

    18位long型 ID生成算法snowflake原理:   https://segmentfault.com/a/1190000011282426

     

    1) spring项目引用 akucun-common-base: 

    <dependency>     

            <groupId>com.akucun</groupId>     

            <artifactId>akucun-common-base</artifactId>     

            <version>${com.akucun.cloud.base.version}</version>

    </dependency> 

    当前版本 :

    <com.akucun.cloud.base.version>0.0.1-SNAPSHOT</com.akucun.cloud.base.version>

    2) 项目中添加如下类

    PrimaryKeyGenerater.java

    3) 项目启动添加参数

    -Dguid.datacenter.id=2  -Dguid.machine.id=3

     

    guid.datacenter.id 数据中心
    guid.machine.id 数据中心中对应的服务器编号

    4) 获取对应数据

    SpringUtil.getBean(PrimaryKeyGenerater.class).nextId()

    datacenter:  SpringUtil.getBean(PrimaryKeyGenerater.class).getDatacenterId()

    machine: SpringUtil.getBean(PrimaryKeyGenerater.class).getMachineId()

    大厂的id设计
    全局数据库生成唯一id型:
    京东商城订单号格式:157444499 全局数据库
    苏宁易购订单号格式:2000839647 全局数据库
    凡客诚品订单号格式:213052230059 业务编码+年的后2位+月+日+订单数
    银泰网订单号格式:10030522161715 年的第三位数+业务编码+年的后1位+月+日+订单数
    淘宝的订单号格式:126036803257340376 14位为序号+买家ID的倒数1-2位+买家ID的倒数3-4位
    Twitter Snowflake 格式 :458607675730102138 14位时间戳+ 数据中心2+服务器2位 + 顺序号4位
    可归类4种:
    方案1: 利用全局数据库(rmdb or nosql) 提供自增的字段ID, 具体业务端可一次读取多条id 提高性能 -- id 短 , 性能一般,维护成本高, 可读性一般
    方案2: 年月日+日级别一定位数的序号(如 00001, 序号维护同方案1) -- id 短 , 性能一般,,维护成本高, 可读性高
    方案3:淘宝方案 4位序号+买家4位ID -- id 长, 性能一般,,维护成本高, 可读性高只需读取后6位基本可判断订单
    方案4: Twitter Snowflake方案 -- id 长, 性能高,,维护成本底, 可读性差 , 可参考方案3 把后4位改为用户id后4位组合
    爱库存对id的需求场景:
    1. 订单ID (完整编号、短号)
    2. 发货单ID (完整编号、短号)
    3. 代购ID (会员编号) (亿级)
    4. 商家ID (千万级)
    5. 售后申请服务号 (亿级)
    6. 支付流水号
    7. 支付退款流水号
    8. 业务上使用的合并支付单号
    方案选取原则:
    1: 12位左右ID 选择方案2
    2: 短id 选择方案1
    3: 考虑数据中心的概念 选择方案4 (当前新项目采用此方案 , 新会员, 商户商家)
  • 相关阅读:
    c#中String跟string的“区别”<转>
    JS中判断对象是否为空
    report builder地址:http://localhost/reports
    今天开始,主攻MS Dynamics CRM
    IO负载高的来源定位
    ORACL学习笔记 之 分区表
    Linux自动删除n天前日志
    Oracle中NVL2 和NULLIF的用法
    Ubuntu学习笔记之Sqldeveloper安装
    给ubuntu的swap分区增加容量
  • 原文地址:https://www.cnblogs.com/wzk-0000/p/11079471.html
Copyright © 2011-2022 走看看