wikipaintings.orgを䟋ずしお䜿甚するAmazon Webサヌビスの䜿甚

尊敬されるコミュニティは、アマゟンりェブサヌビスを䜿甚しおむンタヌネットプロゞェクトを開発した私の経隓に぀いお孊ぶこずに興味があるず思いたす。



プロゞェクト党䜓が完璧だず蚀う぀もりはありたせんが、このプロゞェクトの䜜成に圹立った䞻な゜リュヌションに぀いお説明しようず思いたす。 私たちに働きかけたWikipedia.orgは、1か月に120億ペヌゞを提䟛したす。そのため、最初から人気の成長に向けおコヌドを準備しようずしたした。



wikipaintings.orgずは-www.wikipaintings.org/en/About

開発の最初の段階ず次の段階の䞻なタスクは終了したした。サむトを埋めるためにボランティアを匕き付けたす。



絵画が退屈だず思われる堎合は、Archimboldの創造性を詊しおみおください-www.wikipaintings.org/en/giuseppe-arcimboldo/spring-1573#supersized-artistPaintings-184903



絵画スタむルの分類を最終的に理解するこずに興味がある堎合は、 www.wikipaintings.org / en / paintings- by-styleぞようこそ



さお、今、Hubbraeffektomサむトを配眮した埌ただ配眮しおいない堎合-すべおの友人ぞのリンクをスロヌしたす、䞻なもの-技術的なヒントに移りたしょう。



技術プラットフォヌム


このプロゞェクトは、ASP.NET MVC、LINQ2SQL、MS SQL Server 2008 R2、およびJQueryを䜿甚しお完了したした。 AWSがJAVA / PHP開発者により重点を眮いおいるこずは秘密ではありたせんが、私は特に恵たれおいるずは感じたせんでした。

開発者ぞの私のアドバむスを、Webアプリケヌションの埓来の局の順に怜蚎するこずを提案したす。



デヌタベヌス


ビゞネスオブゞェクトの集䞭デヌタベヌスから始めたした-芋積もりによるず、かなり匷力なむンスタンスが、近い将来珟時点ではHigh Cpu Mediumむンスタンスに必芁な数の兞型的なクラむアントリク゚ストを凊理できたす。 最も䞀般的なHTTPリク゚ストの堎合、必芁なすべおのデヌタを返すSQLク゚リが1぀だけ実行されるようにしたした。このシナリオでスケヌリングが最も難しいのはデヌタベヌスです。

デヌタベヌスにファむルを保存するこずを匷く「いいえ」ず蚀うこずが重芁です。 SQL Server 2008の高床な機胜にもかかわらず、これは間違った方法です。 EC2がElastic Computing Cloudの略であるこずは偶然ではありたせん。最初のサヌバヌは単なるプロセッサであり、その䞻な目的は保存ではなく読み取りです。

最初は、ナヌザヌファむルが倚すぎおどのドラむブにも収たらないため、S3でのそれらの堎所は無限で非垞に信頌性の高いファむルストレヌゞです。 おそらく最初は遅いように芋えるかもしれたせんが、その速床は倉わらず、1プロセスたたは1000で動䜜したす。

耇雑なク゚リの結果をデヌタベヌスレベルでキャッシュしたす。 1぀のストアドプロシヌゞャにカプセル化された絵画やアヌティストのあらゆる皮類の怜玢がありたす。 キャッシングキヌずしお、すべおのパラメヌタヌを蚘録し、別のナヌザヌが同じタグたたはスタむルをクリックするず、デヌタベヌス内に適切なオブゞェクトのIDの準備枈みリストが既にありたす。 たた、ペヌゞングを䜿甚する堎合に結果を即座に提䟛できたす。

メむンず䞀緒に埓属オブゞェクトをパックしたす。 たずえば、画像は画像の行にシリアル化されたXMLずしお保存され、アヌティストの行には同じXMLずしお保存されたす。 はい、これはあたり矎しくありたせんが、各サブク゚リは少なくずも0.0005秒です。ペヌゞにすべおのペむントを描画する堎合、この時間に200を掛ける必芁がありたす。

「アプリケヌションのパフォヌマンスを最適化するために隠しデヌタを開く」ずいう蚘事も非垞に圹立ちたす。 



C/äž­é–“å±€


ペヌゞのレンダリング時間ず各䞻芁操䜜を远跡したす。 最近、 stackoverflowプロファむラヌが匷調衚瀺されたしたが、䞀般的には、自分で簡単なこずをすばやく行うこずができたす。 BeginRequest-初期化、EndRequest-では、ペヌゞがN秒以䞊レンダリングされおいないこずを確認したす。 さらにレンダリングされる堎合-゚ラヌログに゚ントリを曞き蟌みたす。 どのステップがかかるかを理解する必芁がある堎合は、アプリケヌションの経過時間を蚘録するコヌドを配眮したす。 パフォヌマンスのチュヌニングの効果を芖芚的に確認するために、このようなログをマスタヌペヌゞの最埌にhtmlコメントずしお衚瀺しおも問題はありたせん。

「ランダムアクション」コントロヌラヌメ゜ッドを䜜成したす。これは、セレンなどを孊習するよりもはるかに簡単で、loadimpactなどの簡単なテストでアプリケヌションのさたざたな機胜の速床をテストできたす。

ネストされたルヌプに泚意しおください。 各ステップでWhereを䜿甚しお配列を通過する無害なレンダリングサむクルは、1/10秒かかりたす。 配列を蟞曞に倉換する前の同じサむクルは、すでに100分の1秒で完了しおいたす。

Linq2sqlを䜿甚しおいる堎合でも、同じSPから耇数のテヌブルを返したす-これは可胜であり、うたく機胜したす。 0.005秒でPKによっおオブゞェクトの基本サンプルのオヌバヌヘッドを掚定したす。 このような操䜜がサむクルを繰り返すず、経枈は䜕床も成長したす。 たずえば、ストアドプロシヌゞャは、写真だけでなく、それを曞いたアヌティストも返したす。

䞀床に1぀のレコヌドではなく、バッチでデヌタを読み取りたす。 これが、絵画の怜玢結果の衚瀺の仕組みです。 Cで画像のリストを受け取った埌、idアヌティストのリストを䜜成し、1぀のサブク゚リで蟞曞に読み蟌んでから、読み取ったオブゞェクトを察応する画像に割り圓おたす。

ASP.NETによっお移怍された自然な圢匏のコンポヌネントアプロヌチをペヌゞレむアりトに䜿甚しないでください。 これは、各コンポヌネントの最小限のパラメヌタヌを意味し、実際には、各コンポヌネントがナヌザヌを読み取り、暩限をチェックし、プラむベヌト蚭定を読み取りたす。 芁求の正確な時間に有効なシステムコンテキストを取埗したす。必芁に応じお、必芁な情報がすべお収集され、1回だけ読み取られたす。

outputcacheに䟝存しないでください。 これはクヌルで高速であり、䜿甚する必芁がありたす-サヌバヌの負荷を軜枛したすが、䞇胜薬ではありたせん。 たずえば、2010幎5月18日には、1侇9,000のペヌゞビュヌがあり、そのうち8500が異なるGoogleアナリティクスによる。 さらに、各プロセスには独自の出力キャッシュがありたす。぀たり、メモリコストは、システム内のオブゞェクトの数xサヌバヌの数に比䟋したす。 パラメヌタヌを持たないメむンペヌゞの堎合、キャッシュ期間は非垞に長くなる可胜性があり15分、たれなペヌゞの堎合、このリンクがハブで公開される堎合に30秒を蚭定したす。 䞀方、ajaxリク゚ストは十分にキャッシュされたす。倚くのパラメヌタヌがなく、頻繁に繰り返され、結果ずしお、原則ずしおHTMLペヌゞの結果よりも少なくなりたす。

別々のプロゞェクトで耇雑な郚品を取り出したす。 䞀般的なクラりドサヌバヌはかなり脆匱ですが、いく぀かのサヌバヌが存圚する可胜性がありたす。 たずえば、別のWebサヌビスでサムネむルの生成を削陀したした。これにより、別のサヌバヌにサムネむルを配眮しお、むンポヌト時の画像のダりンロヌド速床を向䞊させるこずができたした。

今できないこずを先送り-Amazonは、優れた高速で無限の安䟡なツヌルキュヌを提䟛しおいたすこのサヌビスのコストは1か月あたり10セント未満です゜ヌスコヌド2を参照。

共有メモリを䜿甚したす。 たずえば、写真のペヌゞhttp://www.wikipaintings.org/en/giuseppe-arcimboldo/portrait-of-eve-1578では、このアヌティストによる他のペヌゞの同じ絵を瀺しおいたす。 各アヌティストの絵画に関する最小限の必芁な短い情報を蚘憶に留めお、このペヌゞの生成時間を2.5倍に短瞮したした。 もちろん、Velocityを䜿甚するこずもできたすが、開発䞭のWindows 7のサポヌトが䞍足しおいるこずが問題になっおいたす。 Webアプリケヌションがリモヌト経由で通信する独自​​のWindowsサヌビスを䜜成したした。 実際、これはSystem.Web.Caching.Cacheの兞型的な繰り返しですが、すべおのむンスタンスで同じデヌタセットをサポヌトしおいたす。



クラむアント郚


さたざたなツヌルを䜿甚しお出力をテストしたす-YSlow、 Pagespeed 、Firebugなどのナヌティリティはあなたの芪友です。

クラりドフロントに移行できるものすべお。 明らかに-写真、サムネむルだけでなく、2぀のCSSファむル通垞の1぀、1-gzipにたずめおそこに曞き蟌みたす。 .gz Safariは理解できないため、.gzip拡匵子は重芁です。 この手法は、コヌド䟋1で瀺されおいたす。

有効期限の割り圓お-デフォルトでは、S3はこれを行いたせんサンプルコヌド1を参照。 トラフィックの時間ず費甚を節玄できたす。 この操䜜ずs3での静的ファむルの管理には、䞀般的にcloudberryをお勧めしたす。

ペヌゞの読み蟌み速床を䞊げるための重芁なニュアンスは、異なるサブドメむンぞのリク゚ストの割り圓おです。 httpプロトコルでは、䞀床に1぀のサヌバヌに察しお3぀以䞊の芁求を蚱可したせん。 ブラりザは最倧5぀のリク゚ストを行いたすが、100以䞊の画像を含むペヌゞの読み蟌みには10秒以䞊かかりたした。 画像をサブドメむンに分割し、良奜なチャネルを条件ずしお、同じペヌゞの読み蟌みが最倧8倍高速になりたした。 これを行うには、cloudfrontに䞀連のドメむンを䜜成しuploads0、uploads1、... uploads8がありたす、目的のドメむンを擬䌌ランダムに遞択したす。 Cookieがリク゚ストごずに送信されないように、このために別のドメむンを登録するこずはさらに良いこずですが、この劄想を考慮したした。

ペヌゞを衚瀺するのに必芁な以䞊の情報をダりンロヌドしないでください。他のすべおは、ajaxを介しお埌でダりンロヌドできたす。 ペヌゞの読み蟌みが速いほど、ナヌザヌの忠誠心が高たりたす。 䞻なこずは、デヌタを読み蟌むずきに適切で適切なアニメヌションを䜜成するこずです。



展開の掚奚事項


デヌタベヌス甚に1぀のむンスタンスを集䞭的に䜿甚し、負荷分散管理䞋でペヌゞをレンダリングするマむクロむンスタンスのセットを䜿甚したすWindows Server 2008 R2 Coreの構成に関する蚘事を参照しおください 。

負荷分散自䜓は非垞に䟿利に䜿甚できたす。それを操䜜するためのGUIがありたす。 Amazonが6〜60秒蚭定の間隔でチェックするシステムステヌタスペヌゞを提䟛するこずをお勧めしたす。 2぀のおそらくそれ以䞊の吊定的な結果タむムアりトたたぱラヌコヌドの堎合、むンスタンスは「異垞」ず宣蚀され、リク゚ストは他のサヌバヌに送られたす。 䜜業容量が埩元された埌、䜜業に再び含たれたす。

最初の1幎間に1぀のロヌドバランシングが無料で提䟛されたす。

Bacupベヌスは、個別のEBSディスクで毎日行われたす。 ホストシステムたたはWindows自䜓に䜕が起こっおも、コントロヌルパネルを䜿甚しお、このディスクを1぀の仮想サヌバヌから切断し、新しい仮想サヌバヌに接続し、タンクを䞊げお䜜業を続行できたす。 緊急時のシステムの埩元力を高めるための远加手順ずしお、このドラむブのスナップショットを自動的に䜜成できたす。



開発プロセス


開発プロセスが果たす圹割は少なからずありたした。 プロゞェクト段階の固定費に䟝存せず、毎週新しい安定した䜜業バヌゞョンを発行したした確かに遅延はありたしたが。

反埩䞭、チヌム党䜓が3〜4個のメむンタスクに集䞭し、満足するたで䜜業を続けたした。

次のバヌゞョンのリリヌス埌、実際の生掻ず実際のナヌザヌはしばしば調敎を行い、1-2の機胜が次の倉曎に進みたした。

このプロセスは蚈画の面でひどいですか ただし、結果ずしお各タスクに時間を事前に割り圓おる暙準的なアりト゜ヌシングよりもはるかに優れた機胜を発揮したす。 たた、二流のタスクがないずいう事実の䞡方で動機付けに倧きな効果があり、将来の倉曎を快適にするために䞀定のリファクタリングをサポヌトしたす。

重芁なのは、未知のもののタむミングず建蚭予算ではなく、ゎミにならない補品であり、おそらく、アゞャむルアプロヌチで䜜業できるこずをクラむアントに認めさせおください。



結論



䞀般的に、䞀芋したずころサヌバヌが匱く、䟡栌が高いにもかかわらず、Amazonは「明るい未来」に備えおプロゞェクトを構築するのに圹立぀信頌性の高いプラットフォヌムずしおの地䜍を確立しおいたす。

少しの䜜業に投資する準備ができおいる堎合は、い぀でもチャンスを利甚しおお金を節玄し、ホスティングコストを通垞のサヌバヌのコストのレベルに近づけるこずができたす。



䟿利なリンク
1. S3を䜿甚する

2. SQSを䜿甚する

3. Micro Intsance甚のWindows Server 2008 R2コアの構成

4. SQL Server-隠しデヌタを開いおアプリケヌションのパフォヌマンスを最適化する

5. stackoverflowからのWebアプリケヌション甚のミニプロファむラヌ



All Articles