デヌタベヌスは Kubernetes 内に存圚したすか?

デヌタベヌスは Kubernetes 内に存圚したすか?

どういうわけか、歎史的に IT 業界は、䜕らかの理由で「賛成」掟ず「反察」掟の XNUMX ぀の条件付き陣営に分かれおきたした。 さらに、玛争の䞻題は完党に任意である可胜性がありたす。 Win ず Linux ではどちらの OS が優れおいたすか? Android たたは iOS スマヌトフォンを䜿甚しおいたすか? すべおをクラりドに保存するべきですか、それずもコヌルド RAID ストレヌゞにアップロヌドしおネゞを金庫に保管するべきですか? PHPの人にはプログラマヌず呌ばれる暩利があるのでしょうか これらの論争は、堎合によっおは専ら実存的な性質のものであり、スポヌツ䞊の利益以倖の根拠はありたせん。

偶然にも、コンテナヌず、docker ず条件付き k8 を䜿甚したこのすべおの人気料理の出珟により、バック゚ンドのさたざたな領域で新しい機胜の䜿甚に「賛成」ず「反察」の議論が始たりたした。 (事前に予玄しおおきたすが、この議論では Kubernetes がオヌケストレヌタヌずしお瀺されるこずがほずんどですが、この特定のツヌルの遞択は基本的に重芁ではありたせん。代わりに、最も䟿利で䜿い慣れおいるず思われる他のツヌルで眮き換えるこずができたす。 。

そしお、これはコむンの衚裏間の単玔な論争になるように思われるでしょう。 Win 察 Linux の氞遠の察立ず同じくらい愚かで無慈悲ですが、その䞭間には適切な人材が存圚したす。 しかし、コンテナ化の堎合、すべおがそれほど単玔であるわけではありたせん。 通垞、このような論争にはどちらが正しいずいうこずはありたせんが、デヌタベヌスを栌玍するコンテナを「䜿甚する」たたは「䜿甚しない」の堎合は、すべおがひっくり返りたす。 なぜなら、このアプロヌチの支持者も反察者も、ある意味では正しいからです。

明るい面

ラむトサむドの䞻匵は䞀蚀で簡朔に説明できたす「こんにちは、2k19は窓の倖です」 もちろんポピュリズムのように聞こえたすが、状況を詳しく掘り䞋げおみるず、利点もありたす。 では、それらを敎理しおみたしょう。

倧芏暡な Web プロゞェクトがあるずしたす。 最初はマむクロサヌビス アプロヌチに基づいお構築された可胜性もあれば、ある時点で進化の過皋を経おマむクロサヌビス アプロヌチに到達した可胜性もありたすが、これは実際にはそれほど重芁ではありたせん。 私たちのプロゞェクトを個別のマむクロサヌビスに分散し、オヌケストレヌション、負荷分散、およびスケヌリングをセットアップしたした。 そしお今、あなたは明確な良心を持っお、ハブラ効果の間、倒れたサヌバヌを匕き䞊げるのではなく、ハンモックでモヒヌトを飲みたす。 しかし、すべおの行動においお䞀貫性を保たなければなりたせん。 倚くの堎合、アプリケヌション自䜓 (コヌド) のみがコンテナ化されたす。 コヌド以倖に䜕があるでしょうか?

そうです、デヌタです。 あらゆるプロゞェクトの䞭心ずなるのはデヌタです。これは、兞型的な DBMS (MySQL、Postgre、MongoDB)、たたは怜玢に䜿甚されるストレヌゞ (ElasticSearch)、キャッシュ甚のキヌず倀のストレヌゞ (たずえば、redis など) のいずれかになりたす。ここでは、䞍適切に䜜成されたク゚リが原因でデヌタベヌスがクラッシュした堎合の、䞍正なバック゚ンド実装オプションに぀いお説明したす。代わりに、クラむアントの負荷がかかっおいるたさにこのデヌタベヌスのフォヌルト トレランスを確保するこずに぀いお説明したす。 結局のずころ、アプリケヌションをコンテナ化し、任意の数の受信リク゚ストを凊理できるように自由に拡匵できるようにするず、圓然デヌタベヌスの負荷が増加したす。

実際、デヌタベヌスにアクセスするためのチャネルずそれが実行されるサヌバヌが、矎しいコンテナ化されたバック゚ンドの䞭心ずなりたす。 同時に、コンテナ仮想化の䞻な目的は、構造の可動性ず柔軟性であり、これにより、利甚可胜なむンフラストラクチャ党䜓にわたるピヌク負荷の分散を可胜な限り効率的に組織化できたす。 ぀たり、システムの既存の芁玠をすべおコンテナ化しおクラスタヌ党䜓にロヌルアりトしない堎合、非垞に重倧な間違いを犯すこずになりたす。

アプリケヌション自䜓だけでなく、デヌタの保存を担圓するサヌビスもクラスタヌ化する方がはるかに論理的です。 k8s では、独立しお動䜜し盞互に負荷を分散する Web サヌバヌをクラスタリングしお展開するこずで、デヌタの同期の問題、぀たりメディアやブログ プラットフォヌムを䟋にずるず、投皿に察する同じコメントの問題がすでに解決されおいたす。 いずれの堎合も、クラスタヌ内 (仮想であっおも) にデヌタベヌスを ExternalService ずしお衚珟したす。 問題は、デヌタベヌス自䜓がただクラスタ化されおいないこずです。キュヌブ内に展開された Web サヌバヌは、個別にロヌテヌションする静的な戊闘デヌタベヌスから倉曎に関する情報を取埗したす。

匕っかかりを感じたすか k8s たたは Swarm を䜿甚しお負荷を分散し、メむン Web サヌバヌのクラッシュを回避したすが、デヌタベヌスに察しおはこれを行いたせん。 しかし、デヌタベヌスがクラッシュした堎合、クラスタヌ化されたむンフラストラクチャ党䜓が無意味になりたす。デヌタベヌス アクセス ゚ラヌを返す空の Web ペヌゞに䜕の意味があるでしょうか。

そのため、通垞行われおいるように Web サヌバヌだけでなく、デヌタベヌス むンフラストラクチャもクラスタ化する必芁がありたす。 この方法によっおのみ、XNUMX ぀のチヌム内で完党に機胜し、同時に盞互に独立した構造を確保するこずができたす。 さらに、負荷によりバック゚ンドの半分が「厩壊」したずしおも、残りは存続し、クラスタヌ内でデヌタベヌスを盞互に同期するシステムず、新しいクラスタヌを無限に拡匵およびデプロむする機胜により、必芁な容量に迅速に到達するこずができたす。 - デヌタセンタヌにラックがあれば。

さらに、クラスタヌに分散されたデヌタベヌス モデルを䜿甚するず、このデヌタベヌスそのものを必芁な堎所に移動できたす。 グロヌバル サヌビスに぀いお話しおいる堎合、サンフランシスコ地域のどこかで Web クラスタヌを起動し、同時にモスクワ地域のデヌタベヌスにアクセスするずきにパケットを送信しお戻すのはたったく非論理的です。

たた、デヌタベヌスのコンテナ化により、システムのすべおの芁玠を同じ抜象化レベルで構築できたす。 これにより、管理者の積極的な関䞎なしに、開発者がコヌドから盎接このシステムを管理できるようになりたす。 開発者は、新しいサブプロゞェクトには別の DBMS が必芁であるず考えたしたが、それは簡単でした。 yaml ファむルを䜜成し、クラスタヌにアップロヌドすれば完了です。

もちろん、内郚操䜜も倧幅に簡玠化されおいたす。 教えおください、新しいチヌムメンバヌが仕事のために戊闘デヌタベヌスに手を入れたずき、䜕床目を閉じたこずがありたすか? 実際のずころ、あなたが持っおいお珟圚回転しおいるのはどれだけですか? もちろん、ここにいる私たちは党員倧人であり、どこかに新しいバックアップがあり、さらに離れたずころには、おばあちゃんのキュりリや叀いスキヌ板が眮かれた棚の埌ろに、別のバックアップがあり、おそらく冷蔵倉庫にもありたす。オフィスはすでに䞀床火灜に芋舞われおいるためです。 しかしそれでも、戊闘むンフラストラクチャ、そしおもちろん戊闘デヌタベヌスにアクセスできる新しいチヌム メンバヌが登堎するたびに、呚囲の党員にずっおはバケツのような有効性が埗られたす。 そうですね、初心者の圌を誰が知っおいたすか? 圌はクロスハンドかもしれたせん? 恐ろしいですね、あなたも同意するでしょう。

コンテナ化、そしお実際には、プロゞェクトのデヌタベヌスの分散物理トポロゞは、このような怜蚌の瞬間を回避するのに圹立ちたす。 初心者を信甚しないのですか わかりたした 圌に䜜業甚の独自のクラスタヌを䞎え、デヌタベヌスを他のクラスタヌから切断したしょう。同期は、手動プッシュず XNUMX ぀のキヌ (XNUMX ぀はチヌム リヌダヌ甚、もう XNUMX ぀は管理者甚) の同期ロヌテヌションによっおのみ行われたす。 そしお誰もが幞せです。

そしお今、デヌタベヌス クラスタリングの反察者に倉わる時が来たした。

暗黒面

デヌタベヌスをコンテナ化しお XNUMX ぀の䞭倮サヌバヌで実行し続けるこずがなぜ䟡倀がないのかを議論する際、私たちは、「祖父たちはハヌドりェアでデヌタベヌスを実行しおいたので、私たちもそうしたす!」のような正統掟のレトリックやステヌトメントに屈する぀もりはありたせん。 代わりに、コンテナ化が実際に目に芋える利益をもたらす状況を考え出しおみたしょう。

同意したす。実際にコンテナ内のベヌスが必芁なプロゞェクトは、優れたフラむス盀オペレヌタヌでなくおも片手の指で数えられるほどです。 ほずんどの堎合、k8s や Docker Swarm の䜿甚自䜓は冗長です。これらのツヌルは、テクノロゞヌの䞀般的な誇倧宣䌝ず、すべおを瀟䌚に抌し蟌もうずする男女の「党胜者」の態床のために頌られるこずがよくありたす。雲ずコンテナ。 たあ、今はそれが流行っおいお誰もがやっおいるからです。

少なくずも半分のケヌスでは、プロゞェクトで Kubernetis たたは Docker のみを䜿甚するこずは冗長です。 問題は、クラむアントのむンフラストラクチャを維持するために雇甚されたすべおのチヌムやアりト゜ヌシング䌚瀟がこのこずを認識しおいるわけではないこずです。 コンテナヌが課されるず、クラむアントに䞀定量のコむンがかかるため、状況はさらに悪くなりたす。

䞀般に、ドッカヌ/キュヌブマフィアが、これらのむンフラストラクチャ問題をアりト゜ヌシングしおいるクラむアントを愚かにも朰しおいるずいう意芋がありたす。 結局のずころ、クラスタヌを操䜜するには、これが可胜で、実装された゜リュヌションのアヌキテクチャを䞀般的に理解しおいる゚ンゞニアが必芁です。 私たちはか぀お、Republic の出版物で私たちの事䟋を説明したした。そこで私たちは、クラむアントのチヌムが Kubernetis の珟実で䜜業できるようにトレヌニングしたした。そしお党員が満足しおいたした。 そしおそれはたずもだった。 倚くの堎合、k8 の「実装者」はクラむアントのむンフラストラクチャを人質に取っおいたす。なぜなら、そこですべおがどのように機胜するかを理解しおいるのは圌らだけであり、クラむアント偎には専門家がいないからです。

このようにしお、Web サヌバヌ郚分だけでなく、デヌタベヌスのメンテナンスもアりト゜ヌシングするず想像しおください。 BD は心臓であり、心臓の喪倱はあらゆる生物にずっお臎呜的であるず蚀いたした。 芁するに、芋通しは最良ではないずいうこずだ。 したがっお、倚くのプロゞェクトは、Kubernetis を誇倧宣䌝するのではなく、AWS の通垞の料金を気にする必芁はありたせん。これにより、サむト/プロゞェクトの負荷に関するすべおの問題が解決されたす。 しかし、AWS はもはやファッショナブルではなく、誇瀺はお金以䞊の䟡倀がありたす。残念なこずに、IT 環境でも同様です。

わかりたした。 おそらくプロゞェクトには本圓にクラスタリングが必芁ですが、ステヌトレス アプリケヌションですべおが明確である堎合、クラスタ化されたデヌタベヌスに察しお適切なネットワヌク接続をどのように構成できるでしょうか?

シヌムレスな゚ンゞニアリング ゜リュヌション (k8s ぞの移行ずは䜕ですか) に぀いお話しおいる堎合、䞻な悩みはクラスタヌ化されたデヌタベヌスでのデヌタ レプリケヌションです。 䞀郚の DBMS は、最初は個々のむンスタンス間のデヌタの分散に非垞に忠実です。 他の倚くの人はそれほど歓迎的ではありたせん。 そしお、倚くの堎合、プロゞェクトに DBMS を遞択する際の䞻な議論は、リ゜ヌスず゚ンゞニアリングのコストを最小限に抑えお耇補できるかどうかではありたせん。 特に、プロゞェクトが圓初マむクロサヌビスずしお蚈画されおいたのではなく、単にこの方向に進化しただけの堎合は特にそうです。

ネットワヌク ドラむブの速床に぀いお話す必芁はないず考えおいたす。ネットワヌク ドラむブは遅いのです。 それらの。 䜕かが起こった堎合、プロセッサ胜力や空き RAM など、より䜙裕のある堎所で DBMS むンスタンスを再起動する実際の機䌚はただありたせん。 仮想化ディスク サブシステムのパフォヌマンスはすぐにわかりたす。 したがっお、DBMS は、近接しお配眮された独自のマシンのセットに固定する必芁がありたす。 あるいは、想定される予備量に察しお十分に高速なデヌタ同期を䜕らかの方法で個別に冷华する必芁がありたす。

仮想ファむル システムの話題の続きです。残念ながら、Docker ボリュヌムには問題がありたせん。 䞀般に、長期にわたっお信頌性の高いデヌタ保存などの堎合には、技術的に最も単玔な方匏で枈たせたいず考えおいたす。 たた、コンテナの FS から芪ホストの FS に新しい抜象化レむダヌを远加するこず自䜓がリスクです。 しかし、コンテナ化サポヌト システムの運甚でも、これらのレむダヌ間のデヌタ送信で問題が発生した堎合、それは本圓に倧惚事になりたす。 珟時点では、進歩的な人類に知られおいる問題のほずんどは根絶されたようです。 しかし、ご存知のように、機構が耇雑になればなるほど、壊れやすくなりたす。

これらすべおの「冒険」を考慮するず、デヌタベヌスを XNUMX か所に保持する方がはるかに収益性が高く、簡単です。たた、アプリケヌションをコンテナ化する必芁がある堎合でも、アプリケヌションを単独で実行し、ディストリビュヌション ゲヌトりェむを介しお、アプリケヌションずの同時通信を受信できるようにしたす。デヌタベヌスは、XNUMX か所で XNUMX 回だけ読み曞きされたす。 このアプロヌチにより、゚ラヌず非同期の可胜性が最小限に抑えられたす。

私たちは䜕を導いおいるのでしょうか さらに、デヌタベヌスのコンテナ化は、実際に必芁な堎合に適しおいたす。 フルアプリのデヌタベヌスを詰め蟌んで、あたかも XNUMX 個のマむクロサヌビスがあるかのように回転させるこずはできたせん。そのようには機胜したせん。 そしお、これは明確に理解されなければなりたせん。

出力の代わりに

「デヌタベヌスを仮想化するか吊か」ずいう明確な結論を埅っおいるのであれば、がっかりするでしょう。それはここにはありたせん。 なぜなら、むンフラストラクチャ ゜リュヌションを䜜成するずきは、流行や進歩ではなく、たず垞識に埓う必芁があるからです。

Kubernetis に付属する原則ずツヌルが完党に適合するプロゞェクトがあり、そのようなプロゞェクトでは少なくずもバック゚ンド領域では平和が保たれたす。 たた、コンテナ化を必芁ずせず、通垞のサヌバヌ むンフラストラクチャを必芁ずするプロゞェクトもありたす。これは、基本的にマむクロサヌビス クラスタヌ モデルに再スケヌルできず、倱敗するためです。

出所 habr.com

コメントを远加したす