主要观点总结
本文介绍了对Seata改进版雪花算法的理解和分析,包括其工作原理、优势以及可能存在的问题。文章还讨论了该算法在数据库中的表现,特别是在避免数据库页分裂方面的效果。
关键观点总结
关键观点1: Seata改进版雪花算法的工作原理和特点
该算法通过调整节点ID和时间戳的位置,解除了与操作系统时间戳的强绑定关系。每个节点生成的是单调递增的ID序列,全局来看并不保证单调递增。
关键观点2: Seata改进版雪花算法的优势
该算法能够在节点内部保持单调递增,减少数据库的页分裂,提高数据库性能。同时,通过巧妙的节点ID设计,能够支持大量的节点。
关键观点3: Seata改进版雪花算法的潜在问题
虽然该算法能够在节点内部保持单调递增,但在全局范围内并不保证单调递增。在极端情况下,频繁的数据删除操作可能会阻碍数据的收敛,影响算法的稳定状态。
关键观点4: 推荐的学习资源
推荐学习Github上标星11K的微服务实战项目mall-swarm,全套视频教程涵盖了Spring Cloud核心组件、微服务项目实战、Kubernetes容器化部署等内容。
文章预览
Boot+Cloud项目学习: macrozheng.com 昨天小伙伴使用Mybaits-Plus开发的项目线上( 集群、K8S )出现了主键重复问题,其报错如下: Mybatis-Plus启动时会通过 com.baomidou.mybatisplus.core.toolkit.Sequence 类的 getMaxWorkerId() 和 getDatacenterId() 方法来初始化workerId和dataCenterId()。 protected long getMaxWorkerId ( long datacenterId, long maxWorkerId) { StringBuilder mpid = new StringBuilder(); mpid.append(datacenterId); String name = ManagementFactory.getRuntimeMXBean().getName(); if (StringUtils.isNotBlank(name)) { mpid.append(name.split( "@" )[ 0 ]); } return ( long )(mpid.toString().hashCode() & '\uffff' ) % (maxWorkerId + 1L ); } protected long getDatacenterId ( long maxDatacenterId) { ...省略部分代码... byte [] mac = network.getHardwareAddress(); if ( null != mac) {
………………………………