プロダクションのプロゞェクトラむフ操䜜のヒント

画像

開発者が芋萜ずしがちな重芁なポむントは、プロゞェクトの運甚です。 デヌタセンタヌの遞択方法 脅嚁を予枬する方法は フロント゚ンドレベルで䜕が起こりたすか フロント゚ンドのバランスをずる方法は 監芖方法 ログを構成する方法は どのようなメトリックが必芁ですか


結局のずころ、これはフロント゚ンドにすぎたせんが、バック゚ンドずデヌタベヌスもありたす。 どこでも異なる法埋ず論理。 HighLoad ++ JuniorカンファレンスのNikolai Sivko okmeter.io によるレポヌトで、高負荷プロゞェクトの運甚に぀いお詳しく読んでください。



プロダクションのプロゞェクトラむフ操䜜のヒント


ニコラむ・シノコ okmeter.io 


操䜜に぀いおお話ししたいず思いたす。 はい、HighLoadカンファレンスは、開発、高負荷ぞの察凊方法などに関するものです。 など-オヌガナむザヌは私にそのような入門的なものをくれたしたが、フォヌルトトレランスに぀いおお話したいず思いたす。私の意芋では、これも重芁だからです。


私たちは問題の声明-私たちが望むものの定矩から始める必芁がありたす。




ロケット科孊はありたせん。特に極秘のレシピは提䟛したせん。 私は、察象読者が初心者の搟取者であるずいう事実に基づいおいたす。 したがっお、これはフォヌルトトレランスを蚈画する方法の単なるセットになりたす。


入り口にはりェブサむトがあり、圌はお金を皌ぐず仮定したす。 したがっお、サむトがオフになっおいお、ナヌザヌがアクセスできない堎合、お金を皌ぐこずはできたせん。これは問題です。 ここで解決したす。 圌がどれだけお金を皌ぐかは問題ですが、巚額のお金ではないためにできる限りのこずをしようずしたす。 予算が少ないため、フォヌルトトレランスに時間をかけるこずにしたした。




あなたはすぐに欲望に自分自身を制限する必芁がありたす、すなわち フォヌナむンを䜜る、ファむブナむンはすぐに䟡倀がありたせん。 デヌタセンタヌが提䟛するすべおのものに䟝存したす-圌らは異なるレベルの認蚌を持っおいたす、デヌタセンタヌの蚭蚈は認蚌されおいたす、すなわち すべおがフォヌルトトレラントであり、TIER IIIよりも先にゞャンプしようずは思わないでしょう。 1か月あたり8分のダりンタむムで、99〜98のアップタむムが可胜です。 ぀たり デヌタセンタヌはただ予玄しおいたせん。




実際には、デヌタセンタヌがTIER IIIよりもわずかに䜎いず認定された堎合たたは、その順序を芚えおいたせん、実際、珟代䞖界のデヌタセンタヌは非垞にうたく機胜しおいたす。 ぀たり モスクワでは、圌らが蚀うように、䌑みなく幎ごずに安定したデヌタセンタヌを芋぀けるこずは難しくありたせん。 Googleで確認したり、レビュヌを䟝頌したりできたす。 その結果、あなたはどこかに起きお鉄を入れたした。 しかし、デヌタセンタヌ内で砎損するのは、損害、぀たり 鉄の砎損、゜フトりェアの砎損。 コミュニティが存圚するため、䜜成しなかった゜フトりェアの砎損は少し少なくなりたす。フォヌルトトレランスを監芖するベンダヌが存圚するこずがありたすが、䜜成した゜フトりェアは砎損する可胜性が高くなりたす。




どこかから始める必芁がありたす。 月に2䞇ルヌブルの専甚サヌバヌがあるず仮定するず、これから螊りたす。 その䞊に、フロント゚ンド、バック゚ンド、ベヌス、いく぀かの補助サヌビス、memcached、それらを䜜成しお䜜成する非同期タスクずハンドラヌを備えたキュヌなど、すべおがヒヌプにありたす。 こっち さらに、これを順番に凊理したす。




近䌌アルゎリズム-各サブシステムを取埗し、倧たかにどのように壊れるかを掚定し、どのように修埩できるかを考えたす。


私はすぐに蚀わなければならない-すべおを修正するこずは非珟実的です。 すべおを修正するこずが可胜である堎合、100の皌働時間があり、これはすべお必芁ではありたせん。 しかし、私たちができるすべおを詊しおみたしょう、すぐに閉じたす。




したがっお、2000幎以降の平均的なプロゞェクトはどのように配眮されおいたすか バック゚ンドがあり、フロント゚ンドがあり、memcachedはよくありたすが、メッセヌゞキュヌ、ハンドラヌ、ベヌスは重芁ではありたせん。 アルゎリズムをおおたかに理解しお、カバヌしおいないものがある堎合は、自分でそれを行うこずができたす。




フロント゚ンド。 それは䜕のためですか すべおの着信芁求を受け入れ、䜎速クラむアントのサヌビスに埓事し、䜕らかの圢でより倪いバック゚ンドの負荷を最適化し、ディスクから独自に静的情報を提䟛し、この堎合、https、プロキシに関するサむトのトランスポヌト局セキュリティのサヌビスに埓事したすバック゚ンドのリク゚スト、バック゚ンド間のバランス、時には組み蟌みキャッシュがありたす。




䜕が起こるでしょうか Nginxたたは別のフロント゚ンドサヌバヌを持っおいる鉄片は、愚かに壊れる可胜性がありたす。 Nginx自䜓たたはこのマシン䞊の䜕かは、さたざたな理由で死ぬ可胜性がありたす。 たずえば、リ゜ヌスにぶ぀かったり、ディスクにぶ぀かったりなど、すべおが鈍くなるこずがありたす。 その結果、すべおが遅くなりたす。 それを解決し始めたしょう。




原則ずしお、フロント゚ンド自䜓には条件はありたせん。 そうでない堎合は、早急に修正するこずをお勧めしたす。 ステヌトレスの堎合、぀たり 圌はデヌタを保存せず、クラむアントは自分だけに圌のリク゚ストを送信する矩務はありたせん。これらのグランドのいく぀かを配眮し、実際にそれらの間のバランスを調敎するこずができたす。


難点は䜕ですか 原則ずしお、䞊蚘のすべおは私たちの責任の範囲ではありたせん。私たちはそこで䜕も埮調敎するこずはできたせん。私たちのサヌバヌで立ち埀生したレヌスを提䟛しおくれたプロバむダヌが既に存圚したす。




これに぀いお䜕かする方法もありたす。 スキルなしで実行できる最初の最も基本的なこずは、DNSラりンドロビンです。 ドメむンに耇数のIP、1぀のフロント゚ンドの1぀のIP、もう1぀のフロント゚ンドの別のIPを指定するだけで、すべおが機胜したす。


ここでの問題は、登録したサヌバヌが機胜しおいるかどうかをDNSが認識しないこずです。 壊れたIPを返さないようにDNSを教える堎合でも、DNSキャッシュはただあり、さたざたなプロバむダヌからの曲がったキャッシュなどがありたす。 䞀般に、DNSをすばやく倉曎するずいう事実に䟝存しないでください。 珟実には、登録されおいるDNSのTTLが䜎い堎合でも、クラむアントは䟝然ずしおデッドIPに䟵入したす。


DNSに登録する耇数のサヌバヌ間で単䞀のIPアドレスが共有される堎合、䞀般に共有IPず呌ばれるテクノロゞヌがありたす。 VRRP、CARPなどのプロトコルの実装 ただそれを行う方法をグヌグル、それは明確になりたす。


ここで問題は䜕ですか プロバむダヌのサヌビス提䟛者は、䞡方のサヌバヌが同じむヌサネットセグメントに属しおいるこずを確認しお、サヌビスハヌトビヌトなどを亀換できるようにする必芁がありたす。


そしおただ-これは負荷分散を提䟛したせん、すなわち バックアップサヌバヌは垞にアむドル状態になりたす。 ゜リュヌションは簡単です-2぀のサヌバヌ、2぀のIP、1぀のマスタヌを1぀、もう1぀のマスタヌをもう1぀䜿甚したす。 そしお、圌らはお互いを保蚌したす。 そしお、私たちはDNSで䞡方を芏定しおおり、すべおが順調です。




これらのサヌバヌの前にルヌティングを行うこずができる䜕らかの皮類のルヌタヌたたはその他のネットワヌクハヌドりェアがある堎合、Ciscoにそのような単玔なヒント、たずえば同等のルヌトを蚘述し、次の堎合に䜕らかの方法でこれらのルヌトがハヌドりェアから削陀されるこずを確認できたすサヌバヌがダりンしおいたす。 ゞュニパヌの堎合、これはBFDdを䜿甚しお実行できたす。 しかし、䞀般的に、これらの単語はグヌグルで習埗できたす。




これは、シスコを通じおどのように機胜するかです。 これらは蚭定の䞀郚です。 1぀のIPアドレスをアナりンスし、1぀のサヌバヌず別のサヌバヌを通る2぀のルヌトがありたす。 ロヌバックむンタヌフェむスの各フロント゚ンドでタヌゲットIPがハングしたすか どういうわけか、チェックをチェックするロゞックが提䟛されたす。 シスコ自䜓は、ルヌタのステヌタスを確認できたす。たずえば、NginxポヌトのCB接続などを確認したり、単にpingを実行したりできたす。 ここではすべおが簡単です。小さなプロゞェクトの誰かが自分のルヌタヌを持っおいる可胜性は䜎いです。




私たちが行うこずはすべお、監芖ずずもにカバヌする必芁がありたす。なぜなら、それ自䜓が予玄されおいるずいう事実にもかかわらず、システムで䜕が起こっおいるのかを理解する必芁があるからです。


フロント゚ンドの堎合、ログ監芖は非垞にうたく機胜したす。 モニタリングはログを読み取り、ヒストグラムを䜜成し、ナヌザヌに䞎える゚ラヌの数ずサむトの動䜜速床を確認し始めたす。




この写真に぀いおは非垞に瀺唆的です。 サむトぞの1秒あたりyリク゚ストが衚瀺されたす。 この堎合、1秒あたり玄500件の芁求が来おいたす。 通垞の状況では、䜎速の芁求赀でマヌクされおいるがありたす。これらは凊理に1秒以䞊かかる芁求です。 緑色のものは500ミリ秒よりも高速なものであり、黄色のものは䞭間のものであり、黒色のものぱラヌです。 ぀たり すぐにあなたのサむトがどのように機胜するかを芋るこずができたす-5分前かどうかのように。 ここには2぀の赀いバヌストがありたす-これらは単なる問題です。 これにより、サむトの速床が䜎䞋し、ナヌザヌリク゚ストの30〜40が鈍くなっおいたした。




合蚈するず、これらのメトリックに埓っお、サむトの動䜜-良いか悪いかを明確に瀺すアラヌトを構成できたす。 たずえば、このようなしきい倀は次のずおりです。 ぀たり 1秒あたり200のリク゚ストがあるサむトで1秒あたり10を超えるリク゚ストがある堎合、これは重倧なアラヌトです。 1秒を超える、5を超える遅い芁求の割合が蚱容される堎合、これも重芁なアラヌトです。


そのため、サむト党䜓を監芖でカバヌしたした。 さお、サむト党䜓ではなく、原則ずしお、サむトの状態であり、䞀般的には先に進むこずができたす。




党䜓ずしお、このレむダヌでは、フロント゚ンドずその䞊のサヌビスが動䜜しおいるかどうかを確認する方法に沿っお、フロント゚ンドを予玄するこずで、䜕らかの圢で2぀の問題を解決したした。 2぀の問題を解決したしたが、3番目の問題は解決できたせん。これは、意思決定の際にメトリックに䟝存する必芁があるため、難しいためです。 私たちはそれを監芖するだけです。問題がある堎合は、私たちの手で理解したす。 これは䜕もないよりも10倍優れおいたす。




どうぞ バック゚ンド。 バック゚ンドは䜕ですか 原則ずしお、いく぀かのリポゞトリ、デヌタベヌスからデヌタを収集、受信し、䜕らかの方法でそれらを倉換し、ナヌザヌに応答したす。 したがっお、誰かを埅っおいるずきにリク゚ストの䞀郚がありたす。 䜕かを蚈算するずき、たずえばテンプレヌトをレンダリングし、ナヌザヌに答えを返すだけの郚分がありたす。




私たちはリスクを曞き留めたすハヌドりェアの䞀郚が壊れ、サヌバヌ自䜓が死に、バック゚ンドがデヌタを取埗するサヌビスに問題がありたす。 私たち自身が十分なリ゜ヌスを持っおいないずいう事実のために、デヌタベヌスは銬鹿げおおり、䜕か他のものは銬鹿げおいたす。 曞きたしたが、すべおではないかもしれたせんが、おおよそのアルゎリズムを瀺したす。




私たちは考え始め、閉じたす。


バック゚ンドは、ステヌトレスを実行し、ナヌザヌセッションをディスクなどに保存するこずをお勧めしたす。 したがっお、バランシングタスク、぀たり 次のナヌザヌリク゚ストの送信先を心配するこずはできたせん。 鉄片をいく぀か入れお、フロント゚ンドでバランスを取るこずができたす。




各バック゚ンドに察する倚数のリク゚ストから身を守るには、バック゚ンドのパフォヌマンス制限ずは䜕かを理解し、その制限を蚭定する必芁がありたす。 蚭定可胜なapacheに制限があるず仮定したす。たずえば、「私は200の同時リク゚ストのみを取埗し、それ以䞊は取埗したせん。 さらに来た堎合は、「503」を指定したす。これは、リク゚ストを凊理できなくなったずいう明確なステヌタスです。 したがっお、リク゚ストを別のサヌバヌに送信できるこずを、バランサヌたたはフロント゚ンドの堎合に瀺したす。 したがっお、過負荷に悩たされるこずはありたせん-システムが完党に過負荷になっおいる堎合、ナヌザヌに「503」を䞎える-「おい、できたせん」のような明確な゚ラヌ これは、すべおのク゚リが退屈でハングアップするのではなく、顧客は䜕が起こっおいるのかたったく理解しおいたせんでした。


たた、誰もが忘れる瞬間。 急速に開発されおいるプロゞェクトでは、すべおのタむムアりトのチェックを忘れおいたす。 タむムアりトを蚭定したす。 バック゚ンドの入力がmemcachedデヌタベヌスの倖郚のどこかに行く堎合、答えを埅぀量を制限する必芁がありたす。 氞遠に埅぀こずはできたせん。 あなたは、䟋えば、postgressの応答を期埅しお、それに接続し、いく぀かのリ゜ヌスを䜿甚し、時間内に萜ちなければなりたせん「それで、もう埅぀こずができたせん」ず蚀っお、2階で゚ラヌを出したす。 したがっお、すべおの操䜜が進行䞭であり、䜕が起こっおいるのか理解できないため、すべおが愚かでログに䜕もない状況を陀倖したす。 タむムアりトを制限し、それらに非垞に敏感である必芁がありたす。そうすれば、より管理しやすいシステムになりたす。




バランス。 この堎合、簡単です。 フロント゚ンドにNginxがある堎合は、単にいく぀かのアップストリヌムを芏定したす。 タむムアりトに぀いおも-LAN接続の堎合、タむムアりトは秒ではなく、数十ミリ秒、たたはそれ以䞋である必芁がありたす。状況を確認する必芁がありたす。 どのような堎合に近隣サヌバヌぞのリク゚ストを繰り返すかを蚀っおください。 嵐が発生しないように、再詊行の回数を制限したす。 倧きな問題は、デヌタ倉曎芁求、投皿などを取埗するかどうかです。 ここで、Nginxの最新バヌゞョンでは、デフォルトでPOSTなどのリク゚ストを再詊行したせん。 べき等の芁求ではありたせん。 そしお、これは原理的には良いこずです。誰もがこのペンを長い間埅っおいお、぀いに登堎したした。 投皿を远跡する堎合は、他の動䜜を蚭定できたす。




バック゚ンドに぀いお-同時に監芖でカバヌしようずしおいたす。 プロセスが生きおいるかどうか、リッスン゜ケットが開いおいるかどうか、サヌビスがサヌビスするのを埅っおいるかどうか、ステヌタスを確認する特別なハンドルに応答するかどうか、サヌビスがリ゜ヌスを消費する量、CPUをどれだけ䜿甚するか、どのくらい䜿甚するかを理解したい圌は、スワップにどれだけ座っおいるか、開いた蚘述子ファむルの数、ディスクでの入出力操䜜の数、断片、トラフィックなどにメモリを割り圓おお、より倚くを消費するか通垞どおりに消費するかを理解したした。 これを理解するこずは非垞に重芁であり、前の期間ず比范するために時間内に理解するこずが重芁です。


Javaの特定のランタむムメトリックは、ヒヌプ状態、メモリプヌルの䜿甚、ガベヌゞコレクション、断片化された数、占有秒数、1秒あたりの数などです。


Pythonには独自のものがあり、GO'shkiには独自のものがあり、ランタむムに関連するすべおのものには独自の別個のメトリックがありたす。




バック゚ンドが䜕をしおいたか、受信したリク゚ストの数を理解する必芁がありたす。 ログでそれを撃぀こずができ、statsdでそれを撃぀こずができ、各リク゚ストのタむミング、特定のリク゚ストに費やされた時間、゚ラヌの数を理解する必芁がありたす。 これらのメトリックスの䞀郚は、バック゚ンドのクラむアントずしお機胜するため、原則ずしおフロント゚ンドを参照し、ミスがあったか通垞の回答があったかを確認したす。 圌は、答えをどれだけ埅っおいたかを芋おいたす。 倖郚にあるすべおのサヌビスを埅機しおいたバック゚ンドの数、぀たり これはベヌス、memcached、nosqlであり、キュヌで動䜜する堎合、タスクをキュヌに入れるのにどれくらい時間がかかりたしたか。 たた、たずえば、テンプレヌトのレンダリングなど、CPUのいく぀かの有圢郚分にかかる時間。 ぀たり 「このようなテンプレヌトをレンダリングしたすが、3ミリ秒かかりたした」ずいうログに曞き蟌みたす。それだけです。 ぀たり これらのメトリックを確認しお比范できたす。




これは、プロゞェクトの1぀でCPU䜿甚率rubyを枬定する方法の䟋です。 これはすべおのホストの抂芁チャヌトです。ここには9぀のバック゚ンドがありたす。 ここでリ゜ヌスが異垞に消費されおいるかどうかはすぐにわかりたす。




たたは、リク゚スト凊理段階ずしたしょう。 ここでは、暙準化のために時間の3分の1が費やされ、枬定されたした。 残りは玄3分の1で、ベヌスずキャッシュを埅機しおいたす。 爆発したかどうかはすぐにわかりたす。 ここで、䞭倮に倖れ倀があり、キャッシュが鈍くなったずき、別のバヌストではベヌスが鈍った、たずえば黄色です。 誰が責任を負うかはすぐに明らかになり、長い間䜕かを探す必芁はありたせん。




合蚈、バランサヌがこのホストでバランスをずるのをやめ、問題がないため、鉄の故障でケヌスを閉じ、サヌビスが終了するようにケヌスを閉じたした。 デヌタベヌスやその他のリ゜ヌスが愚かであるケヌスを監芖したした。なぜなら、枬定し、゚ラヌの数を枬定したからです。 リ゜ヌスの消費を枬定し、たずえば、レンダリングが遅い堎合、CPUプロセスがどれだけ増えたか、そこ、ルビヌ、たたはその他のものになっおいるこずを確認したす。 これも監芖しおいたす。 原則ずしお、すべおが管理されおいたす。 リク゚ストの数が増えたため、制限や制限により閉鎖されたため、ここでは原則ずしおすべおが悪くはありたせん。




デヌタベヌスによるず。 圌女の仕事は䜕ですか デヌタを保存したす。぀たり、原則ずしお、デヌタストレヌゞの䞭心点はベヌスです。 nosqlかもしれたせんが、ただ考慮に入れおいたせん。 ナヌザヌからのリアルタむムリク゚ストに応答したす。 バック゚ンドからナヌザヌが埅っおいるペヌゞたで、ナヌザヌは䜕らかのリク゚ストの分析凊理、぀たり どこかであなたの冠が倜に働く、あなたがそこで働いた量などを蚈算したす。




ベヌスはどうなりたすか い぀ものように-鉄片が壊れた、どこにも鉄片が壊れた。 ちなみに、すべおの予備品などがあるにもかかわらず、あなたのハヌドりェアが氞久に動䜜するこずを圓おにするこずはできないずいう統蚈によるず、垞にこのリスクを蚱容する必芁がありたす。


腺によるデヌタの損倱、単䞀のコピヌにデヌタがあり、ガゞェットが死んだずき、私たちは皆倱われたした...ガゞェットが生きおいお、いく぀かの削陀が来たか、デヌタが䜕らかの圢でクラッシュしたした-これは完党に別のリスクです。


サヌビスは消滅したした。postgressはoom killerたたはmysqlに打ち負かされたした-これが起こっおいるこずを䜕らかの圢で理解する必芁もありたす。


原則ずしお、CPUやディスクなどに察応できないほど倚くのリク゚ストをデヌタベヌスに送信した堎合のリ゜ヌス䞍足によるブレヌキ。


たずえば、掚定よりも10倍倚くのリク゚ストを送信したずいう事実のために、たずえば、䞀郚のトラフィックがそこに送信された、など。


ク゚リ曲線によるブレヌキ-むンデックスを䜿甚しない堎合、たたはデヌタが䜕らかの圢で間違っおいる堎合、ブレヌキもかかりたす。




これで䜕かを詊しおみたしょう。


レプリケヌション。 レプリケヌションは垞に必芁です。 レプリケヌションを省くこずができるケヌスは実際にはありたせん。 それを取埗し、マスタヌスレヌブモヌドの別のサヌバヌで蚭定するだけで、他に発明する必芁はありたせん。


ほずんどのプロゞェクトの䞻な負担は読曞です。 原則ずしお、サむトの安定した安定した運甚のみを確実に読み取れば、䞊叞たたはあなたは非垞に幞せになりたす。 これはすでに、萜䞋するよりも䜕もないより100,500倍優れおいたす。




レプリケヌションラグの圱響を受けないすべおのSELECTをすぐにレプリカにロヌドできたす。 これは䜕ですか デヌタはすぐにはレプリカに届きたせんが、さたざたな理由に応じお、チャネルの垯域幅から始たり、そこでブロックされるレプリカの量で終わる䞀定の遅延がありたす。 匿名ナヌザヌが芁求する芁求、状態、たずえばディレクトリは、レプリケヌションラグの圱響を受けたせん。 デヌタが遅れ、ナヌザヌが叀くなった堎合、䜕も悪いこずは起こりたせん。 そしお、ナヌザヌがプロファむルに蚘入し、フォヌムで送信を抌し、ただ倉曎されおいないデヌタを芋せたら、それをレプリカから取埗したずしたしょう。これは問題です。 この堎合、りィザヌドでSELECTを実行する必芁がありたす。 ずにかく、ほずんどの負荷はキュヌに送られたす。 たた、レプリカがあるこず、遅れおいるこずをアプリケヌションに教える必芁がありたすが、フォヌルトトレランスに加えお、読み取り操䜜の負荷に察するスケヌリングの問題を解決したす。


レプリカにアクセスするために、たくさんのレプリカを眮くこずができ、梚を砲撃するのず同じくらい簡単です。 これらのレプリカぞの着信芁求のバランスをずるか、アプリケヌションに10個のレプリカがあるこずを知らせるこずができたす。 これは非垞に耇雑であり、私が理解しおいるように、暙準ツヌルずあらゆる皮類のフレヌムワヌクはこれを行う方法を知らないので、少しプログラミングする必芁がありたす。 しかし、あなたはバランスを取る機䌚を埗お、埌戻りをしたす。 ナヌザヌリク゚ストを行い、たずえばレプリカがバランサヌの背埌にある堎合、゚ラヌたたはタむムアりトが発生したす。同じデッドサヌバヌに到達する可胜性があるため、詊すこずはできたせん。 したがっお、バック゚ンドに玄10個のレプリカを知っおもらうこずができたす。レプリカの1぀が嘘を぀いおいる堎合、もう1぀を詊しお、もし生きおいる堎合ぱラヌなしでナヌザヌに答えおください。 これは、このような小さな問題を䞀掃するこずです。 アップタむムでも動䜜したす。


マスタヌが死んでいお、レプリカがある堎合の察凊方法を理解する必芁がありたす。 最初に、切り替えるこずを決定する必芁がありたす。




あなたのサヌバヌが死んで、パニックがあり、3幎ごずに死んでいるずしたしょう。 その埌、圌を募集し、圌が昇るたで埅っお、切り替えでこのゎミをすべお開始しないこずが、より䟿利です。なぜなら、無料ではなく、時間がかかり、非垞に危険です。


それでも切り替えるこずに決めた堎合は、バック゚ンドをレプリカに再構成したす。 レコヌド党䜓をレプリカの1぀に送信したす。 これが通垞のデヌタベヌスpostgressの堎合、レプリカモヌドでは、すべおの倉曎芁求、挿入、曎新などに゚ラヌを返したす。 そしお、それは重芁ではありたせん。 次に、必芁に応じお、マスタヌからレプリカたですべおが終了するたで埅ちたす。 圌が生きおいれば。 圌が無生物のようであれば、埅぀こずは䜕もない。


マスタヌが生きおいれば、垞にマスタヌを獲埗したす。 ぀たり 誰かが無効になった叀いマスタヌに曞き蟌みを行い、デヌタを倱わないような事件が発生しないように、それを終了するこずをお勧めしたす。 したがっお、スレヌブをマスタヌにアップグレヌドしたす。 これは、デヌタベヌス管理システムの゜リュヌションごずに異なる方法で実行されたすが、合理化された手順がありたす。


ただレプリカがある堎合は、それらを新しいマスタヌに切り替える必芁があり、叀いサヌバヌをどこかに接続する堎合は、レプリカずしおオンにしたす。




党䜓ずしお、私たちは䜕が起こっおいるのかを倧たかに怜蚎し、私の意芋では、私たちが蚀ったのはかなり銬鹿げた操䜜であり、個人的にはマシンでそれをしたくありたせん。 リスクはありたせん。 より良いアむロンを切り替えお賌入したりレンタルしたりする必芁がある可胜性を最小限に抑えるこずをお勧めしたす。 ぀たり マスタヌが死んでいる可胜性を愚かに枛らしたす。


りィザヌドを段階的に切り替える方法に関する指瀺を必ず曞いおください。 これは、ストレスの倚い状況にある午前4時に眠っおいる人によっお行われるべきであり、サむトに関連するビゞネスを持っおいたす。圌は自分が䜕をしおいるのかを考えるのに苊劎する必芁はありたせん。 もちろん、圌は働くためにバレンキを雇わず、脳を最小限に抑える必芁があるず考えなければなりたせん。 それはストレスの倚い状況だからです。


この指瀺を必ずテストしおください。 テストされおいない呜什は呜什ではありたせん。 したがっお、呜什をテストし、挔習を手配したす。 私たちは指瀺を曞き、マスタヌを削枛し、蚓緎したす。指瀺に埓っおすべおを厳密に行い、途䞭で䜕も発明したせん。 うたくいかない堎合は、すぐに指瀺に远加したす。


途䞭で、時間を枬定したす。 30分たたは15分で同様の問題に察凊できるようにするため、たたは人が到着しおラップトップを開いおから抌し出しお運転した埌、合蚈ダりンタむムが1.5分になるように時間を枬定する必芁がありたす。


次回、指瀺を倉曎した堎合は、繰り返し緎習する必芁がありたす。 ダりンタむムであるこずが刀明した時間に満足できない堎合は、それを䜿甚しお、いく぀かのステップを最適化しお、どこかでファむルの䞊列コピヌを提䟛するなどを詊みるこずができたす。 ステップを芋るずき、各ステップにかかる量を枬定し、ある皮の最適化をかき立おたす。




それずは別に、レプリケヌションがバックアップではないずいうキャプテンのこずは泚目に倀したす。 デヌタを匷制終了するリク゚ストを受け取った堎合、それもレプリカに送られ、すべおが倱われたす。 デヌタをたったく保存する必芁がある堎合は、バックアップする必芁がありたす。


バックアップも、デヌタベヌスごずに異なる方法で実行されたす。 完党バックアップがあり、通垞は1秒ごずではありたせん。先曞きログたたはbinログなどを䜿甚しお、毎日のダンプたたはデヌタファむルの毎日のコピヌをキャッチできるバックアップの可胜性がありたす。これらのbinログは慎重に偎にコピヌする必芁がありたす。


繰り返したすが、これたでに䞀床も展開したこずがなく、ベヌスを埩元しなかったバックアップはバックアップではなく、䞀定の確率であなたを救うこずができるが、事実ではないため、垞にリカバリをテストする必芁がありたす。 。


, , , , — . , . ぀たり , , , , . , , -, , ?




— , , , , , , / , , listen socket, .


, 5 . . - , - , postrgess , CPU, . - , , , , 500 , , , , ? - , , , . , , , , , , CPU, .


— . , — , — , . , -, 1 — . , , .. . , - , .




postgress . — - . , , , , ..




. ぀たり , , -, - , 800 , 50 .




.


- delete' — , , . , .


, , — , , read only .


- — . - . , . - .


, , 3 , , 5 , 8 . , . , , « 15 » — , , .




memcached, , , . memcached , .


, . ぀たり , , , 10 , .




, , , , memcached, - - - . .




emcached , , . - , . , -, , , , , . , , memcached , , , .


, , , , , , , , , , , , , , . , . , , , expire, , , - .




, , . , , , memcached , ? , , , , , , n , . , , , memcached? , , , , . , . ぀たり , , — , , ?


, . ぀たり - , , , , , , ? , , .




memcached , .. , - , , - . , , 98% , .




. , , memcached, latency 
 , -, , . , - — , . . . memcached , , , - .


— . , .




. ? - , , - , . , Message Queue. publisher — , , consumer — , - ..




.


. «», , -, .


, , 2 . — , .


— , .


, publisher , , , - , , , , , , .


- .




, , .. — , — . , , , , , . . , . -, , , , , , , , - .


, , , , , 3 , , , -.




, , , . , 10 . . ? . ぀たり , , , . , , , , , , , . , , , - , , , . , , .


, ?




, , , — , ? , .. , , , , , - , -.




— , .. , , .




— , .. . , , , ..




たずめるず。 , . , , - , - , , , .




20 . . 月あたり。 , , , - — , .. uptime . , , , — , , .




. — . , , , , , . Load Balancing, . , — . , 5 , - SLA .


, . , , CPU, , — , . , — , , , , , -, , , , , . , , , , .




それにもかかわらず、デヌタセンタヌのクラッシュから身を守りたい堎合、ここではすべおがたったく同じです-バックアップグランドを別のデヌタセンタヌに眮き、そこに耇補を構成し、そこに新しいコヌドを展開する必芁がありたす。バック゚ンドに぀いお話しおいる堎合は、そこに静的ファむルをアップロヌドする必芁がありたす。たあ、いく぀かのDCのサヌバヌで䜜業するだけです。デヌタセンタヌが停止しおいる堎合は手動DNSを切り替えるか、既にルヌティング、BGP、およびアドレスブロックを䜿甚しお、フォヌルトトレラントなトラフィックを䜜成できたす。




今日お話ししたすべおをたずめたす。


最も重芁なこずは、リスクを理解するこずです。 リスクを曞き出すだけで、今は䜕もできたせんが、リストがあれば、これはすでに非垞に良いこずです。 リスクが非垞に単玔で非垞に簡単であるため、今すぐ5分以内に閉じるず、リストが瞮小され、芚えおおく必芁のある問題が少なくなりたす。 シナリオが耇雑な堎合は、このリスクが発生する可胜性を枛らしおみおください。できない堎合は、この問題の䞀郚を閉じお、それが絶察に銬鹿げおいる堎合は、手動介入に任せ、手動介入を自動化する堎合は、その埌、指瀺を曞き、挔習を行いたす。


したがっお、蚈画がある堎合は、フォヌルトトレランスに既に飜きおいたす。 残りはすべお最適化ずダりンタむムの削枛です。




連絡先


ニコラむ・シノコ、 nsv @ okmeter.io Habréのokmeter.io 䌚瀟のブログ 。


远加情報


情報が足りたせんか それずも、ニコラスのこれらのヒントやその他のヒントをどの時点で぀なぐかが明確ではありたせんか これらすべおは、9月6日にロヌマむノリ゚フのマスタヌクラスで詳现に分析したす。

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


All Articles