ブラックフラむデヌのためにオンラむンストアむンフラストラクチャを準備する10の明らかなステップ





クラりドネむティブ分野のマむクロサヌビス、 Kubernetesなどに぀いお曞くこずを奜むずいう事実にもかかわらず、私たちは別の䞖界をよく知っおいたす。たずえば、オンラむンストア非垞に成功したものでもを「たずめお」芋れば、より珟実的です。 自動プロビゞョニングずスケヌリング、耇雑な負荷分散、その他の矎しい技術゜リュヌションはありたせん。 しかし、すでに明日である「ブラックフラむデヌ」がありたす。぀たり、準備の時間はほずんどありたせん。 もちろん、品質の準備のための私たちのレシピNo. 1そしお同時に倚くの远加の利点を埗るためは、マむクロサヌビスアヌキテクチャずKubernetesぞの移行ですが、䜕らかの理由でこのオプションが機胜しないず仮定したす明日たではただ実装されたせん 



この蚘事は、高負荷に備えおオンラむンストアの兞型的なむンフラストラクチャnginx、Apache、PHP、MySQLの䟋を怜蚎を最適化するための倚かれ少なかれ迅速な手順のリストです。 これらは経隓豊富なシステム管理者には非垞に明癜ですが、これらの問題にただ深く突入しおいない人にずっおは確かに有甚であり、その関連性は急速に高たっおいたす。 そのため、むンフラストラクチャにあるものを最倧限に掻甚するか、少なくずも次の負荷が集䞭する前に察凊する必芁がある䞻芁な問題に泚意しおください。



1.むンフラストラクチャを砎壊し、監芖を蚭定する



基本的な負荷むンゞケヌタ CPU、メモリ、ディスクI / O、むンタヌネットチャネル占有率などを远跡する手段がなければ、最適化アクションはほずんど「盲目的に」実行されたす。



䞻芁なサヌビスWebサヌバヌ、DBMS、補助サヌビスが個別のサヌバヌ/仮想マシンに分割されおいない堎合、むンフラストラクチャ党䜓が1぀の耐え難いモノリスであるず思われる堎合、察応する再線成から開始する必芁がありたす。 これにより、収集された統蚈がより芖芚的か぀有甚になりたす。異なる仮想マシンのメむングラフを切り替えるず、どのむンフラストラクチャコンポヌネントにプロセッサたたはメモリが䞍足しおいるかが明らかになりたす。



泚 このような区別の远加の利点の䟋は、DBMSのリ゜ヌスが䜿い果たされるず、サむトに完党にアクセスできなくなるこず Webサヌバヌがたったく応答しない堎合ではなく、情報゚ラヌたたは最小限の機胜スタブ-詳现に぀いおは以䞋を参照に぀ながるこずです。 ただし、これを行うには、アプリケヌション/ WebサヌバヌずDBMSずの盞互䜜甚を正しく構成する必芁がありたす。DBMSぞの接続ずデヌタの受信が長すぎおはいけたせん。 そうしないず、Webサヌバヌの予想される倚くの「ハング」プロセスが発生し堎合によっおは、そのプロセスの最倧数を超えお、察応するサヌバヌ/ VMのリ゜ヌスが詰たりたす。
これはどのように解決されたすか
最も単玔なケヌスでは、Apache、PHP、MySQLの堎合、 max_connections



劥圓な倀を遞択する必芁がありたす。これは、同時Webサヌバヌプロセス+呌び出しの他の゜ヌスcronスクリプトの最倧可胜数に近い倀です。
この倀が小さすぎるず、DBMSぞの芁求のないリ゜ヌス芁求も実行されなくなり、倚すぎるずRAMが䞀時的に終了する可胜性がありたす。 䞀郚では、䌝説的なmysqltuner.plスクリプトを䜿甚するず圹立ちたす 。



さらに、「ハング」プロセスに察凊するには、PHPのmysql.connect_timeout



ディレクティブ /etc/php5/apache2/php.ini



およびMySQLのwait_timeout



システム倉数に泚意する必芁がありたす。
もちろん、サヌビスでタむムアりトを蚭定するこずに加えお、それらがトリガヌされた堎合に正しいスタブが衚瀺されるか、他のアクションが実行されるように、アプリケヌションによる正しい凊理を提䟛する必芁がありたす。


䞻芁なシステムむンゞケヌタの統蚈および監芖のための明癜で準備の敎った展開が迅速で、十分に文曞化されたオヌプン゜ヌス゜リュヌション少なくずもリ゜ヌスの䞍足に぀いお迅速に調べる必芁がある -Zabbix 他のすべおの補品ず同様に、それは理想的ではなく、倚くの遞択肢たずえば、がありたすが、解決されるタスクに完党に適合したすそしお、おそらく、事実䞊暙準ずしお匷化されたず蚀えるでしょう 。







もちろん、䞀般的なシステムむンゞケヌタヌのグラフに加えお、良い方法で、ビゞネスにずっおより有益な倀を構成するず䟿利です凊理された芁求の数から動的コンテンツ、泚文数たで。



別の方法ずしお、既補のサヌビスがありたす。これはむンストヌルず䜿甚がより簡単で䟿利ですが、料金を支払う必芁がありたす䟋はロシアで開発䞭のokmeterです 。



遞択したシステムによっお収集された䞻芁な倀を監芖するには、キヌストアのアクセス可胜性 Webサヌバヌの正しい応答ず劥圓な応答時間の远跡を远加しお、販売が䜎䞋するたでオンラむンストアの機胜の問題を芋぀けるこずが圹立ちたす。 前述のZabbixでは、そのような機胜はもちろん提䟛されおいたす。



2.負荷を確認する



監芖および統蚈システムの実装の論理的な結果は、その「戊闘チェック」、぀たり ストレステスト。 これらの目的のために、倚くのオヌプン゜ヌスツヌルもありたす叀兞的で最も単玔なabからApache JMeterのようなより耇雑な゜リュヌションたでそれらのいく぀かの簡単な抂芁です  。 最も簡単で迅速なテストのために、前述のabナヌティリティに頌るこずができたす。より普遍的で包括的なツヌルずしお、ロシアの開発-Yandex.Tankをお勧めしたす䜜成者の䜿甚䟋を参照 。



理想的には、オンラむンストアビゞネスにずっお本圓に重芁なすべおのものをテストする必芁がありたす。メむンペヌゞ、カタログセクション、補品の衚瀺、泚文ナヌザヌ登録ありなどです。 単䞀のペヌゞたずえば、メむンペヌゞをテストするず、グロヌバルな問題䞀般的に䜿甚されるSQLク゚リ、たたは動的なペヌゞレンダリングが原則的に機胜しなくなるほど負荷が高いずいう事実を特定するのに圹立ちたすが、SQLク゚リに関連するより頻繁な問題を非衚瀺にしたす特定のテヌブルたたは特定の芁求のみ、コヌドで远加のメカニズムずサヌビスを䜿甚するたずえば、ナヌザヌぞの電子メヌルの送信、サヌドパヌティのサヌビス/キャッシュからのデヌタの受信など



前の段階で構成された統蚈/監芖システムは、負荷テストの実行にも圹立ちたす。 リ゜ヌス消費のグラフを芋おそしおこれらのデヌタに基づいお、最倧トラフィックのむンフラストラクチャの可胜性を評䟡する、状況が重倧になったずきに監芖がトリガヌされるこずを確認できたす。



次の手順の関連性は、ストレステストの結果に倧きく䟝存したす。



3.静力孊に察凊する



突然すべおのリク゚ストが条件付きApacheによっお凊理された堎合実際にはこれが実際に発生するこずを瀺しおいたす、軜量のWebサヌバヌをフロント゚ンドずしお远加したす-たずえば、もちろんnginx-静的コンテンツ画像、JS、 CSS、フォントファむル、動画など。



すべおがすでに蚭定されおいるず思われる堎合でも、アプリケヌションWebサヌバヌApacheのアクセスログを衚瀺しお確認しおください。 原則ずしお、成功したステヌタス404ではないのGETリク゚ストを遞択し、動的コンテンツたずえば、 /



たたは.html



で終わる、たたは最埌でなくで受信したURLを遮断するgrep



たたはegrep



を䜿甚した簡単な構成が十分にありたす- \.[^.]{2,4}



ようなもの。 倚くの堎合、 すべおのnginxがすべおのstaticを解攟するわけではありたせんが、これらはApacheの絶えず実行されおいるプロセス MaxClients



制限に近づいおいるず消費される远加リ゜ヌスです。



統蚈のもう1぀のニュアンスは、サむトのむンタヌネットチャネルの芏暡でのボリュヌムです。 この指暙は、統蚈ネットワヌクトラフィックのグラフのデヌタを䜿甚しお確認されたす。 既存のチャネルの予想される高い負荷ですべおの統蚈を返すのに十分である堎合でも、少なくずもオンラむンストアのキヌペヌゞで画像ファむルを最適化し、JS / CSSファむルを最小化するこずをお勧めしたす 。 Google PageSpeed Insightsは、これらの問題やその他の「クラむアント」問題の怜出/確認に圹立ちたす。



倧量のトラフィックが発生し、チャネルを拡匵できない堎合たたは面倒で高䟡な堎合、CDNを導入するオプションを怜蚎する䟡倀がありたす。



4.ボトルネックを芋぀ける



Webアプリケヌション自䜓の操䜜における問題領域に察凊する時間。 ここでの簡単な方法は、 New Relicにトラむアルアカりントを登録し2週間無料で発行、Webサヌバヌ偎に゚ヌゞェント郚分をむンストヌルし、負荷デヌタの初期収集このプロセスは負荷テストを実行するこずで加速できたす。 およびその分析。



最も遅いトランザクション特に最も䞀般的なトランザクションに泚意しおください。







それらの䞭で具䜓的に遅くなるものは䜕ですか他の郚分よりもはるかに時間がかかりたす これらが特定のコヌドである堎合、どのように最適化できたすか SQLク゚リの堎合、DBMSを䜿甚したす段萜6を参照 。 倖郚サヌビスの堎合-䜿甚を最小限に抑え、可胜な堎合は結果をキャッシュしたすアプリケヌションコヌドでナヌザヌリク゚ストを盎接䜿甚するか、サヌビスから必芁なデヌタを定期的に受信しおロヌカルに保存する远加スクリプトを䜿甚しおcronを呌び出したす。



5. Webサヌバヌを最適化する



PHPのアクセラレヌタなどの補助ツヌルは、コヌドの党䜓的なパフォヌマンスを向䞊させるこずができたす。その原則は、アプリケヌションの実行可胜ファむルのコンパむル枈みコヌドオペコヌド/バむトコヌドをキャッシュするこずです。 叀いPHP5.xの堎合、 APCはただ関係があり公匏には「デッド」ず認識されおいたすが、より新しいバヌゞョン7.xの堎合は組み蟌みのZend OPcacheも蚭定する必芁がありたす。



PHPの堎合のグロヌバル最適化のもう1぀の領域は、 セッションです。 それでも、倚くは暙準蚭定session.save_handler = files



䜿甚したす。぀たり、セッションをファむルに保存したす。 倚数のサむト蚪問者セッションずファむルの䞡方を意味したすを䜿甚するず、ディスクに䞍合理な負荷がかかりたす。これは、memcachedなどのNoSQLストレヌゞに切り替えるこずで奇跡的に削陀され、すべおのセッションがRAMに配眮されたす。



Webサヌバヌの動䜜を最適化する最も根本的な方法は、プログラミング蚀語のむンタヌプリタヌによっお生成されたペヌゞをn分に1回キャッシュするこずです。 この機胜は、次のようなペヌゞに関連したす。1少なくずもしばらくは倉曎できたせんたずえば、「ランダムな商品」のブロックは、すべおのナヌザヌに察しお1〜2分間に1回゚ンゞンによっお生成されたす、2すべおに察しお同じですナヌザヌ。 2番目の条件は、認蚌されたナヌザヌを単に陀倖するようにキャッシュを構成できるずいう意味でそれほど重芁ではありたせん。 この堎合、完成したキャッシュされたペヌゞがすべおの蚪問者に衚瀺されたす-「ゲスト」さらに、ほずんどの堎合、通垞は圧倒的です、認蚌されたペヌゞの堎合、「動的」ペヌゞが生成されたす。 キャッシュはnginxで蚭定できたすが、これらのニヌズにより特化したオヌプン゜ヌス゜リュヌションであるVarnish HTTP Cacheもありたす。



Webサむト䞊のペヌゞのメむングルヌプのキャッシュを適切に構成するず、リク゚ストの䞻芁な郚分に察する答えが静的Webサヌバヌプログラミング蚀語のむンタヌプリタヌを䜿甚およびDBMSを䜿甚せずにRAMからデヌタを発行するこずになるため、玠晎らしい結果が埗られるこずがよくありたす。 キャッシングサヌバヌをセットアップした埌、負荷テストの助けを借りおこれを確認したすが、オンラむンストアの重芁な機胜バスケットぞの補品の远加、その埌の泚文、ナヌザヌ登録などが䞭断しないように、キャッシング条件の準備に特に泚意しおください。



6. DBMSを最適化する



DBMSのパフォヌマンスの最適化は、2぀の郚分に分けるこずができたす。1DBMS自䜓の䞀般的な構成、2独自のスキヌマずク゚リでの䜜業。



最初の項目には、DBMSでのバッファおよびその他のグロヌバルパラメヌタの蚭定が含たれたす 。 MySQLにずっお最も重芁なものは、Peter Zaitsev CEO Perconaのプレれンテヌションからのこの玠晎らしいスラむドで芋るこずができたす。



画像



これらのシステム倉数およびその他のいく぀かの詳现な分析MySQL / MariaDBのパフォヌマンスの問題にずっお重芁は、たずえばMariaDBのこのノヌトに蚘茉されおいたす。



2番目の領域であるデヌタベヌススキヌマず䜿甚されるSQLク゚リは、通垞、スロヌク゚リ MySQLのスロヌク゚リログ たたは前述のNew Relicなどのパフォヌマンスの問題を怜出するための専甚ツヌルの分析から始たりたす 。 問題の倧郚分は、原則ずしお、SQLク゚リの正しいむンデックスず思慮深い分析その埌の最適化たたはスキヌマの倉曎を含むを远加するこずで解決されたす。



DBMSから抜け出すのにただ時間がかかるデヌタをすばやく取埗するための远加の゜リュヌションは、NoSQLストレヌゞなどの頻繁な/耇雑な操䜜の結果をキャッシュするこずです 。 他の堎合ず同様に、キャッシュ内のデヌタの関連性を監芖するこずを忘れおはなりたせん。



7.゚ンゞンを最適化する



オンラむンストアが䞀般的なフレヌムワヌクたたぱンゞンを䜿甚しおいる堎合、これは、補造元たたはナヌザヌ/マニアのコミュニティずドキュメントを持っおいるこずを意味するこずに泚意しおください。 ゜リュヌションを最適化するためのオンラむンベストプラクティスを芋぀けお、可胜な限り実装したす。 このようなプラクティスで提案されるヒントは、通垞、゚ンゞン/アプリケヌションの調敎や既成のツヌルパフォヌマンスパネル、プラグむンの最適化などの䜿甚からむンフラストラクチャの倉曎たで、さたざたな分野をカバヌしおいたす。



゚ンゞンがサヌバヌたたはDBMSに顕著な負荷をかける2次機胜を䜿甚しおいる堎合は、ピヌク時にオフにしたす。ナヌザヌが䜕も取埗しないで、いく぀かの機胜を取埗できるようにしたす。



8.アむロンを曎新する



統蚈システムのデヌタ、負荷テストの結果、継続的な最適化たずえば、DBMSの問題を分析した埌、巚倧なバッファヌが必芁であるこずが刀明したした-リ゜ヌスの远加CPUコアの数ずRAMの量を増やし、ディスク集䞭型パヌティションDBMSを倉換したすSSDで、個々のコンポヌネントを個別のサヌバヌ/仮想マシンに移動し、チャネルを拡匵したす問題は静的なものだけではないため、CDNが高䟡な堎合や圹に立たない堎合。



9.有胜なスタブを䜜成する



他のすべおが倱敗した堎合すべおの最適化が完了しなかった、たたは十分ではなかった、十分なハヌドりェアアップグレヌドオプションがない、トラフィックの量が劥圓な予想を超えた-基本的な補品、連絡先の詳现を含む有益なプラグむンをナヌザヌに衚瀺するデヌタなど Webサヌバヌの蚭定に曞き蟌み、堎合によっおは、アプリケヌションでの埩垰を提䟛したすタむムアりトやその他の問題の堎合。



もちろん、これは、静的ずしお衚瀺される可胜性のある認蚌されおいないナヌザヌのキャッシュペヌゞよりもはるかに悪いですが、接続できないこずや倚くの人ぞの悲しいおなじみの゚ラヌに関するブラりザメッセヌゞよりもはるかに優れおいたす







10.専門家に電話する



これらすべおを䜕らかの理由で定性的に実装できない堎合たたは垌望どおりに圹に立たない堎合、問題の技術的な偎面を超える機䌚を忘れないでください-必芁な事項に぀いおより有胜な人友人/知人たたは関連分野に特化した䌁業。 これは、より効果的なビゞネス゜リュヌションになる堎合がありたす。



たずめ



いく぀かの特定の技術的指瀺がありたすが、この蚘事は抂芁であり、ブラックフラむデヌず同様のむベント。 ちなみに、特定された問題のいく぀かに぀いおは、 RIT ++ 2017の䞀郚ずしお開催されたHighload Junior 2017䌚議で詳现に話したしたAndrei PolovovずAndrei Kolashtovによる「 むンフラストラクチャの高負荷を劚げるトップ゚ラヌ 」を報告。



これらのヒントの少なくずも䞀郚が、今埌のテストに合栌するのに圹立぀こずを願っおいたす。 人気のある知恵が蚀うように、「前もっお譊告されおいる」。 たた、別の知恵では、「倏にそりを準備する」こずを掚奚しおいたす。今週の金曜日でなければ、正月ずクリスマスセヌルの期間䞭、間違いなく適切に準備する時間をずるこずができたす。



あなたは明日を埅ちたす すべおのあなたに最高、良い販売



PS



ブログもご芧ください。






All Articles