要点
- スケーラビリティは、サーバーではなくデータモデルとテナンシーから始まる。
- アプリケーション層をステートレスに保ち、水平にスケールできるようにする。
- 時間のかかる処理は、最初のリリースからバックグラウンドキューへ。
- 課金、オンボーディング、可観測性をコア機能として扱う。
SaaSのスケーリングの問題の多くは、最初のリリースで決まっています。作り直しなしで成長できるSaaSプロダクトのための、アーキテクチャ上の選択を実践的に解説します。
SaaSにとっての「スケーラブル」の意味
スケーラビリティは、より多くのトラフィックをさばくことと捉えられがちです。SaaSビジネスにとってはそれ以上の意味があります。手作業を増やさずに顧客を増やせること、すべてのリリースを遅くせずに機能を追加できること、ひとつの大口顧客が他の顧客の体験を損なわないことです。
厄介なのは、これらの多くが、チームが小さくスピードが最も重要な最初のリリースで決まってしまうことです。目標は初日から数百万ユーザーに備えることではなく、後で作り直しを強いる判断を避けることです。
テナンシーとデータモデルを正しく
顧客データを持つすべてのテーブルには明確な所有者、通常はテナントや組織のIDが必要で、すべてのクエリがそれを尊重しなければなりません。例えばPostgreSQLの行レベルセキュリティでデータベース側で強制すれば、フィルターを忘れたひとつのクエリから守られます。
データモデルは画面ではなくドメインに沿って設計します。画面は毎月変わりますが、アカウント、サブスクリプション、注文、請求書のようなエンティティはめったに変わらず、レポートを支えます。
- 顧客が所有するすべての記録にテナントIDを付ける。
- テナントの分離をアプリケーションだけでなくデータ層でも強制する。
- 最も頻繁なクエリに合わせてインデックスを作り、遅いクエリを定期的に見直す。
- ログやイベントなど際限なく増えるデータのアーカイブを計画する。
ステートレスなサービスとバックグラウンド処理
Webサーバーはステートレスに保ちます。セッションは共有ストア、ファイルはオブジェクトストレージに置き、ユーザーを特定のマシンに縛るローカルの状態を持たせません。そうすれば、アプリケーション層のスケーリングはロードバランサーの背後にインスタンスを追加するだけになります。
メール、エクスポート、PDF生成、Webhook、レポートなど、ユーザーへの応答前に終わる必要のない処理はバックグラウンドキューに入れます。キューはトラフィックの急増をならし、時間のかかる処理がリクエストを塞ぐのを防ぎます。
課金、プラン、オンボーディングはアーキテクチャの一部
サブスクリプション課金はあらゆる部分に関わります。顧客が使える機能、支払い失敗時の処理、アップグレード時の日割り計算。プラン名を直接コードに書くのではなく、アプリケーションが確認する上限と機能、つまり利用権としてプランをモデル化します。
セルフサービスのオンボーディングは、サポートチームを増やさずにSaaSビジネスを成長させる鍵です。新規アカウントが最初の意味ある成果に届くまでの時間を測り、それを短くするように初回体験を設計します。
運用できる仕組みを組み込む
観測できないプロダクトはスケールできません。最初のリリースから、障害を短くしリリースを安全にするための基本を含めます。
- テナントとリクエストのIDを含む構造化ログ。
- アラート付きのエラー追跡と死活監視。
- 復元手順を検証済みの自動バックアップ。
- ステージング環境と素早い切り戻しを備えたデプロイパイプライン。
- サポートとアカウント管理のための社内管理コンソール。
参考になりましたか?次の記事をメールで受け取れます。

