首页 分享 【AI图像生成网站&Golang】雪花算法

【AI图像生成网站&Golang】雪花算法

来源:花匠小妙招 时间:2024-11-23 15:19

AI图像生成网站

目录

一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与调试(等待更新)

雪花算法

        雪花算法 (Snowflake) 是一种高效、可扩展的分布式唯一ID生成算法,最早由 Twitter 开发,并被广泛应用于各种系统中。本文将结合 Sonyflake 的实现代码,讲解雪花算法的原理与实现。

雪花算法之所以能够作为一种分布式 ID 生成策略,是因为它能够保证:

全局唯一性:无重复 ID。高效性:生成速度快。有序性:ID 基于时间戳,有趋势递增的特性。

它生成的 64 位二进制 ID 通常由以下几部分组成:

符号位 (1 bit):始终为 0。时间戳 (41 bits):记录自某个时间起始点的毫秒数。机器ID (10 bits):标识生成 ID 的机器节点。序列号 (12 bits):用于每毫秒内生成多个 ID。

其中,符号位为0是因为 Snowflake ID 被设计为无符号整数(uint64),没有负数的场景,符号位只是为了占位,以保持位数的一致性。

假设生成的 ID 为 145038507964891137,转化为二进制:
0000001000001000011001000101010011111101000000000000000000000001

这串二进制可以分解为 64 位:

在这里插入图片描述

位数范围(从左到右)部分二进制值十进制值说明1符号位00固定为 0,表示正数2 - 40时间戳00000010000010000110010001010100111111013829335678自起始时间以来的毫秒数41 - 56机器 ID100000000000000032768当前机器编号57 - 64序列号000000011当前毫秒内生成的第 1 个 ID

Sonyflake 简介

Sonyflake 是 Go 语言实现的雪花算法改进版本,相比 Twitter 的实现,它:

使用更精准的时间单位。提供了自定义机器 ID 的能力。支持长时间运行,且避免了时钟回拨问题。

具体的改进有:

改进点Snowflake 的问题Sonyflake 的优化符号位固定占用 1 位,没有实际用途去掉符号位,增加实际可用位数。机器 ID 长度10 位,只支持最多 1024 个节点16 位,支持最多 65536 个节点。时间戳处理依赖系统时间,易受时钟回拨影响提供时钟回拨检测,支持自定义起始时间戳,增强容错能力。序列号长度12 位,支持每毫秒最多生成 4096 个 ID8 位,支持每毫秒最多生成 256 个 ID,节省位数并满足一般业务需求。中央协调器依赖需要依赖 ZooKeeper 或其他工具分配机器 ID通过回调函数动态获取机器 ID,减少依赖,降低运维复杂度。并发和适用场景优化针对大规模分布式系统设计更适合中小规模分布式系统,尤其是局部部署场景,如小型服务集群或边缘计算。

本项目使用 Sonyflake 来生成用户、分组和作品的唯一 ID:

package snowflake import ("fmt""github.com/sony/sonyflake""time" ) var (sonyFlake *sonyflake.Sonyflake // 实例sonyMachineID uint16 // 机器ID ) // 获取机器 ID func getMachineID() (uint16, error) {return sonyMachineID, nil } // 初始化 Sonyflake func Init(machineId uint16) (err error) {sonyMachineID = machineIdt, _ := time.Parse("2006-01-02", "2024-11-16") // 设置起始时间settings := sonyflake.Settings{StartTime: t, // 起始时间MachineID: getMachineID, // 获取机器 ID}sonyFlake = sonyflake.NewSonyflake(settings) // 生成节点实例return } // 获取唯一 ID func GetID() (id uint64, err error) {if sonyFlake == nil {err = fmt.Errorf("sonyflake not inited")return}id, err = sonyFlake.NextID()return }

123456789101112131415161718192021222324252627282930313233343536373839 步骤解析

(1) 初始化实例

通过 Init(machineId uint16) 初始化 Sonyflake 实例,设置了:

开始时间:2024-11-16。机器 ID:通过 getMachineID 获取。

settings := sonyflake.Settings{StartTime: t, // 起始时间MachineID: getMachineID, // 获取机器 ID } sonyFlake = sonyflake.NewSonyflake(settings) // 创建实例 12345

(2) 生成唯一 ID

使用 sonyFlake.NextID() 获取唯一 ID,每次调用都会根据时间戳和机器 ID 自动生成新的 ID。

id, err = sonyFlake.NextID() 1

(3) 机器 ID 获取

getMachineID 函数为每个实例分配唯一的 uint16 值,用于区分生成 ID 的节点。

func getMachineID() (uint16, error) {return sonyMachineID, nil } 123 Sonyflake 的 ID 生成

以下是调用代码生成示例 ID的步骤:

package main import ("fmt""snowflake" ) func main() {err := snowflake.Init(1) // 初始化机器 ID 为 1if err != nil {panic(err)}id, err := snowflake.GetID() // 获取唯一 IDif err != nil {panic(err)}fmt.Printf("生成的ID: %dn", id) }

1234567891011121314151617181920

相关知识

18款AI绘画生成软件推荐,必备工具,一键生成绘画!
AI插花生成网站有哪些:探索创意艺术与技术的完美融合
给力!南开团队刷新图像生成模型质量和速度!浪潮信息AIStation支撑
图像识别算法有哪些
推荐哪些好用的AI生成景观设计绘画工具软件
实用AI绘画网站工具盘点
全面盘点:主流AI动态风景生成软件与工具一览,满足你的创意需求
ai生成景观的是什么软件:探寻AI景观设计工具
AI咒语生成花:揭秘人工智能如何打造创意植物艺术宴
AI 全知道:从入门到精通,开启智能新时代

网址: 【AI图像生成网站&Golang】雪花算法 https://www.huajiangbk.com/newsview676099.html

所属分类:花卉
上一篇: 有助安眠的花茶有哪些
下一篇: 哪些花草植物可以提神和安神的?

推荐分享