Windowsだけじゃない.NETネイティブアーキテクチャー

1.3K Views

December 01, 22

スライド概要

2022年11月25日に開催された.NET Conf Recap in Fukuokaで登壇した際の資料です

profile-image

オルターブースの中の人

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
2.

Windowsだけじゃない .NETネイティブアーキテクチャー .NETアプリケーションのモダナイズレシピ Copyright © Alterbooth Inc. All Rights Reserved. 2

3.

プロフィール 株式会社オルターブース 代表取締役 ⼩島 淳(Atsushi Kojima) 1976年千葉県柏市出⾝。 10代から20代前半までハードコアパンクに没頭し 全国をツアーするバンドマンとして活躍。 バンド解散後、IT業界に転⾝しレガシーシステム開発に従事し、2007年に都 内⼤⼿MSPへ転職。技術部⾨、プリセールス部⾨、コンサルティング部⾨の 責任者として多くのWebシステムを担当。 2012年福岡へ移住しクラウドコンサルタントとして活動、2015年に株式会 社オルターブースを創業し、「つまらない世界からもっと刺激のある世界へ 変化させよう︕」をスローガンにフルスタック開発を展開している。 Microsoft MVP5年連続受賞(2014〜2018年)。 Microsoft Regional Director(2020〜) Microsoft Partner Award 2017 2019 2020 2021受賞。 NPO法⼈AIP理事。 Copyright © Alterbooth Inc. All Rights Reserved. 3

4.

5Rを活⽤する システムをモダナイズするときには5つのプランを使い、合理的な設計をする必要があります。 リホスト リファクター リフトアンドシフトで IaaSに移⾏させる。コー ド修正すること なく既存 の仕組みをそのまま移 ⾏ する。現状のままクラウ ドに移⾏することが可能。 アプリケーションの再 パッケー ジ化をし、PaaS もしくはIaaSに移⾏する。 コード修正は最⼩ 限で⾏ い、アプリケーションの スケールを最⼤化するこ とが可能。 Copyright © Alterbooth Inc. All Rights Reserved. リアーキテクト リビルド リプレイス アプリケーションのコー ドベースを変更し、最新 化したのちに個別にデプ ロイできるアーキテク チャーへ分散させる。 クラウドネイティブ化す るためにアプリケーショ ンを1から再構築する。す べての機能をPaaSで実現 し、フルマネージドサー ビスとしてクラウドを活 ⽤する。 すべてのアプリケーショ ンをSaaSに置き換え常に 最⾼のテクノロジーとア プローチにすることがで きる。 4

5.

アプリモダナイズの基本 リビルド リアーキテクト Copyright © Alterbooth Inc. All Rights Reserved. 複雑 × ⻑期利⽤ 例: 勘定系シス テム、 顧客情報管理 システム 複雑 × ⾼頻度更新 例: ⼤規模分散 App シンプル × ⻑期利⽤ 例: 社内向 Web App シンプル × ⾼頻度更新 例: 外部向け Web サイト リホスト リファクター 5

6.

.NETのベースアーキテクチャー遷移 Windows Server 2008/R2 IIS7.0/7.5 Windows Server 2003/R2 IIS6.0 l 汎⽤ワーカープロセス (w3wp.exe) IIS 5.0 や 6.0 では現在ベース となっている IIS とは⼤きく ランタイムが変 わっており、移 ⾏する OSバー ジョンによる差 異を理解するこ とが重要です。 統合パイプライン l TCP/IP、 名前付きパイプライ ン l 64ビット対応 l Windows Server 2012/R2 IIS8.0/8.5 l アプリケーション プール 単位の動作アカウン ト分離 Windows Server 2016 IIS10.0 l ⼤きな変更はあまり ない Xplatform OS Nginx/Apache/ IIS l .NET Coreによる⼤ きな変⾰ IIS 7.0 以降、IIS では⼤きなランタイムの変更はないが IIS 6.0 以前のアプリ を引き継いだ場合は IIS 6.0 以前のアプリケーションの移⾏同様に注意する必 要があります。 ベースとなるアプリケーションが IIS 6.0 以前に作られたものであれば .NET バージョンよりも IIS ランタイムでのインパクトをいかに抑えるかが重要です。 Copyright © Alterbooth Inc. All Rights Reserved. 6

7.

汎⽤ワーカープロセス 汎⽤ワーカープロセス (w3wp.exe) とは、Web サーバー中核機能から切り離さ れたアプリケーション動作プロセスのことで、アプリケーションの障害などで Web サーバー全体がダウンしないようにアプリケーション動作を切り離して管 理出来るプロセスのことです。IIS 6.0 から導⼊された汎⽤ワーカープロセス (w3wp.exe) 以降ではワーカープロセス分離に関する制限が緩和され、ワー カープロセスへのアプリケーション マッピングもほぼ任意となっています。 l アプリケーション プールごとに汎⽤ワーカープロセスが作られる l 各アプリケーション プールに対してほぼ⾃由に Web アプリケーション を割り当てることができる l 1 つのワーカープロセスでは 1 つのランタイムのみ利⽤可能 Copyright © Alterbooth Inc. All Rights Reserved. 7

8.

IISベースのパイプライン 前段パイプライン処理 HTTP 要求 認証 HTTP 応答 セッション制御 許可制御 アプリケーション処理 ページ処理 後段パイプライン処理 キャッシュ保存 2000 2003 2003 R2 2008 2008 R2 2012 2012 R2 2016 2019 IIS 5.0 IIS 6.0 IIS 6.0 IIS 7.0 IIS 7.5 IIS 8.0 IIS 8.5 IIS 10.0 IIS 10.0 独⽴ パイプライン ○ ○ ○ ○ ○ ○ ○ ○ ○ 統合 パイプライン × × × ○ ○ ○ ○ ○ ○ Copyright © Alterbooth Inc. All Rights Reserved. (.NET 2.0 以降のみ) 8

9.

ISAPIモジュールを使ったパイプライン IIS パイプライン IIS モジュール パイプラインの流れ 1. IIS パイプラインの前処理が終わる 2. 拡張⼦振り分けが⾏われる 3. ASP.NET ランタイムに処理が移る 4. ASP.NET ランタイムの中で ASP.NET のパ イプラインが動く 5. 前処理終わったらハンドラで振り分けて処理 6. ASP.NET のパイプラインに戻って後処理が 終わる 7. IIS パイプラインの後処理が終わる 8. 応答が返される IIS モジュール ISAPI フィルター: IIS パイプラインに追加する共通処理モジュール ASP ランタイム http モジュール ASP.NET 独⽴パイプライン ハンドラ 振り分け http モジュール *.aspx*.asmx C++ で開発 *.jpg ISAPI 拡張 ASP.NET ランタイム (aspnet_isapi.dll) *.asp ASP.NET ランタイム ISAPI 拡張 : 拡張⼦振り分けによって動作するアプリ ランタイム http モジュール IIS パイプラインとは独⽴した ASP.NET 独⾃のパイプ ラインのこと。ASP.NET で開発した http モジュール で独⾃に追加のパイプラインを組むことができる。 拡張⼦ ISAPI フィルター 振り分け 独⾃拡張⼦ ASP.NET 独⽴ パイプライン PageHandlerFactory (HTTP ハンドラー) WebServiceHandlerFactory (HTTP ハンドラー) *.aspx プログラムファイルの 読み込みと処理 *.asmx HTTP ハンドラにより処理を実⾏する 前処理 Copyright © Alterbooth Inc. All Rights Reserved. 9

10.

.NET Coreはどう変わったのか 2つのホスティングモデルから実⾏環境を構築する。 インプロセス ホスティング IISのワーカープロセスと同じプロセス で実⾏されます。プロキシを介さずに 内部でパイプラインを組むことでパ フォーマンスがいいとされています。 従来のWindows IISでの利⽤を想定し ている場合はこちら。 アウトプロセス ホスティング IISのワーカープロセスとは独⽴して実 ⾏される。KestrelというAPPサーバー を内包している。IISはプロキシとして 独⽴したパイプラインで動きます。IIS ではなくApacheやNginxでも同様の動 きになります。 Copyright © Alterbooth Inc. All Rights Reserved. 10

11.

インプロセスとアウトプロセス IIS http w3wp.exe IIS application Pool http://hoge.com AspNetCoreModule インプロセスは⼀般に、IISとKestrel間の余分なネッ トワークホップを回避し、監視する必要のあるマシン 上で追加のプロセスを維持するため、リソース消費が 少なくなります。(Kestrelは使わない) .NET Core App http IIS .NET Core App w3wp.exe http://hoge.com dotnet .app dotnet .app.dll AspNetCoreModule Copyright © Alterbooth Inc. All Rights Reserved. http Kestrel WindowsやLinux にかかわらず、同じ アプリケーションの異なるデプロイメ ント間で100%の互換性を確保したい場 合などアウトプロセスを利⽤します。 例えばコンテナアプリなどはアウトプ ロセスとして実⾏させます。(Kestrel を使う) 11

12.

Kestrelとは Kestrelは.NET Coreのプロジェクトテンプレートに既定で含まれ有効になって いるアプリケーションサーバーです。 Kestrelのセルフホステッドも可能ですが、アウトプロセスホスティングで構成 することでリバースプロキシを選択することも出来ます。 Copyright © Alterbooth Inc. All Rights Reserved. 12

13.

.NET Frameworkからの移⾏動機 .NET Frameworkで作成されたアプリケーションを.NET Coreベースへモダナイ ズ、移⾏する場合、いくつか重要な動機づけが必要になります。 1. 最新のアプリケーションメンテナンスの継続性 2. クラウドとの親和性 3. パフォーマンス、信頼性の向上 4. クロスプラットフォームへ移⾏ 移⾏に際しては現在のバージョンからアップデートすることで受ける破壊的影響 を必ず確認してください。 https://docs.microsoft.com/ja-jp/dotnet/core/compatibility/ Copyright © Alterbooth Inc. All Rights Reserved. 13

14.

あとはクラウドを最⼤限活⽤する だけ︕ 1. バージョン管理される1つのコードベースと複数のデプロイ 2. 依存関係を明⽰的に宣⾔し分離する 3. 設定を環境変数に格納する 4. バックエンドサービスをアタッチされたリソースとして扱う 5. ビルド、リリース、実⾏の3つのステージを厳密に分離する 6. アプリを1つ⼜は複数のステートレスなプロセスとして実⾏ 7. ポートバインディングを通してサービスを公開する 8. プロセスモデルによってスケールアウトする 9. ⾼速な起動とグレースフル停⽌で堅牢性を最⼤化する 10.開発、ステージング、本番環境をできるだけ⼀致させた状態を保つ 11.ログをイベントストリームとして扱う 12.管理タスクを1回限りのプロセスとして実⾏する Copyright © Alterbooth Inc. All Rights Reserved. 14

15.

Appendix Introduction to IIS Architectures | Microsoft Docs https://docs.microsoft.com/en-us/iis/get-started/introduction-to-iis/introduction-to-iis-architecture .NET Framework および Windows OS バージョン | Microsoft Docs https://docs.microsoft.com/ja-jp/dotnet/framework/migration-guide/versions-and-dependencies .NETアプリケーションクラウドアセスメント KOSMISCH https://kosmisch.jp/ Azure Migration https://azure.microsoft.com/ja-jp/services/azure-migrate/ ASP.NET から ASP.NET Core への移⾏ https://learn.microsoft.com/ja-jp/aspnet/core/migration/proper-to-2x/?view=aspnetcore-7.0 ASP.NET Core への Kestrel Web サーバーの実装 https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-7.0 Copyright © Alterbooth Inc. All Rights Reserved. 15

16.

つまらない世界からもっと刺激のある世界へ変化させよう︕ Copyright © Alterbooth Inc. All Rights Reserved. 16