在应用程序架构方面需要一些建议。
我正在开发一个使用Hazelcast作为缓存解决方案的应用程序。该应用程序的技术堆栈包括Hibernate,Spring。 我的要求是最终用户应该能够从缓存中获取数据。作为数据加载过程的一部分;所有表格都逐个转储到各自的缓存中的Hazelcast
最终用户所需的数据是数据的处理形式,即基于外键列加入表后的数据。此连接通过使用谓词查询缓存来完成。操作缓存后,需要创建数据并将其呈现给用户。 我需要一些关于如何设置我的应用程序架构的建议,以便它可以扩展。 以下是我能想到的方法。
a)创建HazelCast群集实例( Hazelcast.newHazelcastInstance())并让它在JVM上运行。让不同的最终用户使用在其客户端计算机上运行的“hazelCastClient”(HazelcastClient.newHazelcastClient(clientConfig))连接到实例,并从缓存中获取数据,在客户端上对其进行操作并使用它。有一次,接近150个客户端可以在那里查询缓存,这意味着我需要建立150个hazelCastClient连接。这似乎是瓶颈。请建议是否有大量连接可能有问题?
b)创建HazelCast群集实例( Hazelcast.newHazelcastInstance())并让它在JVM上运行。创建一个在单独的JVM上运行的REST服务器,并拥有一个hazelCastClient的对象,让所有最终用户点击REST服务器并以JSON的形式获取响应。我可以将数据作为REST调用的一部分来操作将操纵数据作为输出呈现给最终用户。由于REST服务器具有hazelCastClient连接,因此它可以连接到运行在不同JVM上的HazelCast集群并进行查询。我可以通过在负载均衡器后面运行“n”个REST服务器来扩展它,其中每个REST服务器都拥有与集群的连接。问题是这个架构似乎有两个跃点,一个从最终用户到REST服务器,另一个从REST服务器(托管hzCastClientConnection)到HazelCast集群。 此外,如果多个请求命中REST服务器,单个客户端连接可以将多个请求作为服务器吗?
我可以遵循的任何其他方法吗?
答案 0 :(得分:1)
Hazelcast的推荐设置通常是一个独立的群集+客户端,用于连接到此群集。这样,您就可以独立扩展REST API服务器和缓存。
甚至不需要在本地运行Hazelcast节点来连接,因为并非所有节点都拥有所有数据。这意味着你很有可能获得网络往返。
根据缓存数据更改的频率(此时听起来非常稳定),您可能希望在客户端中激活近缓存以在本地保留最近或经常使用的元素(这些元素在数据更改时自动失效) ,但它增加了一点机会在短时间内读取陈旧数据。)
我希望这会有所帮助。
答案 1 :(得分:0)
除了附加组件之外,如果目标是确保只有一个Hazelcast实例在所有服务器或每个JVM上运行,那么两者都很好。
e.g。如果群集中有3个应用服务器,则为每个JVM创建一个实例。数据在声音中更好地复制。 &安培;在应用程序服务器中,所有应用程序(WAR / EAR)都可以使用自己实例中的数据。