ゲームをプレイする人が増えたら、サーバではデータの分散を考える必要があります。
今回、JavaベースのインメモリデータグリッドとしてHazelcastに注目してみました。
前回考えたフレームワークの、ルーム情報などをHazelcastで管理する感じです。
実際に使ってみた感想ですが、分散オブジェクト(IMapやISetなど)が普通のJavaのオブジェクト(MapやSetなど)と同じように扱えるので、わかりやすいかと思います。
分散オブジェクトで発生したイベントに対するリスナーや、分散オブジェクトのロック機能などもあり便利です。
ただ、Serializeできるオブジェクトしか保持できないので(当たり前ですが。。。)、Hazelcastにどのデータを持たせるかは考慮が必要です。
例えば、今回であればAsyncContextオブジェクトやSessionオブジェクトといったメンバーの接続情報をルーム情報と一緒に保持したくなるところですが、これらはSerializeできないので、ルーム情報とは別にオンメモリで保持しなければならない、という感じです。
Hazelcast自体は問題ありませんでしたが、反省点はHazelcastに依存したフレームワークになってしまったことでしょうか。
ルーム情報をHazelcastで持ち、ルームの排他制御もHazelcastのロックを使いました。
フレームワークなので、Hazelcastを使う使わないの選択もできるような自由度の高い設計にした方がよかったかなあとも思います。