配置运行在容器中的App Connect Enterprise嵌入式全局缓存
随着App Connect Enterprise 13.0.3.0的发布,新的嵌入式全局缓存已作为较旧的WebSphere eXtreme Scale(WXS)嵌入式缓存的替代品引入,现在称为嵌入式WXS网格。如产品方向声明中所述,嵌入式WXS网格现已弃用,但只要Java 8在ACE中继续受支持,它仍将保持功能。
与其前身类似,嵌入式全局缓存允许您在同一集成流、不同流之间甚至跨多个集成服务器存储和重用数据,从而消除了对数据库等替代持久性解决方案的需求。
嵌入式全局缓存的关键优势之一是其同时支持Java 8和Java 17,以及简化的配置和操作。它针对容器化环境进行了优化,默认启用,在存储数据之前几乎不消耗CPU和内存资源。它还可以独立运行,无需复制,类似于本地缓存。
在本文中,我们将指导您完成在基于Kubernetes的环境(如Red Hat OpenShift)中运行的集成运行时中设置嵌入式全局缓存的配置过程。我们将涵盖分步说明和重要注意事项,以帮助您在容器化平台中顺利启动和运行ACE。
全局缓存配置参数
我们将重点关注server.conf.yaml中全局缓存配置节的以下参数。
|
|
具有三个集成运行时的示例缓存配置
在每个集成运行时中,我们部署与该服务器中的嵌入式全局缓存交互的消息流。以下配置在每个集成运行时的server.conf.yaml中设置:
集成运行时IR1
- replicateWritesTo:集成运行时IR1配置为将其自身消息流的缓存写入复制到集成运行时IR2,因此由IR1的消息流放入或更新到IR1的嵌入式缓存的任何值将异步复制到IR2。如果配置了多个replicationWritesTo服务器,异步写入请求将发送到所有配置的集成服务器。
- replicateReadsFrom:IR1配置为从服务器2复制任何缺失的读取,即如果值不存在于IR1的嵌入式缓存中,它将在继续之前同步从IR2请求该值。
- ReplicationListener:IR1还配置为允许其他服务器通过端口7900上的复制监听器读取和写入其自身的缓存。
集成运行时IR2
- ReplicationListener:集成运行时IR2配置为允许其他服务器通过端口7900上的复制监听器读取和写入其自身的缓存。
集成运行时IR3
- replicateWritesTo:集成运行时IR3配置为将其自身消息流的缓存写入复制到集成运行时IR1和集成运行时IR2。因此由IR3的消息流放入或更新到IR3的嵌入式缓存的任何值将异步复制到IR1和IR2。
- replicateReadsFrom:IR3配置为从IR1和IR2复制任何缺失的读取,即如果值不存在于IR3的嵌入式缓存中,它将在继续之前同步从IR1和IR2请求该值。
在Kubernetes环境中,每个IntegrationRuntime作为一个POD运行。为了在IR之间进行缓存的读取和写入通信,必须在集群内暴露ReplicationListener端口。
您可以在创建IntegrationRuntime时通过额外配置IntegrationRuntime CR上的服务来完成此操作。
您还可以通过添加以下节来编辑现有的IR YAML:
|
|
一旦IR创建/更新了服务详细信息,您可以观察到端口7900对该服务可用,在此示例中为global-cache-eg1-ir。
然后,您可以使用服务名称作为主机名在暴露的端口上的pod之间进行通信。正如您可能已经注意到的,我们在ReplicationServers下使用了以下主机名和端口进行配置。主机名采用以下形式:[service name].[namespace].svc
|
|
您现在可以通过处理一些将数据写入IR1中的缓存的消息并在IR2或IR3中运行的另一个消息流中检索/读取值来测试您的消息流。
在容器中管理缓存
新的嵌入式全局缓存的管理通过两个新的ibmint命令完成:ibmint display cache和ibmint clear cache,如果您在本地VM环境中运行。在容器环境中,您可以使用global-cache资源管理器来查询映射统计信息。
要查看映射列表:
|
|
您也可以通过ACE仪表板UI查看它。
要清除特定映射的缓存:
|
|
一些额外的管理API:
- 获取全局缓存复制监听器对象:
GET /apiv2/servers/{server}/resource-managers/global-cache/replication-listener - 列出全局缓存复制服务器对象:
GET /apiv2/servers/{server}/resource-managers/global-cache/replication-servers - 获取特定映射的详细信息:
GET /apiv2/servers/{server}/resource-managers/global-cache/maps/{global-cache-map-name}
在容器中使用嵌入式全局缓存的注意事项
在容器环境中,建议设置一个“网格”,其中每个IR都配置为读取和写入所有其他IR,以便缓存数据在所有IR的所有副本中都是最新的。一个可能的风险是,如果您有一个定期更新的缓存项,没有任何过期时间且连接不可靠,您可能会遇到不同服务器对该缓存项具有不同值的情况,其中更新成功写入到例如4个其他服务器中的3个,但与第4个服务器的连接中断,因此服务器4仍然具有旧值,并且因为服务器4有一个值,它不会向其他服务器询问该值是什么。
如果您有多个IR Pod的副本,缓存值在每个副本中可能不同,具体取决于消息如何路由到每个副本。在多副本场景中设计缓存拓扑时应牢记这一因素。