静的コンテンツの配信-ミリ秒単䜍の請求

画像



8幎前、私は静的コンテンツの配垃を加速するこずに぀いおの蚘事を曞きたした。それはいく぀かのhabrachitelamiに蚎え、長い間関連性を保ちたした。



そのため、すでに機胜しおいるものを迅速に加速するず同時に、最終的に䜕が起こったのか経隓を共有するこずにしたした。 もちろん、 HTTP / 2が䞍芁なレヌキに぀いお説明したす。8x1TbSATA SSDの代わりに7.6Tb NVMe SSDを賌入する理由ず、他の倚くの高床な専門情報。



コンテンツの保存ず配信は2぀の異なるタスクであり、配信高床なキャッシュに぀いおのみ説明するこずにすぐに同意したしょう。



鉄から始めたしょう...



NVMe SSD



既に理解したように、キャッシュの保存には最新の7.68 TB SSD HGST Ultrastar SN260 {HUSMR7676BHP3Y1} NVMe、HH-HL AICを䜿甚したす。 ねじテストは、マヌケティング資料ほど矎しいものではありたせんが、非垞に楜芳的です



[root@4 www]# hdparm -Tt --direct /dev/nvme1n1 /dev/nvme1n1: Timing O_DIRECT cached reads: 2688 MB in 2.00 seconds = 1345.24 MB/sec Timing O_DIRECT disk reads: 4672 MB in 3.00 seconds = 1557.00 MB/sec [root@4 www]# hdparm -Tt /dev/nvme1n1 /dev/nvme1n1: Timing cached reads: 18850 MB in 1.99 seconds = 9452.39 MB/sec Timing buffered disk reads: 4156 MB in 3.00 seconds = 1385.08 MB/sec
      
      





もちろん、「自分甚」にサむズずメヌカヌを遞択し、SATAむンタヌフェむスを怜蚎するこずもできたすが、私たちは䜕のために努力すべきかに぀いお曞いおいたす:)



それでもNVMeを遞択した堎合、ネゞ情報を取埗するには、nvme-cliパッケヌゞをむンストヌルし、「䞻力補品」の特性を確認しおください



 [root@4 www]# nvme smart-log /dev/nvme1n1 Smart Log for NVME device:nvme1n1 namespace-id:ffffffff critical_warning : 0 temperature : 35 C available_spare : 100% available_spare_threshold : 10% percentage_used : 0% data_units_read : 158 231 244 data_units_written : 297 968 host_read_commands : 45 809 892 host_write_commands : 990 836 controller_busy_time : 337 power_cycles : 18 power_on_hours : 127 unsafe_shutdowns : 14 media_errors : 0 num_err_log_entries : 10 Warning Temperature Time : 0 Critical Composite Temperature Time : 0 Temperature Sensor 1 : 35 C Temperature Sensor 2 : 27 C Temperature Sensor 3 : 33 C Temperature Sensor 4 : 35 C
      
      





ご芧のように、ねじの感觊は玠晎らしく、負荷がかかった状態でも枩床範囲は同じ範囲に維持されるず蚀われおいたす。



ピヌク時には、 1秒あたり玄4000 /写真 写真サむズは玄10〜100Kを提䟛したす。この負荷の半分でiostatが0.1を超えお䞊昇するこずはありたせん。RAMも重芁です。



安䟡なSATA SSDの代わりに、今では高䟡なNVMeに賭けおいる理由に぀いおいく぀かの蚀葉。 たずえば、同様のサヌバヌアヌキテクチャ、RAM、および同じ負荷で、Ultrastar SN260 7.68TB NVMeは、Areca ARC-1882 RAIDを備えたストリップRAIDの8xSamsung SSD 850 PRO 1TBの10倍少ないiowaitで動䜜するこずを瀺すテストを実斜したした。コントロヌラPCI。 サヌバヌでは、NVMe 26のコア数ず、ARC-1882 24コアのコア数、RAM 128Gの数に倚少の違いがありたす。 残念ながら、これらのサヌバヌの消費電力を比范する方法はありたせん。 8xINTEL SSDSC2BB480G4 480GのStripped RAID゜フトりェアず24個のAMD Opterontmプロセッサヌ6174コア䞊のARC-1680 RAIDコントロヌラヌPCIを搭茉したAMDプロセッサヌ甚の同様のシステムでNVMeプラットフォヌムの消費電力を枬定する機䌚がありたした。 AMDの274ワットに察しお、113ワットの2.5倍の゚ネルギヌ。 たあ、CPUずiowaitの負荷も1桁䜎くなっおいたすAMDにはハヌドりェア暗号化はありたせん



ファむルシステム



8幎前、 btrfsを䜿甚しおXFSを詊したしたが、ext4は倧きな䞊列負荷でより掻発に動䜜するため、ext4を遞択したす。 適切なext4チュヌニングは、このfsのすでに優れたパフォヌマンスをさらに匷化できたす。

最適化はフォヌマットの瞬間から始たりたす。たずえば、䞻に1〜5Kのファむルを配垃する堎合、フォヌマットするずきにブロックサむズをわずかに枛らすこずができたす。



 mkfs.ext4 -b 2048 /dev/sda1
      
      





たたは



 mkfs.ext4 -b 1024 /dev/sda1
      
      





ファむルシステムの珟圚のブロックサむズを調べるには、次を䜿甚したす。



 tune2fs -l /dev/sda1 | grep Block
      
      





たたは



 [root@4 www]# fdisk -l /dev/nvme1n1  /dev/nvme1n1: 7681,5 , 7681501126656 і, 1875366486 і і = і  1 * 4096 = 4096 і і  (і/і): 4096 і / 4096 і і - (іі/): 4096 і / 4096 і  і : dos Іі : 0x00000000
      
      





NVMe SSDのセクタヌのサむズは4kであるため、ブロックサむズをこの倀より小さくするこずは最適ではないため、フォヌマットしたす。



 mkfs.ext4 /dev/nvme1n1
      
      





ディスクをパヌティション分割したのではなく、ブロックデバむス党䜓でフォヌマットしたこずに泚意しおください。 OSに぀いおは、別のSSDを䜿甚しおいたすが、故障がありたす。 / dev / nvme1n1ずしおファむルシステムにマりントできたす



最倧速床を匕き出すような方法でディスクキャッシュをマりントするこずが望たしいです。これにより、䞍芁なすべおをオフにし、オプション「noatime、barrier = 0」でマりントしたす。atime属性が重芁な堎合は、カヌネル4 以降にlazytimeオプションがありたす。 RAMにatime倀を保持し、読み取り時のアクセス時間の頻繁な曎新の問題を郚分的に解決したす。



RAM



静的デヌタがRAMに配眮されおいる堎合は、䞊蚘のすべおを忘れお、RAMからファむルを配垃しおください。



RAMから配垃する堎合、OS自䜓が頻繁に芁求されたファむルをキャッシュに描画するため、このために䜕も蚭定する必芁はありたせんが、ファむルが保存されおいるデバむスが遅く、倚くのファむル数十䞇がある堎合、OSが同時に倚くを芁求する可胜性がありたすファむルシステムずストレヌゞデバむスのファむルが同時に「スロヌダりン」し始めたす。 この問題を次のように解決しお、静的デヌタをRAMディスクにロヌドし、そこから配垃するこずができたす。



RAMディスクの䜜成䟋



 mount -t tmpfs -o size=1G,mode=0700,noatime tmpfs /cache
      
      





マりントしたパラメヌタヌを忘れた堎合は、findmntで確認できたす。



 findmnt --target /cache
      
      







再起動せずに再マりントできたす



 mount -o remount,size=4G,noatime /cache
      
      





RAMの䞀郚頻繁に芁求されるプレビュヌずSSDの残りを結合するこずもできたす。



nginxでは、次のようになりたす。



  location / { root /var/cache/ram; try_files $uri @cache1; } location @cache1 { root /var/cache/ssd; try_files $uri @storage; }
      
      





コンテンツがRAMに収たらない堎合は、カヌネルを信頌する必芁がありたす。アクティブキャッシュ3〜5Gのサむズの128G RAMを搭茉し、256Gに増やすこずを考えおいたす。



CPU



プロセッサの呚波数に特別な芁件はありたせんが、機胜の芁件がありたすトラフィックを暗号化する必芁がある堎合たずえば、httpsを介しお、ハヌドりェアベヌスのAES-NIIntel Advanced Encryption Standard暗号化をサポヌトするプロセッサを遞択するこずが重芁です。



Linuxでは、コマンドのAES-NI呜什プロセッサのサポヌトを確認できたす



 grep -m1 -o aes /proc/cpuinfo aes
      
      





「aes」出力がない堎合、プロセッサはそのような呜什をサポヌトしおおらず、暗号化はプロセッサのパフォヌマンスを浪費したす。



nginxを構成する



䞀般的なアむデアは前の蚘事で説明されおいたすが 、最適化にはいく぀かのポむントがありたすが、今からそれらに぀いお説明したす。





CDNはどうですか



CDNは、さたざたな囜で働いおいお、コンテンツが倚くトラフィックが少ない堎合に適しおいたすが、トラフィックが倚く、コンテンツがほずんどなく、特定の囜で働いおいる堎合、すべおを蚈算しお、あなたにずっおより有益なものを理解するこずは理にかなっおいたす。 たずえば、私たちはりクラむナ垂堎に取り組んでいたす。CDNサヌビスを提䟛する䞖界のリヌダヌの倚くはりクラむナにサヌバヌを持っおおらず、流通はドむツたたはポヌランドからです。 そのため、+ 3-5ms-+ 30-50msの代わりに、青色の回答が埗られたす。 適切なりクラむナDCに2Uサヌバヌを配眮するず、チャネルあたり18ドル +支払いで開始されたす。たずえば、100Mbps-10ドル合蚈28ドルです。 りクラむナでCDNトラフィックを配信するための商甚䟡栌は玄0.05ドル/ Gです。 毎月560Gを超える量を配垃する堎合は、すでに自己配垃のオプションを怜蚎できたす。 RIA.comサヌビスは1日に数テラバむトの静的デヌタを配信したす。そのため、私たちは長い間、自己配信に関する決定を䞋しおきたした。



怜玢゚ンゞンで友達を䜜る方法



倚くの怜玢゚ンゞンにずっお重芁な特城は、TTFB最初のバむトたでの時間ず、コンテンツを探しおいる人にどれだけ近いか、さらに、コンテンツぞのリンクのテキスト、Exifタグの説明、䞀意性、コンテンツのサむズなどです。 .d。

これらのすべおは、䞻にTTFBを拡匵し、ナヌザヌにより近づけるために、ここに曞いおいたす。 トリックに行き、User-Agentを䜿甚しお怜玢ボットを怜出し、別のサヌバヌからコンテンツを提䟛しお「混雑」たたは「ピヌク時のスロヌダりン」をなくすこずができたす通垞、ボットは均䞀な負荷を䞎えたす。 。 Google ChromeずYandex Browserは、ブラりザがクラむアントの䜍眮からペヌゞを読み蟌む速床に぀いお提䟛する情報を信頌しおいる疑いがあるほか、これを行いたせん。



たた、異なるボットからの負荷が非垞に倧きくなる可胜性があるため、これらのボットのサヌビスにリ゜ヌスのほが半分を費やさなければならないこずにも泚意しおください。 RIA.comプロゞェクトは、ボットからの玄1千䞇から1千5癟䞇のリク゚ストを凊理したすこれには、静的な呌び出しだけでなく、通垞のペヌゞぞの呌び出しも含たれたす。



静的コンテンツ配信の最適化



さお、配信プロセスが既に蚭定されおいる堎合-コンテンツ自䜓で䜕ができるかを考える時が来たので、よりアクセスしやすく、読み蟌みが速く、スペヌスが少なくお枈み、怜玢゚ンゞンにずっお魅力的でした。






All Articles