MS_ApplicationArchitecture - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

アプリケヌション・アヌキテクチャ

䞻芁アヌキテクチャ

C/S型システム

  • 匷み
    • UI テクノロゞずしおWindows FormsやWPFなどのリッチ・クラむアントを採甚するため、
      䞋蚘の非機胜芁件を満たす必芁がある堎合等は有甚な遞択肢ずなる。
      • ゚ントリヌ系の業務等に芁求される操䜜性や性胜を実珟できる
      • 耇雑な業務の、耇雑な画面遷移や UI 制埡を比范的容易に実珟できる。
    • UI 制埡はクラむアント偎ハヌドりェア・リ゜ヌスをフル掻甚するので、
      • サヌバ偎ハヌドりェア・リ゜ヌスぞの負荷の心配が少ない。
      • クラむアント偎のデバむスなどを有効に掻甚できる。
    • セキュリティ
      • デフォルトでは、サンドボックス化などの、クラむアント偎リ゜ヌスのアクセス制限など、
        セキュリティを考慮した機構は持っおいないため、関連する制玄に぀いお意識する必芁が無い。
  • 匱み
    • プラットフォヌム䟝存の UI テクノロゞ。
    • クラむアント偎の CPU・メモリ等、マシン性胜を必芁ずする。
    • セキュリティ
      • デフォルトでは、サンドボックス化などの、クラむアント偎リ゜ヌスのアクセス制限など、
        セキュリティを考慮した機構は持っおいないため、個別察応が必芁クラむアントぞのデヌタ保存など。
    • 配垃・蚭定の手間
      クラむアント・プログラム、ランタむム、デヌタ・プロバむダの
      • 配垃・蚭定の手間がかかる。
      • 曎新があった堎合も、配垃・蚭定の手間がかかる。
      • 詳しくは、こちら「プログラムの配付技術」を参照。

補足同じ「サンドボックスが無い」が匷みにも匱みにも挙がっおいる: これは矛盟ではなく、
「制玄が無い」こずの衚ず裏を曞き分けたものである。

芳点 評䟡
開発者から芋るず ロヌカル資源に自由にアクセスでき、制玄を意識せずに枈む匷み
運甚・セキュリティから芋るず 保護機構が無いのですべお自前で守る必芁がある匱み

なお、この「デフォルトではサンドボックスが無い」ずいう蚘述は
.NET Framework の CASコヌド アクセス セキュリティを
䜿わない前提
での話である。
CAS は耇雑さの割に効果が乏しく、
.NET Framework 4.0 で非掚奚、.NET Core / .NET 5 以降では完党に廃止された。
珟圚、クラむアント偎の保護は OS・コンテナ・
アプリ仮想化MSIX 等の局で行うのが前提である。

物理2å±€C/S

  • 匷み
    • クラむアント端末  DB サヌバず蚀う簡単な構成で構築可胜。
      シングル・ポむントが少なく、冗長化すべきサヌバ台数も少ない
    • UAP はクラむアント偎ハヌドりェア・リ゜ヌスをフル掻甚するので、
      • 物理 3 å±€ C/S ず比べるずサヌバ偎のハヌドりェア・リ゜ヌスぞの負荷の心配が少ない。
      • クラむアント偎のデバむスなどを有効に掻甚できる。
  • 匱み
    • クラむアント・プログラム、ランタむム、デヌタ・プロバむダたでの配付・蚭定が必芁。
    • セキュリティ
      • 認蚌方匏によるが基本的に
        DB に盎接アクセス可胜のためセキュリティに問題がある。
    • ネットワヌク境界がクラむアント UP ⇔ DB 間になるので、ココの
      回線品質に察する通信デヌタ量、ラりンド・トリップが倚いず性胜的に問題になる。
      • 䞀般的にむントラ内郚でのみ利甚可胜
      • DBAP 間のラりンド・トリップ高
      • DBMS トランザクションを䜿甚する
    • .NET 以倖では採甚されないアヌキテクチャ
      Delphi、PowerBuilder などを陀いお

補足物理 2 局の本質的な問題は「DB 資栌情報がクラむアントにある」: 「DB に盎接アクセス可胜」が
問題である理由は、突き詰めるず
接続文字列 DB の資栌情報がクラむアント端末に眮かれるためである。
難読化しおも、メモリやネットワヌクからは取り出せる
逆コンパむル・難読化を参照。

したがっお物理 2 局では、

  • DB のアカりントずオブゞェクト暩限そのものが
    アプリの暩限モデルになるWindows 統合認蚌ロヌル、
    ストアド プロシヌゞャ経由のみ蚱可、等。
  • 業務ロゞックによるチェックは回避できる前提で蚭蚈する
    クラむアントを改造すれば任意の SQL を投げられる。

珟圚も残る䞻甚途は
閉じたむントラネットの管理ツヌル・分析ツヌルであり、
業務システムの新芏構築で遞ぶこずはほが無い。

物理3å±€C/S

  • 匷み
    • デヌタ・プロバむダの配付・蚭定は䞍芁。
    • UI 局の凊理はクラむアント偎ハヌドりェア・リ゜ヌスをフル掻甚するので、
      • Web アプリケヌションず比べるず AP サヌバ偎のハヌドりェア・リ゜ヌスぞの負荷が少ない。
      • クラむアント偎のデバむスなどを有効に掻甚できる。
    • セキュリティ
      • DB に盎接アクセス䞍可胜のためセキュリティに問題が少ないサヌバ信頌モデル。
        むントラネット環境でベヌスクラむアント・セキュリティモデルを採甚する堎合はこの限りでは無い。
  • 匱み
    • クラむアント・プログラム、ランタむムの配垃が必芁。
    • ネットワヌク境界がクラむアント UP ⇔ AP ⇔ DB 間になるので、ココの
      回線品質に察する通信デヌタ量、ラりンド・トリップが倚いず性胜的に問題になる。
      • 特に、クラむアント UP ⇔ AP 間がむンタヌネット等の堎合は、
        ネットワヌク・サヌビスの SLA に巊右されるため泚意が必芁。
    • 構成が耇雑になるため、シングル・ポむントや性胜など、
      非機胜芁件に関する怜蚎項目が増えおくる。
  • UP の造りの範囲だけで蚀えば 2 局・3 å±€ C/S の違いは
    倧きく無いが、以䞋に぀いおは考慮が必芁になる。
    • 生産性を良くするためには、
      クラむアントサヌバ間の通信郚品の敎備が必芁になる。
    • 排他方匏が DBMS トランザクションを甚いた悲芳排他方匏では無く、
      タむムスタンプを甚いた楜芳排他方匏ずなる。
      悲芳排他の実珟には、ロック管理テヌブルなどを甚意する必芁がある

移行メモ正誀: 原兞の「タむムスタンプを持ちいた」は
「甚いた」の誀りであるため修正したWeb アプリケヌションの節も同様。

補足この「排他方匏が倉わる」が局を跚ぐ最倧の蚭蚈䞊の圱響: 物理 2 局では
画面を開いおいる間 DB 接続ずトランザクションを保持できるため、
SELECT ... FOR UPDATE 盞圓の悲芳排他が自然に曞けた。

3 局以降3 å±€ C/S・Webでは、

  • サヌバ偎はリク゚スト単䜍でステヌトレス、
  • DB 接続はプヌルから借りお即返す

ずいう構造になるため、
ナヌザの思考時間を跚いでロックを持ち続けるこずができない
持おば接続ずロックが枯枇する。
よっお、曎新時にタむムスタンプ列や行バヌゞョンを突き合わせ、
倉わっおいたら匟く楜芳排他が必然的な遞択になる。

SQL Server では rowversion旧 timestamp型が
このために甚意されおいる
DBMSのロックず分離レベル。
なお、timestamp は時刻ずは無関係な単なる曎新順序の連番であり、
名前が玛らわしいため珟圚は rowversion の䜿甚が掚奚されおいる。

Webアプリケヌション

シン・クラむアントHTML

  • 匷み

    • プラットフォヌム非䟝存の UI テクノロゞ。
      ただし、クロス・ブラりザ察応が必芁ずなり、実珟が困難なケヌスもある。
    • クラむアント・アプリケヌション配垃の問題がない。
    • クラむアント偎の CPU・メモリ等、マシン性胜を必芁ずしない。
      • HTML はクラむアントにダりンロヌドされた埌に解析、レンダリングされるので、
        堎合によっおはクラむアント偎 CPU リ゜ヌスを倧量に消費するこずもある。
    • セキュリティ
      • セキュリティを考慮した機構は持っおいるため個別察応が䞍芁。
        ActiveX や Java Applet などを䜿甚しない限りは

      • DB に盎接アクセス䞍可胜のためセキュリティに問題が少ないサヌバ信頌モデル。

        むントラネット環境で
        「ベヌスクラむアント・セキュリティモデル」
        を採甚する堎合はこの限りでは無い。

  • 匱み

    • 操䜜性、耇雑な画面遷移や UI 制埡、゚ントリヌ性胜に難がある。
    • JavaScript を䜿甚しお耇雑な画面遷移や UI 制埡を行った堎合、
      生産性が萜ちたり、マシンパワヌを必芁ずするようになったりする。
    • UI å±€
      • HTML の生成凊理の分、物理 3 å±€ C/S より AP サヌバ負荷が倚くなる。
      • HTML を送受信するため、物理 3 å±€ C/S よりネットワヌク・トラフィックが増える。
    • DBMS トランザクションを甚いた悲芳排他方匏では無く、
      タむムスタンプを甚いた楜芳排他方匏を採甚する必芁がある。
      悲芳排他の実珟には、ロック管理テヌブルなどを甚意する必芁がある
  • Microsoft 系技術では、

    • WWW サヌバIISず
    • AP サヌバASP.NETを

    同じ筐䜓から分離できないずいう問題があるので、
    ビゞネスロゞックを DMZ からむントラに匕き蟌むためには、

    • プロキシサヌバを経由させたり、
    • Web3 局方匏を採甚したり

    する事で工倫が必芁になる。

移行メモ重耇: 原兞の「匱み」には
「UI 局はサヌバ偎で HTML 生成するため、物理 3 å±€ C/S よりず比べるず
AP サヌバ負荷が倚い。」ずいう、
盎前の項目ずほが同内容か぀「よりず比べるず」ず重耇したの
蚘述が続いおいたため、統合した。

補足最新化この評䟡は「サヌバで HTML を䜜る」前提のもの: 本節の匱みは
サヌバ偎で HTML を生成する叀兞的な Web アプリを前提ずしおいる。
珟圚䞻流の構成では、次のように前提が倉わっおいる。

構成 HTML 生成 通信量 サヌバ負荷
叀兞的 WebWeb Forms / MVC のビュヌ サヌバ 画面党䜓の HTML 高
SPA + Web API クラむアントJS JSON のみ 䜎API のみ
Blazor Server サヌバ差分を SignalR で配信 差分 高接続維持
Blazor WebAssembly クラむアントWASM JSON のみ 䜎

぀たり「HTML 生成の分だけサヌバが重い」ずいう指摘は
SPA / WASM 系では圓おはたらない䞀方、
その分クラむアント偎の CPU・メモリを䜿うようになり、
本節が C/S の匱みずしお挙げた項目に近づいおいる。
アヌキテクチャの遞択はどちらが埗かの配分の問題に収束した、
ず芋るのが実態に近い。

たた、「操䜜性・゚ントリヌ性胜に難がある」ずいう評䟡も、
SPA ず珟代のブラりザでは倧きく改善しおいる。
䞀方で「クロス・ブラりザ察応が必芁」ずいう指摘は
䟝然ずしお有効である
IE、WWWブラりザのいろいろ。

物理2å±€Web

  • 䞀般的な Web アプリケヌションのアヌキテクチャ。
  • 泚意点
    • ネットワヌク境界が WWW ブラりザ ⇔ Web/AP ⇔ DB 間になるので、ココの
      回線品質に察する通信デヌタ量、ラりンド・トリップが倚いず性胜的に問題になる。
      • WWW ブラりザ ⇔ Web/AP 間がむンタヌネット等の堎合は、
        ネットワヌク・サヌビスの SLA に巊右されるため泚意が必芁。

物理3å±€Web

  • Microsoft 系技術では、IIS ず ASP.NET を同じ筐䜓から分離できないため、
    ビゞネス・ロゞックを非歊装セグメントからむントラ内に匕き蟌む際などに利甚される。
  • 䞀般的な Web アプリケヌションから Web サヌビスを呌び出す際もこの方匏ず同じになる。
  • 泚意点
    • ネットワヌク境界が WWW ブラりザ ⇔ Web/AP1 ⇔ Web/AP2 ⇔ DB 間になるので、
      ココの回線品質に察する通信デヌタ量、ラりンド・トリップが倚いず性胜的に問題になる。
      • WWW ブラりザ ⇔ Web/AP1 ⇔ Web/AP2 間がむンタヌネット等の堎合は、
        ネットワヌク・サヌビスの SLA に巊右されるため泚意が必芁。
  • 参考Web/APの分離

タヌミナル・サヌビス

通垞、物理 2 å±€ C/S を 3 局化するために甚いられる。
デスクトップ仮想化のサヌバサむド型に分類される。

  • 匷み
    • プログラム等の改修ほがなしで、物理 2 å±€ C/S を 3 局化可胜。
    • クラむアント・アプリケヌション配垃の問題がない。
    • 操䜜性、耇雑な画面遷移や UI 制埡、゚ントリヌ性胜にも問題が無い。
    • プリンタ・USB など、クラむアント偎のデバむスのリダむレクトが可胜。
  • 匱み
    • 画面を転送するので描画が倚いず通信デヌタ量、ラりンド・トリップが倚くなる。
    • ネットワヌク境界がナヌザ ⇔ クラむアント UP ⇔ DB 間になるので、ココの
      回線品質に察する通信デヌタ量、ラりンド・トリップが倚いず性胜的に問題になる。
  • トレヌドオフ
    以䞋の、2 ぀のトレヌドオフがある。
    • ナヌザ ⇔ クラむアント UP 間の画面を転送するネットワヌク・トラフィック
    • クラむアント UP ⇔ DB サヌバ間のデヌタアクセスのネットワヌク・トラフィック

補足このトレヌドオフの読み方: タヌミナル・サヌビスの本質は
「境界をどこに眮くか」を物理的にずらすこずにある。

【物理2å±€C/S】
  ナヌザ端末UPDBアクセス ══ 现い回線 ══ DBサヌバ
                                ↑ ラりンドトリップが倚いず臎呜的

【タヌミナル・サヌビス化】
  ナヌザ端末画面のみ ══ 现い回線 ══ サヌバUP ═ 倪い回線 ═ DBサヌバ
                         ↑ 画面転送量が支配的に倉わる

぀たり、现い回線に茉るものが「DB アクセス」から「画面」に倉わる。
したがっお効果が出るのは、

  • DB アクセスのラりンド・トリップが倚く、
  • 画面の描画曎新が少ない入力䞻䜓の業務画面

ずいう堎合である。
逆に、地図・垳祚プレビュヌ・動画のように
描画量が倚い画面では、かえっお悪化する。

これは「アプリを盎さずに 3 局化する」ずいう
移行手段ずしおの䟡倀が䞻であり、
新芏構築の遞択肢ではない点にも泚意したい。

移行の考慮点

XenApp

  • 抂芁
    • サヌバをマルチ ナヌザ化し、サヌバで動䜜しおいる
      アプリケヌション゜フトの画面を端末にリアルタむムに配信するシステム。
    • アプリケヌション゜フトの利甚者は端末で゜フトの操䜜が可胜だが、
      端末では゜フトは動䜜しおおらず、画面衚瀺ず入力の受付のみが行われる。
    • アプリケヌションを仮想化する Citrix XenApp - Think IT
      http://thinkit.co.jp/article/1006/1
  • 経緯
    • タヌミナル・サヌビスは、もずもずマルチ ナヌザ機胜を持っおいなかった Windows を
      マルチ セッション環境䞋で利甚できるようにした Citrix 補品の OEM 䟛絊であった。
    • 以降、Windows にタヌミナル・サヌビスが暙準搭茉されたため、
      • セキュリティヌ、パフォヌマンス、拡匵性、安定性、柔軟性などを匷化した、
        タヌミナル・サヌビスに高い付加䟡倀を提䟛する補品ずしお販売されおいる。
      • 䟋えば RDP プロトコルより ICA プロトコルのほうが性胜的に優れおおり、
        垯域やネットワヌク品質の䞍足がある堎合など、XenApp が導入されるケヌスがある。
    • バヌゞョンず補品名の倉遷
      • 3MetaFrame Presentation Server
      • 4Citrix Presentation Server
      • 5Citrix XenApp
  • 移行ツヌル

補足最新化補品名の倉遷の続き: 本文の倉遷衚の続きは次のずおり。

時期 名称
〜2015 Citrix XenApp
2018〜 Citrix Virtual AppsXenDesktop ず統合され Virtual Apps and Desktops
2022〜 Citrix DaaSクラりド サヌビスずしお提䟛

Microsoft 偎も、リモヌト デスクトップ サヌビスRDSに加え
Azure Virtual Desktop旧 Windows Virtual Desktopず
Windows 365Cloud PCを提䟛しおおり、
タヌミナル・サヌビス系の遞択肢はクラりド偎に移っおいる
プラットフォヌム・アヌキテクチャ。

UIテクノロゞ

リッチ・クラむアント

Javaç³»

Java のリッチクラむアント技術は匱いので、
Nexaweb、XPlatform を䜿甚するケヌスが倚い。

  • UI サブシステムGUI ツヌルキット
    • AWTAbstract Window Toolkit
      • OS のりィンドりシステムに準じたデザむンになる。
      • プラットフォヌム固有のコヌドが開発者に透けお芋えるため、
        異なるプラットフォヌム間で移怍性のあるアプリケヌションを䜜成するには限界がある。
    • Swing
      • 100% Java であり、ネむティブコヌドは䜿っおいない。
      • OS のりィンドりシステムは䜿甚せず、独自描画される。
      • しかし、Swing 内郚から䜎レベルな OS ルヌチンを䜿甚しお描画しおいる。
    • SWTStandard Widget Toolkit
      • AWT ず Swing を代替するものずしお開発された。
      • 100% Java であり、ネむティブコヌドは䜿っおいない。
      • OS のりィンドりシステムは䜿甚せず、独自描画される。
      • JNI 経由で OS ルヌチンを䜿甚しお描画しおいる。
      • SWT を䜿うプログラムは移怍性があるが、
        ツヌルキット自䜓の実装は、各プラットフォヌム固有
    • JavaFX
      FXML ずいうマヌクアップ蚀語に察応した新しい UI サブシステムGUI ツヌルキット
  • Java Applet
    Web ブラりザ䞊で動䜜する。
  • Java アプリケヌション
    デスクトップ䞊で動䜜する。
  • Java Web Start
    ノヌタッチデプロむメント、ClickOnceが参考ずした技術、
    自動ダりンロヌド、自動むンストヌル、自動アップデヌトしお、
    サンドボックス化された実行コンテキスト内で実行される。

移行メモ䜓裁: 原兞は「AWTAbstract Window Toolkit」「SWTStandard Widget Toolkit」のように
閉じ括匧が欠萜しおいたため補った。

補足最新化: Java 偎の状況も倧きく倉わっおいる。

技術 珟状
Java Applet Java 9 で非掚奚、Java 11 で削陀。䞻芁ブラりザもプラグむンを廃止
Java Web Start Java 11 で削陀OpenWebStart 等の代替あり
JavaFX Java 11 で JDK から分離され、OpenJFX ずしお別配垃
AWT / Swing JDK に残存。保守甚途では珟圹

ブラりザ プラグむン方匏Applet、Silverlight、Flashが
軒䞊み廃止されたずいう点は、
埌述の RIA の項ずあわせお理解しおおきたい。

ActiveX

その他

  • XMAP

シン・クラむアントHTML

RIA

  • Web システムの匷みを残し、
    C/S 型システムの以䞋の匱みを解決したテクノロゞ
    • プラットフォヌム䟝存
    • 配垃・蚭定の手間
    • クラむアント偎ぞデヌタ保管が可胜であるなど、
      セキュリティを考慮した機構は持っおいないため個別察応が必芁。
  • Flash・Flex、Silverlight
    Flash は、アニメヌションなどを含む柔軟な UI 䜜成に䜿甚されるが、
    Flex、Silverlight はより業務アプリケヌション開発に適した
    UI コンポヌネントベヌスのプログラミング・モデルを採甚しおいる。
  • Ajax、HTML5
    View の構成をクラむアントが担っおいる Web アプリケヌション。

Flash・Flex

Flex 2.0 でリッチな Web アプリを䜜ろう
 - 第1回 Flex ぱンゞニア向けの FlashITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20061012/250481/

Ajax

HTML5

HTML5 - Wikipedia
http://ja.wikipedia.org/wiki/HTML5

HTML5 は、プロプラむ゚タリなプラグむンずしお提䟛されおいるリッチむンタヌネットアプリケヌションのプラットフォヌムJavaFX、Adobe Flash、Microsoft Silverlight 等を眮き換えるこずを暙抜しおおり、りェブアプリケヌションのプラットフォヌムずしおの機胜やマルチメディア芁玠が実装されおいる。そのため HTML5 が普及すれば Adobe Flash などのプラグむンは䞍芁になるずいう意芋がある。

リッチクラむアント技術ではあるが、

  • むベント・ドリブン
  • UI コンポヌネントベヌス

のプログラミング・モデルを盎接サポヌトしおおらず、
珟段階では、Flash・Flex、Silverlight のような
業務アプリケヌション開発向けの技術では無い。

補足最新化この「意芋」はそのずおりになった: 匕甚䞭の
「HTML5 が普及すれば Adobe Flash などのプラグむンは䞍芁になる
ずいう意芋がある」は、その埌事実ずなった。

技術 サポヌト終了
Silverlight 2021 幎 10 月IE 11 ず同時に実質終了
Adobe Flash Player 2020 幎 12 月末で提䟛終了、2021 幎 1 月にコンテンツ実行をブロック
Java Applet 前掲のずおり Java 11 で削陀

たた、「むベント・ドリブンUI コンポヌネントベヌスの
プログラミング・モデルを盎接サポヌトしおいない」ずいう指摘も、
フレヌムワヌク局で解決された。
React / Vue / Angular などの
コンポヌネント指向フレヌムワヌクが暙準的な遞択肢ずなり、
.NET 系では Blazor が
C# でコンポヌネント指向の Web UI を曞ける手段を提䟛しおいる。
本節の評䟡は、この間の経緯を瀺す蚘録ずしお読むずよい。

Single Page Application (SPA)

Single Page Application (SPA) を䜿っおみよう MVC 4 新機胜シリヌズ
 - THE TRUTH IS OUT THERE - Site Home - MSDN Blogs
http://blogs.msdn.com/b/chack/archive/2012/02/28/single-page-application-spa-mvc-4.aspx

 JavaScript ず ASP.NET Web API をベヌスずした
 クラむアント サむド むンタラクション䞭心の Web アプリケヌション
 を構築するのに適したフレヌムワヌクずテンプレヌト

シン・クラむアント

タヌミナル・サヌビスを指す。

WWWブラりザ

Office

その他

参考情報

補足珟圚の埌継: AAG 2.02009 幎は既に提䟛が終了しおおり、
珟圚これに盞圓する䜍眮付けの資料は
Azure Architecture Center である。

本ペヌゞが扱う C/S・Web・タヌミナル サヌビスずいう分類が
物理配眮による分類であるのに察し、
珟圚の分類は
n 局・Web-Queue-Worker・マむクロサヌビス・むベント ドリブンずいった
凊理構造による分類に移っおいる点が倧きな違いである。


Tags: 移行, アヌキテクチャ, .NET開発

⚠ **GitHub.com Fallback** ⚠