用于唯一ID的缓存解决方案



我们希望构建一个Unique ID的分布式缓存,用于应用程序中识别每个事务。UNIQUE ID是使用java代码中的一些自定义逻辑(比如DATE+一些随机数(生成的。

该应用程序在8个应用程序服务器中运行(负载平衡(。一旦应用程序使用了UNIQUE ID,就需要使用以前使用的值更新缓存。因此,缓存对象更新应该在多线程环境中进行。

在每个应用程序服务器中保留本地缓存是否更好(每个节点特定的唯一ID生成序列(。但这并不能保证应用程序中的事务ID序列。

我们一直在寻找hazlecast、geode、ignite等选项来构建分布式缓存(对等缓存(。但在多线程环境中进行缓存更新时,哪一种会很好地工作。

哪个缓存解决方案/模型最适合这个问题。

不需要缓存

您不需要缓存解决方案来解决您的问题。

您可以生成通用的唯一标识符,而无需在系统之间进行任何协调。

UUID

一个合适的解决方案已经被发明、标准化、实施并广泛采用:UUID

版本1 UUID表示空间和时间上的一个点,取当前时刻和机器的MAC地址,并添加一个任意数字,该数字在主机时钟重置时递增,在UUID生成器重新启动时递增。

所有这些数据都用128位的值表示,并指定哪些位表示哪些数据。向人类显示文本的规范格式使用十六进制字符加上连字符。

示例:

1154cf8a-6f7b-11ea-bc55-0242ac130003

您要求:

自定义逻辑(比如DATE+一些随机数(

如上所述,某些版本的UUID只包含日期时间加上任意数字和其他信息。听起来你的团队在不明智地重新发明轮子。

UUID在整个IT行业中被广泛使用。你会在你的电子邮件标题中找到它们来识别每封邮件。您会发现它们是交易ID。您会发现它们是对象ID。

UUID生成器实现构建在几乎所有的操作系统(macOS、Linux、BSD、Windows等(中。库是公开可用的,例如OSSP-UUID。更强大的数据库(如Postgres(支持UUID作为本机数据类型,以实现高效存储和易用性。一些软件平台(如Java(包括UUID的数据类型和生成器实现。

UUID的目的是,各种软件系统可以自己动态生成UUID值,而不需要中央机构,不需要分布式缓存,也不需要与其他系统协调。

最新更新