フレクトのクラウドblog re:newal

http://blog.flect.co.jp/cloud/からさらに引っ越しています

MuleSoft開発 冗長化について

こんにちはCI事業部の川瀬です。

今回は冗長化について記事を書いてみたいと思います。冗長化というとActive-Active、ホットスタンバイ、コールドスタンバイとかを考えると思います。MuleSoftですと関連する記事は以下になります。

docs.mulesoft.com

昔ですと、ロードバランサがあってインスタンスを複数作成し割り当てをしていました。MuleSoftも同様でイメージは以下のようになります。 f:id:k2-flect:20210511233426j:plain

ここからどのようにMuleSoftでは構築すればよいのでしょうか?最初にVPCを作成し、次にロードバランサの設定をします。
Runtime Managerの設定で、Workerの設定を2にするだけで、冗長化の完成です。簡単にできてしまいます。 f:id:k2-flect:20210511234032j:plain

問題は、デプロイするアプリケーションです。以下のような、フォルダ監視のアプリケーションがあったとします。 f:id:k2-flect:20210511234454j:plain

冗長化してしまうと、2つのWorkerから、タイミングによっては同時に処理してしまいます。実はMuleSoftには便利な機能があるのですが、これが問題です。以下のようにPrimary node onlyという便利な機能があり、使えそうなのですが、残念ながらこれはCloudHub上では使えません。 f:id:k2-flect:20210511234850j:plain

次に目につくのはWatermarkという機能です。これも一見、よさげなのですが、同時に実行してしまうと片方のWorkerではWatermarkを書き込めませんというエラーがログに出力されます。もし、運用の設定でアラートを通知しているなら、通知としてメールが送信されてしまうかもしれません。 f:id:k2-flect:20210511235203j:plain

最後の手段として、スケジューラを使用して定期的にポーリングするようにします。スケジューラは冗長化すると1つのWorkerでしか動作しません。これにより、同時に処理してしまうという問題は解決できました。
しかし、片方のWokerがクラッシュしてしまったどうでしょうか?勿論、MuleSoftには自動再起動という機能があるので、これを使用すれば問題は解決できます。ただ、これならWorker1つでいいのでは?となりますよね。 今回はここまでにして、次回はどのように解決するのかを考えていきたいと思います。