Dengan perkembangan berterusan perniagaan Internet, sistem penjanaan ID telah menjadi salah satu komponen yang sangat diperlukan. Sistem penjanaan ID teragih boleh menyediakan perkhidmatan penjanaan ID unik untuk sistem teragih bagi memastikan operasi sistem perniagaan yang betul. Artikel ini akan memperkenalkan pelaksanaan sistem penjanaan ID teragih berdasarkan go-zero.
Mengapa sistem penjanaan ID teragih diperlukan?
Dalam sistem yang diedarkan, bahagian perkhidmatan yang berbeza perlu bekerja bersama-sama Dalam keadaan biasa, perkhidmatan yang berbeza tidak boleh berkomunikasi dengan merujuk objek perkhidmatan lain. Ini memerlukan penggunaan pengecam unik untuk pemindahan dan akses. Sistem penjanaan ID yang diedarkan boleh menyediakan pengecam unik untuk setiap perkhidmatan untuk merealisasikan komunikasi dan penghantaran data antara perkhidmatan.
Biasanya, penjana ID dalam sistem adalah perkhidmatan titik tunggal Disebabkan kegagalan titik tunggal atau kesesakan prestasi, ia akan menjejaskan operasi normal keseluruhan sistem. Apabila skala sistem berkembang, penjana ID satu titik tidak dapat menampung permintaan serentak yang tinggi, yang memerlukan pemisahan penjana ID untuk melaksanakan sistem penjanaan ID teragih.
Pelaksanaan sistem penjanaan ID teragih
Sistem penjana ID teragih secara amnya perlu memasukkan bahagian berikut:
- Penjana: menjana ID unik;
Storan: menyimpan ID yang dijana untuk mengelakkan pertindihan; - Kunci teragih: memastikan berbilang penjana tidak akan menghasilkan ID yang sama pada masa yang sama.
-
Untuk ketiga-tiga bahagian ini, kami menggunakan komponen dalam go-zero untuk membina sistem penjanaan ID teragih yang mudah.
Penjana
Dalam go-zero, anda boleh menggunakan algoritma kepingan salji untuk menjana ID unik. Algoritma kepingan salji telah dibangunkan oleh Twitter dan boleh menjana ID unik 64-bit, yang terdiri daripada tiga bahagian: cap waktu, ID nod dan nombor siri.
Dalam go-zero, gunakan kod berikut untuk melaksanakan algoritma snowflake:
package generate
import (
"github.com/go-redis/redis"
"github.com/tal-tech/go-zero/core/lock"
"github.com/tal-tech/go-zero/core/stores/redis"
)
func GenerateId(nodeId int64, conn redis.Redis) (int64, error) {
redisLock := lock.NewRedisLock(conn, "id_gen_lock")
if err := redisLock.Lock(); err != nil {
return 0, err
}
defer redisLock.Unlock()
redisKey := "id_gen:" + strconv.Itoa(int(nodeId))
id := snowflake.Generate(nodeId)
_, err := conn.SetNX(redisKey, id, 0).Result()
if err != nil {
return 0, err
}
return id, nil
}
Salin selepas log masuk
Dalam kod ini, kami menggunakan komponen redis dalam go-zero untuk menjana ID unik dan menyimpannya dalam redis.
Storan
Kami menggunakan redis sebagai storan penjana ID yang diedarkan, dan menggunakan arahan setnx dalam redis untuk memastikan bahawa ID yang dijana tidak akan berulang. Setiap kunci yang disimpan dalam redis sepadan dengan ID unik.
Kunci teragih
Dalam komponen kunci go-zero, kita boleh menggunakan kunci redis untuk melaksanakan kunci teragih. Dalam proses menjana ID, kunci redis digunakan untuk memastikan hanya satu penjana boleh menjana ID unik pada masa yang sama untuk mengelakkan ID pendua.
redisLock := lock.NewRedisLock(conn, "id_gen_lock")
if err := redisLock.Lock(); err != nil {
return 0, err
}
defer redisLock.Unlock()
Salin selepas log masuk
Menggunakan
Dengan kod di atas, kita boleh membina sistem penjana ID teragih berdasarkan go-zero, hanya gunakannya seperti berikut:
nodeId := 1
id, err := generate.GenerateId(nodeId, conn)
if err != nil {
fmt.Println("generate id error:", err)
}
fmt.Println(id)
Salin selepas log masuk
Dalam ini Dalam contoh, kami memasukkan nodeId, menjana ID unik dan menyimpannya dalam redis. Dalam sistem teragih, fungsi ini boleh dipanggil secara berasingan menggunakan nodeId yang berbeza untuk mendapatkan ID unik.
Ringkasan
Melalui pengenalan artikel ini, kami telah mengetahui tentang idea reka bentuk dan perincian pelaksanaan penjana ID yang diedarkan Melalui komponen dalam go-zero, kami boleh membina dengan pantas Sistem Penjana ID.
Sistem penjanaan ID teragih memainkan peranan penting dalam sistem teragih dan boleh memberi jaminan untuk operasi normal sistem teragih. Dalam amalan, kita perlu menyesuaikan pelaksanaan penjana ID dengan sewajarnya mengikut keperluan perniagaan tertentu untuk memastikan operasi sistem yang betul.
Atas ialah kandungan terperinci Sistem penjanaan ID teragih berdasarkan go-zero. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!