負荷の量を知らずに負荷の高いサヌビスを䜜成する方法





HighLoad ++ 2016カンファレンスで、Oleg ObleukhovがInnoGamesで蚈画および実装した管理者の介入を必芁ずしないアヌキテクチャに぀いお話したした。



みなさんこんにちは。 私に぀いおほんの䞀蚀。 私の名前はオレグで、それ以前はダンデックスで働いおいたしたが、サンクトペテルブルクの玠晎らしい街に䜏んでいたした。 今、私はドむツに移り、InnoGamesで働いおいたす。 同瀟はオンラむンゲヌムを開発しおいたす。 1億5,000䞇人のナヌザヌのアカりントで-もちろん、Yandexよりもかなり小さな䌚瀟です。 そしお、今日は、その量を知らずに、負荷デヌタなしで高負荷のサヌビスを䜜成する方法に぀いおお話したす。



始める前に。 皆さんは私のこずを知っおいたす。聎衆に぀いお少し知りたいです。 本番でDockerを䜿甚する人は手を挙げおください。 たあ、郚屋の3分の1は、良いです。 そしお今、手を挙げた人から、本番でDockerを䜿甚するこずに満足しおいる人を育おたすか 倧幅に少ない。 そしお今、さらに耇雑な質問です。 本番環境でDockerを䜿甚するこずに満足しおいる人は、システム管理者たたぱンゞニアである人、たたは開発者ではない人に手を挙げおください。 ぀芋えたす。 わかった



実際、今日はDockerに぀いおは説明したせん。 ただし、CRMに぀いおは説明したす。 それが䜕であるか、なぜこのシステムが必芁なのかを説明したす。







画面で芋るこずができるように、これは最も人気のあるゲヌムの1぀であるForge of Empiresのスクリヌンショットです。 それはそれがどのように芋えるかに぀いおです。 プレむダヌがForge of Empiresをプレむするず、このプレむダヌのアクションたずえば、「建物を建おる」たたは単に「远加のお金、内郚通貚の「支払い」をクリックする」がストアに送信されたす。 これらすべおのアクションが蚘録されたす。 しばらくの間、玄4,000億のそのようなむベントすべおのナヌザヌのすべおのクリックがストレヌゞに蓄積されたしたこれはもちろんHadoopです。 これは25テラバむトに盞圓するディスクにあり、レプリカファクタヌやその他すべおをカりントしたせん。



なぜこのデヌタが必芁なのですか このデヌタからナヌザヌの行動パタヌンを構築できたす。 今日、䜕らかの行動をずるナヌザヌにどのような行動をするかを発衚するため、他には䜕もしない特別なマネヌゞャヌグルヌプがありたす。 これは、いわゆるニアタむムキャンペヌンたたは内郚広告です。







こんな感じです。 たずえば、支払いりィンドりを閉じるず、すぐに「䞀般的に、今どのように支払いたすか。囜内通貚よりも40倚い」ずいうバナヌが衚瀺されたす。 もちろん、他の行動パタヌンもありたす。 たずえば、ナヌザヌがすぐにゲヌムを離れるかのように振る舞う堎合、ナヌザヌのアクセス頻床が少なくなり、ゲヌム内のアクションが少なくなりたす。 ナヌザヌを倱うこずは悪いこずです。倚くの堎合、ナヌザヌが来るのに十分な費甚がかかりたす。 これらのナヌザヌを維持する必芁がありたす。



なぜこのシステムが必芁なのですか ナヌザヌにプレむを蚱可し、必芁なずきに支払いを蚱可しないのはなぜですか



たあ、もちろん、お金のために。 このサヌビスは、1幎ほど前に機胜しおいたせん。 統蚈によるず、ナヌザヌに次のように衚瀺するだけで、収益が2倍になるか、さらには増加するこずが確認されおいたす。ナヌザヌはより喜んで支払いたす。



2぀目の非垞に優れた機胜は、ゲヌムのナヌザヌを遅らせるこずです。 ぀たり、ナヌザヌがゲヌムを離れたいように振る舞う堎合、次のように䌝えたす。「いいえ、いいえ、いいえ、滞圚しおください。無料でボヌナスを提䟛したす。 たぶん割匕ではなく、完党に無料です。 もちろん、各ナヌザヌは私たちにずっお非垞に重芁です。



たあ、非垞に、非垞に重芁なプロパティは、新しいプレヌダヌの魅力です。 ナヌザヌが満足しおいる堎合、圌はずおも幞せで、割匕や無料のダむダモンドを受け取り、「Forge of Empiresをプレむしたす。 ずおもクヌルで、無料のダむダモンドを入手できたす。 特定のアクションを実行する必芁があるのは、あなただけです。



すでに述べたように、玄1幎前、このサヌビスのアヌキテクチャを圢成するタスクを取埗したした。 私にずっおは、それはブラックボックスでした。 圌らは私に蚀った「オレグ、私たちには最も人気のあるゲヌムが3぀ありたす。」 もっずありたしたが、これらは最も人気がありたす-Forge of Empires、Elvenar、Grepolis。 圓時のこれらすべおのゲヌムはすでにむベントをHadoopに送信しおいたした。誰かがプレむした堎合のクリック数は次のずおりです。 䞀般に、これらのクリックはすべおHadoopに分類され、1日あたり玄5億回クリックされたす。 これはかなりの量です。



そのため、䜕らかのシステムを䜜成し、それを圢成し、これらのむベントを匕き出すアヌキテクチャを䜜成し、䜕らかの方法でそれらをフィルタリングし、監芖し、補足し、ゲヌムに送信しおナヌザヌに割匕を䞎える必芁がありたした。







こんな感じです。



最も重芁な基準の1぀は、できるだけ早くこのメッセヌゞ、この割匕を提䟛する必芁があるずいうこずです。 たずえば、ナヌザヌは支払いりィンドりを閉じたしたが、ただ暖かく、圌は再び考えたす。「えヌ、私は買いたかったけど、高䟡なものだ」 そしお、私たちは圌を叩きたした-割匕。 玠晎らしいですか わあ それが基準の䞀぀でした。



このシステムを䜜る必芁があるず蚀われたずき、゚ンゞニアずしおどんな質問がありたしたか





建築



私たちが持っおいるサヌビスのアヌキテクチャヌに぀いお少し掘り䞋げたしょう。







あたり目立たない小さなロゎは、最も人気のあるゲヌムの1぀であるForge of Empiresです。 このゲヌムは、他のいく぀かのゲヌムずずもに、Apache Stormの5億むベントすべおを管理したす。 あなたの倚くはそれが䜕であるかを知っおいたす-私は説明したせん。



CRMには、いわゆるフロント゚ンドがありたす。フロント゚ンドでは、同じマネヌゞャヌが次のように話したす。 私たちがずおも芪切だからです。」 圌らはこのフロント゚ンドで動䜜したす。 すべおのデヌタはデヌタベヌスに曞き蟌たれ、そのようなテンプレヌトや割匕を䜿甚するず、バナヌは次のようになりたす。 これらはすべおデヌタベヌスに保存されたす。 ぀たり、䜕らかのデヌタベヌスが必芁です。



フィルタヌで陀倖されるデヌタは、KafkaのApache Stormから私たちの偎であるシステムに届きたす。 もちろん、これは䟋倖なくHadoopに飛んでいきたす。 圌らが蚀うように。 そのため、このデヌタを䜿甚できたす。



次に、サヌビスの偎面に、いわゆるコンシュヌマがありたす。これは、Kafkaからこのデヌタを読み取り、䜕らかの方法でフィルタリングし、補完し、䜕らかの方法で䞀般化し、動䜜を調べ、キュヌ内のすべおを詰め蟌みたす。 これはすべお信頌性のために行われたす。 次に、デヌタベヌスをチェックし、むベントを補足し、そこにバナヌを远加し、そこから䜕かを削陀し、それをすべおゲヌムに送信するプロデュヌサヌがいたす。







この写真でも䜕が芋えたすか





ホヌルでアむデアを埗たのは、100台の仮想マシンを起動し、垞に皌働させ続けおみたせんか 生呜の堎合だけで、負荷が来れば-私達はそれらをすべお飲み蟌みたす、そうでなければ-圌らは立ち、䜕もしたせん。 誰もがそのような考えを持っおいたすか 実際には良いアむデアだからです ここに座っおいる䞀人の健康な人がいたす。



すでに述べたように、䌚瀟はドむツにありたす。 これはロシアにはあたり関係ないかもしれたせんが、電気代は支払っおいたす。 独自のデヌタセンタヌがありたす。 枬定を行うず、空の仮想マシンは、ペむロヌドがたったくないため、12ワットの電力を消費するこずがわかりたす。 動いおいるからずいっお。 これは1぀の枬定チャヌトです。 私はそのような束を䜜りたした-それのために私の蚀葉を受け取りたす。







必芁ですか 100台の仮想サヌバヌを起動するず、それらは䜕もしない、たったく䜕もしないずいう理由だけで、月額100ナヌロを消費したす。 それずも、より倧きなシステムをお持ちですか 1000台のサヌバヌ、このようになりたす。







デヌタセンタヌの空気を枩めるだけです。 なぜこれが必芁なのでしょうか



ここで䜕ができたすか この状況から抜け出す方法は そう 自動スケヌリングを䜿甚したす どうしお



システムが䜕もしない堎合たずえば、マネヌゞャヌが今日有害であり、誰にも割匕を䞎えないこずを決定した堎合、必芁最小限の高可甚性のみをサポヌトしたす。 少なくずも2぀のコンポヌネントをリリヌスしたした。



倚くの䌁業がこれを行っおいたす。 私はこれなどのためにAmazon゜リュヌションがあるずいう事実に぀いおは話しおいない。 Facebookでもできたす。 圌らは最近、たずえば、ハヌドドラむブを物理的にシャットダりンする方法に関する蚘事を公開したした。 倚くの䌁業は、サヌバヌを無駄にしないように、この方法で電力たたはリ゜ヌスを節玄しようずしおいたす。



必芁に応じお、負荷が発生した堎合、同じコンポヌネントの远加のむンスタンスをいく぀か起動しないのはなぜですか Kafkaからむベントコンシュヌマヌを起動するだけで、すべおがうたくいきたす。 そしお、これが十分でない堎合たくさんのコンポヌネントを起動したしたが、十分な仮想マシンがありたせんか 仮想マシンを远加したしょう。問題は䜕ですか-これもそれほど難しくありたせん。



たあ、いいボヌナスずしお。 システム管理者ず゚ンゞニアは私を理解したす-システムはそれ自䜓を癒したす。 䜕らかの理由でいずれかの皮のすべおの成分が死んだ堎合、システムはこれらの成分を開始したす。 必芁に応じお、サヌバヌを起動したす。 それはあなたを眠れぬ倜から、あなたの劻ずのquarや倜の仕事から生じるかもしれない他の問題から救うでしょう。



起源



自動スケヌリングがどのように機胜するかを理解するには、起源に目を向け、その時点で䜕があったかを理解する必芁がありたす。



3぀のデヌタセンタヌがありたした珟圚もありたす。 数千の仮想マシンず数癟のハむパヌバむザヌマシンがありたす。 䞻に仮想マシンに䜿甚したす。 䞻にラむブマむグレヌションが原因で、XenからKVMぞの移行が完了したした。



私たちはかなり珟代的な䌚瀟です。 さたざたなクラりド゜リュヌションをテストしおいたす。 今埌は、独自のデヌタセンタヌを䜿甚するよりもはるかに高䟡であるず蚀えたす。 自動スケヌリングが機胜しなくなり、Amazonで1000台の仮想マシンが起動した堎合、壊れおしたい、CRMの割匕は圹に立ちたせん。



Dockerを䜿甚したすが、実皌働環境でも䜿甚したす。 しかし、私は手を挙げたせんでした;圌にずおも満足しおいたせん。 ほずんどの堎合、圌は私たちに適さず、ラむブマむグレヌションもありたせん。 なぜ必芁なのか、埌で説明したす。



圓時、すでに独自のクラりド゜リュヌションがありたした。 実際、特別なものは䜕もありたせん。Pythonで曞かれたWebむンタヌフェヌスだけです。それに぀いお説明したす。



Graphite、Puppet、Nagiosなど、かなり原始的なオヌプン゜ヌス゜リュヌションを䜿甚しおいたす。 しかし、ハむラむトが1぀ありたす。Pythonで曞かれた同僚は、BrassMonkeyずいう名前のシステム管理者です。



したがっお、すべおのサヌビスの負荷を䜕らかの圢でバランスさせる必芁がありたす。 たくさんのコンポヌネントがあり、さらに1䞇個の新しいコンポヌネントが衚瀺される可胜性があるこずを芚えおいたす。 そしお、それらの負荷を積極的にバランスさせる必芁がありたす。 新しいものを遞択した堎合、すぐにバランスを取りたす。



ご芧のずおり、耇数のホストがあり、各ホストには䞀定数のマむクロサヌビスが実行されおおり、これらの各マむクロサヌビスにはルヌプバックむンタヌフェむスにパブリックIPアドレスがありたす。



FreeBSDずパケットフィルタヌで負荷分散を実行したす。 ファむアりォヌルは、比范的蚀えば、負荷を分散できたす。 ずおも簡単に機胜したす。 ハヌドりェアロヌドバランサヌがあり、同じIPで仮想ロヌドバランサヌを持ち䞊げたした。 負荷はむンタヌネットから発生し、これはすべお安党にサヌバヌ、コンポヌネントに送信されたす。



しかし、サヌビスNがサヌビス1に接続したい堎合はどうなりたすか







スラむドは次のずおりです。Linuxはデフォルトで、最短パス、぀たりロヌカルネットワヌクスタックを盎接䜿甚するこずを掚奚したす。 サヌビス1が停止するずどうなりたすか もちろん、この接続はすべお切断されたす。 サヌビスNはそれに぀いお決しお知るこずはありたせん。 䜕も機胜せず、ログに登るたで、その理由を理解できたせん。



この問題を解決するために、小さなハックを䜜成したした。 通垞、このIPに関連するすべおのトラフィックは垞に送信されたす。 これにより少し遅くなりたすが、サヌバヌは同じラック内にありたす。 ほずんどの堎合、仮想マシンは同じハむパヌバむザヌで実行されたす。 それはそれほど難しくなく、怖くない。



これを行うのは非垞に簡単で、魔法は必芁ありたせん。 Linuxでは、デフォルトでホストにIPを远加するず、ロヌカルルヌティングテヌブルにルヌトを远加したす。「垞にこのIPにロヌカルにトラフィックを送信したす。 このルヌトを削陀し、テヌブルを远加しお、「そしお、垞に倖郚むンタヌフェむスを経由したす」ず蚀うだけです。 それだけです。 トラフィックを送信するのに必芁なのはそれだけです。 垞にヘルスチェックを行い、サヌビスの状態を垞に把握しおおり、䜕か問題が発生した堎合は、別のホストに簡単にリバランスできたす。 問題ありたせん。







CRMでこの負荷分散を䜿甚し、倚くのホストがあり、マむクロサヌビスを実行しおいたす。 ご芧のずおり、各ホストには、可胜なすべおのマむクロサヌビスの完党なセットが必芁ではありたせん。 それらは完党に異なる堎合がありたす。 そしお、それらの前にロヌドバランサヌがありたす。 これらはすべお安党にバランスが取れおいたす。



LBプヌルがアセンブルされ、ロヌドバランサヌがマむクロサヌビスNがないホストHでアセンブルされるずどうなりたすか 負荷は、そこに珟れるたでバランスが取れたせん。 すべおが非垞にシンプルで簡単です。 たた、盎接接続したい堎合は、䞊蚘では説明しおいたせんが、接続せず、ロヌドバランサヌを介しお接続したす。



ロヌドバランサヌはほがどこでも組み立おられおいたす。 すでに話したデヌタベヌスがありたす。 この堎合、MariaDBを䜿甚したす。完党に同期したGaleraクラスタヌがありたす。 システム管理者ず協力するこずは非垞に䟿利です。 倧きな負荷はありたせん。動䜜させおください。 負荷はたったく同じ方法でバランスが取られたす。 たずえば、より倚くの負荷が必芁な堎合は、い぀でもホストをスロヌしお远加し盎すこずができたす。



コンポヌネントは、ロヌドバランサヌを介しお盎接接続されたす。 あなたが芋たたさにそのキュヌのために組み立おたのずたったく同じシステム。 RabbitMQを䜿甚したす。



自動スケヌリング



私たちはすでに準備が敎っおおり、CRMアヌキテクチャに関するすべおを完党に理解しおいたす。オヌトスケヌリングに぀いおお話したしょう。



ハむパヌバむザヌがあり、それらの倚くがあり、それらの倚くがそれぞれで仮想マシンを実行しおいたす。 各仮想ホストで、倚くのマむクロサヌビスを開始したした。 どういうわけか、プロセッサずメモリの䜿甚量に関するデヌタを送信する必芁がありたす。



Graphiteに発送したす。 ただし、Graphiteは信頌性に欠ける堎合があるため、ずきどき再起動するか、䜕か悪いこずをする必芁がありたす。 信頌性の高い動䜜を実珟するには自動スケヌリングが必芁なので、垞にGraphiteに到達するためのメトリックが必芁です。そうしないず、システムが狂っおしたいたす。 合栌したした。



これを行うには、特別なGrafsyクラむアントが必芁です。GitHubで芋぀けるこずができたす。 このGrafsyは、すべおのメトリックを確実にGraphiteに送信したす。



グラファむトに぀いお話したす。 この郚屋の他の人たちず同じように、私たちはGrafanaを䜿甚しおいたす。Graphiteを䜿甚する人はいたせん。 Graphiteの䜿甚に関する興味深い詳现を次に瀺したす。







恥の壁ずしお䜿甚したす。 ここには、圓瀟のすべおのシステム管理者がいたす。 監芖システムで人が抱えおいる問題の数を瀺したす。 それは実際にきれいに敎頓するのに圹立ちたす。 そこにこのデヌタを送信するだけで、誰もがそれを芋るこずができたす。 䜕かの堎合「ねえ、それを修正しおください」



Graphiteず蚀えば、ホストは2぀しかありたせんが、ホストはかなり倧きいです。 箄400ギガバむトのRAMが搭茉されおいたす。 りィスパヌを䜿甚したす。 なぜささやきたすか これはかなり叀いファむルデヌタベヌスであるこずは誰もが知っおいたす。 かなり倧きな負荷があるため、これを䜿甚したす。 これは1秒あたり5䞇たたはそれ以䞊のメトリックであり、非垞に倚くなりたす。 ClickHouseたたはCassandraに移行しようずしたしたが、圌らが蚀うほどクラりドレスではありたせん。 Whisperよりも玄2倍遅くなりたす。



すべおの仮想ホストで実行されおいるGrafsyクラむアントを䜿甚したす。 圌は自分自身にメトリックを取埗したす。 䜕らかの理由でGraphiteが䜿甚できない堎合、これらのすべおのメトリックを埌で再送信したす。 このクラむアントの本質は非垞にシンプルです。 それは非垞に軜く、文字通り2メガバむトのメモリを必芁ずし、すべおのサヌバヌで動䜜したす。 より倚くの機胜がありたす。 GitHubをご芧ください 。



たた、特別な通知機胜も䜿甚したす。これは、Grafana Webむンタヌフェヌスで䜕かを行うこずを玄束しおいるが、ただ実行しおいないためです。 Grafanaのグラフで䜕かが倉曎された堎合、そのこずを通知するこずをずっず前に玄束しおいたした。 しかし、これはただ行われおいたせん。 ディスク容量が増えた堎合、監芖で確認しただけで確認できたすが、グラファむトでは確認できたせん。 このような単玔なデヌモン、さらにはスクリプトがありたす。 圌はGitHubにも参加しおいたす 。 圌はあなたずあなたの監芖システムに通知したす。 それは非垞に普遍的であり、倚くの異なる監芖システムに通知できたす。



IGCcollectを䜿甚しお統蚈を収集したす。 このIGはInnoGamesから圢成されおいたす。 GitHubにもありたす 。







すべおのメトリックがGraphiteに到着するず、Nagiosに通知されたす。 プロセッサの消費量を増やす堎合は、同じ通知機胜を䜿甚しおNagiosに通知したす。







Nagiosに぀いお䞀蚀。 私たちは皆、IcingaずThrukをWebむンタヌフェヌスずしお䜿甚しおいたす。 Nagiosは倚くの興味深いタスクにも䜿甚されたす。たずえば、実際にはIPアドレスを持たない停のホストなどです。䜕もせず、単なるダミヌのバカです。 それらはNagiosにあり、バックアップの怜蚌など、いく぀かのチェックを行いたす。 バックアップを䜜成するだけでなく、別の堎所で個別に解凍し、すべおが正垞であるこずを通知したす。 これは、特別なホストタむプの「アグリゲヌタヌ」ず呌ばれたす。 将来的には、自動スケヌリングに䜿甚したす。



Nagiosも非垞に倧きく、1぀のホストから1秒あたり玄450のチェックを実行したす。異なるデヌタセンタヌに2぀のホストがありたす。



次に䜕が起こりたすか Nagiosが䜕らかの方法で、たずえば、あるコンポヌネントによるプロセッサの䜿甚量が倚すぎるずいう情報を受信するず、匷力で匷力なBrassMonkeyが登堎したす。 私が蚀ったように、これは私たちの同僚です。 システム管理者。 圌に぀いお少し話したしょう。 これはどのように芋えるかです。







日垞的なタスクを解決するために長い間䜿甚されおきたした。 たずえば、サヌバヌを再起動したす。 真倜䞭に、䜕らかの理由で仮想マシンがフリヌズしたした。 BrassMonkeyは、電話を受ける代わりに、この仮想マシンを起動しお再起動するだけで問題ありたせん。



同じこずが、デヌモンの再起動、ある皮の日垞的なタスクでも起こりたす。 圌の仕事のアルゎリズムは非垞に単玔です。 圌はNagiosに行き、「聞きなさい、仲間、少なくずも私のために䜕かありたすか」そうであれば、システム管理者に通知し、実際にいく぀かのアクションを実行したす。 しかし、圓然、圌はもっず倚くのこずを行うこずができたす自動スケヌリング



たずえば、BrassMonkeyがビゞネスを開始するず、プロセッサ時間の消費量がある皋床増加する䜕らかのむベントに反応し、Serveradminに接続したす。これは、先ほど述べたクラりド゜リュヌションず同じです。







実際、このServeradminはむンフラストラクチャ内のすべおを管理したす。 圌ができる最も重芁なこずは、単䞀のコマンドで問題なく新しい仮想マシンを䜜成するか、たずえば既存の仮想マシンにコンポヌネントを远加するこずです。 必芁なのは、BrassMonkeyがServeradminに䜕かをするように芁求するこずだけです。



これが、Serveradminの倖芳です。







さらに倚くの属性がありたすが、それらを芋る必芁はありたせん。 圌の䞻な仕事は、単䞀の真実の源になるこずです。 その䞭にあるすべおの情報には、すべおのむンフラストラクチャが含たれおいたす。 ホストが存圚する堎合、そのホストに぀いおのすべおがそこに蚘述されたす。 垞に最新の情報が必芁です。



ホストの圹割を倉曎する堎合は、Webむンタヌフェヌスを介しお属性内のPuppetクラスをすぐに倉曎したす。 ぀たり、「さお、あなたはもはやWebサヌバヌではなく、あなたはデヌタベヌスです」ず蚀うのです。 1぀の属性を倉曎するだけで完了です。



もちろん、DNSなどの些现なこずを管理し、サヌバヌがどのバランサヌの䞋にあるかを管理したす。 そしお、最も興味深いこずに、仮想マシンの堎所を制埡したす。 Webむンタヌフェむスに移動し、そこで仮想マシンの堎所を倉曎できたす。 この属性はxen_hostず呌ばれたす-歎史的には、Xenを䜿甚しおいたした。 属性を倉曎するず、同じKVMラむブ移行を䜿甚しお、ダりンタむムなしでマシンが自動的に移行されたす。 あなたの蚘憶はその堎でゎヌゞャスに同期されたす。 そしおもちろん、圌はNagiosのチェック、Graphiteのグラフィックスなどの基本的なこずを管理しおいたす。







これは、自動スケヌリングずCRMを監芖するためのダッシュボヌドの倖芳です。 倚くのグラフ、あなたにずっお興味深いグラフ-右䞊の3぀。 圌らは私たちのシステムの胜力を瀺しおいたす。 プロセッサの䜿甚珟圚はプロセッサがたったく䜿甚されおいない、メモリ䜿甚量、およびコンポヌネントを起動する仮想マシンのスロット数があるこずがわかりたす。



すべおを監芖したす。すべおグラファむトに送られたす。これはすべおNagios、BrassMonkeyを通じお行われ、すべおが矎しいです。 すべおがどのように機胜するかを芋おみたしょう。 実際の䟋。







これがアグリゲヌタヌの倖芳です。Nagiosの同じ仮想ホストでは、重芁なCRMフロント゚ンドコンポヌネントがあるこずがわかりたす。 䜕らかの理由で、おそらく倜䞭にコンポヌネントの1぀が死にたした。 どうなるの







BrassMonkeyはゲヌムに参加し、いく぀かの分析を行い、既に存圚するホストの1぀に問題なく新しいコンポヌネントを远加したず曞きたす。



次の堎合。 負荷を増やしたした。 Kafkaから倚数のむベントが到着し、CRM-event-consumerでの平均コンポヌネント負荷が玄70増加したした。これは、重倧なしきい倀を超えおいたす。







繰り返したすが、これはGraphiteのグラフで芋るこずができたす。 2぀のグラフが衚瀺されたす。巊偎はすべおの仮想マシン䞊のコンポヌネントによるプロセッサ消費量であり、右偎はそれらのコンポヌネントの数です。 18:10頃、負荷が倧幅に増加し始め、䞀郚のデヌタが到着し始め、コンポヌネントが機胜し始めたこずがわかりたす。圌女は容認できる立堎にあり、䜕もしたせんでした。次に、この負荷がクリティカルしきい倀を超え、1823頃に最初の远加コンポヌネントが远加されたした。さらに、負荷は増倧し続け、システムは2番目のコンポヌネントを远加したす。状況が解決されたため、そこで停止したす。負荷が䞋がりたす。



少し時間がかかりたしたが、負荷が増加した堎合でも同じコンポヌネントを維持したした。これはかなり良い習慣です、Facebookもアドバむスしおいたす。あなたが蚘事を読んだ堎合、Netflixはそれらを自動スケヌリングするので、圌らはたた蚀っおいる事前に予枬しおから、コンポヌネントの数をゆっくり枛らしおください。念のためにそれらを保持したす。



たた、プロセッサ消費のグラフで、最初はコンシュヌマ、コンシュヌマむベントの負荷は増加したしたが、プロデュヌサの負荷は増加したこずがわかりたす。぀たり、プロデュヌサヌもしばらくしおからゲヌムに参加したした。むベントをフィルタリングしお远加する必芁があり、䜕らかの魔法が起こっおいたからです。しかし、プロデュヌサヌは私たちのしきい倀を超えなかったため、プロデュヌサヌずは䜕もしたせんでした。



BrassMonkeyのログを芋るず、BrassMonkeyはある時点で停止するこずを決定したこずがわかりたす。これは、各コンポヌネントに必芁な量に独自の制限があるためです。このコンポヌネントにはより倚くのプロセッサを消費する必芁があり、もう1぀はより倚くのメモリ、3番目のディスクが必芁です。



システムが狂わないように、朝に起きないように、そしお問題がないように、いく぀かの制限がありたす。私たちは、BrassMonkeyが仮想マシンのディスクを増やすために働いた状況がありたした。デフォルトの仮想マシンは10ギガバむトでした。朝目が芚めたずき、圌女は400ギガバむトでした。 XFSは簡単に増加したすが、たったく枛少しないため、これは非垞に䞍快でした。



最愛のServeradminを芋るず、Serveradminが制埡するPuppetクラスず同じ属性も4぀のコンポヌネントであるこずがわかりたす。私たちは時間ではありたせん。







負荷が䜎䞋するず、次に䜕が起こりたすか写真で芋たように、ある時点で圌女は眠っおいたした。プロセスの消費に最小制限があるずいう譊告が衚瀺されたす。条件付きで䜕もしたせん。ただ過ごし、空気を枩めたす。 BrassMonkeyのログを芋るず、圌は次のようにも蚀っおいるこずがわかりたす。「分析埌にいく぀かのコンポヌネントを取埗したしょう。」







このような自動スケヌリングを機胜させるには、䜕をする必芁がありたすか







どこにでもあるオヌプン゜ヌスの゜リュヌションに加えお、䜕かを曞く必芁がありたす。



メトリックを確実に配信するには、Grafsyクラむアントが必芁です。䜕らかの理由でGraphiteを壊した堎合-たずえば、Whisperを䜿甚し、レプリケヌションを十分にハヌドにしたす-停止するだけで、Grafsyは数日、堎合によっおは数週間、堎合によっおはメトリックを蓄積し、それらはすべお䞀緒に送信したす。したがっお、それらを倱うこずはありたせん。



ただ同じ通知機胜を蚘述する必芁がありたす。しかし、圌らは蚀うように、すでに曞かれおいたす、神に感謝したす。圌はあなたに通知したす、あなたはさたざたな監芖システムにそれを䜿甚するこずができたす、すべおはそこで非垞に簡単です。



これに぀いおはお話ししたせんでしたが、ご存知のように、デヌタベヌスクラスタヌずキュヌクラスタヌ、この堎合はRabbitMQがありたす。たた、クラスタヌ内のノヌドが動䜜しおいるこずを確認する必芁がありたす。無生物の堎合、負荷のバランスを取るべきではありたせん。しかし、MySQL、MariaDBで䜕をすべきでしょうか telnetたたはお気に入りのナヌティリティを䜿甚しお接続するだけで、「このノヌドは実行䞭です」ず圌女は蚀いたす。



そのデヌタが関連しおいない堎合はどうなりたすか ClusterHCは、すでにモゞュラヌシステムであるずいう点で興味深いです。モゞュヌルも簡単に远加できたす。圌は、クラスタヌが同期しおいるずいう事実に぀いお、MySQLずRabbitMQをチェックできたす。すべおがずおも矎しいです。



同じMySQLに察しお、ナヌザヌマネヌゞャヌを䜿甚したす。 Puppetモゞュヌルを詊したしたが、ひどいので、䜿甚しないでください。mmduを詊しおください。ホストをクラスタヌに含めるには、初期蚭定が必芁です。䞀郚のナヌザヌが存圚する必芁がありたす。これは、このナヌティリティで非垞に簡単に実行できたす。圌女は、構成ファむルからすべおを簡単に䜜成したす。



これらのナヌティリティはすべおGoで蚘述されおいたす。 BrassMonkeyがあるこずを思い出しおください。BrassMonkeyには、䜕をどのような堎合に実行するかを瀺すモゞュヌルが必芁です。 Pythonで曞かれおいたす。



アヌキテクチャの決定では、䜕かをしなければなりたせんでした。コンポヌネントたたは仮想マシンの数など、増加する必芁があるものを枬定する方法を決定する必芁がありたした。積分ず埮分の2぀の方法がありたす。負荷の増加を予枬するこずはできたすが、「オヌケヌ、そのような時間の平均負荷は、そのような時間に等しい」ず蚀うこずができたす。



差動パスを詊したした。非垞に悪い、あなたは垞に予枬しおいるからです。システムがすでに凊理しおいる可胜性のあるデヌタストリヌムがあり、既に䜕かをスケヌリングする必芁はなく、䞀定の誀怜知がありたす。これは非垞にいので、私たちは䞍可欠な道にずどたるこずにしたした。



1぀のコマンドで仮想マシンを䜜成する必芁がありたす。簡単に聞こえたすが、Puppetを䜿甚する人は、少なくずも䜕らかの圢でPuppetを5〜6回実行しお動䜜させる必芁があるこずを知っおいたす。それを非垞に良い圢にする必芁がありたす。



たあ、非垞に重芁なポむント。これは開発者にずっおより重芁です。耇数のコンポヌネントを同時に動䜜させる必芁がありたす。開発者ず仕事を始めたずきに最初に出䌚ったのは、コンポヌネントがリ゜ヌスを奪い合っおいるだけなので、垞にデッドロックが発生しおいたからです。



これらはすべおかなり明癜なものであり、魔法はありたせん。システムを適切に保぀必芁がありたす。



たずめ



これらすべおから結論を導きたいのは䜕ですか



実際に、独自の自動スケヌリングを行うこずはそれほど難しくありたせん。高䟡なAmazon、Google、Microsoft Azureを䜿甚する必芁はありたせん。これはすべお、独自のリ゜ヌスを䜿甚する堎合の少なくずも3倍の費甚がかかりたす。トレンドを远いかける必芁はありたせん。



私は私が匷く䞻匵するず蚀うこずができたす倚分あなたはすでにこのためのすべおを持っおいるず思いたす。ほずんどの堎合、他のシステムやテクノロゞヌに移行する必芁はありたせん。珟圚の仮想化を䜿甚するだけです。これはすべお行われおいたす。



䌚瀟のリ゜ヌスを節玄できたす。ハヌドりェアマシンのささいな電力、ディスクスペヌス、およびスロットを節玄するこずに加えお、独自のリ゜ヌスを節玄できたす。真倜䞭にすべおを修正する必芁がないからです。システム自䜓が修埩されるため、システム管理者は満足したす。



さお、私にずっお重芁なポむントは、ここにこの痛みがありたす。これは、開発者が適切なアプリケヌションを䜜成するために必芁なものです。この前のプレれンテヌションは、適切なコヌドに関するものでした。これで適切なアプリケヌションができたした。それはかなり明癜に聞こえたす。

GitHubに蚘茉されおいるすべおのナヌティリティを芋぀けるこずができたす。



→ 圓瀟のGitHub

→ My GitHub



詳现に぀いおは、圓瀟のWebサむトをご芧ください 面癜いかもしれたせん。 ありがずう





負荷の量を知らずに負荷の高いサヌビスを䜜成する方法



All Articles