请问 Django 并发条件下,生成雪花 ID 为什么会重复?
source link: https://www.v2ex.com/t/792678
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
我用的是别人写好的模块,如下
https://github.com/tarzanjw/pysnowflake/blob/master/snowflake/server/generator.py
我首先自己跑单线程测了一下,完全不会有重复,多线程在加线程锁的情况下也完全没有发生重复。
但是我在实际项目中生成的时候,大概 10 条线提交总共 1600 条数据,每次都会产生大概几十条重复
我打印过 ID,这个雪花生成器实例并没有被初始化多个,请问如何排查?
大致代码如下:
from newsnow import Generator
logger = logging.getLogger('django-production')
get_flake_id = Generator(dc=0, worker=0)
def create_product_meta(prepare_product_meta):
new_product = models.productMeta(
own_store=prepare_product_meta.get("own_store").upper(),
product_name=prepare_product_meta.get("product_name"),
)
logger.warning(id(get_flake_id))
new_product.flake_id = get_flake_id.get_next_id()
return new_product
第 1 条附言 · 1 天前
目前问题已经修复,确定是多进程间 “无法共享实例状态” 导致的 SnowFlake ID 重复问题。
我个人的解决方案是在生成 SnowFlake ID 前,直接动态获取 PID 的后 2 位作为 Worker ID,即如下写法
flake_worker = int(str(os.getpid())[-2:])
弄那么“不专业”的理由是,因为我观察到在 Docker 环境中,这个 ID 一般都是“连续生成”,大多是 100~200 范围内,而且我个人也就开了 4 个进程,再者我的程序本身也有重试逻辑,所以就这样简单的修改了。
另外,本帖中尚未获得其他同学关于映射 PID 的解决方案,我也只是提供一个思路,因为标准的雪花 ID 的 worker 位严格较真的话只有 0~255 可选,直接放 PID 是绝对可能溢出的,所以必然存在一种转换方案,或者想办法找其他类似 PID 的东西作为物理隔离方案。
希望帮助到同样受到这个问题困扰的人。
Recommend
-
33
和心爱的人一起做心爱的游戏,是许多游戏开发者的梦想,因此,“夫妻档”游戏开发者总是会收到许多羡慕的目光,而《喵星人大战咸鱼》的游戏开发者就是一对夫妻。他们带着这款游戏参加了...
-
46
据外媒报道,通常情况下想要熔化黄金的话温度必须要达到1064°C才行,但物理学从来都不是那么简单。近日,一个科研团队发现了一种在室温条件下通过电场和电子显微镜熔化黄金的方法。虽然大多数人都熟悉熔化的现象,但相信大多数人都没有认真去想过熔化过程中的背后...
-
37
在 2018 年爱奇艺联合 PRCV 会议举办的第一届多模态视频人物识别挑战赛中,来自 Infinivision 的团队获得冠军。现在,该团队分享了他们在比赛中的经验心得,希望可以为对多模态领域研究感兴趣的朋友提供参考。 前言: ...
-
77
对于华为新一代旗舰机型P30Pro,拥有后置超感光徕卡四摄,10倍混合变焦,让很多消费者心动不已。不过,最近成都商报报道称,市民巫先生花5988元购买了一台华为P30Pro手机,“精湛工艺全方位打造IP68级防尘抗水机身”,官方宣传显示。而在使用仅一周左右,巫先生不小...
-
31
谢邀。先上视频。湖人三角进攻战术运行_腾讯视频(侵删)队友持球,科比在弧顶附近要球未果。绕过从侧翼…
-
32
-
15
比雪花算法更好用的ID生成算法(单机或分布式唯一ID) 💎 算法介绍 ❄ 一个全新的雪花漂移算法,生成的ID更短、速度更快。 ❄ 核心在于缩短ID长度的同时,具有极高瞬时并发处理量(保守值 50W/0.1s)。 ❄ 原生支持 C#/Java/Go/Rus...
-
1
保证在分库分表中每条数据具有唯一性 二、修改配置文件config-sharding.yaml,并重启服务 # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed w...
-
1
【代码】Java雪花算法生成随机ID 2022-07-18 1...
-
1
系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,比如常见的基于数据库自增主键生成的id,随机生成的uuid,亦或者redis自增的计数器等都属于常见的解决方案;本文我们将会重点看一下业界内大名鼎鼎的雪花算法,是如何实现分布式id的
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK