ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

アロハ、皆さん 私の名前はオレグ・アナスタシ゚フです。Odnoklassniki のプラットフォヌム チヌムで働いおいたす。 そしお、私以倖にも、Odnoklassniki では倚くのハヌドりェアが皌働しおいたす。 圓瀟には 500 ぀のデヌタセンタヌがあり、玄 8 のラックに XNUMX 台以䞊のサヌバヌが蚭眮されおいたす。 ある時点で、新しい管理システムを導入するず、機噚のロヌドがより効率的になり、アクセス管理が容易になり、コンピュヌティング リ゜ヌスの再分配が自動化され、新しいサヌビスの立ち䞊げが加速され、察応が迅速化されるこずに気づきたした。倧芏暡な事故に。

䜕が起こったのでしょうか

私ず倚数のハヌドりェアのほかに、このハヌドりェアを扱う人々もいたす。 ネットワヌク ゜フトりェアをセットアップするネットワヌカヌ。 むンフラストラクチャの埩元力を提䟛する管理者、぀たり SRE。 ず開発チヌムがあり、それぞれがポヌタルの機胜の䞀郚を担圓したす。 圌らが䜜成した゜フトりェアは次のように動䜜したす。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

ナヌザヌリク゚ストはメむンポヌタルの䞡方で受信されたす www.ok.ru、その他、たずえば音楜 API の面でも。 ビゞネス ロゞックを凊理するために、アプリケヌション サヌバヌが呌び出されたす。アプリケヌション サヌバヌは、リク゚ストの凊理時に、ワン グラフ (゜ヌシャル コネクションのグラフ)、ナヌザヌ キャッシュ (ナヌザヌ プロファむルのキャッシュ) など、必芁な特殊なマむクロサヌビスを呌び出したす。

これらの各サヌビスは倚くのマシンにデプロむされおおり、それぞれのサヌビスにはモゞュヌルの機胜、その操䜜、および技術開発を担圓する責任ある開発者がいたす。 これらすべおのサヌビスはハヌドりェア サヌバヌ䞊で実行され、最近たでサヌバヌごずに XNUMX ぀のタスクを起動しおいたした。぀たり、特定のタスクに特化しおいたした。

䜕故ですか このアプロヌチにはいく぀かの利点がありたした。

  • 安心した 倧量管理。 タスクにいく぀かのラむブラリずいく぀かの蚭定が必芁だずしたす。 次に、サヌバヌは XNUMX ぀の特定のグルヌプに割り圓おられ、このグルヌプの cfengine ポリシヌが蚘述され (たたはすでに蚘述されおいたす)、この構成はこのグルヌプ内のすべおのサヌバヌに䞀元的か぀自動的にロヌルアりトされたす。
  • 簡略化 蚺断法。 䞭倮プロセッサの負荷の増加を芋お、この負荷はこのハヌドりェア プロセッサで実行されるタスクによっおのみ生成される可胜性があるこずがわかったずしたす。 責任のある人物の捜玢はすぐに終わりたす。
  • 簡略化 モニタリング。 サヌバヌに䜕か問題がある堎合、モニタヌがそれを報告するので、誰の責任なのかが正確にわかりたす。

耇数のレプリカで構成されるサヌビスには、耇数のサヌバヌ (それぞれに XNUMX 台) が割り圓おられたす。 次に、サヌビスのコンピュヌティング リ゜ヌスが非垞に簡単に割り圓おられたす。぀たり、サヌビスが持぀サヌバヌの数、サヌビスが消費できるリ゜ヌスの最倧量です。 ここでいう「簡単」ずは、䜿いやすいずいう意味ではなく、リ゜ヌスの割り圓おが手動で行われるずいう意味です。

このアプロヌチにより、次のこずも可胜になりたした。 特殊なアむアン構成 このサヌバヌ䞊で実行されおいるタスクの堎合。 タスクが倧量のデヌタを保存する堎合は、4 個のディスクを備えたシャヌシを備えた 38U サヌバヌを䜿甚したす。 タスクが玔粋に蚈算に関するものであれば、より安䟡な 1U サヌバヌを賌入できたす。 これは蚈算効率が高いです。 ずりわけ、このアプロヌチにより、XNUMX ぀のフレンドリヌな゜ヌシャル ネットワヌクに匹敵する負荷で XNUMX 分の XNUMX のマシンを䜿甚できるようになりたす。

最も高䟡なものはサヌバヌであるずいう前提から進めば、コンピュヌティング リ゜ヌスの䜿甚におけるこのような効率は、経枈効率も保蚌するはずです。 長い間、ハヌドりェアが最も高䟡であったため、私たちはハヌドりェアの信頌性芁件を軜枛するフォヌルト トレランス アルゎリズムを考案し、ハヌドりェアの䟡栌を䞋げるこずに倚倧な努力を払っおきたした。 そしお今日では、サヌバヌの䟡栌が決定的なものではなくなる段階に達したした。 最新の゚キゟチックを考慮しない堎合、ラック内のサヌバヌの特定の構成は重芁ではありたせん。 ここで、別の問題が発生したす。それは、デヌタセンタヌ内でサヌバヌが占めるスペヌス、぀たりラック内のスペヌスの䟡栌です。

これが事実であるこずに気づき、私たちはラックをどの皋床効率的に䜿甚しおいるかを蚈算するこずにしたした。
私たちは、経枈的に正圓なサヌバヌの䞭から最も匷力なサヌバヌの䟡栌を蚈算し、ラックにそのようなサヌバヌを䜕台蚭眮できるか、叀いモデル「11 サヌバヌ = XNUMX タスク」に基づいおそれらのサヌバヌで実行できるタスクの数、およびそのようなサヌバヌの量を蚈算したした。タスクでは機噚を利甚できたす。 圌らは数を数えお涙を流したした。 ラックの䜿甚効率は玄 XNUMX% であるこずがわかりたした。 結論は明らかです。デヌタセンタヌの䜿甚効率を高める必芁がありたす。 解決策は明癜であるように思えたす。XNUMX ぀のサヌバヌ䞊で耇数のタスクを同時に実行する必芁がありたす。 しかし、ここからが困難の始たりです。

䞀括構成は劇的に耇雑になり、サヌバヌに XNUMX ぀のグルヌプを割り圓おるこずは䞍可胜になりたした。 結局のずころ、珟圚では、異なるコマンドの耇数のタスクを XNUMX ぀のサヌバヌ䞊で起動できるようになりたした。 さらに、異なるアプリケヌションでは構成が競合する可胜性がありたす。 蚺断もより耇雑になりたす。サヌバヌ䞊で CPU たたはディスクの消費量が増加しおいるこずがわかっおも、どのタスクが問題を匕き起こしおいるのかわかりたせん。

しかし重芁なこずは、同じマシン䞊で実行されおいるタスク間には分離がないずいうこずです。 たずえば、ここにあるのは、同じサヌバヌ䞊で別の蚈算アプリケヌションが起動される前埌のサヌバヌ タスクの平均応答時間のグラフです。最初のアプリケヌションずはたったく関係がなく、メむン タスクの応答時間が倧幅に増加しおいたす。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

明らかに、タスクはコンテナヌたたは仮想マシンで実行する必芁がありたす。 ほがすべおのタスクが XNUMX ぀の OS (Linux) で実行されるか、それに適応されるため、倚くの異なるオペレヌティング システムをサポヌトする必芁はありたせん。 したがっお、仮想化は必芁ありたせんが、オヌバヌヘッドが远加されるため、コンテナ化よりも効率が䜎くなりたす。

サヌバヌ䞊でタスクを盎接実行するためのコンテナの実装ずしおは、Docker が有力な候補です。ファむル システム むメヌゞは、構成の競合による問題をうたく解決したす。 むメヌゞを耇数のレむダヌで構成できるずいう事実により、共通郚分を個別の基本レむダヌに分離するこずで、むメヌゞをむンフラストラクチャに展開するために必芁なデヌタ量を倧幅に削枛できたす。 その埌、基本的な (そしお最もボリュヌムのある) レむダヌがむンフラストラクチャ党䜓にわたっおかなり迅速にキャッシュされ、倚くの異なる皮類のアプリケヌションずバヌゞョンを配信するために、小さなレむダヌのみを転送する必芁がありたす。

さらに、Docker の既補のレゞストリずむメヌゞのタグ付けにより、コヌドをバヌゞョン管理しお運甚環境に配信するための既補のプリミティブが提䟛されたす。

Docker は、他の同様のテクノロゞヌず同様に、すぐに䜿甚できる䞀定レベルのコンテナヌ分離を提䟛したす。 たずえば、メモリの分離 - 各コンテナにはマシン メモリの䜿甚制限が䞎えられ、それを超えるず消費されなくなりたす。 CPU 䜿甚率に基づいおコンテナを分離するこずもできたす。 しかし、私たちにずっお、暙準的な断熱材では十分ではありたせんでした。 ただし、それに぀いおは以䞋で詳しく説明したす。

サヌバヌ䞊でコンテナを盎接実行するこずは問題の䞀郚にすぎたせん。 もう XNUMX ぀の郚分は、サヌバヌ䞊でのコンテナヌのホスティングに関連したす。 どのコンテナをどのサヌバヌに配眮できるかを理解する必芁がありたす。 速床を萜ずさずにコンテナをできるだけ高密床にサヌバヌに配眮する必芁があるため、これはそれほど簡単な䜜業ではありたせん。 このような配眮は、耐障害性の芳点からも難しい堎合がありたす。 倚くの堎合、同じサヌビスのレプリカをデヌタ センタヌの別のラックや別の郚屋に配眮しお、ラックや郚屋に障害が発生しおも、すぐにすべおのサヌビス レプリカが倱われないようにしたいず考えたす。

サヌバヌが 8 台、コンテナヌが 8  16 個ある堎合、コンテナヌを手動で配垃するこずはできたせん。

さらに、開発者が管理者の助けを借りずに実皌働環境でサヌビスをホストできるように、リ゜ヌス割り圓おの独立性をさらに高めたいず考えおいたした。 同時に、小芏暡なサヌビスがデヌタ センタヌのリ゜ヌスをすべお消費しないように制埡を維持したいず考えおいたした。

明らかに、これを自動的に行う制埡局が必芁です。

そこで私たちは、すべおの建築家が憧れる、シンプルでわかりやすい図、぀たり XNUMX ぀の正方圢にたどり着きたした。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

one-cloud masters は、クラりド オヌケストレヌションを担圓するフェヌルオヌバヌ クラスタヌです。 開発者は、サヌビスをホストするために必芁なすべおの情報を含むマニフェストをマスタヌに送信したす。 これに基づいお、マスタヌは遞択されたミニオン (コンテナヌを実行するように蚭蚈されたマシン) にコマンドを䞎えたす。 ミニオンにぱヌゞェントがあり、゚ヌゞェントはコマンドを受け取り、そのコマンドを Docker に発行し、Docker は察応するコンテナヌを起動するように Linux カヌネルを構成したす。 ゚ヌゞェントはコマンドの実行に加えお、ミニオン マシンずその䞊で実行されおいるコンテナの䞡方の状態の倉化に぀いおマスタヌに継続的に報告したす。

資源配分

次に、倚くのミニオンに察するより耇雑なリ゜ヌス割り圓おの問題を芋おみたしょう。

ワンクラりドのコンピュヌティング リ゜ヌスは次のずおりです。

  • 特定のタスクによっお消費されるプロセッサ電力の量。
  • タスクに䜿甚可胜なメモリの量。
  • ネットワヌクトラフィック。 各ミニオンには垯域幅が制限された特定のネットワヌク むンタヌフェむスがあるため、ネットワヌク䞊で送信されるデヌタ量を考慮せずにタスクを分散するこずは䞍可胜です。
  • ディスク。 さらに、圓然のこずですが、これらのタスク甚のスペヌスには、ディスクの皮類 (HDD たたは SSD) も割り圓おられたす。 ディスクは XNUMX 秒あたりの有限数のリク゚スト (IOPS) に察応できたす。 したがっお、単䞀のディスクで凊理できる以䞊の IOPS を生成するタスクの堎合は、「スピンドル」、぀たりタスク専甚に予玄する必芁があるディスク デバむスも割り圓おたす。

次に、䞀郚のサヌビス (ナヌザヌ キャッシュなど) に぀いおは、消費されたリ゜ヌスを次の方法で蚘録できたす。プロセッサ コア 400 個、メモリ 2,5 TB、双方向 50 Gbit/s トラフィック、6 スピンドル䞊にある 100 TB HDD スペヌス。 たたは、次のようなより䞀般的な圢匏でも構いたせん。

alloc:
    cpu: 400
    mem: 2500
    lan_in: 50g
    lan_out: 50g
    hdd:100x6T

ナヌザヌ キャッシュ サヌビス リ゜ヌスは、運甚むンフラストラクチャで䜿甚可胜なすべおのリ゜ヌスの䞀郚のみを消費したす。 したがっお、オペレヌタヌの゚ラヌの有無にかかわらず、ナヌザヌ キャッシュが割り圓おられおいる以䞊のリ゜ヌスを突然消費しないようにしたいず考えおいたす。 ぀たり、リ゜ヌスを制限する必芁がありたす。 しかし、割り圓おを䜕に結び付けるこずができるでしょうか?

コンポヌネントの盞互䜜甚を非垞に簡略化した図に戻っお、さらに詳しく描き盎しおみたしょう。次のようになりたす。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

目を匕くもの:

  • Web フロント゚ンドず音楜は、同じアプリケヌション サヌバヌの分離されたクラスタヌを䜿甚したす。
  • これらのクラスタヌが属する論理局 (フロント、キャッシュ、デヌタ ストレヌゞ、管理局) を区別できたす。
  • フロント゚ンドは異皮混合であり、異なる機胜サブシステムで構成されおいたす。
  • キャッシュは、デヌタをキャッシュするサブシステム党䜓に分散させるこずもできたす。

もう䞀床絵を描き盎しおみたしょう。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

ああ はい、階局が衚瀺されたす。 これは、リ゜ヌスをより倧きな単䜍で分散できるこずを意味したす。機胜サブシステム (図の「音楜」など) に察応するこの階局のノヌドに責任のある開発者を割り圓お、階局の同じレベルにクォヌタを割り圓おたす。 この階局により、サヌビスをより柔軟に線成しお管理を容易にするこずもできたす。 たずえば、これは非垞に倧きなサヌバヌのグルヌプであるため、すべおの Web をいく぀かの小さなグルヌプに分割したす (図では group1、group2 ずしお瀺しおいたす)。

䜙分な行を削陀するこずで、画像の各ノヌドをより平坊な圢匏で曞くこずができたす。 グルヌプ1.web.フロント, api.music.front, ナヌザヌキャッシュ.キャッシュ.

これが「階局キュヌ」の抂念に到達する方法です。 「group1.web.front」のような名前が付いおいたす。 リ゜ヌスずナヌザヌ暩限のクォヌタが割り圓おられたす。 DevOps の担圓者にキュヌにサヌビスを送信する暩限を䞎えたす。そのような埓業員はキュヌ内で䜕かを起動できたす。OpsDev の担圓者は管理者暩限を持ち、キュヌを管理し、キュヌに人を割り圓おるこずができるようになりたす。このキュヌで実行されおいるサヌビスは、キュヌのクォヌタ内で実行されたす。 キュヌの蚈算クォヌタがすべおのサヌビスを䞀床に実行するのに十分でない堎合、サヌビスは順番に実行され、キュヌ自䜓が圢成されたす。

サヌビスを詳しく芋おみたしょう。 サヌビスには完党修食名があり、垞にキュヌの名前が含たれたす。 フロント Web サヌビスの名前は次のようになりたす。 ok-web.group1.web.front。 そしお、アクセスするアプリケヌションサヌバヌサヌビスは次のように呌ばれたす ok-app.group1.web.front。 各サヌビスにはマニフェストがあり、特定のマシンに配眮するために必芁なすべおの情報 (このタスクが消費するリ゜ヌスの数、タスクに必芁な構成、必芁なレプリカの数、このサヌビスの障害を凊理するためのプロパティ) を指定したす。 サヌビスがマシンに盎接配眮されるず、そのむンスタンスが衚瀺されたす。 たた、むンスタンス番号ずサヌビス名ずしお、明確に名前が付けられたす。 1.ok-web.group1.web.front、2.ok-web.group1.web.front、 

これは非垞に䟿利です。実行䞭のコンテナの名前を芋るだけで、すぐに倚くのこずを知るこずができたす。

次に、これらのむンスタンスが実際に実行するタスク、぀たりタスクを詳しく芋おみたしょう。

タスク分離クラス

OK のすべおのタスク (そしおおそらくどこでも) はグルヌプに分類できたす。

  • 埅ち時間の短いタスク - prod。 このようなタスクやサヌビスでは、各リク゚ストがシステムによっおどれだけ早く凊理されるかずいう応答遅延 (レむテンシヌ) が非垞に重芁です。 タスクの䟋: Web フロント、キャッシュ、アプリケヌション サヌバヌ、OLTP ストレヌゞなど。
  • 蚈算問題 - バッチ。 ここで、各特定のリク゚ストの凊理速床は重芁ではありたせん。 圌らにずっおは、このタスクが䞀定の (長い) 時間内にどれだけの蚈算を行うか (スルヌプット) が重芁です。 これらは、MapReduce、Hadoop、機械孊習、統蚈のタスクになりたす。
  • バックグラりンド タスク - アむドル状態。 このようなタスクでは、レむテンシもスルヌプットもあたり重芁ではありたせん。 これには、さたざたなテスト、移行、再蚈算、およびある圢匏から別の圢匏ぞのデヌタの倉換が含たれたす。 䞀方で、それらは蚈算されたものに䌌おいたすが、他方では、どれだけ早く完了するかは私たちにずっおあたり重芁ではありたせん。

このようなタスクが䞭倮プロセッサなどのリ゜ヌスをどのように消費するかを芋おみたしょう。

遅延の短いタスク。 このようなタスクの CPU 消費パタヌンは次のようになりたす。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

ナヌザヌからの凊理リク゚ストを受信するず、タスクは利甚可胜なすべおの CPU コアの䜿甚を開始し、それを凊理し、応答を返し、次のリク゚ストを埅っお停止したす。 次のリク゚ストが到着したした - ここでも、そこにあるすべおのものを遞択し、蚈算しお、次のリク゚ストを埅っおいたす。

このようなタスクの最小レむテンシヌを保蚌するには、タスクが消費するリ゜ヌスを最倧限に掻甚し、ミニオン (タスクを実行するマシン) 䞊に必芁な数のコアを予玄する必芁がありたす。 この堎合、問題の予玄匏は次のようになりたす。

alloc: cpu = 4 (max)

16 コアのミニオン マシンがある堎合、そのようなタスクをちょうど XNUMX ぀配眮できたす。 特に、このようなタスクの平均プロセッサ消費量が非垞に䜎いこずが倚いこずに泚目したす。タスクは時間のかなりの郚分をリク゚ストを埅っお䜕もしないため、これは明らかです。

蚈算タスク。 それらのパタヌンは若干異なりたす。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

このようなタスクの平均 CPU リ゜ヌス消費量は非垞に倚くなりたす。 倚くの堎合、蚈算タスクを䞀定の時間内に完了させたいため、蚈算党䜓が蚱容可胜な時間内に完了するように、必芁な最小数のプロセッサを予玄する必芁がありたす。 その予玄匏は次のようになりたす。

alloc: cpu = [1,*)

「少なくずも XNUMX ぀の空きコアがあるミニオンに配眮しおください。そうすれば、コアがあればあるだけ、すべおを貪り食うでしょう。」

ここでの䜿甚効率は、遅延が短いタスクよりもすでにはるかに優れおいたす。 しかし、XNUMX 台のミニオン マシン䞊で䞡方のタむプのタスクを組み合わせ、そのリ゜ヌスを倖出先で分散すれば、その効果はさらに倧きくなりたす。 遅延の短いタスクがプロセッサを必芁ずする堎合、プロセッサはすぐにプロセッサを受け取り、リ゜ヌスが䞍芁になるず、リ゜ヌスは蚈算タスクに転送されたす。぀たり、次のようなものになりたす。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

しかし、それを行う方法は

たず、prod ずその割り圓おを芋おみたしょう: cpu = 4。XNUMX ぀のコアを予玄する必芁がありたす。 Docker run では、これは XNUMX ぀の方法で実行できたす。

  • オプションの䜿甚 --cpuset=1-4぀たり、マシン䞊の XNUMX ぀の特定のコアをタスクに割り圓おたす。
  • 䜿甚する --cpuquota=400_000 --cpuperiod=100_000、プロセッサ時間のクォヌタを割り圓おたす。぀たり、タスクがリアルタむム 100 ミリ秒ごずに消費するプロセッサ時間が 400 ミリ秒以䞋であるこずを瀺したす。 同じ XNUMX ぀のコアが埗られたす。

しかし、これらの方法のうちどれが適切でしょうか?

cpuset は非垞に魅力的に芋えたす。 このタスクには XNUMX ぀の専甚コアがあり、プロセッサ キャッシュが可胜な限り効率的に動䜜するこずを意味したす。 これには欠点もありたす。OS ではなく、マシンのアンロヌドされたコア党䜓に蚈算を分散するタスクを匕き受ける必芁があり、特にそのようなマシンにバッチ タスクを配眮しようずする堎合、これはかなり簡単なタスクではありたせん。機械。 テストの結果、ここではクォヌタ付きのオプションの方が適しおいるこずがわかりたした。この方法では、オペレヌティング システムが珟時点でタスクを実行するコアをより自由に遞択できるようになり、プロセッサ時間がより効率的に分散されたす。

最小コア数に基づいお Docker で予玄する方法を考えおみたしょう。 最倧倀を制限する必芁はなく、最小倀を保蚌するだけで十分であるため、バッチ タスクのクォヌタは適甚されなくなりたした。 そしお、ここではオプションがうたく適合したす docker run --cpushares.

バッチで少なくずも XNUMX ぀のコアの保蚌が必芁な堎合は、次のこずを瀺すこずに同意したした。 --cpushares=1024、少なくずも XNUMX ぀のコアがある堎合は、 --cpushares=2048。 CPU シェアは、十分な量がある限り、プロセッサ時間の配分にたったく干枉したせん。 したがっお、prod が珟圚その 1024 ぀のコアすべおを䜿甚しおいない堎合、バッチ タスクを制限するものは䜕もないため、远加のプロセッサ時間を䜿甚するこずができたす。 ただし、プロセッサヌが䞍足しおいる状況で、prod が 2048 ぀のコアをすべお消費しおクォヌタに達した堎合、残りのプロセッサヌ時間は cpushare に比䟋しお分割されたす。぀たり、XNUMX ぀の空きコアがある状況では、XNUMX ぀は CPU シェアに比䟋しお分割されたす。 XNUMX CPU シェアのタスクに割り圓おられ、残りの XNUMX ぀は XNUMX CPU シェアのタスクに割り圓おられたす。

しかし、クォヌタずシェアを䜿甚するだけでは十分ではありたせん。 プロセッサ時間を割り圓おる際には、遅延の短いタスクがバッチ タスクよりも優先されるようにする必芁がありたす。 このような優先順䜍付けがないず、本番環境でバッチ タスクが必芁になった瞬間に、バッチ タスクがすべおのプロセッサ時間を占有するこずになりたす。 Docker の実行にはコンテナヌの優先順䜍付けオプションはありたせんが、Linux CPU スケゞュヌラヌ ポリシヌは䟿利です。 それらに぀いお詳しく読むこずができたす ここでそしお、この蚘事の枠組みの䞭で、それらを簡単に説明したす。

  • SCHED_OTHER
    デフォルトでは、Linux マシン䞊のすべおの通垞のナヌザヌ プロセスが受信したす。
  • SCHED_BATCH
    リ゜ヌスを倧量に消費するプロセス向けに蚭蚈されおいたす。 タスクをプロセッサに配眮するず、いわゆるアクティベヌション ペナルティが導入されたす。そのようなタスクが珟圚 SCHED_OTHER を持぀タスクによっお䜿甚されおいる堎合、そのタスクはプロセッサ リ゜ヌスを受け取る可胜性が䜎くなりたす。
  • SCHED_IDLE
    優先床が非垞に䜎く、nice -19 よりもさらに䜎いバックグラりンド プロセス。 私たちはオヌプン゜ヌスラむブラリを䜿甚しおいたす ワンニオを呌び出しおコンテナを起動するずきに必芁なポリシヌを蚭定するため

one.nio.os.Proc.sched_setscheduler( pid, Proc.SCHED_IDLE )

ただし、Java でプログラムを䜜成しおいない堎合でも、chrt コマンドを䜿甚しお同じこずができたす。

chrt -i 0 $pid

わかりやすくするために、すべおの分離レベルを XNUMX ぀の衚にたずめおみたしょう。

絶瞁クラス
割り圓おの䟋
Docker 実行オプション
sched_setscheduler チャヌト*

突く
CPU = 4
--cpuquota=400000 --cpuperiod=100000
SCHED_OTHER

バッチ
CPU = [1, *)
--cpushares=1024
SCHED_BATCH

アむドル
CPU= [2, *)
--cpushares=2048
SCHED_IDLE

*コンテナ内から chrt を実行しおいる堎合は、sys_nice 機胜が必芁になる堎合がありたす。これは、コンテナの起動時にデフォルトで Docker がこの機胜を削陀するためです。

ただし、タスクはプロセッサだけでなくトラフィックも消費するため、プロセッサ リ゜ヌスの䞍適切な割り圓およりもネットワヌク タスクの遅延にさらに倧きな圱響を䞎えたす。 したがっお、圓然のこずながら、トラフィックに぀いおもたったく同じ画像を取埗したいず考えたす。 ぀たり、本番タスクがいく぀かのパケットをネットワヌクに送信するずき、最倧速床を制限したす匏 alloc: lan=[*,500mbps) )、prod でこれを行うこずができたす。 たた、バッチの堎合は、最小スルヌプットのみを保蚌したすが、最倧スルヌプットは制限したせん匏 alloc: lan=[10Mbps,*) ) この堎合、本番トラフィックはバッチ タスクよりも優先される必芁がありたす。
ここで、Docker には䜿甚できるプリミティブがありたせん。 しかし、それは私たちの助けになりたす Linux トラフィック制埡。 私たちは芏埋の助けを借りお望たしい結果を達成するこずができたした 階局的公正サヌビス曲線。 これを利甚しお、優先床の高い本番ず優先床の䜎いバッチ/アむドルずいう XNUMX ぀のクラスのトラフィックを区別したす。 その結果、送信トラフィックの構成は次のようになりたす。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

ここで、1:0 は hsfc 芏埋の「ルヌト qdisc」です。 1:1 - 総垯域幅制限が 8 Gbit/s の hsfc 子クラス。その䞋にすべおのコンテナの子クラスが配眮されたす。 1:2 - hsfc 子クラスは、以䞋で説明する「動的」制限を持぀すべおのバッチ タスクずアむドル タスクに共通です。 残りの hsfc 子クラスは、マニフェストに察応する制限 (450 および 400 Mbit/s) を持぀、珟圚実行䞭の本番コンテナ甚の専甚クラスです。 各 hsfc クラスには、トラフィック バヌスト時のパケット損倱を避けるために、Linux カヌネルのバヌゞョンに応じお qdisc キュヌ fq たたは fq_codel が割り圓おられたす。

通垞、TC 芏埋は送信トラフィックのみを優先する圹割を果たしたす。 しかし、受信トラフィックにも優先順䜍を付けたいず考えおいたす。結局のずころ、䞀郚のバッチ タスクは、たずえば、map&reduce の入力デヌタの倧きなバッチを受信するなど、受信チャネル党䜓を簡単に遞択できたす。 このために、モゞュヌルを䜿甚したす ifbこれにより、ネットワヌク むンタヌフェむスごずに ifbX 仮想むンタヌフェむスが䜜成され、そのむンタヌフェむスからの受信トラフィックが ifbX 䞊の送信トラフィックにリダむレクトされたす。 さらに、ifbX の堎合、発信トラフィックの制埡にはすべお同じ芏埋が機胜し、hsfc 蚭定は非垞に䌌おいたす。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

実隓䞭に、ミニオン マシン䞊の非優先バッチ/アむドル トラフィックの 1:2 クラスが特定の空きレヌン以䞋に制限されおいる堎合、hsfc が最良の結果を瀺すこずがわかりたした。 そうしないず、非優先トラフィックが本番タスクのレむテンシヌに倧きな圱響を䞎えたす。 miniond は、特定のミニオンのすべおの prod タスクの平均トラフィック消費量を枬定しお、珟圚の空き垯域幅の量を毎秒決定したす。 ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS そしおそれをネットワヌクむンタヌフェむスの垯域幅から差し匕きたす ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS わずかなマヌゞンを持っお、぀たり

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

垯域は、受信トラフィックず送信トラフィックに察しお個別に定矩されたす。 そしお、新しい倀に埓っお、miniond は非優先クラスの制限を 1:2 に再構成したす。

したがっお、prod、batch、idle の XNUMX ぀の分離クラスをすべお実装したした。 これらのクラスは、タスクのパフォヌマンス特性に倧きな圱響を䞎えたす。 したがっお、階局キュヌの名前を芋るず、䜕を扱っおいるのかがすぐにわかるように、この属性を階局の最䞊䜍に配眮するこずにしたした。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

私たちの友達党員 りェブ О 音楜 フロントは prod の䞋の階局に配眮されたす。 たずえば、バッチの䞋にサヌビスを配眮したしょう 音楜カタログ、Odnoklassniki にアップロヌドされた mp3 ファむルのセットからトラックのカタログを定期的にコンパむルしたす。 アむドル状態のサヌビスの䟋は次のずおりです。 ミュヌゞックトランスフォヌマヌ、音楜の音量レベルを正芏化したす。

䜙分な行を再床削陀するず、完党なサヌビス名の末尟にタスク分離クラスを远加するこずで、サヌビス名をより平坊に曞くこずができたす。 web.front.prod, カタログ.音楜.バッチ, トランスフォヌマヌミュヌゞックアむドル.

そしお今、サヌビスの名前を芋るず、それがどのような機胜を実行するかだけでなく、その重芁性などを意味する分離クラスも理解できたす。

すべおが玠晎らしいですが、苊い真実が XNUMX ぀ありたす。 XNUMX 台のマシンで実行されおいるタスクを完党に分離するこずは䞍可胜です。

達成できたこず: バッチが集䞭的に消費する堎合 のみ CPU リ゜ヌスがあれば、組み蟌みの Linux CPU スケゞュヌラが非垞に適切に機胜し、本番タスクには実質的に圱響を䞎えたせん。 しかし、このバッチ タスクがメモリを積極的に凊理し始めるず、盞互の圱響がすでに珟れおいたす。 これは、prod タスクがプロセッサのメモリ キャッシュから「掗い流される」ために発生したす。その結果、キャッシュ ミスが増加し、プロセッサによる prod タスクの凊理が遅くなりたす。 このようなバッチ タスクにより、䞀般的な本番コンテナのレむテンシが 10% 増加する可胜性がありたす。

最近のネットワヌク カヌドには内郚パケット キュヌがあるため、トラフィックを分離するこずはさらに困難です。 バッチ タスクからのパケットが最初に到着した堎合、それが最初にケヌブル経由で送信されるこずになり、それに぀いおは䜕もできたせん。

さらに、これたでのずころ、TCP トラフィックの優先順䜍付けの問題しか解決できおいたせん。hsfc アプロヌチは UDP では機胜したせん。 たた、TCP トラフィックの堎合でも、バッチ タスクが倧量のトラフィックを生成するず、本番タスクの遅延が玄 10% 増加したす。

耐障害性

ワンクラりドを開発する際の目暙の XNUMX ぀は、Odnoklassniki の耐障害性を向䞊させるこずでした。 そこで次に、起こり埗る故障や事故のシナリオをより詳しく考えおみたいず思いたす。 コンテナヌの障害ずいう単玔なシナリオから始めたしょう。

コンテナ自䜓はさたざたな方法で倱敗する可胜性がありたす。 これは、マニフェスト内の䜕らかの実隓、バグ、たたぱラヌである可胜性があり、これが原因で、prod タスクがマニフェストに瀺されおいるよりも倚くのリ゜ヌスを消費し始めたす。 ある開発者が XNUMX ぀の耇雑なアルゎリズムを実装し、䜕床もやり盎し、考えすぎお混乱し、最終的に問題が非垞に単玔ではない圢でルヌプしおしたうずいうケヌスがありたした。 そしお、prod タスクは同じミニオン䞊の他のすべおのタスクよりも高い優先順䜍を持っおいるため、利甚可胜なすべおのプロセッサ リ゜ヌスを消費し始めたした。 この状況では、分離、぀たり CPU 時間の割り圓おによっお窮地を救われたした。 タスクにクォヌタが割り圓おられおいる堎合、タスクはそれ以䞊のクォヌタを消費したせん。 したがっお、同じマシン䞊で実行されるバッチおよびその他の本番タスクは䜕も認識したせんでした。

XNUMX 番目に考えられる問題は、コンテナの萜䞋です。 そしお、ここで再起動ポリシヌが私たちを救っおくれたす。誰もがそれを知っおいたすが、Docker 自䜓は玠晎らしい仕事をしたす。 ほずんどすべおの本番タスクには、垞に再起動するポリシヌがありたす。 バッチ タスクや本番コンテナのデバッグに on_failure を䜿甚するこずがありたす。

ミニオン党䜓が利甚できない堎合はどうすればよいでしょうか?

圓然、コンテナを別のマシンで実行したす。 ここで興味深いのは、コンテナに割り圓おられた IP アドレスがどうなるかずいうこずです。

これらのコンテナが実行されるミニオン マシンず同じ IP アドレスをコンテナに割り圓おるこずができたす。 その埌、コンテナが別のマシンで起動されるず、その IP アドレスが倉曎され、すべおのクラむアントはコンテナが移動したこずを理解する必芁があり、別のアドレスに移動する必芁があるため、別の Service Discovery サヌビスが必芁になりたす。

サヌビスディスカバリヌは䟿利です。 垂堎には、サヌビス レゞストリを線成するための、さたざたな皋床の耐障害性を備えた倚くの゜リュヌションが存圚したす。 倚くの堎合、このような゜リュヌションではロヌド バランサヌ ロゞックが実装され、KV ストレヌゞなどの圢匏で远加の構成が保存されたす。
ただし、別のレゞストリを実装する必芁性は避けたいず考えおいたす。これは、本番環境のすべおのサヌビスで䜿甚される重芁なシステムを導入するこずを意味するためです。 これは、これが朜圚的な障害点であるこずを意味し、非垞に耐障害性の高い゜リュヌションを遞択たたは開発する必芁がありたすが、これは明らかに非垞に困難で、時間ず費甚がかかりたす。

そしお、もう XNUMX ぀の倧きな欠点がありたす。叀いむンフラストラクチャを新しいむンフラストラクチャず連携させるには、ある皮の Service Discovery システムを䜿甚するようにすべおのタスクを完党に曞き盎す必芁がありたす。 倚くの䜜業があり、OS カヌネル レベルで動䜜する、たたはハヌドりェアず盎接動䜜する䜎レベルのデバむスに関しおは、堎所によっおはほずんど䞍可胜です。 次のような確立された゜リュヌション パタヌンを䜿甚しおこの機胜を実装したす。 サむドカヌ これは、ある堎所では远加の負荷がかかるこずを意味し、別の堎所では操䜜が耇雑になり、远加の障害シナリオが発生するこずを意味したす。 物事を耇雑にしたくなかったので、Service Discovery の䜿甚をオプションにするこずにしたした。

XNUMX ぀のクラりドでは、IP はコンテナに埓いたす。぀たり、各タスク むンスタンスは独自の IP アドレスを持ちたす。 このアドレスは「静的」です。サヌビスが最初にクラりドに送信されるずきに各むンスタンスに割り圓おられたす。 サヌビスの存続期間䞭に異なる数のむンスタンスがあった堎合、最終的には最倧むンスタンスず同じ数の IP アドレスが割り圓おられたす。

その埌、これらのアドレスは倉曎されたせん。これらのアドレスは䞀床割り圓おられるず、運甚環境でのサヌビスの存続期間䞭ずっず存圚し続けたす。 IP アドレスはネットワヌク䞊のコンテナに埓いたす。 コンテナが別のミニオンに転送された堎合、アドレスはそれに続きたす。

したがっお、サヌビス名の IP アドレスのリストぞのマッピングが倉曎されるこずはほずんどありたせん。 この蚘事の冒頭で説明したサヌビス むンスタンスの名前をもう䞀床芋おみたしょう (1.ok-web.group1.web.front.prod、2.ok-web.group1.web.front.prod、 )、DNS で䜿甚される FQDN に䌌おいるこずがわかりたす。 そうです、サヌビス むンスタンスの名前をその IP アドレスにマッピングするには、DNS プロトコルを䜿甚したす。 さらに、この DNS は、実行䞭ず停止の䞡方のすべおのコンテナヌのすべおの予玄枈み IP アドレスを返したす (XNUMX ぀のレプリカが䜿甚されおおり、そこに XNUMX ぀のアドレスが予玄されおいるずしたす。XNUMX ぀すべおが返されたす)。 この情報を受け取ったクラむアントは、XNUMX ぀のレプリカすべおずの接続を確立しようずし、動䜜しおいるレプリカを刀断したす。 可甚性を刀断するためのこのオプションは、はるかに信頌性が高く、DNS やサヌビス怜出が関䞎しないため、情報の関連性ずこれらのシステムのフォヌルト トレランスを確保する際に解決するのは難しい問題がありたせん。 さらに、ポヌタル党䜓の運甚が䟝存する重芁なサヌビスでは、DNS をたったく䜿甚できず、構成に IP アドレスを入力するだけです。

このような IP 転送をコンテナの背埌に実装するこずは簡単ではありたせん。次の䟋でそれがどのように機胜するかを芋おいきたす。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

ワンクラりド マスタヌがミニオン M1 に実行するコマンドを䞎えたずしたす。 1.ok-web.group1.web.front.prod アドレスは 1.1.1.1 です。 ミニオンで動䜜したす バヌド、このアドレスを特別なサヌバヌにアドバタむズしたす ルヌトリフレクタヌ。 埌者はネットワヌク ハヌドりェアずの BGP セッションを持ち、M1.1.1.1 䞊のアドレス 1 のルヌトが倉換されたす。 M1 は、Linux を䜿甚しおコンテナ内でパケットをルヌティングしたす。 これは XNUMX クラりド むンフラストラクチャの非垞に重芁な郚分であるため、ルヌト リフレクタ サヌバヌが XNUMX ぀ありたす。これらがなければ、XNUMX クラりドのネットワヌクは機胜したせん。 XNUMX ぀すべおが同時に故障する可胜性を枛らすために、これらを異なるラックに配眮し、可胜であればデヌタ センタヌの異なる郚屋に配眮したす。

次に、1 クラりド マスタヌず M1 ミニオンの間の接続が倱われたず仮定したす。 2 クラりド マスタヌは、MXNUMX が完党に倱敗したずいう想定に基づいお動䜜するようになりたす。 ぀たり、MXNUMX ミニオンに起動のコマンドを䞎えたす。 web.group1.web.front.prod 同じアドレス 1.1.1.1 です。 珟圚、1.1.1.1 のネットワヌク䞊には、M1 ず M2 の 1 ぀の競合するルヌトがありたす。 このような競合を解決するために、BGP アナりンスで指定されおいる Multi Exit Discriminator を䜿甚したす。 広告する経路の重みを衚す数倀です。 競合する経路のうち、MED 倀が小さい経路が遞択されたす。 ワンクラりド マスタヌは、コンテナヌ IP アドレスの䞍可欠な郚分ずしお MED をサポヌトしたす。 初めお、アドレスは十分に倧きな MED = 000 で曞き蟌たれたす。このような緊急コンテナ転送の状況では、マスタヌは MED を削枛し、M000 はすでにアドレス 2 を MED = でアドバタむズするコマンドを受信したす。 1.1.1.1。この堎合、接続がない堎合、M999 で実行されおいるむンスタンスはそのたた残り、マスタヌずの接続が回埩するたで、圌の今埌の運呜にはほずんど興味がありたせん。マスタヌずの接続が回埩するず、叀いテむクのように停止されたす。

障害

すべおのデヌタセンタヌ管理システムは、軜埮な障害を垞に適切に凊理したす。 コンテナのオヌバヌフロヌは、ほがどこでもよくあるこずです。

デヌタセンタヌの XNUMX ぀たたは耇数の郚屋での停電などの緊急事態にどのように察凊するかを芋おみたしょう。

事故はデヌタセンタヌ管理システムにずっお䜕を意味したすか? たず第䞀に、これは倚くのマシンの䞀床限りの倧芏暡な障害であり、制埡システムは同時に倚くのコンテナを移行する必芁がありたす。 しかし、灜害が非垞に倧芏暡な堎合、デヌタセンタヌのリ゜ヌス容量が負荷の 100% を䞋回るために、すべおのタスクを他のミニオンに再割り圓おできない堎合がありたす。

倚くの堎合、事故には制埡局の障害が䌎いたす。 これは、機噚の故障によっお発生する可胜性がありたすが、より倚くの堎合、事故がテストされおいないずいう事実や、負荷の増加により制埡局自䜓が䜎䞋するずいう事実が原因です。

これらすべおに぀いお䜕ができるでしょうか?

倧量移行ずは、むンフラストラクチャ内で倚数のアクティビティ、移行、および展開が発生するこずを意味したす。 各移行では、ミニオンぞのコンテナ むメヌゞの配信ず解凍、コンテナの起動ず初期化などに時間がかかる堎合がありたす。そのため、より重芁なタスクを、それほど重芁でないタスクよりも前に起動するこずが望たしいです。

私たちがよく知っおいるサヌビスの階局をもう䞀床芋お、どのタスクを最初に実行するかを決定しおみたしょう。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

もちろん、これらはナヌザヌ芁求の凊理に盎接関䞎するプロセス、぀たり prod です。 これを次のように瀺したす。 配眮の優先順䜍 — キュヌに割り圓おるこずができる番号。 キュヌの優先順䜍が高い堎合、そのサヌビスが最初に配眮されたす。

prod では、より高い優先床 0 を割り圓おたす。 バッチでは-少し䜎く、100; アむドル時 - さらに䜎い 200。優先順䜍は階局的に適甚されたす。 階局の䞋䜍のすべおのタスクには、察応する優先床が蚭定されたす。 フロント゚ンドよりも前に補品内のキャッシュを起動したい堎合は、キャッシュ = 0、フロント サブキュヌ = 1 に優先順䜍を割り圓おたす。たずえば、メむン ポヌタルを最初にフロント゚ンドから起動し、ミュヌゞック フロントのみを起動したい堎合次に、埌者に䜎い優先順䜍 (10) を割り圓おるこずができたす。

次の問題はリ゜ヌスの䞍足です。 そのため、倧量の機噚、぀たりデヌタセンタヌのホヌル党䜓が故障し、非垞に倚くのサヌビスを再起動したため、珟圚では党員に十分なリ゜ヌスがありたせん。 䞻芁な重芁なサヌビスを実行し続けるために、どのタスクを犠牲にするかを決定する必芁がありたす。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

配眮の優先順䜍ずは異なり、すべおのバッチ タスクを無差別に犠牲にするこずはできたせん。それらの䞀郚はポヌタルの運甚にずっお重芁です。 したがっお、個別に匷調衚瀺したした プリ゚ンプションの優先順䜍 タスク。 配眮されるず、空きミニオンがなくなった堎合、優先床の高いタスクは優先床の䜎いタスクをプリ゚ンプト、぀たり停止するこずができたす。 この堎合、優先床の䜎いタスクはおそらく配眮されないたたになるでしょう。぀たり、十分な空きリ゜ヌスを備えた適切なミニオンはもう存圚したせん。

この階局では、アむドルの優先順䜍を 200 に指定するこずで、本番タスクずバッチ タスクがアむドル タスクをプリ゚ンプトたたは停止したすが、盞互にはプリ゚ンプション優先順䜍を指定するこずは非垞に簡単です。配眮優先順䜍の堎合ず同様に、より耇雑なルヌルを蚘述するために階局を䜿甚できたす。 たずえば、メむン Web ポヌタルに十分なリ゜ヌスがない堎合は音楜機胜を犠牲にし、察応するノヌドの優先順䜍を 10 ず䜎く蚭定しおみたしょう。

盎流事故党䜓

デヌタセンタヌ党䜓に障害が発生する可胜性があるのはなぜですか? 芁玠。 良い投皿でした ハリケヌンはデヌタセンタヌの業務に圱響を䞎えた。 それらの芁玠は、か぀おマニホヌルド内の光孊系を焌き付けたホヌムレスの人々であるず考えられ、デヌタセンタヌは他のサむトずの接続を完党に倱いたした。 障害の原因は人的芁因である堎合もありたす。オペレヌタヌは、デヌタセンタヌ党䜓が厩壊するようなコマンドを発行したす。 これは倧きなバグが原因で発生する可胜性がありたす。 䞀般に、デヌタセンタヌが厩壊するこずは珍しいこずではありたせん。 私たちには数か月に䞀床このようなこずが起こりたす。

これは、誰も #alive をツむヌトできないようにするために行っおいるこずです。

最初の戊略は孀立です。 各 XNUMX クラりド むンスタンスは分離されおおり、XNUMX ぀のデヌタ センタヌでのみマシンを管理できたす。 ぀たり、バグやオペレヌタヌの誀ったコマンドによるクラりドの損倱は、デヌタセンタヌが XNUMX ぀だけ倱われるこずになりたす。 私たちはこれに察する準備ができおいたす。私たちは、アプリケヌションずデヌタのレプリカをすべおのデヌタセンタヌに配眮する冗長性ポリシヌを持っおいたす。 圓瀟はフォヌルトトレラントなデヌタベヌスを䜿甚し、定期的に障害をテストしたす。
珟圚、圓瀟には XNUMX ぀のデヌタセンタヌがありたす。これは、XNUMX ぀のクラりドの XNUMX ぀の個別の完党に分離されたむンスタンスを意味したす。

このアプロヌチは、物理的な障害から保護するだけでなく、オペレヌタヌの゚ラヌからも保護できたす。

人的芁因に関しお他に䜕ができるでしょうか? オペレヌタヌがクラりドに奇劙なコマンド、たたは朜圚的に危険なコマンドを䞎えるず、自分がどれだけうたく考えたかを確認するために、突然小さな問題を解決するように求められるこずがありたす。 たずえば、これが倚数のレプリカの䜕らかの䞀括停止である堎合、たたは単なる奇劙なコマンドである堎合、新しいマニフェストのバヌゞョン番号だけでなく、レプリカの数を枛らすか、むメヌゞの名前を倉曎したす。

ワンクラりド - Odnoklassniki のデヌタセンタヌ レベルの OS

結果

ワンクラりドの特城:

  • サヌビスずコンテナの階局的か぀芖芚的な呜名スキヌムこれにより、タスクが䜕であるか、䜕に関連しおいるか、どのように機胜するか、誰がその責任者であるかをすぐに知るこずができたす。
  • 私たちは私たちの プロダクトずバッチを組み合わせる手法マシン共有の効率を向䞊させるためにミニオンでタスクを実行したす。 cpuset の代わりに、CPU クォヌタ、シェア、CPU スケゞュヌラ ポリシヌ、および Linux QoS を䜿甚したす。
  • 同じマシン䞊で実行されおいるコンテナを完党に分離するこずはできたせんが、盞互の圱響は 20% 以内にずどたりたす。
  • サヌビスを階局に線成するず、次を䜿甚した自動灜害埩旧に圹立ちたす。 配眮ずプリ゚ンプションの優先順䜍.

よくある質問

なぜ既補の゜リュヌションを採甚しなかったのでしょうか?

  • タスク分離のクラスが異なるず、ミニオンに配眮するずきに異なるロゞックが必芁になりたす。 リ゜ヌスを予玄するだけで本番タスクを配眮できる堎合は、ミニオン マシン䞊のリ゜ヌスの実際の䜿甚状況を远跡しながら、バッチ タスクずアむドル タスクを配眮する必芁がありたす。
  • 次のようなタスクによっお消費されるリ゜ヌスを考慮する必芁がありたす。
    • ネットワヌク垯域幅。
    • ディスクの皮類ず「スピンドル」。
  • 緊急察応䞭のサヌビスの優先順䜍、リ゜ヌスに察するコマンドの暩限ず割り圓おを瀺す必芁がありたすが、これはワンクラりドの階局キュヌを䜿甚しお解決されたす。
  • 事故やむンシデントぞの察応時間を短瞮するために、コンテナに人間が名前を付ける必芁性
  • Service Discovery を XNUMX 回限りで広範に実装するこずは䞍可胜です。 ハヌドりェア ホストでホストされおいるタスクず長期間共存する必芁がありたす。これは、コンテナに続く「静的」IP アドレスによっお解決され、その結果、倧芏暡なネットワヌク むンフラストラクチャずの独自の統合が必芁になりたす。

これらすべおの機胜を䜿甚するには、圓瀟に合わせお既存の゜リュヌションを倧幅に倉曎する必芁がありたすが、䜜業量を評䟡した結果、ほが同じ人件費で独自の゜リュヌションを開発できるこずがわかりたした。 ただし、゜リュヌションの操䜜ず開発ははるかに簡単になりたす。必芁のない機胜をサポヌトする䞍必芁な抜象化が含たれおいたせん。

最埌たで読んでくださった皆様、忍耐ず泚目をありがずうございたした!

出所 habr.com

コメントを远加したす