【问题标题】:Entity Listener and caching for distributed system分布式系统的实体监听器和缓存
【发布时间】:2015-07-16 14:10:52
【问题描述】:

我们有两个应用服务器。一个是应用服务器,另一个是 API 服务器。两者都有不同的缓存系统。如果一个数据库发生变化,另一个数据库不会被知道。下面是我们架构的图像,我们使用 spring 框架(Ehcache)进行缓存。

我们的项目中也有实体监听器。如果一个流程更改了数据库,那么其他流程不会受到影响。 我们如何同步应用服务器和缓存?请帮忙。

【问题讨论】:

  • 如果两个应用程序缓存完全相同类的实例,您可以简单地集群 EHCACHE 实例。一台服务器上的更改将反映在另一台服务器上。您必须确保两台服务器缓存完全相同的实体,以便没有人绕过缓存直接更新数据库。您可以通过在两个应用中使用相同的 EHCACHE 配置来实现这一点。
  • 您也可以考虑将所有可缓存的实体类与必要的缓存配置一起打包到一个 JAR 中。然后,所有应用程序都将使用这个单一的 JAR。将来,如果您为 Web 应用程序或 API 添加更多应用程序服务器,则所有服务器将继续使用相同的缓存配置。这将提供的另一个优势是在需要时可以灵活地切换缓存实现。
  • 感谢 Manish 建议 Ehcache 集群。我们在 API 服务器中创建了一个实体侦听器,用于 Web 通知。如果应用服务器更改实体,则 API(Web)服务器不知道。我们可以为两台服务器或两台服务器的一个配置集群 spring 配置。如果是,请您建议我们如何实现这一点。提前致谢。
  • 如果缓存相同类的实例并且使用相同的缓存名称,则集群配置可以跨机器相同。 EHCACHE 文档中提供了有关集群配置的详细信息。

标签: database spring jakarta-ee application-server distributed-system


【解决方案1】:

我可以想到几种方法来做到这一点。

1.带复制的集群:如果你想使用 Spring 的开箱即用缓存提供程序,即 Ehcache,这基本上意味着你的缓存是节点级缓存,需要复制。检查以下链接以使用 Terracotta 配置 ehcache 集群 http://ehcache.org/documentation/2.6/configuration/distributed-cache-configuration

2。集中式缓存服务器 我个人的选择是集中式缓存,如果需要,它会为水平扩展提供开箱即用的支持。这将涉及从节点级别删除缓存,而是将其集中在缓存服务器上。所以基本上你的缓存服务器位于你的数据库和你的应用程序节点之间。你可以看看 Memcached、Aerospike 和 Redis。

【讨论】:

    猜你喜欢
    • 2016-10-29
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    相关资源
    最近更新 更多