我们希望为应用程序中使用的唯一in构建一个分布式缓存,以标识每个事务。唯一ID是使用java代码中的一些自定义逻辑(比如日期+某个随机数)生成的。
应用程序在8个应用程序服务器上运行(负载平衡)。一旦应用程序使用了唯一ID,则需要使用之前使用的值更新缓存。因此,缓存对象更新应该在多线程环境中完成。
在每个应用程序服务器中保留本地缓存(特定于每个节点的唯一ID生成序列)是否更好?但这并不能保证应用程序中的事务ID序列。
我们一直在寻找hazlecast、geode、ignite等选项,以构建分布式缓存(点对点缓存).But,当多线程环境中存在缓存更新时,可以很好地工作。
哪种缓存解决方案/模型最适合这个问题。
发布于 2020-03-27 00:00:26
不需要缓存
您不需要为您的问题提供缓存解决方案。
您可以生成通用唯一的标识符,而无需在系统之间进行任何协调。
UUID
一个合适的解决方案已经被发明、标准化、实现并被广泛采用:UUID
版本1的UUID表示空间和时间上的一个点,将当前时刻与机器的MAC address一起获取,并添加一个任意数字,该数字在主机时钟重置时递增,当UUID生成器重新启动时递增。
所有这些数据都以128位的值表示,并指定哪些位表示哪些数据段。向人类显示文本的规范格式使用由连字符分隔的十六进制字符。
示例:
1154cf8a-6f7b-11ea-bc55-0242ac130003
您要求的是:
自定义逻辑(比方说日期+一些随机数)
如上所述,一些版本的UUID包含的就是这样,一个日期-时间加上一个任意数字加上其他信息。听起来你的团队正在不明智地重新发明轮子。
UUID在IT行业中被广泛使用。您将在您的电子邮件标题中找到它们,以标识每封邮件。您会发现它们是事务ID。您会发现它们是对象ID。
UUID生成器的实现几乎内置于所有操作系统(macOS、Linux、BSD、Windows等)中。库是公开可用的,比如OSSP uuid。更强大的数据库,如Postgres,支持UUID作为原生数据类型,以实现高效的存储和易用性。一些软件平台,如Java,包括用于UUID的数据类型和生成器实现。
UUID的目的是各种软件系统可以自己动态地生成UUID值,而不需要中央授权机构,不需要分布式缓存,也不需要与其他系统协调。
https://stackoverflow.com/questions/60867896
复制相似问题