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.
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.
ID SnowUUID terdiri daripada berbilang segmen:
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 |
Pasang SnowUUID daripada npm:
npm install snowuuid
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());
Antara muka WorkerOptions SnowUUID menyediakan tetapan yang boleh disesuaikan untuk disesuaikan dengan sistem anda:
const generator = new SnowUUID({ epoch: 1610000000000n, // Custom epoch workerId: 3n, // Worker ID datacenterId: 2n // Datacenter ID });
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:
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 ); }
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!