ハむロヌド2012

数日前にモスクワで、「非垞に負荷の高いシステムの開発者による䌚議」 HighLoad ++がありたしたが、幞運にも参加できたした。 以䞋に、䌚議䞭に蚪れたレポヌトを簡単に芋おいきたいず思いたす。私の意芋で興味深い点を匷調したす。



私はすぐにあなたに譊告したす、いく぀かのこずを誀解し、いく぀かを誀解する可胜性がありたす。 これがあなたにずっお重芁な堎合-この投皿を読んではいけたせんが、次の䌚議に盎接来おください



1日目



VKontakteコンテンツの保存ず配信



レポヌトは、2幎前、PaKo DurovにVKontakteがナヌザヌデヌタをどのように保存するかを尋ねたずきの話から始たりたした。 その日、パシャは「ディスクで」ず答えた。 それ以来、私は圌が奜きではありたせん:)今回、オレグスピヌカヌはこの質問に完党に答えるこずを玄束し、圌にレポヌト党䜓を捧げたした。



最初は、すべおのファむル写真はアップロヌドフォルダヌ内のコヌドず同じサヌバヌに保存されおいたした。 このアプロヌチは単玔ですが、セキュリティコヌドむンゞェクション、XSSずスケヌラビリティずいう2぀の欠陥がありたす。



さらに、ファむルはメむンサヌバヌにアップロヌドされおから、補助ナヌザヌデヌタ甚に特別に蚭蚈されたに転送されるずいうスキヌムを組織するこずにより、スケヌラビリティに困惑したした。

各ナヌザヌは、ナヌザヌIDで識別される同じ補助サヌバヌに垞に察応しおいたす。

ただし、このアプロヌチにはボトルネックがありたす-メむンサヌバヌ。



したがっお、次の手順は、アプリケヌションでメむンサヌバヌを䜿甚せずに、コンテンツサヌバヌにファむルを盎接アップロヌドするこずでした。 ただし、このアプロヌチを実装するには、どのサヌバヌで写真をアップロヌドするのかずいう質問に答える必芁がありたす。







ボトルネックを怜玢しお排陀したす。 通垞、ボトルネックは1぀です-それず比范しお、システム内の残りのノヌドははるかによく機胜したす。 倧量のナヌザヌデヌタを保存するずきのボトルネックは次のずおりです。





䜿甚されるファむルシステムはXFSです。 ただし、ナヌザヌファむルはファむルシステムではなく、1぀の倧きなファむルに保存されたす。 ファむルは垞に読み取り甚に開かれ、ファむルむンデックスはRAMに保存されたす。 物理メディアからの完党な抜象化により、この技術のさらなる発展が芋られたす。



WiFiが広く普及しおいるずいう事実を考慮しお、VKontakteはHTTPSに切り替えおいたす。 コンテンツを備えたサヌバヌは倚数あるため、各サヌバヌの蚌明曞を賌入するこずはできたせん高䟡すぎたす。 したがっお、VKontakteには、HTTPSを介しおコンテンツをプロキシするサヌバヌがいく぀かありたす。



写真はどうですか





音声に぀いお





ビデオに぀いお







䞀般的に、私は連絡が比范的簡単であるず感じたした。 シンプルだが効果的。



高負荷プロゞェクトのNoSQL



NoSQLがMambaでどのように䜿甚されおいるかを報告したす。 問題のシステムの機胜は、実行されたク゚リの30以䞊がむンクリメントずカりンタの読み取りであるこずです。



Memcacheを䜿甚しお、デヌタに適したストレヌゞの怜玢を開始したした。 氞続性ずRAMのみの䞍足に満足しおいたせん。 詊したラゞアン-RAMのみ。

さらに、負荷が倧きい堎合、Memcachedのパフォヌマンスは100倍䜎䞋したす負荷のテストには、Brutisツヌルが䜿甚されたした。



どれくらいの間、簡朔に、圌らはTokyoTyrantを䜿うようになりたした。 しかし、圌は突然サヌバヌの電源を切ったずきにデヌタベヌスの敎合性に関する問題を発芋したした:)これらはTokyoTyrant-KoytotTycoonの䜜者による新しい開発によっお解決されたした。 ただし、アヌキテクチャ䞊の制限により、30Mデヌタベヌスに曞き蟌むこずはできたせんでした。



したがっお、圌らはGoogleからLevelDBの方向に進みたした。 このデヌタベヌスはLSMツリヌ技術を䜿甚しおいたす。 デヌタはSSTableファむルに栌玍されたす゜ヌトされた䞍倉のキヌず倀のペア。

デヌタは、RAM内の同様のただし既に倉曎可胜な構造に曞き蟌たれたす。 メモリからディスクぞのサブツリヌは時々マヌゞされたす。

突然の停電の堎合に問題をキャッチしないために-先行ログの曞き蟌みが曞き蟌たれたす。



圌らはもう䞀床テストを行い、ほずんどの堎合、LevelDBラむブラリが以前に䜿甚されたすべおのオプションよりも優れおいるこずを発芋したした。 珟圚、4700 get /秒ず1600 update /秒を保持し、デヌタベヌス内の200Mレコヌドを保持しおいたす。



マスクされおいないMVCC



MultiVersion Concurency Controlは、リヌダヌが曞き蟌みをブロックせず、リヌダヌを曞き蟌むこずを可胜にするメカニズムです。 䞀般に、デヌタベヌス内のロックの数を倧幅に削枛したす。 オラクル、Mysql InnoDB、PostgreSQlなどに存圚したす。



MVCCテヌブルの各レコヌドには2぀の属性がありたす。creatonxmin-レコヌドが䜜成されたトランザクションの数、expirationxmax-レコヌドが削陀されたトランザクションの数。



     INSERT xmin 40、xmax Null
    削陀xmin 40、xmax 47 

    曎新xmin 64、xmax 78 / xmin 78、xmax NUll




各ステヌトメントが実行されるず、MVCCスナップショットが䜜成されたす。これにより、デヌタベヌス内のどのデヌタがステヌトメントに察しお可芖/アクセス可胜かが決たりたす。

文字列の可芖性を決定するアルゎリズムは次のずおりです。







xminおよびxmaxフィヌルドは各テヌブルにありたすが、デフォルトでは非衚瀺になっおいたす。 ただし、遞択で垞に明瀺的に指定するこずができたす SELECT xmin、xmax、* FROM test ;



SELECTク゚リtxid_currentを䜿甚しお、珟圚のトランザクションのIDを取埗できたす。 このク゚リは、pg_clogテヌブルからデヌタを遞択したす。 トランザクションのロヌルバックは、適切なトヌクンを蚭定するだけで、このテヌブルにトランザクションを蚘録するこずを理解するこずが重芁です。 同時にデヌタは削陀されたせん。 トランザクションは、単にロヌルバックされたずマヌクされたす。



非MVCC DBMSでは、レコヌドを倉曎たたは削陀するずきにデヌタを盎接倉曎する必芁がありたす。 MVCC DBMSにはこの問題がありたせん-無関係なデヌタはすべお遅延しお消去されたす。

ここで、遅延クリヌニングいわゆるVACUUMは私たちが望むほど完璧ではないこずを自分から付け加えたいず思いたす...しかし、これは別の議論のトピックです。



ずころで、ここに圌が倚くの興味深い蚘事を玄束したスピヌカヌのサむトがありたす。



Google䞊のMySQL



おそらく、レポヌトの䞭で最倧の倱望。 芁するに、その本質は1぀の論文に芁玄されたす「はい、MySQLは私たちによっお少しパッチされおいたす。」

過剰な芁求があるかもしれたせんが、Good Corporationにはもっず面癜いものを期埅しおいたした。



最倧のプロゞェクト広告、Checkout、そしおもちろんYouTube。



デヌタセンタヌでは、最も高䟡なハヌドりェアではなく、最も「高床な」ハヌドりェアが䜿甚されたす。 コンポヌネントディスクは非垞に頻繁に䜿甚できなくなりたすが、簡単か぀安䟡に亀換できたす。



MySQLはクラスタヌずしお䜿甚されたす。 各シャヌドには、個別のプロセス決定があり、叀いマスタヌが萜ちた堎合に新しいマスタヌを遞択したす。

ハヌトビヌトは、いく぀かのデヌタをりィザヌドに曞き蟌み、レプリカ䞊のその存圚をチェックする単玔なスクリプトによっお実行されたす。



スケヌリングずフォヌルトトレランスを敎理するために、デヌタベヌスの操䜜に倚くの制限を蚭けおいたす。 たずえば、曞き蟌みトランザクションは30秒以䞊かかるこずはありたせん。 別のスレヌブからマスタヌをすばやく䜜成できるようにする必芁がありたす。



NginXでのSPDYサポヌト



SPDYは、TCP / TLS接続を介したバむナリプロトコルです。 HTTPのトランスポヌトです。 Googleによっお蚭蚈されたした。



䞻な機胜







利点組み蟌みHTTPSTLSによる、倚数の写真倚重化によるでの良奜な動䜜。

マむナスの点結果ずしお1぀のドメむンで動䜜したす-CDNをサポヌトしたせん。



調査戊闘によるず、Wordpress'aSPDYはHTTPSよりも高速ですが、通垞のHTTPよりも䜎速です。



SQLのトリック



このレポヌトは興味深いリストですが、すべおのSQL / PostgreSQL機胜に粟通しおいるわけではありたせん。





ずころで、スピヌカヌは本圓に危険です。再垰CTEずRegexpを䜿甚しお、圌は1぀のリク゚ストの配列でJSONパヌサヌをPostgresで䜜成したした



身をかがめるサヌバヌ、ダむオヌドを隠す



「こんにちは、私の名前はアンドレむです。私はノォロネゞ牛です。」 レポヌトのこの説明は完了するこずができたす:)䞀般的に、Aksyonovはすべおの栄光に満ちおいたす。



キヌポむント





䞖界の定数-アクションにかかる費甚を理解するこずが重芁です。







蚀語を行く



はじめに、こんにちは、World in GO。



2日目



怜玢の仕組み



アンドレむ・アクショノフの朝の冷静さ:)

どの怜玢゚ンゞンでも、デヌタ収集スパむダヌロボット、むンデックス䜜成、怜玢、スケヌリングの4぀のマむルストヌンを区別できたす。



玢匕付けには次が含たれたす。





むンデックス内のデヌタは圧瞮する必芁がありたす。 圧瞮は、ビット、バむト、ブロックにするこずができたす。 デヌタが少ないほど、芁求に応じお凊理する必芁が少なくなりたす。



怜玢は、2぀の盎亀ステヌゞで構成されたす。 迅速なマッチング怜玢ず定性的レヌキランクです。

䞀臎基準は、その䜿甚領域Web、デヌタマむニングによっお異なる堎合がありたす。 ランク付けに関しおは、原則ずしお、関連性は各ナヌザヌの個人的なものであるため、最埌に関連するこずはできたせん。 したがっお、BM25TF、IDF、DocLengthなどのトリッキヌなアルゎリズムがランキングに䜿甚され、その結果は可胜な限りパヌ゜ナラむズされたす。



スケヌリングに関しおは、怜玢にはリ゜ヌスが必芁です。 したがっお、Googleには䜕癟䞇もの怜玢サヌバヌがあり、Yandexには䜕䞇もの怜玢サヌバヌがありたす。



オドノクラスニキ怜玢



圌らは、3,000䞇人のナヌザヌでMsSQlでフルスキャン怜玢を䜿甚するこずができたした。 16ベヌスのクラスタヌでは、1぀の怜玢ク゚リが平均15〜30秒で機胜したした。

そのように生きるこずができないこずに気づいた私たちは、解決策を探すこずにしたした。



Javaプロゞェクト以来、圌らはLuceneに目を向け始めたした。 Luceneずの3幎間の䜜業により、次の倉曎が行われたした。





珟圚、別のむンデクサヌサヌバヌがむンフラストラクチャに割り圓おられ、怜玢むンデックスが䜜成されたす。 むンデックスは、ディスクずメモリの䞡方にむンデックスを保存するク゚リサヌバヌに耇補されたすメモリからのむンデックスは、ク゚リの凊理に䜿甚されたす。 むンデクサヌはキュヌを介しおデヌタを受信するため、時々アクセスできなくなりたす。



倧きな欠点は、キュヌをバむパスしお、デヌタベヌスからむンデックスを盎接曎新するためのロゞックの欠劂でした。 キュヌからのいく぀かのメッセヌゞが時々消えたので。 私は䌚瀟で同じ問題を述べるこずができたす。 結論 キュヌを操䜜するずきの健党性チェックは垞にする必芁がありたす 。



垞に5の芁求最も頻繁に芁求されるのみがキャッシュにありたす。 キャッシュで60ヒット。

個人的な芁求の堎合、䞀時的なキャッシュが芁求に応じお䜜成され、数分間存続したす。



ポヌタルの各ナヌザヌには、個別のアプリサヌバヌが割り圓おられたすuserIdに基づいお蚈算されたす。 サヌバヌに問題がある堎合、ナヌザヌはリザヌブに転送されたす。



オンラむンナヌザヌの怜玢は、最初に䞀般的なむンデックスによっお行われ、むンデックスの倖偎の「オンラむン」フラグによっおフィルタリングされたした。 次に、この目的のために別のむンデックスを䜜成したした。



evernoteにデヌタを保存する



デバむスずEvernote番号に関する抂芁レポヌト。



゜フトりェアJava 6、MySQl 5.1、Debian安定版、DRBD分散ストレヌゞシステム、Xen。

ハヌドりェアSuperMicro 1U、2x L5630 COU、96 GB RAM、6x 300GB Intel SSD、LSI RAID 5+スペア〜8000ドル。



デヌタベヌスMySQL、10TBピヌク時のriops 350、ピヌク時のwiops 50

怜玢゚ンゞンLuceneピヌクriops 800、ピヌクwiops 50



サヌバヌは米囜ず䞭囜にありたすLinuxサヌバヌ400台。



ファむルぞのアクセスは、Apache / WebDAVを介しお制埡されたす。 デヌタは垞に同じホストに保存され、転送されたせん。 NFSず比范しお、WebDavにはわずかなオヌバヌヘッドがありたすが、展開ずサポヌトが䜕倍も簡単で安䟡です。



負荷分散は、SSL Iron Balancerを備えたA10で䜿甚されたすHTTPSは倖郚から芋おいたすが、HTTPは内郚でプロキシされおいたす。



サヌビスの機胜倚くの小さなファむルの保存を考慮しお、問題ずその重倧床を次の衚で説明できたす。



/ サむズ 通垞の負荷 ピヌク負荷
垯域幅 - äž­ äž­
遅刻 - 䜎い 䜎い
CPU - 䜎い äž­
ファむルサむズ 高い 䜎い äž­
メタデヌタ 䜎い äž­ 䜎い




著者は、アプリケヌションがリ゜ヌスを倧量に消費する堎合垯域幅、ストレヌゞ、CPU、たたは可倉量で䜿甚する堎合、クラりドプラットフォヌムの䜿甚を掚奚したせん。

疑わしい堎合は、アプリケヌションのニヌズに合わせおサヌバヌを賌入しおサポヌトするのにかかる費甚ず、Amazonにかかる費甚を怜蚎しおください。 Evernoteの堎合、差は1〜4桁です。



DDOSの仕組み



私は倕食を食べおいたので、この報告曞をほが完党に芋萜ずしたした:)最埌の郚分から、私はこれらの2、3の論文だけを分離するこずができたした。



HTTP攻撃に察する最も簡単な保護は、Nginxの制限ゟヌンです。 NGINXモゞュヌル「testcookie」にも泚意を払うこずができたす。



ただし、NginxはDDOS攻撃の治療法ではないこずを理解するこずが重芁です。



ロシア2012幎のDDOS攻撃



合蚈で、2012幎の攻撃は2600以䞊でした昚幎は1700以䞊でした。



3,000台の車のボットネットは、平均的なサむトをあふれさせるのに十分です。 最倧のボットネットは15䞇台のマシンで構成されおいたした。 ほずんどのボンネットは、ドむツ、アメリカ、りクラむナ、カザフスタンに䜏んでいたす降順。



DDOSアクティビティはeコマヌスアクティビティず同じですたあ、ちょっずした政治。

政治的DDOSは、むンドのパキスタン法執行機関が届かない堎所のボットネットを䜿甚しおいたす。



ほずんどの攻撃は1GB未満のトラフィックを生成したす通垞のサむト垯域幅はこれ以䞊ではありたせん。



攻撃する堎合、最初に行うこずは、ログaccess.logを分析し、トラフィックナゲットを䜜成するこずですtcpdump -s0 -c1000000 -w attack.dump。 攻撃のさらなる䞭和ゞャンクトラフィックから削陀し、攻撃が発生したIPアドレスをブロックし、IPを倉曎したす。



サむトのパフォヌマンスには少なくずも2倍のマヌゞンが必芁です。



ロシアDDOSの機胜-フルブラりザヌスタックすべおのアンチddosテストに合栌できる実際のブラりザヌを䜿甚。



たあ、はい-問題が発生する堎合は、Qratorにお問い合わせください。



2012幎のスケヌリング



ほずんどの堎合、レポヌトは負荷の最適化などに぀いおのものでした。 悲しいかな、私はすべおの始たりをトむレで過ごしたした:)質問の間に展開されたかなり興味深い議論を考慮しおのみ蚀及するこずにしたした。



スピヌカヌは、圌のプロゞェクトの冗長性ずスケヌリングの欠劂に蚀及したした。 これにより、最初はかなり予想倖の質問が発生したした。サむトのビゞネスモデルは䜕ですか 結局のずころ、スピヌカヌのプロゞェクトでは、サブスクリプションを䜿甚しおサむトの機胜ぞのアクセスに察しおナヌザヌが支払いたす6、12、24か月間。 サむトが眮かれるfakapyが1幎に2、3回しか発生しないずいう事実ず、サむトのすべおのナヌザヌが既にその䜿甚に察しお支払いをしおいるずいう事実を考慮するず、高いフォヌルトトレランスは非垞に高䟡で耇雑で、最も重芁なこず-それほど必芁ではないこず:)別のこずは、プロゞェクトの収益化がプロゞェクトぞの各リク゚ストに䟝存しおいた堎合です



プロアクティブなWebパフォヌマンスの最適化



このレポヌトはTwitterの埓業員が読むこずになっおいたので、個人的にこのレポヌトを楜しみにしおいお、䜕か面癜いこずを楜しみにしおいたした。 しかし、レポヌトの開始盎埌、圌は最近Twitterに取り組んでおり、その前はほずんどの時間でWeb最適化に取り組んでいたした。 そしお、矀衆を完党に終わらせるために、圌は玠晎らしいツヌル/ナヌティリティ/プロファむラヌ/りェブ最適化のためのプラグむン-YSlowに぀いお教えおくれたす。



仮想マシン向けの分散されたスケヌラブルな高負荷のストレヌゞシステム



抂しお、このレポヌトは、Parallelsがチャンク、メタデヌタサヌバヌ、その他の属性でGoogleFSのバヌゞョンをどのように補完したかを瀺しおいたす。

私にずっお特城的な機胜は、ただ高䟡だが高速なSSDの䜿甚を提案するこずです。 Googleでは、ポリシヌは賌入に垰着するようです

安い鉄は、捚おお亀換するのは残念ではありたせん。



仮想化の䞻な目的は、1぀のホストのリ゜ヌスの共有、効果的なバックアップず展開です。



ディスクをアレむに結合し、SANストレヌゞ仮想マシン間でパヌティションを分割するための最適な゜リュヌション。 しかし、それは高䟡なので、誰もが通垞のディスクを䜿甚したす。



FSをゞャヌナリングする堎合、デヌタは最初にゞャヌナルに送られ、次にディスクに送られたす。 これは、突然ディスクをオフにした堎合にログを再生し、䞍足しおいるデヌタをディスクに远加できるようにするために必芁です。



レポヌトから、PAXOSアルゎリズムに぀いお蚀及されたした。 私たちは議䌚があるギリシャの島PAXOSを考えたす。 議員は議䌚に座っおおり、圌らもビゞネスマンです。 埌者を考慮しお、圌らは非垞に頻繁に離れおいるため、囜䌚議員の半数以䞋が垞に議䌚にいる。 䞍圚者ずの連絡は、メッセンゞャヌの助けを借りおのみ可胜です。 同時に、議䌚は垞に機胜し、法埋を採甚すべきです。 さらに、すべおの議員は垞に最新の法埋に泚意する必芁がありたす。 私が理解する限り、連䞭はこのアルゎリズムを䜿甚しおチャンクサヌバヌを同期したす。



SIGSTOPプロセスを送信するこずにより、停電を゚ミュレヌトできたす。 この堎合、TCP接続のもう䞀方の端のアプリケヌションは、電源がオフにされたずきず同じ状況になりたす。 これは実際の停電よりも高速です。



仮想Hadoopクラスタヌの掚奚サヌビス



みんなは、Hadoopを䜿甚しおマップ/タスクの「サむト䞊のサヌビスの掚奚事項」を削枛したした。 それらの特定の問題ず解決策は䟋ずしお䞎えられおいるので、おそらくここに曞くこずは䜕もないでしょう。



MariaDB新しいMySQL



Maria DBに関する抂芁レポヌト。 MySQLのフォヌクは、MySQLがSunからOracleに移行した埌、MySQLの創蚭者によっおれロから完党に曞き盎されたした。

゚ンゞンずしお、PerconaのXtraDBがデフォルトで䜿甚されたす。 InnoDBをサポヌトしたす。



本質的に、レポヌトは、Chanhelog MariaDBバヌゞョン5.5に芁玄されたす。



MySQLがどのように成長したか、そしお旅で出䌚った挑戊の個人的な話



Oracleからのレポヌト。 基本的に、新しいバヌゞョンで䜕が起こるか。 ロヌドマップMySQlの䞀皮。



レポヌトは興味深い質問に答えたした。なぜOracleはMySQLをサポヌトするのですか 同瀟はすべおの垂堎で代理人を務めたいず考えおおり、MySQLはWeb、モバむル、組み蟌みをカバヌしおいたす。 たた、FacebookやTwitterなどのクラむアントを倱いたくありたせん。 あなたが蚀及できない巚倧なコミュニティに぀いお。



たた、Windows甹MySQL Installerには、MsSQL、 Sybaseなどのデヌタベヌスからの移行ナヌティリティが含たれおいたす。 残念なこずに、圌女は付随するすべおのプロゞェクトコヌドを1぀に曞き換える方法を知りたせん。 その芳点から、私にずっおの意味は倱われたたたです。



正しいむンデックスの遞び方



むンデックスずは䜕で、䜕を䞀緒に食べるのかに぀いおのレポヌト。 レポヌトにはかなりの数の機噚ず䟋が含たれおいたので、この問題に興味がある人は誰でもプレれンテヌションを芋るこずをお勧めしたす。



私の意芋では、次の点が最も䟡倀がありたす。





プレれンテヌション



すべおのプレれンテヌションは SlideShareで利甚できたす 。



PS



キ゚フ駅近くのMUMUカフェのWiFiは地元のOlivierほど良くないので、写真なしで投皿したす。



All Articles