Retoolの水平方向のスケーリング

ここでは、オンプレミス・デプロイメントでRetoolを水平方向にスケーリングする方法について説明します。

概要

Retoolは、自身のインフラストラクチャで簡単にセルフホストするように設計されています。

Retoolは、単一のステートレスなDockerコンテナーとしてパッケージされています。唯一、依存関係があるのはPostgresデータベースで、Retoolではこれを使用して、ユーザー情報、組織設定、監査ログ、アプリなどのデータを格納します。

起動時に、Retoolではデータベース上で未実行の移行をチェックして実行してから、Retool自体を起動します。Retoolサーバーは、APIとフロントエンド・アセットの両方にサービスを提供します。

Retoolの水平方向のスケーリング

1つのコンテナー/マシンを超えてRetoolを水平方向にスケーリングするには、以下の手順を実行します。

  1. 外部システムでPostgresデータベースをホストします(例: AWS RDS)。
  2. 同じPostgresデータベースを使用する複数のRetoolコンテナーを起動します。
  3. ロード・バランサーを使用して、Retoolサーバー・コンテナー間でトラフィックをルーティングします。

これを行うには、構成ファイルや例など、様々な方針を使用します。これらは、 https://github.com/tryretool/retool-onpremise で参照できます。

ダウンタイムなしのアップグレード

新しいデータベース移行に必要なRetoolのバージョンにアップグレードする場合、単純な複数コンテナー設定によってダウンタイムの問題が発生する可能性があります。これは、すべてのコンテナーが起動時に移行を試行することにより、デッドロックが起きるためです。

以下に、これを回避する方法の基本的な手順を示します。

  1. 移行を実行する必要があるタイミングを認識します。メジャー・バージョンが増分されるときは常に(例: 2.0.02.1.0)、移行を実行します。
  2. メジャー・バージョンをアップグレードする場合、最新バージョンのRetoolコンテナーを1つデプロイし、そのコンテナーが移行の実行を終了できるようにします。移行は常に下位互換性があるため、これによってダウンタイムが発生することはありません。
  3. 1つのRetoolコンテナーが移行に成功すると、その他のRetoolコンテナーの完全なロールアウトを続行できます。
  4. クリーンアップします。ステップ2で作成したコンテナーを削除します。

📘

改善の取り組み

これが、Retoolをアップグレードする最も安全な方法ですが、弊社ではRetoolのデプロイ方法の改善に積極的に取り組んでいます。今後、より簡単なアップグレード・パスに更新する予定です。