15

私は多くの部門別クライアント サーバー アプリケーションを開発してきましたが、現在、これらのアプリケーションの 1 つを SaaS モデルに移行する作業を開始する準備ができています。私はいくつかの基本的な Web 開発を行ってきましたが、SaaS アーキテクチャに関しては初心者です。

アーキテクチャを設計しようとして頭に浮かぶ最初の質問の 1 つは、シングル テナンシーとマルチ テナンシーの問題です。それぞれの長所と短所は、アプリケーションの種類と必要な規模によって大きく異なります。そのため、アプリケーションと規模のニーズについて以下に説明したいと思います。アーキテクチャをどのように開始すべきかについて他の人がコメントできることを願っています。

クライアント サーバー アプリケーションは現在、Firebird データベースと Windows アプリケーションで構成されています。データベースには、4 つのプライマリ テーブルに数千のレコードを含む約 20 のテーブルと、さまざまなルックアップおよび関連テーブルに数百のレコードが含まれています。レコードの数は少ないですが、データベースには大きな BLOB を含めることができるため、サイズが大きくなる可能性があります。各顧客は独自のデータベースをセットアップし、組織内の少数のユーザーがそれに接続しています。データベース スキーマを更新すると、新しい Windows アプリケーションがリリースされ、データベース スキーマがチェックされ、必要に応じて更新が適用されます。

SaaS アプリケーションの場合、私は年間数百 (数千または数百万ではなく) の新規顧客向けに設計しています。私が最初に考えたのは、マルチテナンシー モデルを使用して更新を簡単にすることでした (シャットダウンして 1 つのデータベースに更新を適用してから起動する)。一方、シングル テナンシー モデルは、一度に顧客のグループに更新を展開する手段を提供し、データ破損のリスクを分散します。つまり、データベースに問題が発生した場合、影響を受けるのは 1 人の顧客ではなく、1 人の顧客です。すべての顧客。このアイデアで、ログイン時に単一の顧客データベースに接続する単一の Web フロントエンドを持つことを考えていました。したがって、新しい顧客がアカウントを作成すると、新しいデータベースが作成されます (各顧客は、顧客の必要に応じて複数のユーザーを持つ独自のデータベースを持ちます)。

このモデルでは、データベースの更新には、スキーマの変更を適用するために各データベースを通過するプロセス、または現在使用されているクライアント サーバー モデルと同様のスキーマの更新を開始するためのログイン時のトリガーが必要です。

クライアントサーバーからSaaSに移植された同様のアプリケーションの情報を誰か教えてもらえますか? または、考慮すべき指針を提供しますか? 基本的に、部門別アプリケーションを採用し、それを複数の顧客向けのセルフサービス Web サイトとして利用できるようにするアーキテクチャの例を探しています。提案、リソースなどをありがとう。

4

1 に答える 1

7

良い質問です。

頭に浮かぶことの 1 つは、すべての顧客を壊す可能性を減らすために段階的に展開する複数のデータベースがある場合、データベース構造が変更された場合にどうするかという問題に対処する必要があるということです。下位互換性を維持することに関して非常に厳密にする必要があります。または、別のバージョンのコード ベースを展開し、どのテナントがどのデータベースに関連付けられているかを何らかの方法で管理する必要があります。

SaaS モデルを使用したアプリケーションも提供しています。

最初は、複数データベースの提案と同様に機能する Windows アプリでした。ログインすると、勝利アプリは単一の「ライセンシー」データベースに対して認証を行い、ライセンシーに固有のデータベースの接続情報で応答します。これの良い点は、1) ライセンシーのデータを物理的に分離できることです。これはお客様に好評でした。2) 地理的にユーザーに近いサーバー上にデータベースを物理的に配置できるため、パフォーマンスが向上し、潜在的に厄介な法的手続きを回避できます。国境を越えたデータ提供に関する規制上の問題。

もちろん、このアプリはシック クライアント アプリだったので、データベースに変更を加えて、一度に 1 人のライセンシーにプッシュするだけで済みました。アップグレードの準備ができたら、更新されたシック クライアントを新しいデータベースと組み合わせてプッシュすることができました。これにより、コードベースがデータベースと一致することが保証されました。共通の「ライセンシー」認証データベースが一貫している限り、これはかなりうまくいきました。

一方で、このソリューションは、シック クライアント アプローチの維持と管理に関するすべての問題をもたらし、最終的にはブラウザベースのシング クライアント アプローチに行き着きました。

新しいモデルでは、すべてが単一のデータベースにあります。更新があるときは、コードとデータベースの両方を同時にプッシュします。これにより、コード ベースとデータベース構造の一貫性を保つという問題が解決されます。しかし、現在、上記の 1 と 2 で述べた問題に直面しており、まだ解決していません。

これがあなたの思考の糧になれば幸いです。

私もこの質問に興味があります。

投稿ありがとうございます。

-S

于 2009-12-08T14:28:38.423 に答える