调整TCMP行为
本章提供了指令TCMP默认设置改变。 TCMP还提供简要概述。参见“了解TCMP TCMP其他细节。此外,请参阅Oracle Coherence的管理员指南,其中包括许多微调的建议和说明。
本章包含以下各节:
概述TCMP数据传输
节流数据传输
减少负载的捆绑包
更改数据包重传行为
配置传输数据包池大小
配置的数据包缓冲区的大小
调整数据包的最大尺寸
更改分组扬声器音量阈值的
更改消息处理行为
更改TCMP插座供应商实施
10.1概述TCMP数据传输
集群成员使用Tangosol的集群管理协议(TCMP)通信。 TCMP是一个基于IP的协议,用于来发现群集成员,集群管理,提供服务,并发送数据。 TCMP是异步协议;通信从未阻断,甚至当许多线程在服务器上同时??进行通信。异步通信也意味着,网络(例如,在两个不同的站点之间的路由的网络)的延迟不会影响群集的通过,但它会影响某些操作的速度。
TCMP协议是非常可调,利用具体的网络拓扑结构,或低带宽和高延迟段在地理位置分散的群集添加宽容。相干与预先设定的配置。一些TCMP属性是动态的自我配置在运行时,但也可以覆盖和锁定部署。 TCMP的行为应始终改变的基础上进行性能测试。连贯性包括数据报测试是用来评价TCMP数据在网络上的传输性能。使用数据报测试工具来测试网络性能的说明,请参阅Oracle Coherence的管理员指南。
TCMP传输数据的行为配置内Tangosol的相干override.xml的的文件,使用的<packet-publisher>,<packet-speaker>,<incoming-message-handler>和<outgoing-message-handler>元素。请参阅附录A“操作配置元素,”在本章中讨论的所有的的TCMP相关??元素的参考。
10.2节流数据传输
使用的<flow-control>和<traffic-jam>元素控制数据传输的速度。这些元素可以帮助实现最大的吞吐量,用最少的数据包失败。在本节中所讨论的限制设置改变时,处理速度较慢的网络,或小数据包缓冲区。
在本节包括以下主题:
调整分组流量控制行为
禁用分组流量控制
调整包交通堵塞行为
10.2.1调整数据包的流量控制行为
用于动态流量控制油门包传输到一个给定的群集成员基于点对点传输统计数据,衡量集群成员的响应率。流量控制停止群集成员从充斥着包,而这是无法回应。
流量控制配置内<flow-control>元素。有两种设置用于调节流量控制行为:
<pause-detection> - 此设置控制的最大数量的数据包被重新发送到前反应迟钝集群成员确定该成员暂停。当群集成员标记为已暂停,给它的数据包被发送以较低的利率,直至该理事恢复响应。暂停通常是由于长时间的垃圾收集间隔。该值被指定,使用<maximum-packets>元素和默认为16包。值0禁用暂停检测。
<outstanding-packets> - 此设置用来定义一些未经证实的数据包被发送到一个群集成员包之前给该成员被推迟。的值可以被指定为一个明确的数目通过使用的<maximum-packets>元素,或者为一个范围,通过同时使用的<maximum-packets>和<minimum-packets>元素。当指定范围的网络统计数据的基础上,动态调整,此设置。最大值应始终大于256包,默认为4096包。在最小的范围内应始终大于16包默认为64包。
要调整流量控制行为,编辑业务覆盖文件,并添加的<pause-detection>和<outstanding-packets>元素如下:
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<packet-publisher>
<packet-delivery>
<flow-control>
<pause-detection>
<maximum-packets>32</maximum-packets>
</pause-detection>
<outstanding-packets>
<maximum-packets>2048</maximum-packets>
<minimum-packets>128</minimum-packets>
</outstanding-packets>
</flow-control>
</packet-delivery>
</packet-publisher>
</cluster-config>
</coherence>
10.2.2禁用分组流量控制
要禁用流量控制,编辑业务覆盖文件,并添加一个<enabled>元素,内<flow-control>元素,设置为false。例如
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<packet-publisher>
<packet-delivery>
<flow-control>
<enabled>false</enabled>
</flow-control>
</packet-delivery>
</packet-publisher>
</cluster-config>
</coherence>
10.2.3调整分组交通堵塞行为
一包堵车时长分组出版商认为不能容忍的水平,待处理的数据包的数量,由客户端线程排队,在网络上传输的数据包出版商。堵车的行为是配置内<traffic-jam>元素。有两种设置是用来调整堵车行为:
<maximum-packets> - 此设置控制挂起的数据包,该数据包发布容忍的最大数量,然后再确定它被堵塞,必须放慢客户端请求的(从本地非系统线程的请求)。当配置的最大数据包超出限制,客户端线程被迫暂停,直到优秀的数据包的数量低于指定的限制。此设置可防止最意想不到的重发队列的大小限制了内存不足的情况??。值为0表示没有限制。默认值是8192。
<pause-milliseconds> - 此设置控制发行暂停正试图发送邮件的出版商堵塞时,客户端线程的毫秒数。出版商不会允许邮件通过,直到堵塞了,该属性指定的时间反复使线程休眠。默认值是10。
指定这是一个数据包限制到低电平或者暂停是长,可能会导致所有待处理的数据包发送,并没有要发送的报文的发布者。定期记录一个警告,如果这种情况被检测。理想值确保发布者没有工作做,从来没有离开过,但在同一时间防止队列无限制地增长。应设定得短的暂停(10ms或下)和数据包的数量的限制设置为高(即,大于5000)。
当的<traffic-jam>元素用于与<flow-control>元素,设置在一个点,以点模式,只阻断如果收件人发送包有太多优秀。这是建议的<traffic-jam>元素的<maximum-packets>的子元素的值是大于的<maximum-packets>为<outstanding-packets>元素值。当<flow-control>被禁用,<traffic-jam>的设置需要考虑所有悬而未决的包。
要调整的排队率行为,编辑业务覆盖文件,并添加<maximum-packets>和<pause-milliseconds>要素如下:
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<packet-publisher>
<traffic-jam>
<maximum-packets>8192</maximum-packets>
<pause-milliseconds>10</pause-milliseconds>
</traffic-jam>
</packet-publisher>
</cluster-config>
</coherence>
10.3捆绑包,以减少负载
多个小的数据包可以捆绑成一个更大的数据包,以减少网络交换基础设施的负荷。包捆绑配置内<packet-bundling>元素包括以下设置:
<maximum-defferal-time> - 此设置指定的时间推迟一个数据包,同时等待额外的数据包捆绑的最高金额。算法中的结果为零值不等待,只容易获得的数据包捆绑。值大于零,导致一些传输延迟,而等待成为额外的数据包。该值通常低于250微秒,以避免吞吐量产生不利影响。如果未指定单位,假定纳秒。默认值是1微秒(微秒)。
<agression-factor> - 此设置指定包延期算法的侵略性。 ,其中作为<maximum-deferral-time>的元素定义的延期时间的上限,的<aggression-factor>影响平均推迟时间。侵略值越高,时间越长,发行商可能会等待额外的数据包。因子可作为一个实数来表示,很多时候,在0.0和1.0之间的值允许数据包利用率高,同时保持在最低限度的延迟。默认值是0。
默认分组捆绑设置微创进取允许捆绑没有发生增加了可测量的延迟。更加积极的捆绑的好处是基于网络基础设施和应用程序对象的典型的数据大小和访问模式。
要调整数据包的捆绑销售行为,编辑业务覆盖文件,并添加的<maximum-defferal-time>和<agression-factor>元素如下:
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<packet-publisher>
<packet-delivery>
<packet-bundling>
<maximum-deferral-time>1us</maximum-deferral-time>
<aggression-factor>0</aggression-factor>
</packet-bundling>
</packet-delivery>
</packet-publisher>
</cluster-config>
</coherence>
10.4变更的报文重传行为
TCMP利用通告报文确认收到需要确认的数据包。一个积极的确认(ACK)包表示一个数据包被正确接收的数据包不能被怨恨。对于一个给定的发件人是成批多个ACK ACK包成一个单一的,有许多小的ACK包,以避免浪费网络带宽。未被确认的数据包重传包发布的配置,重发间隔。
负确认(NACK)表示该数据包被正确地接收,并会导致数据包重传包。负确认通过检查数据包丢失的包的顺序决定。否定应答导致数据包被重新发送更快依赖于出版商的重发间隔。请参阅“禁用负鸣谢”禁用负确认。
在本节包括以下主题:
更改包重发间隔
更改包重发超时
配置包确认延迟
10.4.1更改包重发间隔
数据包重发间隔指定的时间,以毫秒为单位的最低金额,包出版商相应的ACK报文,然后等待重新发送一个数据包。默认的重发间隔为200毫秒。
要改变数据包的重发间隔,编辑业务覆盖文件和添加<resend-milliseconds>的元素如下:
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<packet-publisher>
<packet-delivery>
<resend-milliseconds>400</resend-milliseconds>
</packet-delivery>
</packet-publisher>
</cluster-config>
</coherence>
10.4.2更改包重发超时
数据包重发超时时间间隔指定的时间,以毫秒为单位的最高金额,一个包继续怨恨,如果没有ACK数据包被接收。此超时到期后,作出决定,如果收款人是被视为终止。此确定需要考虑的附加数据,例如,如果其他节点与接收方仍然能够进行通信。默认值是300000毫秒。对于生产环境,推荐值是300000和2倍的最大预计全GC持续时间。
注意事项:
预设的死亡检测机制是TCP环监听器,它可以检测失败的群集成员曾达到重发前的超时间隔。死亡检测的更多信息,请参阅“配置死亡检测”。
要改变数据包重发超时时间间隔,编辑业务覆盖文件和添加<timeout-milliseconds>的元素如下:
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<packet-publisher>
<packet-delivery>
<timeout-milliseconds>420000</timeout-milliseconds>
</packet-delivery>
</packet-publisher>
</cluster-config>
</coherence>
10.4.3配置包确认延迟
包出版商发送ACK和NACK报文前等待的时间量可以根据需要改变。 ACK和NACK数据包的延迟间隔配置内屈指可数的<notification-queueing>使用以下设置:
<ack-delay-milliseconds> - 此元素指定发送一个ACK包,包发布之前延迟的最大毫秒数。可以发送ACK包,如果多个批次确认,填补了ACK包。此值应设置,大大降低了远程成员的分组投递超时重发ACK到接收和处理的重发超时过期前预留充足的时间。默认值是16。
<nack-delay-milliseconds> - 此元素指定的毫秒数,包发布前的延迟发送NACK包。默认值是1。
要改变ACK和NACK延迟,间隔,编辑业务覆盖文件,并添加<ack-delay-milliseconds>和<nack-delay-milliseconds>要素如下:
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<packet-publisher>
<notification-queueing>
<ack-delay-milliseconds>32</ack-delay-milliseconds>
<nack-delay-milliseconds>1</nack-delay-milliseconds>
</notification-queueing>
</packet-publisher>
</cluster-config>
</coherence>
10.5配置封包传输池大小
发送分组池是用于在发送UDP数据包的缓冲。与数据包缓冲区,这个缓冲区内部管理的连贯性,而操作系统和JVM的堆分配。
数据包池被用来作为可重复使用的缓冲区之间的连贯性网络服务允许更快的套接字层处理在内存使用的增加为代价的。池最初是空的生长需求到指定的大小限制,因此,只有当它需要允许缓冲区,以节省内存,内存保留。
发送分组的池大小控制上的数据包的扬声器可以排队数据包之前发布者必须阻止的数据包的最大数目。池配置内<packet-publisher>的节点使用<packet-pool>元素。 <SIZE>元素用于指定的最大池的大小。输入值(以字节为单位)。默认情况下,大小是不确定的,默认值是0。零值表示该缓冲区通过分解计算的首选2048 MTU的大小。如果明确地定义了一个尺寸,然后计算数据包的数量,为池大小/ MTU大小。请参阅“配置来电处理程序包池”配置传入处理器的数据包池的大小的说明。
如果要配置传输数据包池的大小,编辑业务覆盖文件和添加<packet-pool>的元素如下:
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<packet-publisher>
<packet-pool>
<size>3072</size>
</packet-pool>
</packet-publisher>
</cluster-config>
</coherence>
10.6配置数据包缓冲区大小
数据包缓冲区操作系统缓冲区中所使用的数据报套接字(也称为套接字缓冲区)。数据包缓冲区可以被配置为控制多少数据包的操作系统所需的缓冲。数据包缓冲区所使用的单播和多播的听众(入缓冲区)和包出版商(出境缓冲区)。
在本节包括以下主题:
了解数据包缓冲区大小
配置出站数据包缓冲区大小
配置入站数据包缓冲区大小
10.6.1了解数据包缓冲区大小
根据任一数据包的数量,或根据使用以下设置的字节,数据包缓冲区大小可以被配置:
<maximum-packets> - 此设置指定数量的数据包(基于配置的数据包大小),要求数据报套接字缓冲区大小本身。见#SO_SNDBUF java.net.SocketOptions#SO_RCVBUF属性的其他详细信息java.net.SocketOptions。实际缓冲区大小可能是底层套接字实现更小,如果不能支持超过一定大小。
<SIZE> - 指定的要求底层套接字缓冲区的字节大小。
作业系统仅作为一个提示,将指定的数据包缓冲区大小,并且不是必需的分配指定的量。在事件更少的空间分配要求,连贯性问题的警告,并继续与约束的缓冲区,这可能会降低性能。配置您的操作系统允许更大的缓冲区的详细信息,请参阅Oracle Coherence的管理员指南。
大型传入缓冲区可以帮助从JVM暂停Java垃圾收集器所造成的连贯性网络层隔离。虽然JVM暂停时,连贯性队列中取出数据包不能从任何入插座。如果暂停时间是足够长的时间,以使数据包缓冲区溢出,被延迟的分组接收源节点必须检测到数据包丢失和重传的数据包(次)。
10.6.2配置出站数据包缓冲区大小
出站数据包的缓冲区用于发送数据包时,数据包出版者。当缓冲区大小的变化,性能应该评估无论是在吞吐量和延迟。大型缓冲区大小可能会允许增加吞吐量,而较小的缓冲区大小可能允许延迟的减少。
配置出站数据包缓冲区大小,编辑业务覆盖文件,并添加一个<packet-buffer>元素内<packet-publisher>节点,并指定数据包缓冲区大小,使用<SIZE>元素(字节)或<最大包>元素(数据包)。默认值是32包。下面的示例演示指定的基础上的数据包数量的数据包缓冲区大小:
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<packet-publisher>
<packet-buffer>
<maximum-packets>64</maximum-packets>
</packet-buffer>
</packet-publisher>
</cluster-config>
</coherence>
10.6.3配置入站数据包缓冲区大小
组播侦听器和单播监听每个人都有自己的入站数据包缓冲区。要配置入站数据包缓冲区大小,编辑业务覆盖文件,并添加一个<packet-buffer>元素(一个<multicast-listener>或<unicast-listener>的节点,分别),并指定使用的数据包缓冲区大小<大小>元素(字节)或的<maximum-packets>元素(数据包)。默认值是64包,组播侦听和1428的单播数据包监听。
下面的示例指定单播侦听器的数据包缓冲区大小,并使用字节输入:
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<unicast-listener>
<packet-buffer>
<size>1500000</size>
</packet-buffer>
</unicast-listener>
</cluster-config>
</coherence>
10.7调整数据包的最大尺寸
的最大值和优选的UDP数据包的大小可以调整,以优化群集通信的效率和通过。所有群集节点必须使用相同的最大数据包大小。为了获得最佳的网络利用率,此值应小于网络的最大传输单元(MTU )是32个字节。
注意事项:
当指定一个UDP数据包的大小,必须进行调整,然后在Microsoft Windows注册表设置1024个字节,以便最佳的传输速率。 COHRENCE_HOME / BIN / optimize.reg登记的文件包含注册表设置。在Windows上设置数据包大小的详细信息,请参阅Oracle Coherence的管理员指南。
数据包大小配置内<packet-size>元素包括以下设置:
? <maximum-length> - 指定数据包的大小(以字节为单位) ,所有集群成员可以安全地支 持。这个值必须是同一集群中的所有成员。较低的值可以人为地限制集群的最大大小。 该值至少应为512 。默认值是64KB 。
? <preferred-length> - 指定的首选大小,以字节为单位的DatagramPacket对象,发送和接收 的单播和多播套接字。
这个值可以是更大或更小然后<maximum-length>值,和需要是不一样的所有集群成员。理想值是一个适合该网络的MTU内,留出足够的空间,无论是UDP或TCP报文头,分别是32和52字节。
这个值应该至少为512 ,默认为基于本地节点上的MTU值。的MTU为1500的假设,如果MTU不能得到。
要调整数据包的大小,编辑业务覆盖文件,并添加<maximum-length>和<preferred-length>元素如下:
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<packet-publisher>
<packet-size>
<maximum-length>49152</maximum-length>
<preferred-length>1500</preferred-length>
</packet-size>
</packet-publisher>
</cluster-config>
</coherence>
10.8更改分组扬声器音量阈值
包音箱是负责发送报文包发行时在网络上检测到网络发送操作就很有可能挡。这使得分组出版商以避免阻塞I/ O,并继续准备传出的数据包。数据包出版者动态选择是否使用扬声器作为数据包的负载的变化。
当数据包的负载是比较低的,它可能是更有效地为扬声器的发行的线程要执行的操作。当数据包的负载为高使用扬声器允许继续准备的扬声器发送的数据包,而在网络上发行。
包扬声器配置使用的<volume-threshold>元素指定最小的数据包数量必须准备好要发送的扬声器守护进程被激活。值为0力音箱总是被使用,而??一个很高的值会导致它永远不会被使用。如果没有指定值(默认值),它被设置为匹配的数据包缓冲区。
要指定数据包的扬声器音量阈值,编辑操作倍率文件并添加的<volume-threshold>元素,如下:
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<packet-speaker>
<volume-threshold>
<minimum-packets>32</minimum-packets>
</volume-threshold>
</packet-speaker>
</cluster-config>
</coherence>
10.9更改消息处理程序行为
群集服务使用消息处理程序发送和接收数据。有处理传入的数据的处理程序和处理程序传出的数据处理。这两种处理程序有设置,可以根据需要进行配置。
在本节包括以下主题:
配置传入的消息处理程序
配置传出消息处理
10.9.1配置传入的消息处理程序
传入的消息处理程序组装成逻辑消息的UDP数据包,并将它们分派到相应的连贯性服务进行处理。传入的消息处理程序配置内<incoming-message-handler>元素。
在本节包括以下主题:
更改时间差异
禁用负致谢
来电处理程序的配置包池
10.9.1.1更改时间差异
<maximum-time-variance>元素指定的最大时间的方差之间发送和接收广播消息时,试图确定一个新的集群成员的系统时间和群集时间之间的差异。的方差越小,越某一个群集时间更接近运行在集群中的多个系统之间的,但是,加入到群集中的过程中被扩展,直到消息交换可以发生在指定的方差。通常情况下,为20毫秒的小的值是足够的,但是,高负载的集群和多个网络跳数,一个较大的值可能是必要的。默认值是16 。
要更改的最大时间差异,编辑业务覆盖文件和添加<maximum-time-variance>的元素如下:
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<incoming-message-handler>
<maximum-time-variance>16</maximum-time-variance>
</incoming-message-handler>
</cluster-config>
</coherence>
10.9.1.2禁用负致谢
负确认可以禁用传入的消息处理程序。禁用时,处理程序不通知包的发送者,如果报文正确地接收。在这种情况下,该数据包的发送方将等待指定的重发超时时间间隔重新发送数据包之前。请参阅“更改数据包重传行为”的更多信息,对数据包确认。
要禁用否定应答,编辑业务覆盖文件,并添加的<use-nack-packets>元素设置为false 。例如:
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<incoming-message-handler>
<use-nack-packets>false</use-nack-packets>
</incoming-message-handler>
</cluster-config>
</coherence>
10.9.1.3配置的接收处理程序包池
传入的数据包缓冲池是一个用于在收到UDP报文。与数据包缓冲区,这个缓冲区内部管理的连贯性,而操作系统和JVM的堆分配。
数据包池被用来作为可重复使用的缓冲区之间的连贯性网络服务允许更快的套接字层处理在内存使用的增加为代价的。池最初是空的生长需求到指定的大小限制,因此,只有当它需要允许缓冲区,以节省内存,内存保留。
传入处理程序的包池的大小控制可以排队单播监听器和多路广播侦听前必须阻止数据包的数量。池配置内<incoming-message-handler>的节点使用<packet-pool>元素。 <SIZE>元素用于指定的最大池的大小。输入值(以字节为单位) 。默认情况下,大小是不确定的,默认值是0 。零值表示该缓冲区通过分解计算的首选MTU大小2048 。如果明确地定义了一个尺寸,然后计算数据包的数量,为池大小/ MTU大小。配置用于传输数据包的数据包池的大小的说明,请参阅“配置封包传输池大小” 。
要配置传入处理器的数据包池的大小,业务覆盖文件编辑和添加<SIZE>的元素如下
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<incoming-message-handler>
<packet-pool>
<size>3072</size>
</packet-pool>
</incoming-message-handler>
</cluster-config>
</coherence>
10.9.2配置传出消息处理
即将离任的消息处理程序使用群集服务的过程中要发送的消息。即将离任的消息处理程序使用一个专门的消息池,其大小可以根据需要进行配置。传出消息处理程序配置内<outgoing-message-handler>元素。
10.9.2.1配置拨出处理程序的消息池
即将离任的消息处理程序使用控制多少个消息缓冲区用于消息传输汇集的消息池。池消息缓冲器缓解JVM的垃圾收集器的压力池消息所需的存储器资源。
的消息池包含任意数量的段指定大小。例如,一个游泳池, 4段和段大小为10MB ,最多可以容纳40 MB的空间序列化。段和段大小定义使用<段> <segment-size>元素,分别。
每个池段店消息缓冲区的具体尺寸。的最小大小的缓冲区被定义由<min-buffer-size>元素。为下一阶段的下一个缓冲区大小,然后计算使用位元左移使用<growth-factor>值(最小缓冲区大小“ <<生长因子)的。 n所左移相当于乘以2N ,其中n是生长因子值。对于生长因子2 ,乘4的最小缓冲器大小。增长工厂3 ,乘以最小缓冲器大小由8,等等。
下面的例子显示了默认的池值和结果的消息池,总规模为64MB ,其中:第一池段包含1KB消息缓冲区,第二个池段包含4KB的消息缓冲区;第三池段包含消息缓冲区16KB和第四池段包含64KB的消息缓冲区。使用默认值相同,但增加了生长因子3的缓冲区大小是1KB, 8KB ,64KB , 512KB ,结果。
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<outgoing-message-handler>
<message-pool>
<segments>4</segments>
<segment-size>16MB</segment-size>
<min-buffer-size>1KB</min-buffer-size>
<growth-factor>2</growth-factor>
</message-pool>
</outgoing-message-handler>
</cluster-config>
</coherence>
权利网络缓冲区(输入和输出)和序列号的缓冲区空间,当容量高于实际使用情况,周期性地回收。
10.10更改的TCMP插座供应商实施
Coherence提供TCMP使用三个基础套接字提供者的实现:
系统的套接字提供商(默认) - 一个套接字提供者产生JVM的默认的插座和渠道实现的实例。
TCP套接字提供者 - 一个socket的供应商,生产基于TCP的套接字和渠道实现。
SSL插座供应商 - 插座供应商,生产插座,使用SSL通道实现。
自定义套接字提供者也可以启用。而套接字的提供用于由TCMP配置为单播侦听器内<unicast-listener>元素。
在本节包括以下主题:
使用的TCP套接字提供者
使用SSL套接字提供的
启用自定义的Socket提供
10.10.1使用的TCP套接字提供者
TCP套接字提供者是一个套接字提供者,只要有可能,产生基于TCP的套接字。此插座提供者创建通过TCP的DatagramSocket实例备份。当使用的的WKA功能(禁用mulitcast ) ,完全通过TCP TCMP功能,而不需要为UDP 。
注意事项:
此套接字提供者不使用的的WKA功能(组播启用) , TCP用于所有单播通信的同时,利用组播组通信。
TCP套接字提供者使用两个TCP连接每对群集成员之间。没有额外的线程加入到管理的TCP流量,因为它是所有使用基于NIO的非阻塞套接字。因此,现有的TCMP线程处理所有的连接。长大的连接需求,并自动重新打开,如果他们需要得到因任何原因断开。利用两个连接,因为它减少了发送/接收争,并显着提高了性能。 TCMP主要是不知道的是,它使用的是一个可靠的协议,因此仍然管理保证交付和流动控制。
要指定的TCP套接字提供商,业务覆盖文件编辑和添加<socket-provider>的元素,包括TCP值。例如:
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<unicast-listener>
<socket-provider system-property="tangosol.coherence.socketprovider">tcp
</socket-provider>
</unicast-listener>
</cluster-config>
</coherence>
tangosol.coherence.socketprovider系统属性用于指定套接字提供者,而不是使用业务覆盖文件。例如:
- Dtangosol.coherence.socketprovider TCP
10.10.2使用SSL套接字提供者
SSL套接字提供者是一个插座供应商只生产SSL保护的插座。此插座提供者创建SSL / TCP的DatagramSocket实例备份。 SSL不支持多播套接字,因此,的WKA功能(组播残疾人)必须使用TCMP功能与此供应商。
缺省SSL配置可以轻松配置双向SSL连接,同行的信任,每一个值得信赖的同伴驻留在一个单一的JKS密钥库的基础上。替补身份和信任管理更复杂的配置,可以定义允许证书颁发机构的信任验证。请参阅Oracle Coherence的安全指南的详细说明,配置和使用SSL TCMP 。
10.10.3启用自定义的Socket供应商
供应商可以创建自定义插座,并可以使用TCMP 。自定义插座供应商必须实施的com.tangosol.net.SocketProvider接口。请参阅Oracle Coherence的Java API参考这个API的详细信息。
内启用的<socket-provider>元素使用<INSTANCE>元素的自定义插座供应商。首选的方法是使用的<socket-provider>元素引用自定义插座供应商定义的配置内<socket-providers>节点。
下面的例子演示如何启用自定义插座供应商,由供应商,名为mySocketProvider的引用这是实现在MySocketProvider类的。使用id属性中定义的名称,该提供参考。
<?xml version=‘1.0‘?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/
coherence-operational-config coherence-operational-config.xsd">
<cluster-config>
<unicast-listener>
<socket-provider>mySocketProvider</socket-provider>
</unicast-listener>
<socket-providers>
<socket-provider id="mySocketProvider">
<instance>
<class-name>package.MySocketProvider</class-name>
</instance>
</socket-provider>
</socket-providers>
</cluster-config>
</coherence>
作为替代, <INSTANCE>的元素支持使用一个<class-factory-name>元素使用一个工厂类负责创建SocketProvider实例,方法名元素来指定静态工厂方法执行对象实例的工厂类。下面的示例获取自定义的套接字提供的实例使用的createProvider方法上MySocketProviderFactory类。
<socket-providers>
<socket-provider id="mySocketProvider">
<instance>
<class-factory-name>package.MySocketProviderFactory</class-factory-name>
<method-name>createProvider</method-name>
</instance>
</socket-provider>
</socket-providers>
实施所需要的任何初始化参数可以指定使用<init-params>元素。的以下示例设置iMaxTimeout的参数至2000年。
<socket-providers>
<socket-provider id="mySocketProvider">
<instance>
<class-name>package.MySocketProvider</class-name>
<init-params>
<init-param>
<param-name>iMaxTimeout</param-name>
<param-value>2000</param-value>
</init-param>
</init-params>
</instance>
</socket-provider>
</socket-providers>