Oracle Coherence是一种内存中数据网格产品,也广泛用于跨应用程序服务器节点集群的会话复制。 它支持各种应用程序服务器,例如WebLogic,WebSphere,Tomcat,JBoss等。Coherence * Web是会话管理模块(基于Coherence构建),用于在集群环境中管理会话信息。
我将建议遵循Coherence * Web和Coherence用法的最佳实践,尤其是对于会话管理(也可以在其他Coherence方案中应用):
相干部署拓扑
Coherence支持三种部署模式:
- 进程内–运行Coherence * Web的应用程序服务器已启用存储功能,因此HTTP会话存储与应用程序服务器位于同一位置。 没有单独的缓存服务器用于HTTP会话存储。
- 进程外–运行Coherence * Web的应用程序服务器是Coherence群集中禁用存储的成员。 单独的缓存服务器用于HTTP会话存储。
- 带有Coherence * Extend的进程外–运行Coherence * Web的应用程序服务器不属于Coherence群集; 应用服务器使用Coherence * Extend附加到Coherence群集,该群集包含用于HTTP会话存储的缓存服务器。
建议:
如果需要Coherence将其边界扩展到核心Coherence TCMP(Coherence使用的内部协议)之外,请使用Coherence * Extend,它支持Java,.Net和C ++客户端。
在大多数情况下, 建议使用进程外拓扑,因为它具有独立运行的专用缓存服务器节点,从而促进了松耦合的物理体系结构 。
对于会话复制,使用进程内部署通过Coherence共享关联的应用程序服务器内存(堆)可创建可靠性。 如果应用服务器内存使用量增加,也会影响Coherence性能,反之亦然。
请确保对进程外配置执行以下操作:应用程序服务器节点以禁用存储的模式运行。 您需要将这两个命令行参数(或通过使用Coherence替代文件)传递给应用程序服务器JVM:
Dtangosol.coherence.session.localstorage=false
Dtangosol.coherence.distributed.localstorage=false
请注意,明确需要设置会话存储属性,因为默认情况下在“ session-cache-config.xml”中为“ true”:
………………….
<local-storage system-property="tangosol.coherence.session.localstorage"
………………….
一致性专用节点需要启用存储 (否则,没有人可以存储会话属性),并且应该使用“ session-cache-config.xml”或在其中配置了会话缓存的自定义缓存配置文件:
java –Xms512m -Xmx512m -cp /usr/local/coherence_3_6/lib/coherence.jar:/usr/local/coherence_3_6/lib/coherence-web-spi.war:/usr/local/coherence_3_6/lib/commons-logging-api.jar:/usr/local/coherence_3_6/lib/log4j-1.2.8.jar
-Dtangosol.coherence.cacheconfig=../../../webapps/example/WEB-INF/classes/session-cache-config.xml -Dtangosol.coherence.log.level=6 -Dtangosol.coherence.ttl=2 -Dtangosol.coherence.log=log4j -Dtangosol.coherence.edition=EE
-Dtangosol.coherence.session.localstorage=true com.tangosol.net.DefaultCacheServer
相干缓存拓扑
Coherence支持基于四种缓存拓扑的五种不同类型的缓存:
- 本地缓存拓扑: 本地缓存
- 分区缓存拓扑: 分布式(或分区缓存)
- 复制缓存拓扑: 复制缓存,乐观缓存
- 混合拓扑(本地+分区): 近缓存
您可以使用以下简单准则来选择适当的缓存类型:
情境 | 推荐的缓存类型 |
·您需要更快的读写速度 ·您不需要容错(警告:无容错) | 本地缓存 |
·您需要更快的阅读速度和最佳的容错能力 ·写比较好,但是在复制更新数据之间会有延迟 ·通常用于存储元数据或配置数据 注意:横向扩展(水平可伸缩性)不能是线性的。 | 复制缓存 |
·您需要更快的写入速度但最好的容错能力 ·读取速度相对较快,但取决于它是从本地节点还是从远程节点读取 | 分区或分布式缓存 |
·您需要更快的写入速度但最好的容错能力 ·读取速度相对较快,但取决于它是从本地节点还是从远程节点读取 ·适度写入,提高了重读应用程序的亲和力性能 | 近缓存(由分区缓存备份) |
执行生产清单
Coherence建议在生产环境中执行清单清单,以确保环境和基础结构具有推荐的设置/配置,尤其是在以下方面:
- 网络:
- 组播测试:如果您使用的是组播集群,则必须执行此测试以确保组播配置正确且工作正常。
- 数据报测试–部署应用程序之前,必须运行它以确保网络中没有数据包丢失。 请注意,在1GbE网络中,您应该使用100MB数据包进行测试,并且最小(非平均)成功率应接近100%(〜98-99%)
- TTL –这对于多播网络非常重要,在生产环境中通常建议使用2-5的值
- 硬件,操作系统和JVM设置
- 一致性版本和模式:
- 毋庸置疑,在生产环境中,一致性模式应该是PROD。 它需要在命令行上指定,因为替代配置文件不能用于Edition&Mode。
-Dtangosol.coherence.mode = PROD
- 默认情况下,Coherence在GE(网格版)中运行,并且使用适当的版本(根据您的许可证和需求)来指定正确的版本非常重要。
-Dtangosol.coherence.edition = EE
请注意,群集中的所有节点应使用相同的版本。
- 毋庸置疑,在生产环境中,一致性模式应该是PROD。 它需要在命令行上指定,因为替代配置文件不能用于Edition&Mode。
执行性能调整准则
Coherence建议进行以下调整: OS,Network,JVM和Coherence Network。 有关更多详细信息,请参考Coherence性能调整准则(参考部分)。
启用JMX监视一致性
Coherence为群集,节点,缓存和其他内容的基于JMX的监视提供了OOTB支持。 它至少需要一个节点充当管理者,集群中的其余节点可以使用JMX发布其统计信息。
对于管理节点,
-Dtangosol.coherence.management=all -Dtangosol.coherence.management.remote=true
-Dtangosol.coherence.management.jvm.all=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port= -Dcom.sun.management.jmxremote
对于其他节点,您只需删除“ tangosol.coherence.management”命令行参数。 另外,请注意,在上述情况下,未启用JMX身份验证(需要保护),并且还需要指定JMX端口。
使用Log4J进行一致性日志
尽管Coherence有其自己的日志记录机制,但Log4J在日志轮换和控制适当的日志级别方面更有利。
请注意,您可以同时使用Coherence Log Level参数(-Dtangosol.coherence.log.level)和Log4J配置作为日志记录级别。
请按照以下步骤启用Log4J for Coherence :
- Coherence没有log4j库,因此您需要向类路径添加以下jar:
一个。 将“ commons-logging-api.jar”和“ log4j-1.2.8.jar”复制到/ lib文件夹 - 创建/修改Log4J XML文件,并将其放在Coherence JVM的类路径中。
- 设置命令行参数(或使用替代文件)以将日志参数值指定为“ log4j ”。
请注意,Coherence假定Log4J XML将Logger Name命名为“ Coherence”,否则您需要通过使用单独的参数“ tangosol.coherence.log.logger”来指定记录器名称。
例:
缓存服务器启动脚本
JAVA_OPTS="-Xms$MEMORY -Xmx$MEMORY -Dtangosol.coherence.log.level=6 -Dtangosol.coherence.log=log4j -Dtangosol.coherence.log.logger=MyCoherence"
$JAVAEXEC -server -showversion $JAVA_OPTS -cp "$COHERENCE_HOME/lib/coherence.jar:$ "$COHERENCE_HOME/lib/commons-logging-api.jar:$ COHERENCE_HOME/lib/log4j-1.2.8.jar" com.tangosol.net.DefaultCacheServer $1
Log4J XML
......................
<logger name="MyCoherence">
<level value="3"/>
<appender-ref ref="CoherenceAppender"/>
....................
查看Coherence * Web上下文参数
有几个Coherence Web上下文参数,在Web应用程序中安装Coherence * Web时需要调整这些参数,尤其是以下内容:
- 连贯启用会话上下文
- 一致性会话ID长度
- coherence-session-urlencode-enabled
- 一致性会话线程锁定
- 粘性会话
- 相干reaperdaemon假定位置
- 连贯的可疑属性
注意:这些参数在web.xml中配置,并在调用Coherence * Web安装实用程序时进行检测。
使用一致性作为L2缓存提供程序
一致性也可以用作正在使用的ORM框架的二级缓存提供程序。 将Coherence作为L2缓存也可以为ORM L2缓存提供企业级缓存。
要配置它们,您需要将Coherence指定为L2 Cache Provider(尤其是对于Hibernate L2 Cache ):
- 在Hibernate Configuration文件中将Coherence指定为L2缓存提供程序:
<prop key="hibernate.cache.provider_class"> com.tangosol.coherence.hibernate.CoherenceCacheProvider </prop>
- 基于以下参数加载Hibernate L2缓存的配置。 已有默认的L2缓存配置文件。
-Dtangosol.coherence.hibernate.cacheconfig = /hibernate-cache-config.xml
资源资源
Coherence用户指南: http : //download.oracle.com/docs/cd/E18686_01/coh.37/e18690/toc.htm