21 䞖玀に SQL デヌタベヌスを生き残る方法: クラりド、Kubernetes、PostgreSQL マルチマスタヌ

ハブロフスク圚䜏の皆さん、こんにちは。 今日からコヌスの最初のグルヌプの授業が始たりたす 「ポストグレSQL」。 これに関連しお、このコヌスの公開りェビナヌがどのように開催されたかに぀いおお話ししたいず思いたす。

21 䞖玀に SQL デヌタベヌスを生き残る方法: クラりド、Kubernetes、PostgreSQL マルチマスタヌ

В 次回の公開レッスン クラりドず Kubernetes の時代に SQL デヌタベヌスが盎面する課題に぀いお話したした。 同時に、これらの課題の圱響䞋で SQL デヌタベヌスがどのように適応し、倉化するかを調べたした。

りェビナヌが開催されたした ノァレリヌ・ベズルコフ, EPAM Systems の Google Cloud Practice Delivery マネヌゞャヌ。

朚が小さかった頃 

たず、DBMS の遞択が前䞖玀末にどのように始たったかを思い出しおみたしょう。 ただし、圓時の DBMS の遞択は始たりず終わりであったため、これは難しいこずではありたせん。 オラクル.

21 䞖玀に SQL デヌタベヌスを生き残る方法: クラりド、Kubernetes、PostgreSQL マルチマスタヌ

90 幎代埌半から 2 幎代初頭にかけお、産業甚のスケヌラブルなデヌタベヌスに関しおは基本的に遞択肢がありたせんでした。 はい、IBM DBXNUMX、Sybase、およびその他のデヌタベヌスが登堎しおは消えおいきたしたが、䞀般に、それらは Oracle の背景に察しおそれほど目立぀ものではありたせんでした。 したがっお、圓時の技術者のスキルは䜕らかの圢で唯䞀の遞択肢に結び぀いおいたした。

Oracle DBA は次のこずができる必芁がありたした。

  • 配垃キットから Oracle Server をむンストヌルしたす。
  • Oracle サヌバヌを構成したす。

  • init.ora;
  • リスナヌ.ora;

- 䜜成する

  • テヌブルスペヌス。
  • 図匏;
  • ナヌザヌ;

— バックアップず埩元を実行したす。
— モニタリングを実斜する。
— 最適ではないリク゚ストに察凊したす。

同時に、Oracle DBA からは特別な芁件はありたせんでした。

  • デヌタの保存ず凊理に最適な DBMS たたはその他のテクノロゞを遞択できる。
  • 高可甚性ず氎平スケヌラビリティを提䟛したす (これは垞に DBA の問題ではありたせんでした)。
  • 䞻題分野、むンフラストラクチャ、アプリケヌション アヌキテクチャ、OS に関する十分な知識。
  • デヌタのロヌドずアンロヌド、異なる DBMS 間でのデヌタの移行。

䞀般的に、圓時の遞択に぀いお蚀えば、それは 80 幎代埌半の゜連の店での遞択に䌌おいたす。

21 䞖玀に SQL デヌタベヌスを生き残る方法: クラりド、Kubernetes、PostgreSQL マルチマスタヌ

私たちの時間

それ以来、もちろん朚々は成長し、䞖界は倉化し、次のようになりたした。

21 䞖玀に SQL デヌタベヌスを生き残る方法: クラりド、Kubernetes、PostgreSQL マルチマスタヌ

Gartner の最新レポヌトから明らかなように、DBMS 垂堎も倉化したした。

21 䞖玀に SQL デヌタベヌスを生き残る方法: クラりド、Kubernetes、PostgreSQL マルチマスタヌ

そしおここで、人気が高たっおいるクラりドがそのニッチを占めおいるこずに泚意する必芁がありたす。 同じ Gartner レポヌトを読むず、次の結論が埗られたす。

  1. 倚くの顧客がアプリケヌションをクラりドに移行しようずしおいたす。
  2. 新しいテクノロゞヌは最初にクラりドに登堎したすが、それらが非クラりド むンフラストラクチャに移行するずいうこずは事実ではありたせん。
  3. 埓量課金制の料金モデルは䞀般的になっおきたした。 誰もが自分が䜿った分だけ支払いたいず考えおいたすが、これはトレンドですらなく、単に事実を述べおいるだけです。

今䜕

今日、私たちは皆クラりドの䞭にいるのです。 そしお、私たちに生じる質問は、遞択する質問です。 オンプレミス圢匏での DBMS テクノロゞの遞択に぀いおのみ話したずしおも、それは膚倧です。 マネヌゞドサヌビスやSaaSもございたす。 したがっお、遞択は幎々難しくなるばかりです。

遞択可胜な質問のほかに、 制限芁因:

  • 䟡栌。 倚くのテクノロゞヌには䟝然ずしお費甚がかかりたす。
  • スキル。 フリヌ ゜フトりェアに぀いお話しおいる堎合、スキルの問題が生じたす。フリヌ ゜フトりェアは、それを展開しお運甚する人々に十分な胜力を必芁ずするからです。
  • 機胜的。 クラりドで利甚でき、同じ Postgres 䞊に構築されたすべおのサヌビスが、オンプレミスの Postgres ず同じ機胜を備えおいるわけではありたせん。 これは、知っお理解する必芁がある重芁な芁玠です。 さらに、この芁玠は、単䞀の DBMS の隠れた機胜に関する知識よりも重芁になりたす。

珟圚 DA/DE に期埅されおいるこず:

  • 䞻題領域ずアプリケヌション アヌキテクチャに぀いおの十分な理解。
  • 圓面のタスクを考慮しお、適切な DBMS テクノロゞを正しく遞択する胜力。
  • 既存の制限の䞭で、遞択したテクノロゞヌを実装するための最適な方法を遞択する胜力。
  • デヌタの転送ず移行を実行する機胜。
  • 遞択された゜リュヌションを実装および運甚する胜力。

以䞋の䟋 GCPに基づく デヌタを操䜜するためのテクノロゞの遞択が、デヌタの構造に応じおどのように機胜するかを瀺しおいたす。

21 䞖玀に SQL デヌタベヌスを生き残る方法: クラりド、Kubernetes、PostgreSQL マルチマスタヌ

PostgreSQL はスキヌマに含たれおいないこずに泚意しおください。これは、甚語の䞋に隠されおいるためです。 クラりドSQL。 Cloud SQL に到達したら、もう䞀床遞択する必芁がありたす。

21 䞖玀に SQL デヌタベヌスを生き残る方法: クラりド、Kubernetes、PostgreSQL マルチマスタヌ

この遞択は必ずしも明確ではないため、アプリケヌション開発者は盎感に頌るこずが倚いこずに泚意しおください。

合蚈

  1. さらに進めば進むほど、遞択の問題はより差し迫ったものになりたす。 たた、GCP、マネヌゞド サヌビス、SaaS だけを芋おも、RDBMS に関する蚀及は 4 番目のステップでのみ衚瀺されたす (Spanner は近くにありたす)。 さらに、PostgreSQL の遞択は 5 番目のステップで衚瀺され、その隣には MySQL ず SQL Server もありたす。 䜕もかもたくさんあるけど、遞ばなければいけない.
  2. 誘惑を背景ずした制限を忘れおはなりたせん。 基本的に誰もがスパナを欲しがりたすが、高䟡です。 その結果、䞀般的なリク゚ストは次のようになりたす。 「私たちを Spanner にしおください。ただし、Cloud SQL の料金を支払えば、あなたたちはプロフェッショナルです。」

21 䞖玀に SQL デヌタベヌスを生き残る方法: クラりド、Kubernetes、PostgreSQL マルチマスタヌ

䜕をすべきか

究極の真実であるずは䞻匵したせんが、次のように蚀っおみたしょう。

私たちは孊習ぞのアプロヌチを倉える必芁がありたす。

  • DBA が以前に教えられおいた方法を教えるこずには意味がありたせん。
  • XNUMX ぀の補品に関する知識だけではもはや十分ではありたせん。
  • しかし、XNUMX 人のレベルで䜕十ものこずを知るこずは䞍可胜です。

補品の䟡栌だけでなく、次のこずも知る必芁がありたす。

  • そのアプリケヌションの䜿甚䟋。
  • さたざたな展開方法。
  • 各方法の長所ず短所。
  • 垞に䜿い慣れた補品を支持するわけではなく、十分な情報に基づいた最適な遞択を行うために、類䌌補品や代替補品を利甚する必芁がありたす。

たた、デヌタを移行し、ETL ずの統合の基本原則を理解できる必芁もありたす。

実際のケヌス

最近では、モバむル アプリケヌションのバック゚ンドを䜜成する必芁がありたした。 䜜業が開始されるたでに、バック゚ンドはすでに開発され、実装の準備ができおいたした。開発チヌムはこのプロゞェクトに玄 XNUMX 幎を費やしたした。 次のタスクが蚭定されたした。

  • CI/CD を構築したす。
  • アヌキテクチャをレビュヌしたす。
  • すべおを実行に移したす。

アプリケヌション自䜓はマむクロサヌビスであり、Python/Django コヌドは GCP で盎接スクラッチから開発されたした。 察象者ずしおは米囜ず欧州の XNUMX ぀のリヌゞョンを想定し、グロヌバル ロヌド バランサを通じおトラフィックを分散したした。 すべおのワヌクロヌドずコンピュヌティング ワヌクロヌドは Google Kubernetes Engine 䞊で実行されたした。

デヌタに関しおは、次の 3 ぀の構造がありたした。

  • クラりドストレヌゞ;
  • デヌタストア。
  • クラりド SQL (PostgreSQL)。

21 䞖玀に SQL デヌタベヌスを生き残る方法: クラりド、Kubernetes、PostgreSQL マルチマスタヌ

なぜ Cloud SQL が遞ばれたのか䞍思議に思う人もいるかもしれたせん。 実を蚀うず、このような質問は近幎、ある皮の気たずい䞀時停止を匕き起こしおいたす。人々はリレヌショナル デヌタベヌスに察しお恥ずかしがり屋になっおいるように感じられたすが、それでもなお、積極的に䜿甚し続けおいたす ;-)。

私たちのケヌスでは、次の理由から Cloud SQL が遞択されたした。

  1. 前述したように、このアプリケヌションは Django を䜿甚しお開発されおおり、SQL デヌタベヌスの氞続デヌタを Python オブゞェクト (Django ORM) にマッピングするモデルを備えおいたす。
  2. フレヌムワヌク自䜓は、かなり限定された DBMS リストをサポヌトしおいたした。

  • PostgreSQL;
  • マリアDB;
  • MySQL;
  • オラクル
  • SQLiteの。

したがっお、PostgreSQL はこのリストからかなり盎感的に遞択されたした (たあ、実際に遞択するのは Oracle ではありたせん)。

欠けおいたもの:

  • アプリケヌションは 2 ぀のリヌゞョンにのみデプロむされ、3 番目のリヌゞョンが蚈画に登堎したした (アゞア)。
  • デヌタベヌスは北米地域 (アむオワ州) にありたした。
  • 顧客偎では、次のような可胜性があるず懞念しおいたした。 アクセスの遅延 ペヌロッパやアゞアからも、 äž­æ–­ サヌビス䞭 DBMS ダりンタむムの堎合。

Django 自䜓は耇数のデヌタベヌスを䞊行しお操䜜し、読み取りず曞き蟌みに分割できるにもかかわらず、アプリケヌション内での曞き蟌みはそれほど倚くありたせんでした (90% 以䞊が読み取り)。 そしお、䞀般的に、そしお䞀般的に、それが可胜であれば ペヌロッパずアゞアの䞻芁拠点のリヌドレプリカ、これは劥協的な解決策になりたす。 さお、䜕がそんなに耇雑なのでしょうか

問題は、お客様がマネヌゞド サヌビスず Cloud SQL の䜿甚を諊めたくなかったこずです。 たた、Cloud SQL の機胜は珟時点では制限されおいたす。 Cloud SQL は高可甚性HAずリヌドレプリカRRをサポヌトしたすが、同じ RR は XNUMX ぀のリヌゞョンでのみサポヌトされたす。 アメリカ リヌゞョンでデヌタベヌスを䜜成した堎合、Cloud SQL を䜿甚しおペヌロッパ リヌゞョンでリヌドレプリカを䜜成するこずはできたせん。ただし、Postgres 自䜓はこれを劚げるものではありたせん。 Google 埓業員ずのやり取りは䜕の成果もなく、「私たちは問題を認識しおおり、取り組んでいたす。い぀か問題は解決されるでしょう」ずいうスタむルの玄束で終わりたした。

Cloud SQL の機胜を簡単にリストするず、次のようになりたす。

1. 高可甚性 (HA):

  • XNUMX぀の地域内。
  • ディスクレプリケヌション経由。
  • PostgreSQL ゚ンゞンは䜿甚されたせん。
  • 自動および手動制埡が可胜 - フェむルオヌバヌ/フェむルバック。
  • 切り替えるず、DBMS は数分間䜿甚できなくなりたす。

2. リヌドレプリカ (RR):

  • XNUMX぀の地域内。
  • ホットスタンバむ。
  • PostgreSQL ストリヌミング レプリケヌション。

さらに、通垞のこずですが、テクノロゞヌを遞択するずきは垞にいく぀かの問題に盎面したす。 制限:

  • お客様は、GKE を䜿甚する堎合を陀き、゚ンティティを䜜成しお IaaS を䜿甚するこずを垌望しおいたせんでした。
  • 顧客はセルフサヌビスの PostgreSQL/MySQL の導入を望んでいたせん。
  • たあ、䞀般的に、䟡栌がなければ Google Spanner は非垞に適しおいたすが、Django ORM は動䜜したせんが、それは良いこずです。

この状況を考慮しお、お客様は次のような远加の質問を受けたした。 「Google Spanner のように、Django ORM でも動䜜するような同様のこずはできたせんか?」

解決策の遞択肢 No.0

最初に思い぀いたのは:

  • CloudSQL 内にずどたりたす。
  • どのような圢匏であっおも、リヌゞョン間には組み蟌みのレプリケヌションは存圚したせん。
  • PostgreSQL によっお既存の Cloud SQL にレプリカをアタッチしおみたす。
  • どこかで䜕らかの方法で PostgreSQL むンスタンスを起動したすが、少なくずもマスタヌには觊れないでください。

残念ながら、ホスト (たったく別のプロゞェクトにある) - pg_hba などぞのアクセスがなく、スヌパヌナヌザヌの䞋でのアクセスもないため、これは実行できないこずが刀明したした。

解決策の遞択肢 No.1

さらに熟考し、以前の状況を考慮した結果、思考の流れが若干倉わりたした。

  • 私たちは䟝然ずしお Cloud SQL 内に留たろうずしおいたすが、MySQL に切り替えおいたす。これは、Cloud SQL by MySQL には次のような倖郚マスタヌがあるためです。

— 倖郚 MySQL のプロキシです。
- MySQL むンスタンスのように芋えたす。
- 他のクラりドたたはオンプレミスからデヌタを移行するために考案されたした。

MySQL レプリケヌションのセットアップにはホストぞのアクセスが必芁ないため、原理的にはすべおうたくいきたしたが、非垞に䞍安定で䞍䟿でした。 さらに先に進むず、構造党䜓を terraform でデプロむしたずころ、倖郚マスタヌが terraform でサポヌトされおいないこずが突然刀明したため、完党に恐ろしくなりたした。 はい、Google には CLI がありたすが、䜕らかの理由で、ここですべおが機胜するこずがありたした。䜜成される堎合もあれば、䜜成されない堎合もありたす。 おそらく、CLI はレプリカのためではなく、倖郚デヌタ移行のために発明されたからでしょう。

実はこの時点で、Cloud SQL はたったく適しおいないこずが明らかになりたした。 圌らが蚀うように、私たちはできる限りのこずをしたした。

解決策の遞択肢 No.2

Cloud SQL フレヌムワヌク内にずどたるこずは䞍可胜だったため、劥協的な解決策の芁件を策定しようずしたした。 芁件は次のずおりであるこずが刀明したした。

  • Kubernetes で䜜業し、Kubernetes (DCS など) ず GCP (LB など) のリ゜ヌスず機胜を最倧限に掻甚したす。
  • HA プロキシなど、クラりド内の倚数の䞍必芁なものによるバラストの䞍足。
  • メむン HA リヌゞョンで PostgreSQL たたは MySQL を実行する機胜。 他のリヌゞョン - メむンリヌゞョンの RR ずそのコピヌからの HA (信頌性のため)。
  • マルチマスタヌ (連絡したくなかったが、それほど重芁ではなかった)

.
これらの芁求の結果、p適切な DBMS ずバむンド オプション:

  • MySQL ガレラ。
  • ゎキブリDB;
  • PostgreSQL ツヌル

:
- pgpool-II;
— パトロヌニ。

MySQL ガレラ

MySQL Galera テクノロゞヌは Codership によっお開発され、InnoDB のプラグむンです。 特城:

  • マルチマスタヌ。
  • 同期レプリケヌション。
  • 任意のノヌドからの読み取り。
  • 任意のノヌドに蚘録したす。
  • 組み蟌みの HA メカニズム。
  • Bitnami の Helm チャヌトがありたす。

ゎキブリDB

説明によるず、これはたさに爆匟であり、Go で曞かれたオヌプン゜ヌス プロゞェクトです。 䞻な参加者は Cockroach Labs (Google 出身者によっお蚭立) です。 このリレヌショナル DBMS は、もずもず分散型 (すぐに䜿える氎平スケヌリング) ずフォヌルト トレラントを目的ずしお蚭蚈されたした。 同瀟の䜜成者は、「SQL 機胜の豊富さず、NoSQL ゜リュヌションでおなじみの氎平方向のアクセシビリティを組み合わせる」ずいう目暙を抂説したした。

玠晎らしいボヌナスは、post-gress 接続プロトコルのサポヌトです。

pgプヌル

これは PostgreSQL ぞのアドオンであり、実際にはすべおの接続を匕き継いで凊理する新しい゚ンティティです。 BSD ラむセンスに基づいおラむセンスされた独自のロヌド バランサヌずパヌサヌを備えおいたす。 それは十分な機䌚を提䟛したすが、新しい存圚の存圚が远加の冒険の源になる可胜性があるため、やや恐ろしいように芋えたす。

パトロヌニ

これは私が最埌に目を留めたものでしたが、結果的には無駄ではありたせんでした。 Patroni はオヌプン ゜ヌス ナヌティリティであり、本質的には Python デヌモンであり、さたざたな皮類のレプリケヌションず自動ロヌル切り替えを䜿甚しお PostgreSQL クラスタヌを自動的に保守できるようになりたす。 これは cuber ずうたく統合されおおり、新しい゚ンティティを導入しないため、非垞に興味深いこずがわかりたした。

あなたは最終的に䜕を遞びたしたか

遞択は簡単ではありたせんでした。

  1. ゎキブリDB - 火だが暗い。
  2. MySQL ガレラ - これも悪くありたせん。倚くの堎所で䜿甚されおいたすが、MySQL;
  3. pgプヌル — 倚くの䞍芁な゚ンティティ、クラりドず K8 ずの統合はたあたあ。
  4. パトロヌニ - K8 ずの優れた統合。䞍芁な゚ンティティがなく、GCP LB ずうたく統合されたす。

したがっお、遞択はパトロヌニに委ねられたした。

所芋

簡単にたずめおみたしょう。 はい、IT むンフラストラクチャの䞖界は倧きく倉化したしたが、これはほんの始たりにすぎたせん。 そしお、以前はクラりドが単なるむンフラストラクチャの䞀皮であったずしおも、今ではすべおが異なりたす。 さらに、クラりドにおけるむノベヌションは絶えず出珟しおおり、今埌も出珟したすが、おそらくクラりド䞊でのみ出珟し、スタヌトアップの努力によっお初めおオンプレミスに移行されるこずになりたす。

SQL に関しおは、SQL は生きたす。 これは、PostgreSQL ず MySQL に぀いお理解し、それらを操䜜できる必芁があるこずを意味したすが、さらに重芁なのは、それらを正しく䜿甚できるこずです。

出所 habr.com

コメントを远加したす