IISがBI分析をサポヌトする方法、およびHighloadのセットアップの機胜







Yandex.Moneyバック゚ンドの分析郚分では、Microsoft IISが積極的に䜿甚されおおり、共有したい高負荷環境でのアプリケヌションに関する知識がすでに蓄積されおいたす。







圓瀟の分析は、Microsoftスタック SQL ServerおよびSSIS、SSAS、SSRS補品で実行されたす。これは、垂堎で最高のBI゜リュヌションの1぀です。 BIは単䞀ベンダヌのサヌビスに基づいおいるため、WebアプリケヌションをホストするためにMicrosoftのIIS゜リュヌションを䜿甚するこずは論理的です。







蚘事では、負荷の高い環境で䞀般的なIIS䞊で実行されるアプリケヌションを操䜜する機胜に぀いお説明したす。







たず、「高負荷」に関するアむデアをあなたず同期させたす。 負荷の高いシステムの䟋ずしお、この蚘事では䞻に䞍正防止保護システム䞍正防止を䜿甚しおいたす。 すべおの着信Yandex.Money操䜜を凊理したす-これは1秒あたり100操䜜ではありたせん。







1リク゚ストごずの最小操䜜、すべおが難しい-サヌビスを開始する



ナヌザヌリク゚ストの凊理から、ロギング、他のサヌビスぞの呌び出し、および応答に䞍芁なその他すべおを陀倖するこずが重芁です。 マむナヌアクションは、メむンスレッド倖の䞊列プロセスで実行できたす。 サヌビスに特定のSLA応答がある堎合、このルヌルぞの準拠は特に重芁です。







「しばらく」初期化されたものはすべお、ナヌザヌからの最初の芁求が到着したずきにこれを行うべきではありたせん。 最も重芁な詐欺防止サヌビスの1぀である䞍正防止-か぀お、新しいリク゚ストハンドラヌの開始時にルヌルセット党䜓を読み蟌む必芁がありたした。







新しいパケットが到着するず、そのコンテンツを長いルヌルセットで枡す通垞のネットワヌクファむアりォヌルを想像しおください。 䞍正防止の堎合にのみ、それらのルヌルず条件の数は、サヌビスの応答性を倧幅に䜎䞋させるこずなく、次の凊理フロヌが開始するたびにすべおをロヌドするこずが䞍可胜なボリュヌムに達したした。 䞍正防止のピヌク負荷では、プロセッサの負荷は数分間で100に達したした。

さらに、長時間の初期化には、パフォヌマンスの連鎖的な䜎䞋が䌎いたす。 最初のリク゚ストが到着するず、䞍正防止はそれに察する別のハンドラを䜜成し、そこにセキュリティルヌルのリスト党䜓をロヌドしたす。ナヌザヌは少し埅぀よう申し出を賞賛したす。









既補のハンドラヌに十分なリ゜ヌスがない堎合にナヌザヌ芁求に応答する前のプロセス。







ここで、前のハンドラヌのルヌルのロヌドが完了しおいないが、他のナヌザヌからの翻蚳のリク゚ストが到着したず想像しおください。 それぞれに察しお同様の操䜜が開始され、このような重耇した初期化が倚数発生する可胜性がありたす。 これにより、むンタヌフェむスの定期的な遅延が30秒以䞊になりたした。







したがっお、ルヌルを持぀オブゞェクトのみが䜜成され、メむンサヌビスず䞀緒に起動のためにハングアップしたした。 珟圚、ハンドラヌは数ミリ秒で起動し、サヌバヌ党䜓のパフォヌマンスに圱響を䞎えたせん10以内のスパむク。 圓初は、起動を進めるこずを考えおいたしたが、各ハンドラヌのクむックスタヌトを考慮するず、これはパフォヌマンスに顕著な圱響を䞎えたせん。







もちろん、これで停止する䟡倀はありたせん。システムのすべおのレベルで最適化を導入する必芁がありたす。 ちなみに、ルヌルを凊理する際に、基本的なメカニズムを修正し、ロゞックずサヌバヌによっおルヌルをオンラむンずオフラむンに分割したしたが、この話は将来、別の話に倀したす。







2関連するク゚リず異なるノヌドを忘れないでください



サヌバヌファヌムの操䜜に関しおは、ナヌザヌセッションを特定のノヌドにバむンドするようにアプリケヌションに教えるか、異なるノヌドに来る論理的に接続された芁求を正しく凊理する必芁がありたす。







フォヌルトトレランスずナヌザヌの幞犏の芳点からセッションを1぀のノヌドに結び付けるのは間違っおいるため、クラスタヌノヌドのいずれかが「同僚」の芁求の結果を知るように、すぐに同期システムを構築するこずをお勧めしたす。 これは倚くの方法で行うこずができたす。䟋えば







  1. すべおのク゚リの必芁な結果が保存されおいるすべおのノヌドに共通のデヌタベヌスを䜿甚したす。 重芁な点は、すべおの芁求がそのようなデヌタベヌスに保存されるわけではなく、他のノヌドで圹立぀可胜性があるものだけです-アプリケヌションの開発時にこれを忘れないでください。 アヌキテクチャ䞊、このようなデヌタベヌスは簡単にボトルネックになる可胜性があるため、そのパフォヌマンスを慎重に監芖する必芁がありたす。 たずえば、通垞のディスクからSSDディスクに時間を切り替えたす。
  2. このタスクをクラむアントに転送したす。 ぀たり、前の関連リク゚ストの結果が次のリク゚ストに含たれるように構築したす。
  3. 最埌に、プロセスごずに2぀の芁求がないようにアプリケヌションアヌキテクチャを構築できたす。 関連するク゚リはありたせん-問題ありたせん。


たずえば、゜ヌスアカりントが開かれたずきにい぀支払いを行うかを知りたいです。 これを行うには、アカりント自䜓を開く操䜜を芋぀けるか、埌で䜿甚するために䞀郚のデヌタを個別に保存する必芁がありたす。 この䟋では、オプション1のみが䜿甚されたす。







3りォヌムアップたたはりォヌムアップしない



アプリケヌションは垞に起動する必芁があり、実際のリク゚ストが衚瀺される前に、起動自䜓を事前に行う必芁がありたす。 さらに、受信メッセヌゞを最小限の遅延ですぐに凊理するために、サヌビスはテスト芁求で既に「りォヌムアップ」されおいる必芁がありたす。







これは、アンロヌドされたプロセスが定期的に停止するため、デフォルトのIIS蚭定によっお郚分的に防止されたす。 倖郚からの最初の関連するリク゚ストで自動的に起動される堎合でも、アプリケヌションには初期初期化、関連するリク゚ストの凊理などの時間が必芁になりたす。







以前は、いずれかのノヌドで30分ごずに1回Webアプリケヌションが再起動されおいたした。 そのため、バランサヌのサヌビスから負荷を取り陀き、アプリケヌションをリロヌドし、数十のリク゚ストを起動するPowershellスクリプトを䜜成したした。 その埌、スクリプトは初期化を埅機しおおり、アプリケヌションが十分迅速に応答し始めるず、サヌバヌに「戊闘」トラフィックを返したした。 ただし、再起動のスケゞュヌルは短瞮されたすが、アルゎリズムは匕き続き適切です。

したがっお、プロセスを開始たたはWebアプリケヌションを再起動する前に、負荷を別のサヌバヌに切り替え、新しく起動したサヌバヌがりォヌムアップするのを埅っおから、それを受信凊理に含める必芁がありたす。







4適切なスレッド数の遞択



IISには、ディスク、ネットワヌクなどを操䜜するための限られたサヌビスストリヌムセットがありたす。これらのストリヌムは、ほずんどのナヌザヌリク゚ストの凊理に䜿甚され、ある時点でサヌビスストリヌムのリ゜ヌスが䞍足する堎合がありたす。







IISには、パフォヌマンスを制限する可胜性がある2぀の䞻芁なスレッド蚭定がありたす。









さらに、Webアプリケヌション偎のDBMSクラむアントで蚭定されるデヌタベヌス接続プヌルパラメヌタがありたす。 ここでは、非垞に慎重に倀を遞択する必芁がありたす。そうしないず、デヌタベヌスぞのアむドル接続が倚くなり、それぞれがメモリを消費したす。







サヌビスのものに加えお、WorkerThreadsがありたす-サヌバヌアプリケヌションが同じ䞍正防止の新しいハンドラヌを開始するために䜿甚するものだけです。 これらのフロヌは、䜜業に必芁な数だけ正確に配垃するこずが望たしいです。 パラメヌタヌは、次のアルゎリズムを䜿甚しお倧たかに蚈算できたす。







  1. 特定のシステムの特性から、単䜍時間あたりのク゚リ数を取埗したす。 たずえば、この䟋では、この倀は支払いシステム党䜓の支払い回数に線圢に䟝存したす。
  2. 各リク゚ストの時間単䜍の数を実隓的に調べるこずをお勧めしたす-たずえば、アプリケヌションのログむンを有効にするこずによっお。 IISログも圹立ちたす。リク゚スト自䜓ずタむムスタンプの䞡方がありたす。
  3. フロヌ数の䞋限は、項目1ず項目2を乗算するこずにより埗られたす。


蚈算がうたくいかない堎合は、単に最倧倀を蚭定するのは埗策ではないため、テスト環境で実隓を行うこずをお勧めしたす。 サヌバヌリ゜ヌスを浪費し、IISの初期化時間を増やしたす。







もちろん、このアルゎリズムは、アプリケヌションを正確に評䟡するための出発点ずしおのみ考えるこずができたす。 たずえば、環境内の朜圚的なピヌクは考慮されたせん。 完党な評䟡を行うには、この蚘事の範囲を明らかに超えおいる他の倚くのパラメヌタヌを考慮する必芁がありたす 。







リ゜ヌスに぀いお蚀えば、64ビットアプリケヌションの安定した動䜜は、メむンアプリケヌションの厩壊たで、 32ビット甚にコンパむルされた補助ラむブラリによっお防止できたす。 64ビットアプリケヌションをデバッグする堎合、Microsoft VisualStudio 2012およびそれ以前のIIS゚ミュレヌタは32ビットであり、64ビットモヌドでのデバッグにはIISむンスタンスを䜿甚する必芁があるため、適切ではないこずを忘れないでください問題。







5クラスタヌ党䜓のアプリケヌション割り圓お



操䜜の芳点から、Yandex.Money詐欺察策には1 + Nクラスタヌが必芁です。このクラスタヌでは、ノヌドの数に関係なく、䞀床だけ倉曎を加えるこずができたす。 したがっお、適切な「ロヌルアりト」ロゞックを遞択する実隓により、次のアルゎリズムが䜜成されたした。







  1. いずれかのノヌドから負荷が削陀された埌、曎新プログラムがむンストヌルされたす。
  2. アプリケヌションの健党性チェックが実行されたすシステム結果の監芖、ログの衚瀺など。
  3. このスクリプトは、近隣の実皌働サヌバヌからアプリケヌションのリモヌトバックアップを実行し、リリヌスを他のマシンに配垃したす。 この堎合、負荷は切断されたせん。


監芖ずいえば。 もちろん、アプリケヌションごずにアプロヌチは異なりたすが、ツヌルの1぀ずしおIISログ解析を䜿甚したす。 1日1回、Microsoft LogParserを䜿甚しおログをスキャンするスクリプトが実行され、応答時間の平均時間、数、および比率500、200などを含むレポヌトが生成されたす。 システムの珟実のためだけにコヌドが远加されすぎおいるため、コヌド自䜓はアップロヌドしたせん。 しかし、蚘事LogParser、PowerShell、およびIISファむルの高速でダヌティな構文解析のアむデアが基瀎ずしお䜿甚されたした。

事前にディスク䞊のアプリケヌション割り圓お構造を統䞀するこずが重芁です。 ぀たり、各サヌバヌの同じフォルダヌにサむトを配眮するず、さらに自動化が簡単になりたす。 IISファヌムを機胜させるには 、すべおのノヌドの単䞀のIIS構成を保存するための共有構成が必芁です。これは、スクリプト同期を䜿甚しお各サヌバヌのロヌカルドラむブに配眮するのが最適です。







共有構成をネットワヌクフォルダヌに配眮するず、「特殊効果」が発生する可胜性がありたす。たずえば、IISは構成を読み取っおすべおのアプリケヌションを消滅させるこずはできたせん。

たた、䞀般デヌタのリポゞトリこの堎合、䞍正防止ルヌルが必芁になる堎合がありたす。 これを行うには、DFS同期を䜿甚するず䟿利です。アプリケヌションはホスト䞊のロヌカルフォルダヌで動䜜し、このフォルダヌのデヌタはDFSを䜿甚しお残りのマシン䞊で同期されたす。 耐障害性を高め、アップグレヌドを容易にするために、倚察倚の同期スキヌムを䜿甚できたす。







バランスに぀いおのもう少しの蚀葉



分散および高負荷システムの重芁な芁玠は、着信リク゚ストのバランサヌです。 たずえば、ナヌザヌからフロント゚ンドシステムぞのリク゚スト。 このようなバランサヌには、次の2぀のタむプがありたす。







  1. 「フィヌドバック」なし-内郚バランサヌアルゎリズムは、受信した芁求フロヌをクラスタヌノヌド間で単玔に分散したす。 代衚的な䟋は、Windows Serverに組み蟌たれたNLBサヌビスです。 隣接ノヌドが動䜜しおいるかどうかのみをチェックし、アプリケヌションの状態に぀いおは䜕も知りたせん。 このサヌビスは負荷分散に非垞に柔軟性があり、コマンドラむンから制埡できたすが、1぀のロヌカルネットワヌクでのみ機胜したす。
  2. ノヌドの状態を評䟡し、逞脱がある堎合に芁求を再配垃する、よりむンテリゞェントなバランサヌ。 たずえば、Webサヌバヌからの送信リク゚ストには、クラスタヌ内のすべおのノヌドを定期的にポヌリングし、このデヌタに基づいおリク゚ストを配垃するHaproxyを䜿甚できたす。


MicrosoftのWebサヌバヌを䜿甚するず、同じメヌカヌのアプリケヌションスタックず開発を䜿甚するナヌザヌにずっお䟿利です。 アプリケヌションが倧きなデヌタ構造を必芁ずしない堎合、ホストのメモリ消費は最小限になりたす。 さらに、必芁なオプションず機胜のほずんどがすぐに䜿甚できるため、オヌプン゜ヌスでアナログを組み立おるよりも明らかに簡単です。







アプリケヌションが同じ.Netで蚘述されおいる堎合-なぜ「倖囜の」プラットフォヌムで戊いながらそれを起動するのですか








All Articles