Langkau ke kandungan

Penjana ID Snowflake - Hasilkan ID Teragih Unik

Penjana dan pengurai ID Snowflake percuma. Hasilkan ID 64-bit unik untuk sistem teragih.Urai ID sedia ada untuk mengekstrak cap masa, ID mesin, dan jujukan.

Penjana ID Snowflake

Pilihan: Cap masa Unix dalam milisaat (lalai ke masa semasa)

ID Mesin (0-31)

ID Pusat Data (0-31)

Nombor Urutan (0-4095)

ID Snowflake
2094810860349292544
00111010001001001000011011000001111001011
00000
00000
000000000000
Cap Masa (41 bit)
ID Pusat Data (5 bit)
ID Mesin (5 bit)
Nombor Urutan (12 bit)
Kalkulator Pemuatan...
πŸ“š

Dokumentasi

Apakah Penjana ID Snowflake?

Penjana ID Snowflake membina nombor unik 64 bit daripada cap waktu, pengecam mesin dan nombor jujukan. Twitter mencipta format ini pada 2010 untuk memberikan setiap tweet satu pengecam yang boleh dihasilkan oleh banyak pelayan serentak, tanpa perlu bertanya antara satu sama lain, β€œadakah nombor ini sudah digunakan?” Alat ini membina satu ID Snowflake daripada nilai yang dimasukkan dan menunjukkan cara nilai tersebut mengisi 64 bit.

Cara Penjana ID Snowflake Ini Berfungsi

Penjana ini menerima empat masukan:

  • Cap waktu: cap waktu Unix dalam milisaat. Biarkan kosong untuk menggunakan waktu semasa.
  • ID mesin: integer daripada 0 hingga 31 (5 bit). Ini ialah β€œID pekerja” asal Twitter.
  • ID pusat data: integer daripada 0 hingga 31 (5 bit).
  • Nombor jujukan: integer daripada 0 hingga 4095 (12 bit), yang digunakan untuk membezakan ID yang dicipta dalam milisaat yang sama.

Alat ini menggabungkan keempat-empat nilai menjadi satu ID 64 bit. Kemudian, hasilnya dipaparkan dalam bentuk perduaan, dipecahkan kepada segmen cap waktu, pusat data, mesin dan jujukan.

Cap waktu diukur dari titik permulaan tetap yang dipanggil epok Twitter: 4 November 2010, 1:42:54.657 UTC, atau 1,288,834,974,657 milisaat selepas epok Unix. Penjana ini tidak membenarkan titik permulaan tersebut diubah. Setiap ID yang dihasilkannya diukur dari tarikh tetap itu.

Struktur ID Snowflake

ID Snowflake ialah integer 64 bit yang dibahagikan kepada empat bahagian, dibaca dari bit paling bererti ke bawah:

BitMedanJulat
1Bit tandasentiasa 0
41Cap waktumilisaat sejak epok Twitter
5ID pusat data0–31
5ID mesin (pekerja)0–31
12Nombor jujukan0–4095

Bit pertama sentiasa 0, jadi ID Snowflake sentiasa nombor positif. Medan cap waktu 41 bit dan medan jujukan 12 bit ialah dua bahagian yang menjadikan ID Snowflake berguna untuk pengisihan: ID yang dibuat kemudian mempunyai segmen cap waktu yang lebih besar, lalu diisih selepas ID yang dibuat lebih awal.

Rumus ID Snowflake

Penjana ini membina ID menggunakan rumus berikut:

d=tβˆ’1288834974657d = t - 1288834974657

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

dengan d ialah delta, t ialah cap waktu yang dimasukkan dalam milisaat, I ialah ID lengkap, c ialah ID pusat data, m ialah ID mesin dan s ialah nombor jujukan.

<< ialah anjakan bit ke kiri. Mengalihkan nombor ke kiri sebanyak 22 bit sama seperti mendarabkannya dengan 2Β²Β², atau 4,194,304. Jumlah anjakan (22, 17, 12) datang terus daripada lebar medan: medan jujukan mempunyai lebar 12 bit, jadi ID mesin berada 12 bit ke atas; medan mesin mempunyai lebar 5 bit, jadi ID pusat data berada 17 bit ke atas (12 + 5); dan seterusnya.

Cara Mengira ID Snowflake: Contoh Penggunaan

Katakan seseorang memasukkan:

  • Cap waktu: 1,288,834,975,657 (tepat 1,000 ms selepas epok Twitter)
  • ID pusat data: 1
  • ID mesin: 1
  • Nombor jujukan: 0

Langkah 1 β€” Cari delta. Tolak epok daripada cap waktu: 1,288,834,975,657 βˆ’ 1,288,834,974,657 = 1,000.

Langkah 2 β€” Anjakkan setiap medan ke kedudukannya.

  • Cap waktu: 1,000 << 22 = 4,194,304,000
  • ID pusat data: 1 << 17 = 131,072
  • ID mesin: 1 << 12 = 4,096
  • Jujukan: 0

Langkah 3 β€” Gabungkan dengan operasi OR bit. Oleh sebab tiada medan yang dianjak bertindih, penambahannya memberikan hasil yang sama seperti operasi OR terhadapnya:

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

Itulah ID Snowflake untuk masukan ini. Paparan hasil alat tersebut memecahkan semula rentetan perduaan 64 bit yang sama kepada blok cap waktu 41 bit, blok pusat data 5 bit, blok mesin 5 bit dan blok jujukan 12 bit, supaya bentuk nombor itu kekal kelihatan.

Kegunaan ID Snowflake

Twitter membina format ini untuk memberikan ID unik yang kira-kira mengikut susunan masa kepada tweet merentasi ribuan mesin pangkalan data, tanpa pembilang pusat yang perlu diperiksa oleh setiap pelayan. Discord dan Instagram kemudiannya menggunakan reka bentuk ID 64 bit yang serupa untuk mesej dan siaran. Idea yang sama digunakan dalam pemecahan pangkalan data, ID pesanan untuk sistem e-dagang dan log peristiwa dalam aplikasi teragih. Format ini sesuai untuk mana-mana keadaan apabila banyak mesin mengeluarkan ID secara bebas tetapi ID tersebut masih perlu diisih mengikut masa secara kasar.

Had ID Snowflake

Penjana Snowflake dalam persekitaran pengeluaran biasanya mengekalkan jamnya sendiri: penjana itu meningkatkan nombor jujukan bagi setiap ID yang dibuat dalam milisaat yang sama dan menunggu milisaat berikutnya apabila jujukan mencapai 4,095. Alat ini tidak menyimpan keadaan antara pengiraan. Alat ini membina satu ID daripada apa-apa nilai yang dimasukkan, menjadikannya berguna untuk meneroka format tetapi berbeza daripada perkhidmatan pengeluaran langsung.

Reka bentuk ini mempunyai had tetap, tanpa mengira perkhidmatan yang melaksanakannya:

  • Epok tetap: penjana ini hanya menerima cap waktu pada atau selepas 4 November 2010 (epok Twitter). Tarikh lebih awal tidak boleh dikodkan.
  • Had atas cap waktu: medan cap waktu 41 bit habis digunakan sekitar Julai 2080. Selepas itu, delta daripada epok tidak lagi muat dalam 41 bit.
  • Had jujukan: hanya 4,096 ID berbeza (0–4095) boleh dikeluarkan oleh satu mesin dalam milisaat yang sama sebelum nilai berulang.
  • Ruang mesin: dengan 5 bit setiap satu untuk ID mesin dan ID pusat data, sesuatu penggunaan mempunyai 1,024 identiti mesin berbeza (32 Γ— 32) untuk diberikan tanpa perlanggaran.
  • Susunan setempat, bukan global: ID hanya diisih dengan betul berbanding satu sama lain jika datang daripada mesin yang mempunyai jam disegerakkan. Perbezaan waktu antara mesin boleh merosakkan susunan masa yang ketat.

Sejarah ID Snowflake

Twitter mengumumkan format ID Snowflake pada 2010 sebagai pengganti ID pangkalan data yang meningkat secara automatik, yang tidak boleh diskalakan merentasi banyak pelayan pangkalan data bebas. Nama itu berasal daripada idea bahawa, seperti kepingan salji sebenar, tiada dua ID yang dijana adalah sama. Reka bentuk ini kemudiannya dijadikan sumber terbuka dan disalin dalam bentuk yang diubah suai oleh platform besar lain yang memerlukan perkara yang sama: ID unik yang boleh diisih dan dijana oleh banyak mesin serentak.

Soalan lazim

Apakah ID Snowflake? ID Snowflake ialah nombor 64 bit yang terdiri daripada cap waktu, pengecam mesin dan nombor jujukan, direka supaya banyak mesin boleh menjana ID unik tanpa berkoordinasi antara satu sama lain.

Apakah rumus ID Snowflake? id = ((timestamp βˆ’ epoch) << 22) | (dataCenterId << 17) | (machineId << 12) | sequence, dengan epok ialah tarikh permulaan tetap dan << ialah anjakan bit ke kiri.

Bolehkah saya mengubah epok dalam penjana ini? Tidak. Alat ini sentiasa mengukur cap waktu dari epok Twitter yang tetap, 4 November 2010. Tiada medan untuk menetapkan tarikh permulaan yang lain.

Adakah alat ini menyahkod ID Snowflake sedia ada? Tidak. Alat ini hanya membina ID baharu daripada cap waktu, ID mesin, ID pusat data dan nombor jujukan yang dimasukkan, kemudian menunjukkan pecahan bit ID baharu itu.

Berapakah bilangan ID Snowflake yang boleh dijana oleh satu mesin bagi setiap milisaat? Sehingga 4,096, kerana medan jujukan mempunyai lebar 12 bit (nilai 0 hingga 4,095).

Hingga tahun berapakah penjana ini boleh menghasilkan cap waktu yang sah? Sehingga sekitar Julai 2080. Medan cap waktu 41 bit boleh menyimpan paling banyak kira-kira 69.7 tahun yang diukur dari epok 2010 yang tetap, selepas itu nilainya melimpah keluar daripada medan.

Rujukan

  1. "Mengumumkan Snowflake." Blog Kejuruteraan Twitter, 2010.
  2. "Snowflake ID." Wikipedia, https://en.wikipedia.org/wiki/Snowflake_ID