Snowflake ID Generator - Maak Unieke Gedistribueerde ID's
Gratis Snowflake ID-generator en parser. Genereer unieke 64-bits ID's voor gedistribueerde systemen. Parseer bestaande ID's om tijdstempel, machine-ID en volgorde te extraheren.
Snowflake ID Generator
Optioneel: Unix-tijdstempel in milliseconden (standaard huidige tijd)
Machine-ID (0-31)
Datacenter-ID (0-31)
Volgnummer (0-4095)
Documentatie
Wat is een Snowflake-ID-generator?
Een Snowflake-ID-generator maakt een uniek getal van 64 bits uit een tijdstempel, een machine-identificatie en een volgnummer. Twitter ontwikkelde dit formaat in 2010 om elke tweet een identificatie te geven die veel servers tegelijk konden genereren, zonder elkaar ooit te hoeven vragen: "is dit nummer al gebruikt?" Deze tool maakt één Snowflake-ID uit de ingevoerde waarden en laat zien hoe die waarden de 64 bits vullen.
Hoe deze Snowflake-ID-generator werkt
De generator gebruikt vier invoerwaarden:
- Tijdstempel: een Unix-tijdstempel in milliseconden. Laat dit veld leeg om de huidige tijd te gebruiken.
- Machine-ID: een geheel getal van 0 tot 31 (5 bits). Dit is de oorspronkelijke "worker-ID" van Twitter.
- Datacenter-ID: een geheel getal van 0 tot 31 (5 bits).
- Volgnummer: een geheel getal van 0 tot 4095 (12 bits), waarmee ID's die in dezelfde milliseconde zijn gemaakt van elkaar worden onderscheiden.
De tool combineert de vier waarden tot één ID van 64 bits. Vervolgens toont hij het resultaat als binair getal, opgesplitst in de segmenten voor het tijdstempel, datacenter, machine en volgnummer.
Het tijdstempel wordt gemeten vanaf een vast beginpunt dat het Twitter-tijdperk wordt genoemd: 4 november 2010, 1:42:54,657 UTC, oftewel 1.288.834.974.657 milliseconden na het Unix-tijdperk. Deze generator staat niet toe dat dit beginpunt wordt gewijzigd. Elke ID die hij produceert, wordt vanaf die ene vaste datum gemeten.
Structuur van een Snowflake-ID
Een Snowflake-ID is een geheel getal van 64 bits, opgesplitst in vier delen die van de meest significante bit naar beneden worden gelezen:
| Bits | Veld | Bereik |
|---|---|---|
| 1 | Tekenbit | altijd 0 |
| 41 | Tijdstempel | milliseconden sinds het Twitter-tijdperk |
| 5 | Datacenter-ID | 0–31 |
| 5 | Machine-ID (worker-ID) | 0–31 |
| 12 | Volgnummer | 0–4095 |
De eerste bit is altijd 0, waardoor een Snowflake-ID altijd een positief getal is. Het tijdstempelveld van 41 bits en het volgnummerveld van 12 bits zijn de twee onderdelen die Snowflake-ID's geschikt maken om te sorteren: later gemaakte ID's hebben een groter tijdstempelsegment en worden dus na eerdere ID's gesorteerd.
Snowflake-ID-formule
De generator maakt de ID met deze formule:
waarbij d de delta is, t het ingevoerde tijdstempel in milliseconden, I de voltooide ID, c de datacenter-ID, m de machine-ID en s het volgnummer.
<< is een bitsgewijze verschuiving naar links. Een getal 22 bits naar links verschuiven is hetzelfde als het vermenigvuldigen met 2²², oftewel 4.194.304. De verschuivingswaarden (22, 17, 12) volgen rechtstreeks uit de veldlengtes: het volgnummerveld is 12 bits breed, dus de machine-ID staat 12 bits hoger; het machineveld is 5 bits breed, dus de datacenter-ID staat 17 bits hoger (12 + 5); enzovoort.
Een Snowflake-ID berekenen: uitgewerkt voorbeeld
Stel dat iemand het volgende invoert:
- Tijdstempel: 1.288.834.975.657 (precies 1.000 ms na het Twitter-tijdperk)
- Datacenter-ID: 1
- Machine-ID: 1
- Volgnummer: 0
Stap 1 — Bepaal de delta. Trek het tijdperk af van het tijdstempel: 1.288.834.975.657 − 1.288.834.974.657 = 1.000.
Stap 2 — Verschuif elk veld naar de juiste positie.
- Tijdstempel: 1.000 << 22 = 4.194.304.000
- Datacenter-ID: 1 << 17 = 131.072
- Machine-ID: 1 << 12 = 4.096
- Volgnummer: 0
Stap 3 — Combineer met een bitsgewijze OF-bewerking. Omdat geen van de verschoven velden elkaar overlapt, levert optellen hetzelfde resultaat op als een OF-bewerking:
4.194.304.000 + 131.072 + 4.096 + 0 = 4.194.439.168
Dat is de Snowflake-ID voor deze invoer. De resultaatweergave van de tool splitst dezelfde binaire tekenreeks van 64 bits opnieuw op in een tijdstempelblok van 41 bits, een datacenterblok van 5 bits, een machineblok van 5 bits en een volgnummerblok van 12 bits, zodat de opbouw van het getal zichtbaar blijft.
Waar Snowflake-ID's worden gebruikt
Twitter ontwikkelde het formaat om unieke, ongeveer op tijd geordende ID's te geven aan tweets op duizenden databaseservers, zonder een centrale teller die elke server zou moeten controleren. Discord en Instagram namen later vergelijkbare ID-ontwerpen van 64 bits over voor berichten en posts. Hetzelfde idee wordt gebruikt bij databasesharding, order-ID's voor e-commercesystemen en gebeurtenislogboeken in gedistribueerde toepassingen. Het past overal waar veel machines onafhankelijk ID's uitgeven en deze toch ongeveer op tijd gesorteerd moeten zijn.
Beperkingen van Snowflake-ID's
Een Snowflake-generator voor productie houdt normaal gesproken zelf een lopende klok bij: hij verhoogt het volgnummer voor elke ID die in dezelfde milliseconde wordt gemaakt en wacht op de volgende milliseconde zodra het volgnummer 4.095 bereikt. Deze tool bewaart geen gegevens tussen berekeningen. Hij maakt één ID uit de ingevoerde waarden, waardoor hij geschikt is om het formaat te verkennen, maar anders werkt dan een actieve productieservice.
Het ontwerp heeft vaste beperkingen, ongeacht welke service het implementeert:
- Vast tijdperk: deze generator accepteert alleen tijdstempels op of na 4 november 2010 (het Twitter-tijdperk). Eerdere datums kunnen niet worden gecodeerd.
- Bovengrens van het tijdstempel: het tijdstempelveld van 41 bits raakt rond juli 2080 vol. Daarna past de delta vanaf het tijdperk niet meer in 41 bits.
- Limiet van het volgnummer: één machine kan in dezelfde milliseconde slechts 4.096 verschillende ID's uitgeven (0–4095), voordat waarden zich zouden herhalen.
- Machineruimte: met elk 5 bits voor de machine-ID en de datacenter-ID heeft een implementatie 1.024 verschillende machine-identiteiten (32 × 32) die zonder botsingen kunnen worden uitgegeven.
- Lokale, geen globale ordening: ID's worden alleen correct ten opzichte van elkaar gesorteerd als ze afkomstig zijn van machines met gesynchroniseerde klokken. Klokafwijkingen tussen machines kunnen een strikte tijdsvolgorde verstoren.
Geschiedenis van de Snowflake-ID
Twitter kondigde het Snowflake-ID-formaat aan in 2010 als vervanging voor eenvoudige automatisch ophogende database-ID's, die niet schaalbaar zijn over veel onafhankelijke databaseservers. De naam is ontleend aan het idee dat, net als echte sneeuwvlokken, geen twee gegenereerde ID's hetzelfde zijn. Het ontwerp werd later als opensource beschikbaar gesteld en in aangepaste vorm overgenomen door andere grote platforms die hetzelfde nodig hadden: unieke, sorteerbare ID's die door veel machines tegelijk worden gegenereerd.
Veelgestelde vragen
Wat is een Snowflake-ID? Een Snowflake-ID is een getal van 64 bits dat bestaat uit een tijdstempel, een machine-identificatie en een volgnummer, en zo is ontworpen dat veel machines unieke ID's kunnen genereren zonder onderling af te stemmen.
Wat is de formule voor een Snowflake-ID?
id = ((timestamp − epoch) << 22) | (dataCenterId << 17) | (machineId << 12) | sequence, waarbij het tijdperk een vaste begindatum is en << een bitsgewijze verschuiving naar links aanduidt.
Kan ik het tijdperk in deze generator wijzigen? Nee. Deze tool meet het tijdstempel altijd vanaf het vaste Twitter-tijdperk, 4 november 2010. Er is geen veld om een andere begindatum in te stellen.
Decodeert deze tool een bestaande Snowflake-ID? Nee. De tool maakt alleen een nieuwe ID uit het ingevoerde tijdstempel, de machine-ID, de datacenter-ID en het volgnummer, en toont vervolgens de bitsgewijze opbouw van die nieuwe ID.
Hoeveel Snowflake-ID's kan één machine per milliseconde genereren? Maximaal 4.096, omdat het volgnummerveld 12 bits breed is (waarden van 0 tot en met 4.095).
Tot welk jaar kan deze generator geldige tijdstempels produceren? Tot ongeveer juli 2080. Het tijdstempelveld van 41 bits kan maximaal ongeveer 69,7 jaar bevatten, gemeten vanaf het vaste 2010-tijdperk; daarna loopt de waarde buiten het veld.
Referenties
- "Snowflake aankondigen." Twitter Engineering Blog, 2010.
- "Snowflake ID." Wikipedia, https://en.wikipedia.org/wiki/Snowflake_ID