分布式ID
雪花算法
算法原理:
每家算法各有不同:
百度:只支持雪花算法,组件已无人维护。
滴滴:只支持数据库后端,适合对id有高可用需求。
美团leaf:号段模式和雪花算法,适合 多场景的分布式id。
SnowFlake算法的优点:
(1)高性能高可用:生成时不依赖于数据库,完全在内存中生成。
(2)容量大:每秒中能生成数百万的自增ID。
(3)ID自增:存入数据库中,索引效率高。
SnowFlake算法的缺点:
依赖与系统时间的一致性,如果系统时间被回调,或者改变,可能会造成id冲突或者重复。
SnowFlake可以保证:
所有生成的id按时间趋势递增
整个分布式系统内不会产生重复id(因为有datacenterId和workerId来做区分)
号段模式
是当下分布式ID生成器的主流实现方式之一,号段模式可以理解为从数据库批量的获取自增ID,每次从数据库取出一个号段范围,例如 (1,1000] 代表1000个ID,具体的业务服务将本号段,生成1~1000的自增ID并加载到内存。
CREATE TABLE id_generator (
id int(10) NOT NULL,
max_id bigint(20) NOT NULL COMMENT '当前最大id',
step int(20) NOT NULL COMMENT '号段的布长',
biz_type int(20) NOT NULL COMMENT '业务类型',
version int(20) NOT NULL COMMENT '版本号',
PRIMARY KEY (`id`)
)
iz_type :代表不同业务类型
max_id :当前最大的可用id
step :代表号段的长度
version :是一个乐观锁,每次都更新version,保证并发时数据的正确性
idbiz_typemax_idstepversion1101100020000
分布式session
session不是服务器管理的,是tomact管理的。
session原理:
session保存信息,如何传递的。 set cookie 》携带cookie(cookie协议,浏览器标准) 》传给session》返回前端。
Spring-session +redis 可实现
JWT实现
Json web tocken jwt.io
Jwt :tocken 里面的内容可以被解析的,但是不能被篡改。
##jwt配置
#签发者
jwtconfig.issuer: xxx
# 密钥
jwtconfig.secret: xxx,xxx
# 接收jwt的一方
jwtconfig.audience: light-data
# 过期时间,时间戳
jwtconfig.expiresSecond: xxx