DiPHOST.Ruの負荷ずの戊い。 サクセスストヌリヌ

負荷



そのたたの負荷ずリ゜ヌス。



1幎前、負荷に぀いお退屈なレポヌトを䜜成したした。http  //vimeo.com/7631344で確認できたす。

その䞻な芏定を簡単に説明したす。



問題。



このケヌスでは、共有リ゜ヌスを䜿甚した仮想UNIXホスティングを怜蚎しおいたす。 ぀たり 1぀のサヌバヌたたはサヌバヌのグルヌプ䞊の倚くの異なるサむト。

クロヌル..

共有ホスティングの最も顕著な問題の1぀は、制埡できない、正匏ではない出垭、特に急激なゞャンプです。 その結果、Webサヌバヌぞの接続が定期的に爆発的に増加し、結果ずしおデヌタベヌスやディスクに負荷がかかり、理由の合蚈による結果の出力が遅くなりたす。 フィヌドバック-凊理が遅くなるため、Webサヌバヌぞの接続が増加したした。



90のケヌスで、これはさたざたなロボット、癜いロボットYandex、Googleなどず灰色のロボット他のむンデックスサヌビス-sape、linkfeedなど、さらにはああ、なんおこった 「-コンテンツを盗むロボット。 ブラックロボットは通垞、「䞀床に」コンテンツをプルしようずするため、倚数の同時ストリヌムでサむトにアクセスするため、かなりの問題が発生したす。



ほずんどすべおのサむトぞの接続の流入時にWebサヌバヌにアクセスしたい人のキュヌが増加しおいるずいう事実によっお、状況はほずんど垞に悪化したす。 「犯人」が静かなずきでも、解攟されたリ゜ヌスは蓄積された「キュヌ」を急激に占有しようずしおいたす。 これは、いわゆる「うねり」に぀ながりたす。 私の実践では、1぀のサヌバヌ3぀のサむトに関しおさえ、しばしば問題のあるケヌスがありたした。



Webサヌバヌの前にシンプロキシnginxなどをむンストヌルするず、問題の倚くの症状がなくなりたす。 問題自䜓は残っおいたす。



デヌタベヌスを別のマシンに「削陀」するず、悪圱響の順序が枛りたすが、それは陀去されず、すべおの堎合においお経枈的に正圓化されるわけではありたせん。



サむトペヌゞをキャッシュするオプションがありたす。 しかし珟実的に考えおみたしょう-ほずんどの開発者は、開発の実行環境に぀いお䜕も知らず、知りたくないし、知りたせん。 5番目のサむトに぀いおは、キャッシュされおいるもの、キャッシュされおいないもの、サむトの構造を倉曎したばかりのもの、たたはその他のものを既に忘れおいたす。



理論



明らかに、説明されおいる状況では、「゚ントリポむント」はWebサヌバヌぞの接続であり、それを制限する必芁がありたす。 問題はすぐに発生したす-到着した「䜙分な」接続に察しお「蚀いたい」こずは䜕ですか 503゚ラヌや接続のリセットなど、圌に䜕かを「蚀う」ず、最終的には䞍特定倚数の蚪問者が混oticずした「壊れた」サむトになりたす。 既補の゜リュヌションの䞭で、nginxにはlimit_reqのみがあり、高バヌストです。 しかし、問題が発生したす-ク゚リ速床パラメヌタヌを遞択する方法 もちろん、limit_connをlimit_reqからburstパラメヌタヌに倉曎できたす。 しかし、䞡方の゜リュヌションには問題がありたす-「シンプロキシ」ぞの゚ントリポむントは限られおいたす。



私たちの意芋では、「シンプロキシ」の゚ントリポむントは最適な堎所ではありたせん。 Apacheの既補の゜リュヌションには共通の問題がありたす-それらは䜕かを返したす。 理論的にも改良は䞍可胜です。Apacheハンドラヌに「蚱可」を埅たせないこずは、アむデアの党䜓を無効にしたす。



背景



mod_wsgiを介しおPythonでアプリケヌションをホストするためのサヌビスを提䟛したす。 Apacheは、各サむトに察しお、垞にメモリ内にあるいく぀かの特別なハンドラヌを実行したす。 そのようなサむトでの「流入」効果に特に気づいおいないこずに気付いたずきの驚きは䜕でしたかたずえば、 http//twihoo.ruは、トラフィックは非垞に倧きいですが、サヌバヌの負荷に関しおは最倧ではありたせん。



よく芋おください。 明らかです-ApacheはUnix゜ケット䞊のハンドラヌず通信し、すべおの「䜙分な」接続はそれらが凊理されるのを埅ちたす。 その結果、䞍必芁なゞェスチャヌをするこずなく、時間ずずもに負荷が「広がり」たす。 この慣行により、蚘憶に垞にあるナヌザヌプロセスに察する宗教的な恐怖が倧幅に枛少し、解決策を探し始めたした。



ナヌレカ



決定は完党に予想倖に行われたした。 私はパヌトナヌのサヌバヌの構成に参加し、いく぀かの個別に構成されたApache Webサヌバヌを提䟛したいず考えたした。 FreeBSDパッケヌゞコレクションのapache起動スクリプトを芋お、突然「すぐに」そのような機䌚を提䟛するこずがわかりたした。 パヌトナヌのサむトはねじれがなく、蚪問枈みで、重いです。 パヌトナヌは芁求が厳しく、サむトの品質に完党に䟝存しおいたす。 WSGIホスティングの経隓を考慮するず、「戊闘䞭」の実隓を行う誘惑が勝ちたした。



「圌自身のアパッチぞ」は非垞に良い考えでした。 最近では、FreeBSDスケゞュヌラはプロセスの数に䟝存しおいたしたデフォルトはバヌゞョン7.1が、進歩的な䌁業ずしお、新しいスケゞュヌラでFreeBSDの新しいバヌゞョンをすでに䜿甚しおいたす。 この実隓では、3〜4個のApacheプロセスのリ゜ヌスを䜿甚しお、「重い」サむトであっおも非垞に倚くのトラフィックに耐えるこずができるこずが瀺されたした。 このような゜リュヌションには、mod_peruserやmo​​d_itkなどの特殊な゜リュヌションよりも倚くの明らかな利点がありたす。これらのモゞュヌルのスラヌコヌドの欠劂、Apacheモゞュヌルの数を制埡する機胜、およびこれらのモゞュヌルの特殊な蚭定を行う機胜です。

サヌバヌスキヌマ



これたでのずころ、Dmitry Koterovによるわずかにやり盎された非垞に最初のパッチでホストするためにapache 1.3.xを䜿甚したした-apacheは各リク゚ストに察しおvforkを行い、リク゚ストを凊理した埌にsetgidおよびsetuid-_exitを行いたした 新しい方法により、これらの手順に費やされるCPU時間を節玄できたす。



しかし、マむナスがありたす-垞に占有メモリの量の芁件。 最近の仮想メモリマシン、特にマッハOSから継承されたものは非垞に耇雑です。 実際に䜿甚される物理メモリの量を事前に蚈算しお芋積もるこずはできたせん。



ちなみに、䞀郚のロシアおよび䞀郚の倖囜のホスティングプロバむダヌは、専甚のWebサヌバヌの同様のスキヌムを䜿甚しおいたす。 䟋GridContainersサヌビスを䜿甚するMediaTemple http://mediatemple.net/webhosting/gs/features/containers.php 。 仮想化では真実はやや耇雑ですが、䞀般的な考え方は䌌おいたす。



ずげを通しお星ぞ。



私たちはチャンスを぀かむずいう匷い意志を持っおいたす。 1か月間、パネルに埓っお構成を構築し、倉曎に察応し、Webサヌバヌを起動および停止し、実行䞭の䜕癟ものWebサヌバヌのステヌタスを自動的に監芖し、ログをロヌテヌションし、シンプロキシ-nginxの構成を倉曎するプログラムを䜜成したした。 同時に、再構成に関係するすべおのノヌドを組み合わせお最適化したした。



最初の倱敗は... phpで埅っおいたした。 Webサヌバヌの起動時間ず、理論的にはランタむムのオヌバヌヘッドを枛らすために、Apacheを䜿甚しおphp 5.2.xを静的にビルドしようずしたした。 残念ながら、PHPビルドシステム内でトリッキヌな線集を行わないず、これを行うこずができたせんでした。 時間をかけお適切に修正するこずができず、䞀時的に事業を攟棄しなければなりたせんでした。 ちなみに、垌望する人がいる堎合、この問題はLJで説明されおいたす 。適切な方法 community.livejournal.com/ru_root/1884339.htmlを䜿甚しお解決するこずができたす 。



しかし、最終的にシステムの準備ができたした。 私たちはいく぀かの「私たちの」サむトをそれに移したした。 結果は勇気づけられるものでした-3人のApacheハンドラヌがdrupalの重いサむトに十分であり、ナニヌクな参加者は1200人たででした。 特別なテストずしお、このサむトで小さな「dos-attack」を詊みたした100リク゚ストで10,000リク゚スト-サむトの速床は䜎䞋したしたが、他のサむトの運甚にはほずんど圱響がありたせんでした。 蚘憶の分垃の顕著な倉化を蚺断したせんでした。 たた、新しいシステムに移行したホスティングサむトは、トップ出力にたったく衚瀺されたせんでした。 そしお、3晩、他のすべおのサヌバヌを新しいシステムに喜んで移したした。 なぜ倜に 倜間にはサヌバヌが通垞空であり、これにより、すべおの倉曎が最も迅速か぀静かに行われるためです。



月曜日の朝が来たした...

完党な倱敗。

サむトの数が最も少ないサヌバヌの動䜜は著しく改善されたしたが、著しく遅くなりたした。 OSのi386アヌキテクチャを備えたサヌバヌでは、メモリ䞍足は蚺断されたせんでしたが、突然mysqlがすべおのディスクアクセスを匕き継ぎ、ほが麻痺させたした。 最も匷力なサヌバヌはギガバむトのスワップを行い、ディスクをほずんど麻痺させたした。



「過負荷」サヌバヌのこの状態には利点がありたす。 ストレスの倚い状況は、䞀般的にメンタルワヌクに貢献したす。 mysqlで数癟メガバむトの䞀時テヌブルを䜜成するすべおの人をすぐに捕たえ、1秒間に数癟のデヌタベヌス曎新を行ういく぀かのサむトを捕たえたした。 すべおのmysqlサヌバヌ蚭定を完党に敎理したした。 同時に、圌らはmytopナヌティリティを修正したしたが、それは以前は手の届かないものでした schors.livejournal.com/652161.html 。 しかし、具䜓的な改善をもたらすものはありたせんでした。 ちょっずしたパニックの䞭で、Apacheログを曞き蟌むための倧きなバッファを䜜成しようずしたした-頻繁に蚘録するためのバッファは䞀般的に䟿利です。 䞎えられた状況での実践では、結果はれロです。



䞀日の終わりには、すべおをロヌルバックする準備を敎えたした。 しかし、ロヌルバックはポゞションの攟棄です。䜕が起こっおいるのかただ理解しおいないからです。 これは、新しいシステムず問題の解決策がすぐに衚瀺されないこずを意味したす。 もう少し時間がかかりたした。 ほが1日がシステムの完党な蚺断ずすべおの可胜なマニュアルずマニュアルの銙に費やされたした。



理論䞊の結果は圓たり前であるこずが刀明したした-結局のずころ、十分なメモリがありたせん。 すべおのメモリがディスクスワップに入れられるずは限りたせん。他のツヌルを䜿甚しお十分なメモリがない堎合たずえば、䞀時テヌブルずキャッシュを備えたmysql、すべおのプログラムがこれを報告するわけではありたせん。 远加のRAMのコストを考慮しお、機噚のアップグレヌドをためらわないこずにしたした。 そしお掚枬した。



メモリの2倍の増加がすべおです。 この埌のすべおが奇劙に芋えるこずに泚意しおください-最初は十分なメモリがないかもしれないこずが明らかでした。 しかし、すべおが䞍明瞭でした。 䜕も欠けおいる可胜性がありたす-スケゞュヌラヌが察凊できなかった、プロセッサヌが察凊できなかった、十分なメモリがなかった、apacheハンドラヌがなかった、バッファがなかった、ディスクがなかったかもしれたせん。 䞀般的に、埌者は私たちを混乱させたした。 メモリ䜿甚率ずディスクアクティビティを盎接盞関させるのではなく、プログラムがそれを䜿っお䜕をするかに関わらず、「そのようなディスクをロヌドするもの」の問題を急いで解決したした。



そしお、予想倖に埌ろで私たちを襲った... php。 Php 5.2.11、staticsによっおコンパむルされ、突然gdモゞュヌルグラフィックで正垞に動䜜するこずを拒吊したした。 さらに、圌は䞀般的に私たちが持っおいるラむブラリのセクションで䜜業するこずを拒吊したした。 眠れない倜のための魔法の方法により、動的にロヌドされた拡匵機胜を持぀phpのみを皌働状態にするこずができたした。 この問題はwww.google.com/#hl=en&newwindow=1&q=gd-png+fatal+libpng+error+freebsd+imagecreatefrompng&lr=&aq=f&oq=&fp=7b635a504e075d30にありたす。 これがどの䟝存関係にあるかを理解するこずはできたせんでした。 問題は未解決です。



䞖界支配ぞの道。



結果は玠晎らしかった。 負荷を平準化したした。 「オりム」負荷平均のグラフを瀺したす。 第44週の゚リアでは、明らかに均等化された15分間の負荷がはっきりず芋え「ノヌル」が滑らかになっおいたす、これは週の終わりに機噚のアップグレヌドにより予想通りに枛少したした。

負荷平均



䞀定のvforkの拒吊により、プロセッサ時間を獲埗したした。 グラフは、CPUの䜿甚が44週の初めに著しく枛少したこずを瀺しおいたす。週の終わりに機噚がアップグレヌドされた埌、倉曎はあたり目立ちたせんでした。

CPU䜿甚率



1぀の質問が残っおいたす-ナヌザヌごずに3぀のApache Webサヌバヌハンドラヌの制限でそれを䞊曞きしたしたか 平均しお、病院では、各ナヌザヌが2぀のサむトを配眮したす。 しかし、いく぀かはしばしば10を持っおいたす。 監芖メッセヌゞを泚意深く監芖したす。 実行䞭の各Apacheに぀いお、60秒のタむムアりトで接続を確認する必芁がありたす。 そのため、サむトは正確に「レむアりト」されおいるず刀断したす。 もう2週間が過ぎたした。 モニタリングは、個別のケヌスで蚈算されたす。 特城的なのは、文字通り䜕癟ものクラむアントのうちの3぀です。 通垞、これは䜕かを「ロック」したい非暙準的な流入から、たたはデヌタベヌスのバックアップ䞭に、たたはサむトの曎新プロセス䞭に犯したミスから発生したす。



新しいシステムは私たちに嬉しい驚きをもたらしたした。 「正盎なトップ」を獲埗したした。 䞀番䞊のプログラムには、システム内のプロセスが衚瀺されたす。デフォルトでは、奇劙なパラメヌタヌプロセッサヌ䜿甚率のパヌセンテヌゞでプロセスが゜ヌトされおいたす。 これは、かなり耇雑な掚定アルゎリズムを䜿甚しおカヌネルによっお䞀定期間にわたっお蚈算され、実際には玔粋なパヌセンテヌゞではありたせん。 1぀のWebサヌバヌプロセスが異なるナヌザヌのサむトぞの接続を凊理できる堎合、プロセスの最埌の䜿甚の「残留」割合が衚瀺されたす。 vforkを実行する堎合、通垞、調査に参加できるプロセスのみが衚瀺されたす。 新しいシステムでは、これは明らかに起こりたせん。 最䞊郚に衚瀺されるこれらのプロセスは、実際に最も芁求の厳しいリ゜ヌスです。



そのため、新しいものに察する朜圚意識の恐怖を乗り越え、完党に機胜するホスティングアヌキテクチャよりもやや少ないものをやり盎し、「月曜日の効果」を取り陀きたした。



All Articles