Rumah > Soal Jawab > teks badan
snowflake生成的id规则是41位的时间前缀+10位的节点标识+12位的sequence
单机上面为了防止NTP可以不停重试保障直至生成新的id。
但是在分布式环境下现在比如说有1master,2slave做back,假如master挂了,我们用zk选择了新的master,虽然说我们有dataCenterID能保证数据不重复,但是啊如果新旧master机器有时间差(比如说新master时间<旧master)那不就可能出现了新master生成的id比旧master在挂了之前生成的最后一个id要小吗?
我们怎么去规避这个问题?
1、尽量保持机器的时间一致。
2、在1无法保障的前提下该怎么做?是无法规避就是这样子的没关系?还是怎么操作,将每次生成的新的id放到zk然而新老master切换的时候新master继承老master的最后的id,这样做我感觉不合理,IO消耗太大了。
求大神指导。如果理解有问题也请尽情批判。
高洛峰2017-04-18 10:32:33
Penyegerakan jam akan mempunyai ralat tertentu Contohnya, jam GPS yang digunakan oleh Google/F1 mempunyai ralat kira-kira 10ms.
Ralat NTP adalah kira-kira 200-300ms.
Lihat sama ada perniagaan anda boleh menerima ralat ini.
Jika tidak, perniagaan anda tidak boleh menggunakan waktu tempatan untuk menentukan susunan acara.
Anda boleh merujuk kepada kertas "Jam Logik Lamport" untuk menyelesaikan masalah pemasaan dalam sistem teragih. Atau jam logik campuran