Ugrás a tartalomra

Snowflake ID Generátor - Egyedi Elosztott ID-k Létrehozása

Ingyenes Snowflake ID generátor és elemző. Egyedi 64 bites ID-k generálása elosztott rendszerekhez. Meglévő ID-k elemzése timestamp, gép azonosító és szekvencia kinyerésével.

Hópehely ID Generátor

Opcionális: Unix időbélyeg milliszekundumban (alapértelmezetten az aktuális idő)

Gép ID (0-31)

Adatközpont ID (0-31)

Szekvenciaszám (0-4095)

Hópehely ID
2094810863532769280
00111010001001001000011011000011011000010
00000
00000
000000000000
Időbélyeg (41 bit)
Adatközpont ID (5 bit)
Gép ID (5 bit)
Szekvenciaszám (12 bit)
Betöltési kalkulátor...
📚

Dokumentáció

Mi az a Snowflake-ID-generátor?

A Snowflake-ID-generátor időbélyegből, gépazonosítóból és sorszámból állít elő egy egyedi, 64 bites számot. A Twitter 2010-ben hozta létre ezt a formátumot, hogy minden tweet olyan azonosítót kapjon, amelyet sok szerver egyszerre előállíthat anélkül, hogy meg kellene kérdezniük egymástól: „használták már ezt a számot?”. Ez az eszköz a megadott értékekből létrehoz egy Snowflake-ID-t, és megmutatja, hogyan töltik ki ezek az értékek a 64 bitet.

Hogyan működik ez a Snowflake-ID-generátor?

A generátor négy bemenetet fogad:

  • Időbélyeg: Unix-időbélyeg ezredmásodpercben. Hagyja üresen a mezőt az aktuális idő használatához.
  • Gépid: 0 és 31 közötti egész szám (5 bit). Ez a Twitter eredeti „munkagép-azonosítója”.
  • Adatközpont-azonosító: 0 és 31 közötti egész szám (5 bit).
  • Sorszám: 0 és 4095 közötti egész szám (12 bit), amely az ugyanabban az ezredmásodpercben létrehozott azonosítók megkülönböztetésére szolgál.

Az eszköz a négy értéket egyetlen 64 bites azonosítóvá egyesíti. Ezután az eredményt binárisan jeleníti meg, időbélyeg-, adatközpont-, gép- és sorszámmezőre bontva.

Az időbélyeg mérésének kezdőpontja egy rögzített időpont, amelyet Twitter-epochként neveznek: 2010. november 4., 1:42:54,657 UTC, vagyis 1 288 834 974 657 ezredmásodperccel a Unix-epoch után. Ez a generátor nem teszi lehetővé ennek a kezdőpontnak a módosítását. Minden általa előállított azonosító ettől az egyetlen rögzített dátumtól számítódik.

A Snowflake-ID felépítése

A Snowflake-ID egy 64 bites egész szám, amely négy részre oszlik; ezeket a legnagyobb helyiértékű bittől lefelé olvassuk:

BitekMezőÉrtékkészlet
1Előjelbitmindig 0
41Időbélyegezredmásodpercek a Twitter-epoch óta
5Adatközpont-azonosító0–31
5Gép- (worker-)azonosító0–31
12Sorszám0–4095

A vezető bit mindig 0, ezért a Snowflake-ID mindig pozitív szám. A 41 bites időbélyegmező és a 12 bites sorszámmező teszi lehetővé a Snowflake-ID-k rendezését: a később létrehozott azonosítók időbélyegmezője nagyobb, ezért a korábbiak után jelennek meg a rendezésben.

A Snowflake-ID képlete

A generátor a következő képlettel állítja elő az azonosítót:

d=t−1288834974657d = t - 1288834974657

I=(d<<22)∣(c<<17)∣(m<<12)∣sI = (d << 22) \mathbin{|} (c << 17) \mathbin{|} (m << 12) \mathbin{|} s

ahol d a különbség, t a megadott időbélyeg ezredmásodpercben, I a kész azonosító, c az adatközpont-azonosító, m a gépid, s pedig a sorszám.

A << balra történő biteltolást jelent. Egy szám 22 bittel balra tolása ugyanaz, mint a számmal való szorzás 2²²-del, vagyis 4 194 304-gyel. Az eltolások mértéke (22, 17, 12) közvetlenül a mezők szélességéből következik: a sorszámmező 12 bites, ezért a gépid 12 bittel feljebb helyezkedik el; a gépmező 5 bites, ezért az adatközpont-azonosító 17 bittel feljebb kerül (12 + 5); és így tovább.

Snowflake-ID számítása: számítási példa

Tegyük fel, hogy valaki a következőket adja meg:

  • Időbélyeg: 1 288 834 975 657 (pontosan 1 000 ezredmásodperccel a Twitter-epoch után)
  • Adatközpont-azonosító: 1
  • Gépid: 1
  • Sorszám: 0

1. lépés — A különbség meghatározása. Vonjuk ki az epochot az időbélyegből: 1 288 834 975 657 − 1 288 834 974 657 = 1 000.

2. lépés — Az egyes mezők helyükre tolása.

  • Időbélyeg: 1 000 << 22 = 4 194 304 000
  • Adatközpont-azonosító: 1 << 17 = 131 072
  • Gépid: 1 << 12 = 4 096
  • Sorszám: 0

3. lépés — Egyesítés bitenkénti VAGY művelettel. Mivel az eltolt mezők nem fedik át egymást, az összeadás ugyanazt az eredményt adja, mint a bitenkénti VAGY művelet:

4 194 304 000 + 131 072 + 4 096 + 0 = 4 194 439 168

Ez a bemenethez tartozó Snowflake-ID. Az eszköz eredménynézete ugyanazt a 64 bites bináris karakterláncot egy 41 bites időbélyegblokkra, egy 5 bites adatközpontblokkra, egy 5 bites gépblokkra és egy 12 bites sorszámblokkra bontja vissza, így látható marad a szám felépítése.

Hol használják a Snowflake-ID-kat?

A Twitter azért hozta létre ezt a formátumot, hogy több ezer adatbázis-gépen egyedi, nagyjából időrendben rendezhető azonosítókat adjon a tweeteknek, központi számláló nélkül, amelyet minden szervernek ellenőriznie kellene. A Discord és az Instagram később hasonló, 64 bites azonosítóterveket vett át az üzenetekhez és bejegyzésekhez. Ugyanez az elv jelenik meg az adatbázisok particionálásában, az e-kereskedelmi rendszerek rendelésazonosítóiban és az elosztott alkalmazások eseménynaplóiban. Minden olyan környezetben használható, ahol sok gép egymástól függetlenül oszt ki azonosítókat, amelyeknek mégis nagyjából időrendben kell rendeződniük.

A Snowflake-ID-k korlátai

Egy éles környezetben működő Snowflake-generátor általában saját, folyamatosan működő órát kezel: ugyanabban az ezredmásodpercben minden létrehozott azonosítónál növeli a sorszámot, majd megvárja a következő ezredmásodpercet, amikor a sorszám eléri a 4 095 értéket. Ez az eszköz nem őrzi meg az állapotot a számítások között. Egyetlen azonosítót állít elő a megadott értékekből, ezért hasznos a formátum tanulmányozására, de eltér egy éles szolgáltatástól.

A kialakításnak rögzített korlátai vannak, függetlenül attól, melyik szolgáltatás valósítja meg:

  • Rögzített epoch: ez a generátor csak a 2010. november 4. dátumán vagy azt követően érvényes időbélyegeket fogad el (a Twitter-epochot). A korábbi dátumok nem kódolhatók.
  • Időbélyeg-felső határa: a 41 bites időbélyegmező körülbelül 2080 júliusában telik be. Ezt követően az epoch óta eltelt idő különbsége már nem fér el 41 biten.
  • Sorszámkorlát: egyetlen gép ugyanabban az ezredmásodpercben csak 4 096 különböző azonosítót adhat ki (0–4095), mielőtt az értékek ismétlődni kezdenének.
  • Gépek száma: a gépidhez és az adatközpont-azonosítóhoz egyaránt 5 bit áll rendelkezésre, ezért egy telepítés 1 024 különböző gépazonosságot oszthat ki ütközések nélkül (32 × 32).
  • Helyi, nem globális sorrend: az azonosítók csak akkor rendezhetők helyesen egymáshoz képest, ha szinkronizált órájú gépekről származnak. A gépek órái közötti eltérés felboríthatja a szigorú időrendi sorrendet.

A Snowflake-ID története

A Twitter 2010-ben jelentette be a Snowflake-ID formátumát az egyszerű, automatikusan növekvő adatbázis-azonosítók helyettesítésére, amelyek nem skálázhatók sok független adatbázis-szerver között. Az elnevezés abból az elképzelésből ered, hogy a valódi hópelyhekhez hasonlóan nincs két egyforma előállított azonosító. A kialakítást később nyílt forráskódúvá tették, majd más nagy platformok módosított formában átvették, mivel ugyanarra volt szükségük: sok gép által egyszerre előállított, egyedi és rendezhető azonosítókra.

Gyakran ismételt kérdések

Mi az a Snowflake-ID? A Snowflake-ID egy 64 bites szám, amely időbélyegből, gépazonosítóból és sorszámból áll; úgy tervezték, hogy sok gép egymással való egyeztetés nélkül is egyedi azonosítókat állíthasson elő.

Mi a Snowflake-ID képlete? id = ((timestamp − epoch) << 22) | (dataCenterId << 17) | (machineId << 12) | sequence, ahol az epoch egy rögzített kezdődátum, a << pedig balra történő biteltolás.

Módosíthatom az epochot ebben a generátorban? Nem. Ez az eszköz mindig a rögzített Twitter-epochból, 2010. november 4. dátumtól számítja az időbélyeget. Nincs mező más kezdődátum beállítására.

Dekódolja ez az eszköz a meglévő Snowflake-ID-kat? Nem. Csak új azonosítót állít elő a megadott időbélyegből, gépazonosítóból, adatközpont-azonosítóból és sorszámból, majd megjeleníti az új azonosító bitenkénti felépítését.

Hány Snowflake-ID-t állíthat elő egy gép ezredmásodpercenként? Legfeljebb 4 096-ot, mivel a sorszámmező 12 bites (az értékek 0 és 4 095 közöttiek).

Melyik évig állíthat elő érvényes időbélyegeket ez a generátor? Körülbelül 2080 júliusáig. A 41 bites időbélyegmező legfeljebb körülbelül 69,7 évnyi időt képes tárolni a rögzített 2010 epoch óta; ezt követően az érték túlcsordul a mezőn.

Hivatkozások

  1. „A Snowflake bejelentése.” Twitter Engineering Blog, 2010.
  2. "Snowflake ID." Wikipédia, https://en.wikipedia.org/wiki/Snowflake_ID