java中如何实现实例间同步?

问题描述

假设我有一个具有同步方法(线程安全)的 Java Spring 应用程序。如果我的应用程序部署在单个实例上,那么我可以说它是线程安全的。但是,要扩展,我们必须在多个实例上进行部署。如何实现实例间同步?

解决方法

问题似乎与线程安全无关。单个应用程序可以有多个线程,应用程序中的某些方法可以是线程安全的或不安全的。

有了这个,如果您有多个需要访问权限的给定应用程序实例,那么它在评论中如@Michael所说:它是一种进程间通信(IPC)形式。有两种方法可以实现这一点:消息传递和共享内存。可以在以下答案中找到一些示例:How to have 2 JVMs talk to one another

但是,由于您使用的是 Java Spring,一个 Web 框架,您可能已经在使用基于网络的服务。为什么不通过外部共享服务让同一服务的多个实例共享状态?对于 RedisRabbitMQ 这样的消息代理来说,这听起来是一个很好的用例。正如 Reddis 在其主页上所述:

聊天、消息和队列

Redis 通过模式匹配和多种数据支持 Pub/Sub 列表、排序集和散列等结构。这允许 Redis 支持高性能聊天室,实时评论流, 社交媒体提要和服务器互通。 Redis 列表数据 结构使实现轻量级队列变得容易。列出报价 原子操作以及阻塞功能,使它们 适用于需要可靠的各种应用 消息代理或循环列表。