以前の記事で、galeraの書き込み能力を向上させるために、
spiderと併用したらいいのではないかと記載した。
しかし、この二つの組み合わせるには、
xa transactions(二相コミット)をあきらめる必要がある。
そもそも、galera自体、xaには非対応であり、
また、xa transactionsはバイナリログに対して、クラッシュセーフではないようだ。
(MySQLのドキュメントには記述があったが、MariaDBには記載を見つけられなかった。。)
上記前提を踏まえたうえで、
galeraとspiderの共演を実現するためには、xaをあきらめることは必須だが、
そもそもの話として、実装上複数ノードのwriteを極小化しておく必要が十分にあると考えられる。
これまで、プログラム側では、begin,begin,commit,commitみたいな実装を平気でしていたが、
そもそもこれ自体が出来るだけ避ける必要のある実装であることを、
今回のgaleraとspiderの共演を実現するために調査していた過程で気づいた。。。
今更の話だが、commitは失敗しないだろうという気持ちがどこかにあり、commitの失敗をリカバリーすることが頭の中から抜けていたように思えて反省している。
とはいえ、とはいえ、spiderを挟むことで、
プログラムのシャーディング負担を軽減し、
さらにgaleraで高可用性を確保する組み合わせは、とても魅力的ではある。
どこかで、galeraとspiderを共演するために、必要な設定・注意事項等をまとめようと思う。
検証した結果の結論から先に書くと、spiderは受信したSQLを変化させて、バックに投げるため、
場合によっては、SQLの発行回数の増加や、参照取得行数の増加が発生する。
この変化パターンを正確につかんでおかないと、気づかないうちに高負荷をバックに与えてしまう可能性があるため、十分に注意したい。
どっかでこのあたりもまとめてみようと思う。
以上
コメントがあればどうぞ