Tomcat5.5.15でのTomcatCluster
パラメータが死ぬほど増えている。
replication mode
synchronous/pooled/asynchronous/fastasyncqueueの4つ。それぞれに対応するクラスは以下の通り。
synchronous=org.apache.catalina.cluster.tcp.SocketSender pooled=org.apache.catalina.cluster.tcp.PooledSocketSender asynchronous=org.apache.catalina.cluster.tcp.AsyncSocketSender fastasyncqueue=org.apache.catalina.cluster.tcp.FastAsyncSocketSender
これは、org/apache/catalina/cluster/tcp/DataSenders.propertiesに指定されている。
synchronous
DataSenderを継承し、もっとも追加機能が無いもの。レプリケーションは1台のTomcatに対しsocket1本で行われる。
pooled
1Tomcatあたり最大25本(カスタマイズ可)で接続。
asynchronous
QueueとQueueThreadを使ってレプリケート。Queueに渡したところでsendMessageは返る。
QueueにはSmartQueueを使用。
QueueにはSmartQueueを使用。
fastasyncqueue
QueueとQueueThreadを使ってレプリケート。Queueに渡したところでsendMessageは返る。
QueueにはFastQueueを使用。FastQueueでは内部でLinkリストを保持し、与えられたObjectを全て繋げている。
そのため、FastQueueで取れるLinkObjectから直接nextを呼ぶことで、Queueの同期を減らすことができる。
これによりQueueに積む際の競合を減らしていると思われる。
レプリケートするスレッドは1つ。
QueueにはFastQueueを使用。FastQueueでは内部でLinkリストを保持し、与えられたObjectを全て繋げている。
そのため、FastQueueで取れるLinkObjectから直接nextを呼ぶことで、Queueの同期を減らすことができる。
これによりQueueに積む際の競合を減らしていると思われる。
レプリケートするスレッドは1つ。
DataSender
コンストラクタを見れば分かるとおり、ホスト&ポート毎に作成される。
waitForAck
レプリケーション完了の確認を待つかどうか。ソースはDataSender#waitForAck。10回readを実施し、TcpReplicationThread#sendAckメソッドで送ってくる{6,2,3}の3バイトのうち、最後の3が読めれば良い模様。
Traceレベルでログが出る。
Traceレベルでログが出る。