これまでに必要となる最後のエンタープライズ Web アーキテクチャ パターン。次まで。
目標は、次のことを可能にすることで開発者のエクスペリエンスを最適化することです。
project omegaの概念実証 - マイクロサービス モノリス ハイブリッド
project omegaデモ - Kubernetes Microserve とスタンドアロン コンテナのデプロイメント
スケーラビリティを得るために開発者の効率を犠牲にする必要はないことを証明したいと思っています。マイクロサービスとモノリスの長所と短所について詳しくは、「マイクロサービスとモノリス」を参照してください。
私の印象では、多くの業界専門家は、主に次の 3 つのオプションがあると考えているようです。
これらのオプションのいずれかを選択する必要はないことを示したいと思います。少し創造力を発揮すれば、モノリスと一連のマイクロサービスの両方である真の「ハイブリッド」を実現できます。私の現在の戦略では、モノリスとマイクロサービスの欠点をすべて取り除くことはできないと思いますが、両方の問題点の多くを取り除くことはできます。
技術スタックは、私が証明しようとしている高レベルの概念にはほとんど無関係ですが、このプロジェクトでは次のものを使用します。
大規模なアプリケーションを抱える企業は、(他の理由もあり) 水平方向に拡張できるよう、マイクロサービスへの移行がますます進んでいます。したがって、これを達成するために、次のようなものを検討しています。
以下は、水平スケーリングの実装方法の 1 つを示す別のバージョンです。
この道をたどると、地方開発における本当の問題に行き着きます。それは実際、製品がどのようなものであるか、開発者の数、誰が何をどのくらいの頻度で作業するかによって異なります。そうは言っても、マイクロサービスを選択する企業の大部分は、開発者が日々の開発をどのように行うかについて難しい選択をしなければならない状況に陥ることになるでしょう。 project omegaの目標は、ローカルで実行しているときにサービスをすべて 1 つのアプリケーションに結合することで、ローカルで実行するオーバーヘッドを排除できることを示すことです。
フォルダー構造は次のとおりです。
マイクロサービスとしてデプロイすると次のようになります。
各インスタンスにはすべてのコードのコピーがありますが、特定のマイクロサービスの初期化、サービス エンドポイント ルート、およびワーカー プロセスのみが実行されます。
SERVICE_KEY
という環境変数を探すか、存在しない場合はすべてのサービスを初期化するだけなので、アプリケーションをモノリスとしてローカルで実行するのが非常に簡単なのはこのためです。
他のサービス固有の初期化の例:
Startup が呼び出されると、アセンブリをスキャンしてProjectOmegaService
継承する型を探し、インスタンスを作成し、そのサービスの初期化ロジックを実行します。ローカルで実行すると、すべてが実行されます。
前提条件をインストールします。
Windows 上で最新バージョンの Docker を実行するには、しばらくこれを行っていない場合、WSL 2 のインストールや WSL ディストリビューションの更新など、追加の手順が必要になる場合があることに注意してください。 Docker の Web サイトの指示に従ってください。
手順:
yarn run installAll
実行します。yarn run syncEnvFiles
.env.server
のOMEGA_DEFAULT_DB_PORT
とOMEGA_MSSQL_HOST_PORT
を変更します。yarn run dockerDepsUpDetached
を使用して依存関係を開始します。yarn run dbMigrate
yarn run both
(これは、オプション 2 のコマンドを同時に実行するために使用します)yarn run client
実行し、もう一方の端末ではyarn run server
実行します。初めてdotnet test
を使用して単体テストを実行する前、または新しい DB スキーマに単体テストを追加した後:
yarn run dockerDepsUpDetached
でまだ実行されていない場合は依存関係を開始しますyarn run testDbMigrate
するdotnet test
を実行しますDocker で本番環境とマイクロサービスをシミュレートするには:
yarn run dockerDepsUpDetached
を使用して docker の依存関係が実行されていることを確認します。yarn run dockerRecreateFull
を実行します。Linux で開発している場合、サーバーの起動時に次のエラーが発生する可能性があります。
System.AggregateException: 1 つ以上のエラーが発生しました。 (inotify インスタンス数に関して設定されたユーザー制限 (128) に達したか、オープン ファイル記述子の数に対するプロセスごとの制限に達しました。)
これは、vscode によって使用されるファイル監視が多すぎることが原因である可能性があります。次のコマンドを実行すると、 inotify
インスタンスの制限 ( /etc/sysctl.conf
ファイルですでに非常に高く設定されている監視制限だけではありません) を増やすことができます。
echo fs.inotify.max_user_instances=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
デザインパターンのコストメリット分析: DesignPatternCostBenefit.md
デザインパターンのバリエーション: DesignPatternvariations.md
決定: Decisions.md
ソフトウェア開発の哲学と発言: https://gist.github.com/mikey-t/3d5d6f0f5316abf9e74fb553be9fdef3