17

Linkに示されている例を使用して、C# で GRPC サーバーを作成しました。ここで、次のことを実現するために、このサーバーをどのようにホストする必要があるかを理解したいと思います。

  • このサーバーをコンソール アプリケーションにするか、Windows サービスにするか。それをWindowsサービスにすると、サービスの更新が面倒になり(これは大きなマイナスです)、コンソールアプリにすると、更新にはexeをシャットダウンするだけで済みます。しかし、それには、誤って同じものを閉じるという代償が伴います。他に良い方法はありますか?
  • IIS では、サイトを LB から削除し、Web サイトを停止して更新を実行するだけなので、この問題は発生しませんが、GRPC は IIS の一部ではないため、これを機能させる方法がわかりません。

より良いアーキテクチャへの参照を歓迎します。

4

4 に答える 4

3

私の会社 (Shortbar) は、gRPC で HOLMS というホテル管理システムのアプリケーション サーバーを構築しています。セットアップは次のとおりです。

  • HOLMS.Application は、サーバーの実際の作業を行う .NET クラス ライブラリ (アセンブリ) です。
  • HOLMS.Application.ConsoleRunner は、HOLMS.Application をホストする C# コンソール アプリケーションです。コンソール ランナーは、(1) 便宜上 (質問で言及されている) 開発者によって使用されるほか、(2) コンテナー ランタイム (Amazon ECS など) がジョブ制御/スケーリングを実装する Docker コンテナー内で実行される運用シナリオによっても使用されます。単一のスタンドアロンのステートレス プロセスとしての実行、高速な起動/シャットダウン、環境変数の構成インジェクションなど、「12 要素アプリ」のガイドラインに従います。システムは stdout にログを記録しますが、これは排出されますが、stdout は本番環境 (例: Sumo、logstash など) で排出されます。これが、SaaS マルチテナント ソリューションが本番環境に移行する方法です。
  • HOLMS.Application.ServiceRunner は、HOLMS.Application を Windows サービスにパッケージ化します。これは、顧客の IT グループがサービスを自分で実行する従来のオンプレミスの状況に対応します。このパッケージは、構成に Windows レジストリを使用し、起動/シャットダウン/再起動を Windows サービス ジョブ制御に依存します。Windows イベント ログに記録されます。

ConsoleRunner と ServiceRunner は、それぞれ約 200 行のコードです。ほとんどの場合、アプリケーション パッケージをラップして呼び出すだけです。

お役に立てれば。

于 2016-07-15T21:00:58.073 に答える