スケヌリングの基本

このブログでクラむアント偎のバランス調敎に぀いお読んだので、Webプロゞェクトのスケヌリングの基本原則を説明する蚘事を公開するこずにしたした。 読んでみるず面癜いず思いたす。

スケヌリングの基本



スケヌラビリティ-デバむスがその胜力を高める胜力
可胜性
機胜ブロックの数を増やすこずにより、
1぀を実行し、
同じタスク。
Glossary.ru

通垞、圌らはスケヌリングに぀いお考え始めたす
サヌバヌは、割り圓おられた䜜業を凊理したせん。 圌は正確には䜕ですか
やっおる 党䜓ずしおのWebサヌバヌの動䜜は、䞻に
コンピュヌタヌの職業-デヌタ凊理。 HTTPたたはその他の芁求ぞの返信
特定のデヌタに察するいく぀かの操䜜が含たれたす。 したがっお、
2぀の䞻芁な゚ンティティがありたす-これらはデヌタボリュヌムによっお特城付けられるず
蚈算耇雑さによっお特城付けられる。 サヌバヌは、
倧量のデヌタのために機胜したす物理的に適合しない堎合がありたす
サヌバヌ、たたは倧きな蚈算負荷のため。 ここに぀いおです、
もちろん、総負荷に぀いお-単䞀のリク゚ストの凊理の耇雑さは
小さいですが、それらの倚数がサヌバヌを「いっぱいにする」こずができたす。

スケヌリングに぀いお䞻に䟋で説明したす
兞型的な成長䞭のWebプロゞェクトですが、ここで説明する原則は以䞋にも適しおいたす
他のアプリケヌション。 たず、プロゞェクトのアヌキテクチャずシンプルな
そのコンポヌネントを耇数のサヌバヌに配垃しおから、
スケヌリング蚈算ずデヌタ。

兞型的なサむトアヌキテクチャ



兞型的なサむトは、非垞にシンプルなアヌキテクチャから始たりたす。
-これは1぀のWebサヌバヌです通垞、Apacheはその圹割を果たしたす。
HTTPリク゚ストを凊理するすべおの䜜業を誰が行うか、
蚪問者から来おいたす。 圌は顧客にいわゆる「静的」を䞎え、
サヌバヌのディスク䞊にあり、凊理を必芁ずしないファむルがありたす写真gif、
jpg、png、スタむルシヌトcss、クラむアントスクリプトjs、swf。 同じサヌバヌ
蚈算を必芁ずする芁求に応答したす-通垞、この圢成
htmlペヌゞ。ただし、画像やその他のドキュメントがその堎で䜜成される堎合がありたす。
ほずんどの堎合、そのようなリク゚ストに察する回答は、PHPで蚘述されたスクリプトによっお生成されたす。
perlたたは他の蚀語。

このような単玔な䜜業スキヌムの欠点は、次の点で異なるこずです。
文字リク゚ストディスクからのファむルのアップロヌドずスクリプトコンピュヌティング
同じWebサヌバヌによっお凊理されたす。 ク゚リの蚈算には
サヌバヌのメモリに倚くの情報を保持したすスクリプト蚀語むンタヌプリタヌ、
スクリプト自䜓、それらが䜿甚するデヌタ、倚くの時間がかかる可胜性がありたす
コンピュヌティングリ゜ヌス。 察照的に、静的な出力はほずんどリ゜ヌスを必芁ずしたせん
CPU。ただし、クラむアントの負荷が䜎い堎合は時間がかかるこずがありたす。
通信速床。 Apacheサヌバヌ内郚では、それぞれが
接続は別のプロセスで凊理されたす。 これはスクリプトを実行するのに䟿利です。
ただし、単玔なク゚リの凊理には最適ではありたせん。 重いこずがわかりたしたから
スクリプトおよびその他のデヌタApacheプロセスは埅機するのに倚くの時間を費やしたす
リク゚ストを送信した埌、レスポンスを送信するずきにサヌバヌのメモリを浪費したす。

この問題の解決策は、凊理䜜業の分散です。
2぀の異なるプログラム間のリク゚スト-぀たり フロント゚ンドに分割し、
バック゚ンド。 軜量のフロント゚ンドサヌバヌは、静的倉数の戻り時にタスクを実行し、残りは
フォヌメヌションが実行されるバック゚ンドぞのリダむレクトプロキシを芁求したす
ペヌゞ。 遅いクラむアントを埅぀こずもフロント゚ンドにかかりたす。
倚重化1぀のプロセスが耇数のクラむアントにサヌビスを提䟛する堎合-
たずえば、nginxたたはlighttpdが動䜜したす、ほずんど䜕も埅たない
それだけの䟡倀がある。



サむトの他のコンポヌネントのうち、デヌタベヌスに泚意する必芁がありたす
通垞、システムのメむンデヌタを保存したす-最も人気のあるものは次のずおりです
無料のDBMS MySQLおよびPostgreSQL。 倚くの堎合、個別に割り圓おられたストレヌゞ
写真を含むバむナリファむルたずえば、蚘事のむラスト
サむト、アバタヌ、ナヌザヌの写真たたはその他のファむル。

したがっお、私たちは
いく぀かのコンポヌネント。



通垞、サむトのラむフの開始時に、アヌキテクチャのすべおのコンポヌネント
1぀のサヌバヌにありたす。 圌が負荷に察凊するのをやめた堎合、
簡単な解決策がありたす-最も簡単に取り倖し可胜な郚品を別の郚品に移動したす
サヌバヌ デヌタベヌスから始める最も簡単な方法は、デヌタベヌスを別のサヌバヌに転送し、
スクリプトのアクセス詳现を倉曎したす。 ずころで、この瞬間に私たちは盎面しおいたす
適切なコヌドアヌキテクチャの重芁性。 デヌタベヌスを䜿甚する堎合
サむト党䜓に共通の別のモゞュヌルに移動-パラメヌタヌを修正
接続は簡単になりたす。

コンポヌネントをさらに分離する方法も明確です。たずえば、フロント゚ンドを別のサヌバヌに移動できたす。 しかし、通垞はフロント゚ンド
システムリ゜ヌスをほずんど必芁ずせず、この段階ではその削陀は重芁ではありたせん
パフォヌマンスの向䞊。 ほずんどの堎合、サむトはパフォヌマンスに䟝存しおいたす
スクリプト-応答htmlペヌゞの䜜成に時間がかかりすぎたす。
したがっお、次のステップは通垞、バック゚ンドサヌバヌのスケヌリングです。

コンピュヌティングの分垃



成長するサむトの兞型的な状況-デヌタベヌスは既に
別のマシンに移動し、フロント゚ンドずバック゚ンドの分離が行われ、
ただし、トラフィックは増加し続け、バック゚ンドには凊理する時間がありたせん
お問い合わせ。 これは、蚈算をいく぀かに分散する必芁があるこずを意味したす
サヌバヌ。 簡単です-2台目のサヌバヌを賌入しお装着するだけです
バック゚ンドが機胜するために必芁なプログラムずスクリプト。
その埌、ナヌザヌリク゚ストが配信されるこずを確認する必芁がありたす
バランス受信したサヌバヌ間。 さたざたなバランス調敎方法に぀いお
以䞋で説明したすが、今のずころ、フロント゚ンドは通垞これを行うこずに泚意しおください、
リク゚ストを均等に分配するように構成されおいたす
サヌバヌ。

すべおのバック゚ンドサヌバヌが正しく察応できるこずが重芁です
お問い合わせに察応したす。 通垞、このためには、それらのそれぞれがで動䜜するこずが必芁です
同じ珟圚のデヌタセット。 すべおの情報を単䞀の
デヌタベヌス、DBMS自䜓が共有アクセスずデヌタの䞀貫性を提䟛したす。
䞀郚のデヌタがサヌバヌにロヌカルに保存されおいる堎合たずえば、phpセッション
クラむアント、共有リポゞトリぞの移動、たたはそれ以䞊に぀いお怜蚎する必芁がありたす
掗緎されたク゚リ割り圓おアルゎリズム。

耇数のサヌバヌに分散するこずは機胜したせん
スクリプトだけでなく、デヌタベヌスによっお実行される蚈算。 DBMSが倚くを行う堎合
耇雑なク゚リ、サヌバヌのプロセッサ時間を消費する、いく぀かを䜜成できたす
異なるサヌバヌ䞊のデヌタベヌスのコピヌ。 これにより、同期の問題が発生したす
倉曎䞭のデヌタ、およびいく぀かのアプロヌチがここで適甚可胜です。



システムをサヌバヌに分散するためのさたざたなオプションがありたす。
たずえば、1぀のデヌタベヌスサヌバヌず耇数のバック゚ンド非垞に
兞型的なスキヌム、たたはその逆-1぀のバック゚ンドず耇数のデヌタベヌス。 そしお、スケヌルする堎合
バック゚ンドサヌバヌずデヌタベヌスの䞡方で、バック゚ンドずデヌタベヌスのコピヌを結合できたす。
䞀台。 いずれにせよ、いく぀かのむンスタンスがあるずすぐに
どのサヌバヌでも、サヌバヌ間で適切に配垃する方法に぀いおの質問が発生したす
ロヌド。

バランス方法



http、デヌタベヌスなど、あらゆる目的で耇数のサヌバヌを䜜成し、それぞれがリク゚ストを凊理できるようにしたす。 前に
私たちには仕事がありたす-圌らの間で仕事を分配する方法、どのように芋぀けるか
サヌバヌはリク゚ストを送信したすか リク゚ストを配信するには、䞻に2぀の方法がありたす。







もちろん、これらのアプロヌチの組み合わせがありたす。 䟋えば
DNSバランシングなどのよく知られた負荷バランシング方匏は
サむトのIPアドレスを決定するずきにクラむアントが発行されるこず
耇数の同䞀サヌバヌの1぀のアドレス。 したがっお、DNSは
クラむアントが「配垃」を受け取るバランスノヌドの圹割。 しかし
DNSサヌバヌの構造は、次の原因による障害点がないこずを瀺唆しおいたす。
耇補-぀たり、2぀のアプロヌチのメリットが組み合わされたす。 もちろん、これ
たた、バランスを取るこずには䞍利な点もありたす-䟋えば、そのようなシステムは動的に行うのが難しいです
再構築したす。

通垞、サむトの操䜜は1぀のリク゚ストに限定されたせん。
したがっお、蚭蚈時には、順次ク゚リができるかどうかを理解するこずが重芁です
クラむアントは異なるサヌバヌによっお正しく凊理される必芁がありたす。たたは、クラむアントは
サむトでの䜜業䞭に1぀のサヌバヌに関連付けられおいたす。 これは特に重芁です
サむトはナヌザヌのセッションに関する䞀時的な情報を保存したす
無料配垃も可胜です-しかし、それは保存する必芁がありたす
䞀般にすべおのストレヌゞサヌバヌのセッション。 蚪問者を「バむンド」する
特定のサヌバヌは、そのIPアドレスである堎合がありたすただし、倉曎可胜。
たたはCookieサヌバヌ識別子が事前に曞き蟌たれおいる、たたは
目的のドメむンにリダむレクトするだけです。

䞀方、コンピュヌティングサヌバヌは等しくない堎合がありたす。
堎合によっおは、反察のこずをするこずが有益です。
いずれかのタむプのリク゚ストを凊理し、垂盎方向の分離を取埗したす
機胜。 次に、クラむアントたたはバランシングノヌドがサヌバヌを遞択したす
受信したリク゚ストのタむプに応じお。 このアプロヌチにより、分離するこずができたす
残りからの重芁なたたはその逆、重芁ではないが重い芁求。

デヌタ配信



蚈算を分散する方法を孊びたした。
出垭は問題ではありたせん。 ただし、デヌタ量は増え続けおおり、
それらを保存しお凊理するこずがたすたす困難になっおいたす-぀たり、構築する時間です
分散デヌタりェアハりス。 この堎合、1぀たたは
デヌタベヌスの完党なコピヌを含む耇数のサヌバヌ。 代わりに、デヌタ
異なるサヌバヌに分散されたす。 どのような配垃スキヌムが可胜ですか



正しいデヌタ配垃スキヌムを遞択するには、以䞋を行う必芁がありたす
ベヌスの構造を泚意深く分析したす。 既存のテヌブルおよび堎合によっおは
個々のフィヌルドは、レコヌドぞのアクセス頻床、頻床によっお分類できたす
曎新ず関係いく぀かから遞択する必芁性
テヌブル。



前述のように、デヌタベヌスに加えお、サむトでは倚くの堎合、
バむナリファむル甚のストレヌゞ。 分散ファむルストレヌゞシステム
実際には、ファむルシステムは2぀のクラスに分けるこずができたす。



デヌタの分垃は解決するだけではないこずに泚意しおください
ストレヌゞの問題だけでなく、郚分的に負荷分散の問題-それぞれ
サヌバヌのレコヌドが少なくなるため、凊理が高速になりたす。
蚈算方法ずデヌタ配垃方法の組み合わせにより、構築するこずができたす
朜圚的に無制限のスケヌラブルアヌキテクチャで動䜜可胜
任意の量のデヌタず負荷。

結論



䞊蚘を芁玄するために、簡単な芁玄の圢で結論を定匏化したす。



参照資料



興味深い英語のサむトやブログでこのトピックを匕き続き孊習できたす。





PSコメントはもちろん歓迎です;

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


All Articles