サイトのCDNの作成方法と、負荷の高いプロジェクトに役立つ理由

Sports.ruおよびTribuna.comの運用部門の主なタスクは、一定のトラフィックの増加(1.5年以上、トラフィックと1秒あたりのリクエスト数が2倍になった)、定期的なピーク負荷、さまざまな国に分散した視聴者の条件下でネットワークインフラストラクチャを拡張することです。 この問題を解決するために、さまざまなテクノロジーを使用しています。 その1つは、独自のCDN(コンテンツ配信ネットワーク)の作成です。これにより、負荷を軽減し、DDoS-aに対する保護を強化し、遠隔地域のサイトの読み込みを加速します。 この分野での経験を共有することを決定し、システム管理者がCDNを展開して運用するための短い実用的なガイドをまとめました。





I.理論。



1.用語。


コンテンツ配信ネットワーク(または配信ネットワーク)またはコンテンツ配信ネットワーク(CDN)は、インターネット上のエンドユーザーへのコンテンツの配信と配信を最適化する地理的に分散したネットワークインフラストラクチャです。 コンテンツプロバイダーによるCDNの使用は、CDNネットワークが存在する場所でのオーディオ、ビデオ、ソフトウェア、ゲーム、およびその他の種類のデジタルコンテンツのインターネットユーザーのダウンロード速度の向上に貢献します。



したがって、全知のウィキペディアは私たちに語っています。 しかし、このCDNはどのように機能しますか? 偏角をすぐに判断しましょう。 CDNは、何とか何とかネットワークです。 ネットワークはそれぞれ女性であり、女性の略語は辞退します。



これがどのように機能するかという観点から、次の式を書くことができます。



CDN =エニーキャスト+プロキシ



エニーキャストについてはhere.wikipedia.org/wiki/Anycastをご覧ください。プロキシサーバーとは何かを覚えておく必要がある場合は、ここで知識のギャップを埋めることができます: en.wikipedia.org/wiki/%D0%9F%D1%80 %D0%BE%D0%BA%D1%81%D0%B8-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80



実際、この技術は、CDNでホストされているサイトがこれらの「地理的に分散した場所」から解決するネットワークアドレスを発表し、条件付きの単一サーバーにリクエストをプロキシすることに要約されます。



これからどのような利益を得ることができますか?

データをクライアントの近くに配置することで、ユーザーへの応答の遅延が少なくなり、サーバーの負荷が軽減され、DDoSから保護されます...何とか何とか-商用CDNネットワークの説明を読んでください。



複雑で理解できないように見えますか? 実際、見た目よりも簡単です。以下ではすべてを詳細に説明します。



2.コンサルティングではなく、独自のCDNを使用する理由。


問題は、なぜ独自のCDNを作成するのかということです。 使用する優れたCDNネットワークがたくさんあります。

まず、これは私たちの方法ではありません;)

第二に、これらのネットワークはすでに構築されており、配信において100%適しているという事実ではありません。 CDNの場合、ノードをどこにでも自由に配置できます。

第三に、私たちはインフラストラクチャーに投資しますが、他人のインフラストラクチャーには投資しません。

4番目に、必要に応じてCDNを構成できます。 静的データだけでなく、匿名データや一般データのデータなどの動的データもキャッシュできます。 このような柔軟性を完全に提供する商用ネットワークはありません。



3.使用による利益。


だから、あなたはあなたのCDNネットワークから正確に何を得ることができます:



ダウンロード速度/トラフィックの削減。

データをユーザーの近くに配置することで、ユーザーがこのデータをより速く受信できると期待できます。 論理的です。 トラフィックの削減はどうですか? ノードでデータをキャッシュすると、「メインサーバー」への呼び出し回数が減ります。 さらに、キープアライブ接続では、圧縮されたデータをメインサーバーからCDNにいつでも転送できます。 キャッシュする競合する要求が並行して実行されないように、CDNを構成できます。 これにより、「メインサーバー」のトラフィックとCPU時間も節約されます。 sports.ruの場合、これらすべてにより、リクエストとトラフィックの数を「メインサーバー」への3.5倍に減らすことができます。

また、CDNはDNSスレーブサーバーをホストするのに最適な場所です。 実際、同じ理由で。



II。 練習。



4.必要な条件。


CDNサーバーを作成するには、サーバー自体であるAS ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D0%BD%D0%BE%D0%が必要です。 BC%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_ (%D0%B8%D0%BD %D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82)および無料のip-routenum、ここにCDNを配置します。 無料のIPv4ネットワークはほとんどありませんが、IPv6の歴史についてこの記事を使用している人はいません:)



着信リクエストの応答をプロキシして保存する必要があります。

同じサーバーでプロキシとエニーキャストを収集するという事実により、フォールトトレランスを解決します。 何らかの理由で切断された場合、一般的にCDN全体には影響しません。 当然、できるだけ多くのそのようなサーバーがあるはずです;)



5.方法。


必要なものをすべて実装するには、複数の物理コアを備えたサーバーが必要で、各コアにネットワークカードの負荷を分散します。 キャッシュ全体をRAMディスクに入れるのに十分な量のRAM。 遠い土地のサーバーにディスクをロードしたくないですか? ;)パケットのパフォーマンスを向上させるために、異なるプロセッサコアで負荷分散をサポートするネットワークカード。 SATAドライブ上のRAID1により、信頼性が向上します。



また、このビジネスは、強制的に完全に機能するように正しく構成する必要があります。 重いウェブ負荷の下でチューニングし、鉄からすべてのジュースを絞ることは、FreeBSD 9.xに適しています。 Linuxを使用することもできますが、透明性とセットアップの容易さの観点から、個人的なランキングの1種類の構成がFreeBSDによって獲得されます

繰り返さないために、同様のタイプの負荷に対してFreeBSDをセットアップするための実用的な推奨例を示します。



dadv.livejournal.com/139170.html

serverfault.com/questions/64356/freebsd-performance-tuning-sysctls-loader-conf-kernel



または関連トピックでグーグル。



アドバタイズされたネットワークまたはこのネットワークの一部をローカルループインターフェイスに配置することをお勧めします。



/etc/rc.confに行を追加します。

ifconfig_lo0_alias0 = "inet <CDN1のIPアドレス> / 32"

ifconfig_lo0_alias1 = "inet <CDN2のIPアドレス> / 32"




そして、もちろん、ルーティングを有効にすることを忘れないでください:



/etc/sysctl.confに行を追加します。

net.inet.ip.forwarding = 1




データキャッシュの電子ドライブをオンにします。これにはtmpfsを使用します。



/boot/loader.confに行を追加します。

tmpfs_load = "YES"




および/ etc / fstab:

tmpfs / mnt / tmpfs tmpfs rw、モード= 777 0 0




OpenBGPを介してCDNネットワークを発表します。

www.freshports.org/net/openbgpd



すべての必要な機能を備えており、設定は簡単です。 インターネット上の彼に関する乏しい情報は、詳細な男によって平準化されています。 使用したい場合は、PFパケットフィルターと統合することもできます。 これは、必要なことをすべて実行する単純な構成です。



/usr/local/etc/bgpd.conf:

AS <AS番号>

router-id <ルーターID>

ネットワーク<発表されたネットワーク>

グループ「アップリンク」{

ネイバー<プロバイダーアドレス> {

remote-as <プロバイダープロバイダー>

descr "アップリンク"

自己を発表する

}

}

否定する

拒否する

<provider address>から許可

<provider address>プレフィックス<advertised network>を許可します




Nginxの構成に移りましょう。 実際、他のリクエストとキャッシュされたデータの集約と圧縮を使用して、Nginxでプロキシサーバーキャッシュの静的を構成する必要があります。



Nginxをビルドするときにgunzipモジュールでアセンブリを指定し、圧縮をサポートしないクライアントのデータを拡張することを忘れないでください。



nginx.conf:

worker_processes auto;

http {

mime.typesを含めます。

proxy_temp_path / mnt / tmpfs / tmp;

proxy_cache_path / mnt / tmpfs / cache / site_cache levels = 1:2 keys_zone = site:128m max_size = <cache size> inactive = <データがキャッシュに保存される時間>;

gzip on;

gzip_disable "msie6";

gzip_comp_level 4;

gzip_typesテキスト/プレーンテキスト/ htmlアプリケーション/ xmlアプリケーション/ x-javascriptテキスト/ javascriptテキスト/ cssアプリケーション/ jsonテキスト/ xmlアプリケーション/ rss + xml;

gunzip on;

サーバー{

デフォルトは80

server_name localhost;

場所/ {

proxy_cache_use_stale更新タイムアウトhttp_500 http_502 http_504;

proxy_cacheサイト。

proxy_cache_key $ uri $ is_args $ args;

proxy_pass フロントエンド;

proxy_http_version 1.1;

proxy_set_header接続 "";

proxy_set_header Host $ host;

}

location〜* \。(3gp | 7z | avi | bmp | css | doc | docx | gif | gz | jpg | jpeg | js | mov | mp3 | mp4 | ogg | png | ppt | pptx | rar | tar | tiff |トレント| ttf | svg | swf | wma | xls | xlsx | xsl | xslt | zip)$ {

http_500 http_502 http_504を更新するproxy_cache_use_staleタイムアウト。

proxy_cacheサイト。

proxy_cache_key $ uri $ is_args $ args;

proxy_cache_valid <静的をキャッシュする時間>;

proxy_pass フロントエンド;

proxy_http_version 1.1;

proxy_set_header接続 "";

proxy_set_header Host $ host;

}

}

アップストリームフロントエンド{

サーバー<フロントエンドアドレス>;

}




何らかの理由でサイト上の動的リクエストをキャッシュする必要がない場合は、場所/セクションでキャッシュをオフにします。 リビジョン番号を指定するなどして、それらのGETパラメーターを変更することにより、静的データをキャッシュできます。



バインドします。

ここではすべてが簡単です。named.confに次の行をインストールして追加します。



ゾーン "site.ru" {

タイプスレーブ;

ファイル "/etc/namedb/slave/site.ru";

マスターズ{

<DNSマスターサーバーのIPアドレス>;

};

};




マスターサーバーからDNSゾーン全体のダウンロードを許可することを忘れないでください。



それだけです! CDNサーバーが構成されます。 さらにいくつかのサイトのCDNスレッドが必要な場合は、少し変更されます;)



All Articles