ハイロード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ほど良くないので、写真なしで投稿します。

Source: https://habr.com/ru/post/J155951/


All Articles