Memperkenalkan SnowUUID: Penjana UUID Teragih Diinspirasikan oleh Snowflake

Patricia Arquette
Lepaskan: 2024-11-04 07:23:31
asal
856 orang telah melayarinya

Dalam sistem yang diedarkan, memastikan ID unik merentas berbilang pelayan atau proses boleh menjadi mencabar. ID mestilah unik, dijana dengan cepat dan kadangkala menyampaikan maklumat tentang sumbernya. Diilhamkan oleh algoritma penjanaan ID Snowflake Twitter, saya membangunkan SnowUUID, penjana UUID teragih yang direka untuk aplikasi Node.js. SnowUUID menggabungkan ketepatan dan kebolehskalaan untuk menjana pengecam unik mengikut masa yang boleh disesuaikan untuk sebarang persediaan yang diedarkan.

Mengapa SnowUUID?

SnowUUID membawa kekuatan algoritma Snowflake Twitter ke dalam pakej npm yang padat dan mudah digunakan untuk pembangun JavaScript. Setiap ID yang dijana oleh SnowUUID ialah integer 64-bit, yang mengandungi maklumat tentang cap waktu, pusat data, pekerja dan jujukan, menjadikannya sesuai untuk aplikasi yang diedarkan di mana setiap pelayan atau proses menjana ID secara bebas.

Introducing SnowUUID: A Distributed UUID Generator Inspired by Snowflake

Ciri-ciri SnowUUID

  • ID Tertib Masa: ID dijana dalam urutan tertib masa, memastikan ia boleh diisih mengikut kronologi.
  • Pilihan Penyesuaian: SnowUUID membenarkan konfigurasi pusat data dan ID pekerja, menyokong persediaan berbeza merentas sistem teragih.
  • Keupayaan Tinggi: Dengan had jujukan setiap milisaat, SnowUUID boleh mengendalikan keperluan pemprosesan tinggi, menghalang konflik ID.

Bagaimana SnowUUID Berfungsi

ID SnowUUID terdiri daripada berbilang segmen:

  1. Cap masa: Memastikan susunan kronologi ID.
  2. ID Pusat Data: Membezakan antara pusat data yang berbeza.
  3. ID Pekerja: Membezakan antara pekerja yang berbeza dalam pusat data.
  4. Jujukan: Memastikan berbilang ID unik boleh dibuat dalam milisaat yang sama.

Berikut ialah pecahan pengedaran bit untuk setiap segmen:

Segment Bits Allocated
Timestamp 41 bits
Datacenter ID 5 bits
Worker ID 5 bits
Sequence Number 12 bits

Penggunaan

Pasang SnowUUID daripada npm:

npm install snowuuid
Salin selepas log masuk

Untuk menjana ID unik dengan SnowUUID, import pakej dan mulakan contoh baharu:

const { SnowUUID } = require('snowuuid');

// Initialize SnowUUID with options
const generator = new SnowUUID({
    epoch: 1609459200000n,  // Starting from January 1, 2021
    workerId: 1n,           // Unique ID for each worker
    datacenterId: 1n        // Unique ID for each datacenter
});

// Generate a unique ID
const uniqueId = generator.nextId();
console.log(uniqueId.toString());
Salin selepas log masuk

Menyesuaikan SnowUUID

Antara muka WorkerOptions SnowUUID menyediakan tetapan yang boleh disesuaikan untuk disesuaikan dengan sistem anda:

  • zaman: Masa mula tersuai dalam milisaat.
  • workerId: Pengecam unik untuk setiap pekerja dalam pusat data.
  • datacenterId: Pengecam unik untuk setiap pusat data.
const generator = new SnowUUID({
    epoch: 1610000000000n,  // Custom epoch
    workerId: 3n,           // Worker ID
    datacenterId: 2n        // Datacenter ID
});
Salin selepas log masuk

Di Bawah Tudung: Kod

Di teras SnowUUID ialah fungsi nextId(), yang menjana ID unik dengan menggabungkan cap masa, ID pusat data, ID pekerja dan bit jujukan. Begini cara ia berfungsi:

  • Pengendalian Jam: Algoritma memastikan jam sistem sentiasa bergerak ke hadapan. Jika jam bergerak ke belakang, ralat akan dilemparkan untuk menghalang ID pendua.
  • Pengendalian Limpahan Jujukan: Apabila had jujukan dicapai dalam milisaat, SnowUUID menunggu sehingga milisaat seterusnya untuk terus menjana ID.

Contoh Kod: Fungsi nextId

nextId() {
    let timestamp = SnowUUID.now();

    if (timestamp < this.#lastTimestamp) {
        throw new Error(
            `Clock moved backwards. Unable to generate ID for ${this.#lastTimestamp - timestamp} milliseconds.`
        );
    }

    if (timestamp === this.#lastTimestamp) {
        this.#sequence = (this.#sequence + 1n) & SEQUENCE_MASK;
        if (this.#sequence === 0n) {
            timestamp = this.tilNextMillis(this.#lastTimestamp);
        }
    } else {
        this.#sequence = 0n;
    }

    this.#lastTimestamp = timestamp;

    return (
        ((timestamp - this.#epoch) << DEFAULT_TIMESTAMP_LEFT_SHIFT) |
        (this.#datacenterId << DEFAULT_DATACENTER_ID_SHIFT) |
        (this.#workerId << DEFAULT_WORKER_ID_SHIFT) |
        this.#sequence
    );
}
Salin selepas log masuk

Kesimpulan

SnowUUID menawarkan penyelesaian yang berkuasa, boleh disesuaikan dan cekap untuk penjanaan UUID yang diedarkan, sesuai untuk aplikasi yang memerlukan kebolehskalaan tinggi dan ID unik merentas berbilang sistem. Sama ada untuk analitis, pemesejan atau perkhidmatan mikro, SnowUUID memastikan pengecam yang unik dan mengikut masa, membantu anda membuat skala dengan yakin.

Teroka SnowUUID di GitHub: Repositori SnowUUID

Atas ialah kandungan terperinci Memperkenalkan SnowUUID: Penjana UUID Teragih Diinspirasikan oleh Snowflake. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan