Webアプリを販売しているとします。複数の顧客が関与するデータや操作はありません。各顧客は完全に独立しています。
どのように配置しますか?
1)顧客ごとに1つのインスタンスをデプロイします。つまり、さまざまなサーバー/仮想マシン/クラウドなどで多数の小さなアプリを実行および管理しています。
2)さまざまな顧客自身を管理するマルチテナントアプリを作成し、1つの大きなアプリを管理し、クラウドでスケーリングします。あなたは基本的にユーザー名/パスのペアを販売しています。
または、私が知らない3番目のアプローチ。
選択は明確です(誰もがこの2番目の方法を行っているように)、またはそれらのモデル間の賛否両論の多くの考慮事項がありますか?
あなたがしなければならないいくつかのトレードオフがあります:
1。専用インスタンス
利点:
Inconvence:
2。マルチテナントアーキテクチャ
利点:
不便:
3。その他の代替手段:マイクロサービス?
3番目のシナリオは、アプリケーションをより小さな microservices にカットすることです。スケーラビリティは最大化されます。顧客ごとにサービスを分割するか、マルチテナンシーを選択するかは、あなた次第ですが、アーキテクチャ全体は、これらの選択が比較的簡単になるように設計されています。アプリケーションには完全なリエンジニアリングが必要です。
推奨事項
オプション1は、大規模な顧客が少数の場合、または非常に迅速に市場に出なければならない場合の一時的な解決策として選択する方法だと思います。
オプション2は、クライアントが多く、規模の経済を実現したい場合には、より合理的な選択のように思えます。
オプション2を選択するが、スケーラビリティの問題が予想される場合は、オプション3が適しています。膨大な数のクライアントが予想される場合は、このアプローチに直接進んでください。
複数のテナンシーをサポートするようにアプリを構築する場合、将来の技術担当者はそれを展開する方法について選択することになります。シングルテナントインスタンスを要求する顧客を見つけた場合は、それらをサポートできます。 infosecの理由でこのアプローチを好む顧客もいます。
同時に、マルチテナント操作を実行できるようになります。これは、顧客を集めることでアプリケーションを拡張するのに役立ちます。これにはいくつかの部分があります。
マルチテナントは、アプリの設計に進むための方法です。それは選択肢を開いたままにします。
私が取り組んだすべてのアプリケーションで2つの開発が発生するのを見ました。
選択はまったく明確ではなく、ハイブリッドアプローチを簡単に実行できます。たとえば、Atlassianでは、サーバーでツール(Jira、Bitbucketなど)を使用できますが、独自のサーバーにインストールすることもできます。
顧客ごとに1つのインスタンスの欠点は、すべての更新をすべての顧客にプッシュする必要があることですが、そうするかどうかを選択できる場合があります。すべてのお客様が絶えず変化するアプリケーションに満足しているわけではないことに注意してください。ただし、すべてを管理できるわけではありません。バックアップ、サーバーオペレーティングシステムなどについて考えてみてください。数十の競合ポイントが考えられます。
急速に進化するアプリケーションでは、中央のアプリが理にかなっていると思います。それはあなたにちょうど別のタイプの頭痛を与えるでしょう。そして、あなたが何かを台無しにすると、すべての顧客が同時に影響を受けます。
補足:ユーザーのデータを個別のデータベースに保持することは、central-app-approachでは意味があるかもしれません。また、顧客ごとに個別のインストールを行うこともできますが、データセンターの制御された環境で、完全な制御を維持できます。オプションの数に応じて複雑さが指数関数的に増大することを常に覚えておいてください。