e12cb6f6d4543bdd99cf40880de3f55cbf91265e
\345\270\270\350\247\201\351\227\256\351\242\230/\345\210\206\345\270\203\345\274\217id\347\224\237\346\210\220\344\274\230\345\214\226.md
| ... | ... | @@ -40,7 +40,8 @@ public synchronized long nextId() { |
| 40 | 40 | } |
| 41 | 41 | ``` |
| 42 | 42 | 由上述的代码可知,本质上生成一个分布式id主要包括3段:41bit时间戳 + 10bit机器标识(这里的实现是5bit的机器码+5bit数据中心码)+ 12bit的序列号 |
| 43 | -[[/uploads/Home/id_generator_img.png]] |
|
| 43 | + |
|
| 44 | +[[http://iidp.chinasie.com:9999/iidpminio/id_generator/id_generator_img.png]] |
|
| 44 | 45 | |
| 45 | 46 | - 已有实现的问题 |
| 46 | 47 | - 没有使用10bit机器标识。目前的机器码和数据中心码都是写死为1,在所有场景下这10bit完全一样,如果在分布式环境下,遇到一些机器时间漂移的情况,虽然趋势shi递增,但不是绝对递增,那么很可能生成重复的id; |
| ... | ... | @@ -69,7 +70,7 @@ public synchronized long nextId() { |
| 69 | 70 | ``` |
| 70 | 71 | 为了简单,直接修改timeGen函数,让其返回时间一样,则生成的id都一样。 |
| 71 | 72 | |
| 72 | -[[/uploads/Home/id_gen_test.png]] |
|
| 73 | +[[http://iidp.chinasie.com:9999/iidpminio/id_generator/id_gen_test.png]] |
|
| 73 | 74 | |
| 74 | 75 | #### 优化 |
| 75 | 76 | - 生成机器id。通过获取机器MAC地址来生成 |