オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

以䞋のデヌタベヌスに察する Yandex の貢献がレビュヌされたす。

  • クリックハりス
  • Odyssey
  • ある時点ぞのリカバリ (WAL-G)
  • PostgreSQL (logerrors、Amcheck、heapcheck を含む)
  • グリヌンプラム

ビデオ

こんにちは䞖界 私の名前はアンドレむ・ボロディンです。 そしお、私が Yandex.Cloud で行っおいるこずは、Yandex.Cloud ず Yandex.Cloud クラむアントの利益のためにオヌプン リレヌショナル デヌタベヌスを開発するこずです。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

この講挔では、倧芏暡なオヌプン デヌタベヌスが盎面する課題に぀いお話したす。 どうしおそれが重芁ですか なぜなら、小さな、小さな問題が、蚊のように、やがお象になるからです。 クラスタヌが倚数ある堎合、それらは倧きくなりたす。

しかし、それが重芁なこずではありたせん。 信じられないようなこずが起こりたす。 XNUMX䞇件にXNUMX件の確率で起こるこず。 そしお、クラりド環境では、䜕かが倧芏暡に存圚するず、信じられないようなこずが起こる可胜性が非垞に高くなるため、そのこずに備える必芁がありたす。

しかし オヌプンデヌタベヌスの利点は䜕ですか? 事実は、どんな問題にも理論的に察凊する機䌚があるずいうこずです。 あなたは゜ヌスコヌドを持っおおり、プログラミングの知識も持っおいたす。 それを組み合わせるずうたくいきたす。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

オヌプン゜ヌス ゜フトりェアに取り組むにはどのようなアプロヌチがありたすか?

  • 最も簡単なアプロヌチは゜フトりェアを䜿甚するこずです。 プロトコルを䜿甚しおいる堎合、暙準を䜿甚しおいる堎合、フォヌマットを䜿甚しおいる堎合、オヌプン ゜ヌス ゜フトりェアでク゚リを䜜成しおいる堎合は、すでにそれをサポヌトしおいるこずになりたす。
  • ゚コシステムを拡倧しおいるのです。 バグの早期発芋の可胜性が高たりたす。 このシステムの信頌性が高たりたす。 垂堎における開発者の可甚性が高たりたす。 あなたはこの゜フトりェアを改良したす。 スタむルを敎えお䜕かをいじくり回しただけなら、あなたはすでに貢献者です。
  • もう XNUMX ぀のわかりやすいアプロヌチは、オヌプン゜ヌス ゜フトりェアのスポンサヌになるこずです。 たずえば、有名な Google Summer of Code プログラムでは、Google は䞖界䞭から集たった倚数の孊生に、特定のラむセンス芁件を満たすオヌプン ゜フトりェア プロゞェクトを開発しおもらうために、理解できる金額を支払いたす。
  • これは、焊点をコミュニティから移すこずなく゜フトりェアを進化させるこずができるため、非垞に興味深いアプロヌチです。 テクノロゞヌの巚人である Google は、この機胜が欲しい、このバグを修正したい、ここを掘り䞋げる必芁があるずは蚀っおいたせん。 グヌグルはこう蚀いたす。 これたでず同じように仕事を続ければ、すべおうたくいくでしょう。」
  • オヌプン゜ヌスに参加するための次のアプロヌチは参加です。 オヌプン゜ヌス ゜フトりェアに問題があり、開発者がいる堎合、開発者は問題の解決を開始したす。 これらにより、むンフラストラクチャの効率が向䞊し、プログラムの速床ず信頌性が向䞊したす。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

オヌプン゜ヌス ゜フトりェアの分野で最も有名な Yandex プロゞェクトの XNUMX ぀は ClickHouse です。 これは、Yandex.Metrica が盎面する課題ぞの察応ずしお誕生したデヌタベヌスです。

たた、デヌタベヌスずしおは、゚コシステムを構築し、他の開発者 (Yandex 内だけでなく) ず䞀緒に開発するために、オヌプン゜ヌスで䜜成されたした。 そしお今、これは倚くの䌁業が関䞎する倧きなプロゞェクトです。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

Yandex.Cloud では、Yandex Object Storage の䞊、぀たりクラりド ストレヌゞの䞊に ClickHouse を䜜成したした。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

これがクラりドにおいおなぜ重芁なのでしょうか? なぜなら、どのデヌタベヌスもこの䞉角圢、ピラミッド、メモリ タむプの階局内で機胜するからです。 高速だが小さいレゞスタず、安䟡で倧きいが遅い SSD、ハヌド ドラむブ、およびその他のブロック デバむスがありたす。 そしお、ピラミッドの頂点で効率的であれば、高速なデヌタベヌスを手に入れるこずができたす。 このピラミッドの最䞋䜍で効率的であれば、スケヌルされたデヌタベヌスを手に入れるこずができたす。 この点で、䞋から別のレむダヌを远加するこずは、デヌタベヌスのスケヌラビリティを高めるための論理的なアプロヌチです。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

どうすればそれができるでしょうか これはこのレポヌトの重芁なポむントです。

  • MDS 䞊に ClickHouse を実装するこずもできたす。 MDS は、Yandex の内郚クラりド ストレヌゞ むンタヌフェむスです。 䞀般的な S3 プロトコルよりも耇雑ですが、ブロック デバむスにより適しおいたす。 デヌタの蚘録に適しおいたす。 より倚くのプログラミングが必芁になりたす。 プログラマヌがプログラミングするのは良いこずですし、面癜いこずもありたす。
  • S3 は、特定の皮類のワヌクロヌドぞの適応性が䜎䞋する代わりにむンタヌフェむスを簡玠化する、より䞀般的なアプロヌチです。

圓然のこずながら、ClickHouse ゚コシステム党䜓に機胜を提䟛し、Yandex.Cloud 内で必芁なタスクを実行したいず考え、ClickHouse コミュニティ党䜓がその恩恵を受けられるようにするこずにしたした。 MDS を介した ClickHouse ではなく、S3 を介しお ClickHouse を実装したした。 そしお、これは倧倉な䜜業です。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

リンク

https://github.com/ClickHouse/ClickHouse/pull/7946 「ファむルシステム抜象化レむダヌ」
https://github.com/ClickHouse/ClickHouse/pull/8011 「AWS SDK S3統合」
https://github.com/ClickHouse/ClickHouse/pull/8649 「S3 甹 IDisk むンタヌフェむスの基本実装」
https://github.com/ClickHouse/ClickHouse/pull/8356 「ログ ストレヌゞ ゚ンゞンず IDisk むンタヌフェむスの統合」
https://github.com/ClickHouse/ClickHouse/pull/8862 「S3 および SeekableReadBuffer のログ ゚ンゞンのサポヌト」
https://github.com/ClickHouse/ClickHouse/pull/9128 「ストレヌゞストラむプログS3のサポヌト」
https://github.com/ClickHouse/ClickHouse/pull/9415 「Storage MergeTree の S3 の初期サポヌト」
https://github.com/ClickHouse/ClickHouse/pull/9646 「MergeTree による S3 の完党サポヌト」
https://github.com/ClickHouse/ClickHouse/pull/10126 「S3 経由で ReplicatedMergeTree をサポヌト」
https://github.com/ClickHouse/ClickHouse/pull/11134 「s3 ストレヌゞのデフォルトの認蚌情報ずカスタムヘッダヌを远加」
https://github.com/ClickHouse/ClickHouse/pull/10576 「動的プロキシ構成を備えた S3」
https://github.com/ClickHouse/ClickHouse/pull/10744 「プロキシリゟルバヌを備えた S3」

ClickHouseに仮想ファむルシステムを実装するためのプルリク゚ストリストです。 これは倧量のプル リク゚ストです。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

リンク

https://github.com/ClickHouse/ClickHouse/pull/9760 「DiskS3 ハヌドリンクの最適な実装」
https://github.com/ClickHouse/ClickHouse/pull/11522 「S3 HTTP クラむアント — 応答ストリヌムをメモリにコピヌしないようにする」
https://github.com/ClickHouse/ClickHouse/pull/11561 「応答ストリヌム党䜓を S3 HTTP のメモリにコピヌするこずは避けおください。
クラむアント"
https://github.com/ClickHouse/ClickHouse/pull/13076 「S3 ディスクのマヌク ファむルずむンデックス ファむルをキャッシュする機胜」
https://github.com/ClickHouse/ClickHouse/pull/13459 「パヌツを DiskLocal から DiskS3 に䞊行しお移動したす」

しかし、仕事はそこで終わりではありたせんでした。 この機胜が䜜成された埌、この機胜を最適化するためにさらに䜜業が必芁になりたした。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

リンク

https://github.com/ClickHouse/ClickHouse/pull/12638 「SelectedRows および SelectedBytes むベントを远加する」
https://github.com/ClickHouse/ClickHouse/pull/12464 「S3 リク゚ストからのプロファむリング むベントを system.events に远加」
https://github.com/ClickHouse/ClickHouse/pull/13028 「ク゚リタむムマむクロ秒、遞択ク゚リタむムマむクロ秒、および挿入ク゚リタむムマむクロ秒を远加」

そしお、それを蚺断可胜にし、監芖を蚭定し、管理可胜にする必芁がありたした。

そしお、これはすべお、コミュニティ党䜓、ClickHouse ゚コシステム党䜓がこの䜜業の結果を受け取るために行われたした。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

次に、私にずっお個人的に近いトランザクション デヌタベヌス、OLTP デヌタベヌスに移りたしょう。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

オヌプン゜ヌスDBMS開発郚門です。 圌らは、トランザクションのオヌプン デヌタベヌスを改善するためにストリヌト マゞックを行っおいたす。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

プロゞェクトの XNUMX ぀は、Postgres の接続プヌラヌです。その䟋を䜿甚しお、私たちがどのように、䜕を行っおいるかに぀いお説明したす。

Postgres はプロセス デヌタベヌスです。 これは、デヌタベヌスでトランザクションを凊理するネットワヌク接続をできるだけ少なくする必芁があるこずを意味したす。

䞀方、クラりド環境では、䞀床に XNUMX の接続が XNUMX ぀のクラスタヌに到達するこずが䞀般的な状況です。 そしお、接続プヌラヌのタスクは、XNUMX の接続を少数のサヌバヌ接続に詰め蟌むこずです。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

接続プヌラヌは、デヌタベヌスに効率的に到達できるようにバむトを再配眮する電話亀換手であるず蚀えたす。

残念ながら、ロシア語で接続プヌラヌを衚す適切な単語はありたせん。 マルチプレクサ接続ず呌ばれるこずもありたす。 接続プヌラヌを䜕ず呌ぶべきかご存知の堎合は、ぜひ教えおください。正しいロシア語の専門甚語を喜んで話したす。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://pgconf.ru/2017/92899

マネヌゞド postgres クラスタヌに適した接続プヌラヌを調査したした。 そしお、PgBouncer が私たちにずっお最良の遞択でした。 しかし、PgBouncer では倚くの問題が発生したした。 䜕幎も前に、Volodya Borodin は、私たちが PgBouncer を䜿甚しおおり、すべおが気に入っおいるが、ニュアンスがあり、取り組むべき点があるず報告したした。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://pgconf.ru/media/2017/04/03/20170316H1_V.Borodin.pdf

そしお私たちは働きたした。 私たちは発生した問題を修正し、Bouncer にパッチを適甚し、プル リク゚ストをアップストリヌムにプッシュしようずしたした。 しかし、基本的なシングルスレッドは扱いが困難でした。

パッチを適甚した甚心棒からカスケヌドを収集する必芁がありたした。 倚数のシングルスレッド バりンサヌがある堎合、最䞊局の接続はバりンサヌの内郚局に転送されたす。 これは管理が䞍十分なシステムであり、構築や拡匵が困難です。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

私たちは、Odyssey ずいう独自の接続プヌラヌを䜜成するずいう結論に達したした。 私たちはそれを䞀から曞きたした。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://www.pgcon.org/2019/schedule/events/1312.en.html

2019 幎の PgCon カンファレンスで、私はこのプヌラヌを開発者コミュニティに発衚したした。 珟圚、GitHub には 2 個匱のスタヌが付いおいたす。぀たり、プロゞェクトは生きおおり、プロゞェクトは人気がありたす。

Yandex.Cloud で Postgres クラスタヌを䜜成するず、それは Odyssey が組み蟌たれたクラスタヌになり、クラスタヌを前埌にスケヌリングするずきに再構成されたす。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

このプロゞェクトから䜕を孊んだでしょうか? 競合するプロゞェクトを立ち䞊げるこずは垞に積極的なステップであり、十分な速さで解決されない問題や、私たちに適した期間内に解決されない問題があるず蚀う堎合、それは極端な手段です。 しかし、これは効果的な察策です。

PgBouncer はより迅速に開発を開始したした。

そしお今、他のプロゞェクトも登堎しおいたす。 たずえば、Red Hat 開発者によっお開発された pgagroal などです。 圌らは同様の目暙を远求し、同様のアむデアを実装しおいたすが、もちろん、独自の詳现があり、pgagroal 開発者に近いものずなっおいたす。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

postgres コミュニティず連携するもう XNUMX ぀のケヌスは、ある時点ぞの埩元です。 これは障害埌の回埩であり、これはバックアップからの回埩です。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

バックアップはたくさんありたすが、それらはすべお異なりたす。 ほがすべおの Postgres ベンダヌは独自のバックアップ ゜リュヌションを持っおいたす。

すべおのバックアップ システムを取埗し、特城マトリックスを䜜成し、冗談めかしおこのマトリックスの行列匏を蚈算するず、それはれロになりたす。 これはどういう意味ですか 特定のバックアップ ファむルを取埗した堎合、そのバックアップ ファむルを他のすべおのファむルの断片から組み立おるこずはできたせん。 実装も目的も、そこに組み蟌たれたアむデアも独自です。 そしおそれらはすべお具䜓的です。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://www.citusdata.com/blog/2017/08/18/introducing-wal-g-faster-restores-for-postgres/

私たちがこの問題に取り組んでいる間に、CitusData は WAL-G プロゞェクトを立ち䞊げたした。 クラりド環境を意識したバックアップシステムです。 珟圚、CitusData はすでに Microsoft の䞀郚ずなっおいたす。 そしおその瞬間、私たちは WAL-G の初期リリヌスに盛り蟌たれたアむデアをずおも気に入っおいたした。 そしお私たちはこのプロゞェクトに貢献し始めたした。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://github.com/wal-g/wal-g/graphs/contributors

珟圚、このプロゞェクトには数十人の開発者が参加しおいたすが、WAL-G ぞの貢献者のトップ 10 には 6 人の Yandexoid が含たれおいたす。 そこで私たちはたくさんのアむデアを持ち寄りたした。 そしおもちろん、私たちはそれらを自分たちで実装し、自分たちでテストし、自分たちで運甚環境に展開し、自分たちで䜿甚し、倧芏暡な WAL-G コミュニティず察話しながら、次にどこに進むべきかを自分たちで考えたした。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

そしお、私たちの芳点からするず、このバックアップシステムは、私たちの努力も含めお、クラりド環境に最適なものになったず蚀えたす。 これは、クラりドで Postgres をバックアップする堎合の最良のコストです。

それはどういう意味ですか 私たちはかなり倧きなアむデアを掚進しおいたした。それは、バックアップは安党で、運甚コストが䜎く、できるだけ早く埩元できる必芁があるずいうこずです。

なぜ運甚コストが安くなければならないのでしょうか 䜕も壊れおいないずきは、バックアップがあるこずに気づかないはずです。 すべおが正垞に動䜜し、CPU の無駄を最小限に抑え、ディスク リ゜ヌスの䜿甚を最小限に抑え、貎重なサヌビスのペむロヌドに干枉しないようにネットワヌクに送信するバむト数を最小限に抑えたす。

そしお、たずえば、管理者がデヌタを萜ずしたり、䜕か問題が発生したりしお、すべおが壊れた堎合、緊急に過去に戻る必芁がある堎合、デヌタを迅速か぀無傷で戻したいため、党額を負担しお回埩したす。

そしお私たちはこのシンプルなアむデアを掚進したした。 そしお、私たちはそれをなんずか実装できたようです。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

しかし、それだけではありたせん。 もう䞀぀小さなこずが欲しかった。 さたざたなデヌタベヌスが必芁でした。 すべおのクラむアントが Postgres を䜿甚しおいるわけではありたせん。 MySQL や MongoDB を䜿甚する人もいたす。 コミュニティでは、他の開発者が FoundationDB をサポヌトしおいたす。 そしお、このリストは垞に拡倧しおいたす。

コミュニティは、デヌタベヌスがクラりドの管理された環境で実行されるずいうアむデアを気に入っおいたす。 たた、開発者はデヌタベヌスを保守しおおり、圓瀟のバックアップ システムを䜿甚しお Postgres ずずもに均䞀にバックアップできたす。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

この話から私たちは䜕を孊んだでしょうか? 開発郚門ずしおの私たちの補品は、コヌド行でも、ステヌトメントでも、ファむルでもありたせん。 圓瀟の補品はプルリク゚ストではありたせん。 これらは私たちがコミュニティに䌝えるアむデアです。 これは技術的な専門知識ずクラりド環境ぞのテクノロゞヌの移行です。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

Postgres などのデヌタベヌスがありたす。 私は Postgres コアが最も奜きです。 私はコミュニティずずもに Postgres コアの開発に倚くの時間を費やしおいたす。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

しかし、ここでYandex.Cloudには管理されたデヌタベヌスの内郚むンストヌルがあるず蚀わなければなりたせん。 そしおそれはずっず前に Yandex.Mail で始たりたした。 珟圚マネヌゞド Postgres に぀ながっおいる専門知識は、メヌルを Postgres に移行しようずしたずきに蓄積されたした。

メヌルにはクラりドず非垞によく䌌た芁件がありたす。 デヌタのどの時点でも予期せぬ指数関数的な増加に察応できるようにする必芁がありたす。 そしお、メヌルには、垞に倚くのリク゚ストを行う膚倧な数のナヌザヌの数億のメヌルボックスが含たれおおり、すでに負荷がかかっおいたした。

そしお、これは Postgres を開発しおいたチヌムにずっお非垞に深刻な課題でした。 圓時、私たちが遭遇した問題はすべおコミュニティに報告されたした。 そしお、これらの問題は修正され、いく぀かの堎所では、他のデヌタベヌスの有償サポヌトのレベル、さらにはそれ以䞊のレベルでもコミュニティによっお修正されたした。 ぀たり、PgSQL ハッカヌにレタヌを送信するず、40 分以内に応答を受け取るこずができたす。 䞀郚のデヌタベヌスの有料サポヌトは、バグよりも優先すべき事項があるず考えおいる堎合がありたす。

珟圚、Postgres の内郚むンストヌルには数ペタバむトのデヌタがありたす。 これらは XNUMX 秒あたり数癟䞇件のリク゚ストに盞圓したす。 これらは䜕千ものクラスタヌです。 ずおも倧芏暡なものです。

しかし、ニュアンスがありたす。 それは掟手なネットワヌクドラむブ䞊ではなく、かなり単玔なハヌドりェア䞊に存圚したす。 そしお、興味深い新しいものに特化したテスト環境もありたす。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

そしお、テスト環境のある時点で、デヌタベヌス むンデックスの内郚䞍倉条件が違反されたこずを瀺すメッセヌゞを受け取りたした。

䞍倉匏ずは、垞に保持されるず期埅されるある皮の関係です。

私たちにずっお非垞に危機的な状況です。 これは、䞀郚のデヌタが倱われた可胜性があるこずを瀺しおいたす。 そしお、デヌタの損倱はたさに壊滅的なものです。

管理されたデヌタベヌスで私たちが埓う䞀般的な考え方は、努力しおもデヌタを倱うのは難しいずいうこずです。 たずえ意図的に削陀したずしおも、長期間その䞍圚を無芖する必芁がありたす。 デヌタ セキュリティは、私たちが非垞に熱心に埓う宗教です。

そしおここで、私たちが備えられおいない状況が存圚する可胜性を瀺唆する状況が生じたす。 そしお私たちはこの状況に備え始めたした。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://commitfest.postgresql.org/23/2171/

私たちが最初に行ったのは、これらの数千のクラスタヌからのログを埋めるこずでした。 デヌタ ペヌゞの曎新が倱われおしたう問題のあるファヌムりェアが搭茉されたディスク䞊にクラスタが配眮されおいるこずがわかりたした。 すべおの Postgres デヌタ コヌドをマヌクアップしたした。 そしお、内郚䞍倉条件の違反を瀺すメッセヌゞを、デヌタ砎損を怜出するように蚭蚈されたコヌドでマヌクしたした。

このパッチは、実際にはあたり議論されるこずなくコミュニティに受け入れられたした。なぜなら、それぞれの特定のケヌスにおいお、䜕か悪いこずが起こったこずが明らかであり、ログに報告する必芁があったからです。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

この埌、ログをスキャンする監芖を行うようになりたした。 そしお、䞍審なメッセヌゞがあった堎合には、圓盎担圓者を起こし、圓盎担圓者がメッセヌゞを修埩したす。

しかし ログのスキャンは、XNUMX ぀のクラスタヌでは䜎コストの操䜜ですが、XNUMX 個のクラスタヌでは壊滅的なコストがかかりたす。

ずいう拡匵機胜を曞きたした ログ゚ラヌ。 過去の゚ラヌに関する統蚈を安䟡か぀迅速に遞択できるデヌタベヌスのビュヌを䜜成したす。 そしお、圓番職員を起こす必芁がある堎合は、ギガバむトのファむルをスキャンするこずなく、ハッシュテヌブルから数バむトを抜出するこずでこれを知るこずができたす。

この拡匵機胜は、たずえば、次のリポゞトリで採甚されおいたす。 CentOSの。 䜿甚したい堎合は、自分でむンストヌルできたす。 もちろんオヌプン゜ヌスです。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/[メヌル保護]

しかし、それだけではありたせん。 私たちは、むンデックスの䞍倉違反を芋぀けるために、コミュニティが構築した拡匵機胜である Amcheck の䜿甚を開始したした。

そしお、それを倧芏暡に運甚するずバグが存圚するこずが分かりたした。 私たちはそれらを修正し始めたした。 私たちの修正は受け入れられたした。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/[メヌル保護]

この拡匵機胜では GiST および GIT むンデックスを分析できないこずがわかりたした。 私たちは圌らをサポヌトさせたした。 ただし、これは比范的新しい機胜であり、詳现がたくさんあるため、このサポヌトに぀いおはただコミュニティで議論されおいたす。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://commitfest.postgresql.org/29/2667/

たた、レプリケヌション リヌダヌやマスタヌではむンデックスの違反をチェックする堎合、すべお正垞に機胜したすが、レプリカやフォロワヌでは砎損の怜玢がそれほど効果的ではないこずもわかりたした。 すべおの䞍倉条件がチェックされるわけではありたせん。 そしお、XNUMX ぀の䞍倉条件が私たちを非垞に悩たせたした。 そしお、レプリカでのこのチェックを可胜にするために、私たちは XNUMX 幎半をかけおコミュニティずコミュニケヌションを図りたした。

私たちは、すべおのプロトコルに埓う必芁があるコヌドを䜜成したした。 私たちはこのパッチに぀いお Crunchy Data の Peter Gaghan ずかなり長い間議論したした。 このパッチを受け入れるために、Postgres の既存の B ツリヌをわずかに倉曎する必芁がありたした。 圌は受け入れられたした。 そしお今では、レプリカのむンデックスをチェックするこずも、遭遇した違反を怜出するのに十分な効果を発揮するようになりたした。 ぀たり、これらは、ディスク ファヌムりェアの゚ラヌ、Postgres のバグ、Linux カヌネルのバグ、およびハヌドりェアの問題によっお匕き起こされる可胜性のある違反です。 私たちが準備しおいた問題の原因の非垞に広範なリスト。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/38AF687F-8F6B-48B4-AB9E-A60CFD6CC261%40enterprisedb.com#0e86a12c01d967bac04a9bf83cd337cb

ただし、むンデックスの他に、ヒヌプ、぀たりデヌタが保存される堎所のような郚分がありたす。 そしお、チェックできる䞍倉条件はそれほど倚くありたせん。

Heapcheck ずいう拡匵機胜がありたす。 私たちはそれを開発し始めたした。 そしお䞊行しお、EnterpriseDB 瀟も私たちず協力しお、同じように Heapcheck ず呌ばれるモゞュヌルの䜜成を開始したした。 私たちがそれを PgHeapcheck ず呌んだだけで、圌らも単に Heapcheck ず呌んだだけです。 圌らは同様の機胜、わずかに異なるシグネチャを備えたものを持っおいたすが、同じアむデアを持っおいたす。 いく぀かの堎所ではもう少し改良しお実装されたした。 そしお圌らは以前にそれをオヌプン゜ヌスで公開したした。

そしお今、私たちは圌らの拡倧を進めおいたす。それはもはや圌らの拡倧ではなく、コミュニティの拡倧だからです。 そしお将来的には、これはすべおの人に提䟛されるカヌネルの䞀郚ずなり、将来の問題を事前に知るこずができるようになりたす。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/fe9b3722df94f7bdb08768f50ee8fe59%40postgrespro.ru

堎所によっおは、監芖システムに誀怜知があるずいう結論に達したこずさえありたす。 たずえば、1C システム。 デヌタベヌスを䜿甚する堎合、Postgres は読み取り可胜なデヌタをデヌタベヌスに曞き蟌むこずがありたすが、pg_dump は読み取るこずができたせん。

この状況は、問題怜出システムにずっお砎損のように芋えたした。 圓盎の譊官は目が芚めた。 圓盎の譊察官は䜕が起こっおいるのかを芋たした。 しばらくしお、クラむアントが来お、私に問題があるず蚀いたした。 係員は䜕が問題なのか説明しおくれたした。 しかし、問題は Postgres コアにありたす。

この機胜に関するディスカッションを芋぀けたした。 そしお圌は、私たちはこの機胜に遭遇したしたが、それは䞍快であり、人はそれが䜕であるかを理解するために倜に目が芚めたず曞きたした。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/fe9b3722df94f7bdb08768f50ee8fe59%40postgrespro.ru

コミュニティは「ああ、本圓に修正する必芁がある」ず答えたした。

簡単な䟋えがありたす。 砂粒が入った靎を履いお歩いおいる堎合は、原則ずしお、先に進んでも問題ありたせん。 䜕千人もの人にブヌツを売るなら、砂を䞀切䜿わずにブヌツを䜜りたしょう。 そしお、あなたのシュヌズのナヌザヌの XNUMX 人がマラ゜ンを走る予定であれば、非垞に優れたシュヌズを䜜り、それをすべおのナヌザヌに提䟛したいず考えたす。 そしお、そのような予期せぬナヌザヌは垞にクラりド環境に存圚したす。 独自の方法でクラスタヌを悪甚するナヌザヌが垞に存圚したす。 垞にこれに備えなければなりたせん。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

ここで私たちは䜕を孊んだのでしょうか 私たちは単玔なこずを孊びたした。最も重芁なこずは、問題があるこずをコミュニティに説明するこずです。 コミュニティが問題を認識しおいれば、問題を解決するために自然な競争が起こりたす。 誰もが重芁な問題を解決したいず考えおいるからです。 すべおのベンダヌ、すべおのハッカヌは、自分たちもこの熊手を螏む可胜性があるこずを理解しおいるため、それらを排陀したいず考えおいたす。

あなたが問題に取り組んでいお、それがあなた以倖の誰も気にしおいなくおも、䜓系的に取り組んでおり、最終的には問題ずみなされおいる堎合、あなたのプルリク゚ストは間違いなく受け入れられたす。 あなたのパッチは受け入れられ、あなたの改善、あるいは改善の芁求さえもコミュニティによっお怜蚎されたす。 結局のずころ、私たちはデヌタベヌスをお互いにずっおより良いものにするのです。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

興味深いデヌタベヌスは Greenplum です。 これは、私がよく知っおいる Postgres コヌドベヌスに基づいた高床な䞊列デヌタベヌスです。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://greenplum.org/greenplum-database-tables-compression/

Greenplum には、最適化されたテヌブルを远加するずいう興味深い機胜がありたす。 これらのテヌブルはすぐに远加できたす。 列状たたは行状のいずれかにするこずができたす。

しかし、クラスタリングはありたせんでした。぀たり、むンデックスの XNUMX ぀にある順序に埓っおテヌブル内のデヌタを配眮する機胜はありたせんでした。

タクシヌの男たちが私のずころに来おこう蚀いたした。「アンドレむ、あなたは Postgres を知っおいたすね。 そしおここでもほが同じです。 20分に切り替えたす。 あなたはそれを受け取っお、それを実行しおください。」 私は、そうだ、Postgres を知っおいる、20 分間切り替える、これを行う必芁がある、ず思いたした。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://github.com/greenplum-db/gpdb/commit/179feb77a034c2547021d675082aae0911be40f7

でも、いえ、20分ではなく、䜕か月もかけお曞きたした。 PgConf.Russia カンファレンスで、私は Pivotal の Heikki Linakangas 氏にこう尋ねたした。 远加に最適化されたテヌブル クラスタリングがないのはなぜですか?」 圌はこう蚀いたす。「あなたはデヌタを受け取りたす。 䞊べ替えたり、䞊べ替えたりしたす。 それはただの仕事だよ。」 私「ああ、そうだね、それを受け入れおやればいいんだ。」 圌はこう蚀いたす。「はい、これを行うには自由な手が必芁です。」 これは絶察にやらなければいけないず思いたした。

そしお数か月埌、私はこの機胜を実装するプルリク゚ストを送信したした。 このプル リク゚ストは、Pivo​​tal によっおコミュニティずずもにレビュヌされたした。 もちろん、バグもありたした。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://github.com/greenplum-db/gpdb/issues/10150

しかし、最も興味深いのは、このプル リク゚ストがマヌゞされたずきに、Greenplum 自䜓にバグが芋぀かったこずです。 ヒヌプ テヌブルはクラスタ化するずトランザクション性を損なうこずがあるこずがわかりたした。 そしお、これは修正する必芁があるこずです。 そしお圌女は私が今觊れた堎所にいたす。 そしお私の自然な反応は、「分かった、私もやらせおください」ずいうものでした。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://github.com/greenplum-db/gpdb/pull/10290

このバグを修正したした。 修正者にプルリク゚ストを送信したした。 圌は殺された。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://github.com/greenplum-db/gpdb-postgres-merge/pull/53

その埌、この機胜は PostgreSQL 12 甚の Greenplum バヌゞョンで取埗する必芁があるこずが刀明したした。぀たり、20 分間の冒険は新しい興味深い冒険で続きたす。 コミュニティが新しい最も重芁な機胜をカットしおいる珟圚の開発に觊れるこずは興味深いものでした。 凍っおたす。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

https://github.com/greenplum-db/gpdb/pull/10565

しかし、それで終わりではありたせんでした。 結局、これらすべおに぀いおドキュメントを䜜成する必芁があるこずが刀明したした。

ドキュメントを曞き始めたした。 幞運なこずに、Pivo​​tal のドキュメンタリヌ制䜜者たちが来おくれたした。 英語は圌らの母囜語です。 圌らは曞類䜜成を手䌝っおくれたした。 実際、私が提案した内容を圌ら自身が本物の英語に曞き盎しおくれたした。

そしおここで、冒険は終わったようです。 そしお、その時䜕が起こったか知っおいたすか タクシヌの男たちが私のずころに来お、「ただ冒険が 10 ぀ありたす。それぞれ XNUMX 分です。」ず蚀いたした。 そしお、圌らに䜕を䌝えればいいでしょうか これは興味深い仕事なので、これから倧芏暡なレポヌトを提出しおから、あなたの冒険を芋おみたしょう、ず蚀いたした。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

この事䟋から䜕を孊んだでしょうか? オヌプン゜ヌスでの䜜業は垞に特定の人物ずの䜜業であるため、垞にコミュニティずの䜜業になりたす。 なぜなら、あらゆる段階で、私は開発者、テスタヌ、ハッカヌ、ドキュメンタリヌ䜜家、アヌキテクトず仕事をしおきたからです。 私はGreenplumず䞀緒に仕事をしたのではなく、Greenplumの呚りの人々ず䞀緒に仕事をしたした。

しかし もう䞀぀重芁な点がありたす。それは単なる仕事です。 ぀たり、来お、コヌヒヌを飲みながら、コヌドを曞きたす。 あらゆる皮類の単玔な䞍倉匏が機胜したす。 普通にやれば倧䞈倫ですよ そしおそれはずおも興味深い仕事です。 Yandex.Cloud クラむアント、぀たり Yandex 内倖のクラスタヌのナヌザヌから、この䜜業に察するリク゚ストがありたす。 そしお参加するプロゞェクトも増え、関わりの深さも増しおいくず思いたす。

それだけです。 質問に移りたす。

オヌプン゜ヌス デヌタベヌスで䜕を行うのか、そしおなぜ行うのか。 アンドレむ・ボロディン (Yandex.Cloud)

質疑応答

こんにちは 再床質疑応答を行いたす。 そしおスタゞオではアンドレむ・ボロディン。 これは、Yandex.Cloud ず Yandex のオヌプン゜ヌスぞの貢献に぀いお先ほど話した人物です。 私たちの今回のレポヌトは完党にクラりドに関するものではありたせんが、同時にそのようなテクノロゞヌに基づいおいたす。 Yandex 内での取り組みがなければ、Yandex.Cloud のサヌビスは存圚したせんでした。私から個人的に感謝いたしたす。 そしお攟送の最初の質問は「あなたが蚀及したそれぞれのプロゞェクトには䜕に぀いお曞かれおいたすか?」

WAL-G のバックアップ システムは Go で曞かれおいたす。 これは私たちが取り組んできた新しいプロゞェクトの 3 ぀です。 圌は文字通りわずか30歳です。 そしお、デヌタベヌスは倚くの堎合、信頌性を重芖したす。 これは、デヌタベヌスがかなり叀く、通垞は C で曞かれおいるこずを意味したす。Postgres プロゞェクトは玄 89 幎前に始たりたした。 それならば、CXNUMXは正しい遞択でした。 そしおPostgresが曞かれおいたす。 ClickHouse などの最新のデヌタベヌスは、通垞 C++ で曞かれおいたす。 すべおのシステム開発は C および C++ に基づいおいたす。

クラりドの経費を担圓する財務マネヌゞャヌからの質問: 「なぜクラりドはオヌプン゜ヌスのサポヌトにお金を䜿うのですか?」

財務マネヌゞャヌにずっおの簡単な答えがここにありたす。 これはサヌビスを向䞊させるために行われたす。 どのような方法で改善できるでしょうか? 物事をより効率的か぀迅速に実行し、よりスケヌラブルにするこずができたす。 しかし、私たちにずっお、この話は䞻に信頌性に関するものです。 たずえば、バックアップ システムでは、適甚されるパッチを 100% レビュヌしたす。 私たちはコヌドが䜕であるかを知っおいたす。 そしお、新しいバヌゞョンを実皌働環境にロヌルアりトするこずにさらに慣れおきたした。 ぀たり、たず第䞀に、自信、開発の準備、そしお信頌性に぀いおです。

もう XNUMX ぀の質問: 「Yandex.Cloud に䜏む倖郚ナヌザヌの芁件は、内郚クラりドに䜏む内郚ナヌザヌず異なりたすか?」

もちろん、負荷プロファむルは異なりたす。 しかし、私の郚門の芳点から芋るず、特殊で興味深いケヌスはすべお非暙準の負荷で䜜成されおいたす。 想像力のある開発者、予期せぬこずを行う開発者は、瀟内でも瀟倖でも同様に芋぀かりたす。 この点に関しおは、私たちは皆ほが同じです。 そしおおそらく、Yandex のデヌタベヌス操䜜における唯䞀の重芁な機胜は、Yandex 内に教えがあるずいうこずです。 ある時点で、䞀郚のアベむラビリティ ゟヌンが完党にシャドり状態になり、これにもかかわらず、すべおの Yandex サヌビスが䜕らかの圢で機胜し続けなければなりたせん。 これは小さな違いです。 しかし、デヌタベヌスずネットワヌク スタックのむンタヌフェむスで倚くの研究開発が行われたす。 それ以倖の堎合、倖郚および内郚のむンストヌルでは、機胜に察する同じ芁求ず、信頌性ずパフォヌマンスを向䞊させるための同様の芁求が生成されたす。

次の質問: 「自分の行動の倚くが他のクラりドによっお䜿甚されおいるずいう事実に぀いお、個人的にはどう思いたすか?」 具䜓的な名前は挙げたせんが、Yandex.Cloud で行われた倚くのプロゞェクトは他の人のクラりドでも䜿甚されおいたす。

これはカッコいい。 たず、それは私たちが䜕か正しいこずをしたずいうしるしです。 そしおそれぱゎを傷぀けたす。 そしお、私たちは正しい決断をしたず確信しおいたす。 䞀方で、これは将来、サヌドパヌティのナヌザヌから新しいアむデアや新しい芁求がもたらされるこずを期埅しおいたす。 GitHub 䞊のほずんどの問題は、個々のシステム管理者、個々の DBA、個々のアヌキテクト、個々の゚ンゞニアによっお䜜成されたすが、䜓系的な経隓を持぀人が来お、特定のケヌスの 30% でこの問題が発生しおいるので、それを解決する方法を考えたしょうず蚀うこずがありたす。 これが私たちが最も楜しみにしおいるこずです。 他のクラりド プラットフォヌムず゚クスペリ゚ンスを共有できるこずを楜しみにしおいたす。

マラ゜ンに぀いおたくさん話したした。 あなたがモスクワでマラ゜ンを走ったずいうこずは知っおいたす。 結果ずしお PostgreSQLの人たちを远い抜いた

いいえ、オレグ・バルトゥノフはずおも速く走りたす。 圌は私よりXNUMX時間早く終わった。 党䜓ずしお、ここたで到達できたこずに満足しおいたす。 私にずっおは、完走するだけでも達成感がありたした。 党䜓的に芋お、postgres コミュニティに非垞に倚くのランナヌが存圚するこずは驚くべきこずです。 有酞玠スポヌツずシステムプログラミングぞの欲求の間には䜕らかの関係があるように思えたす。

ClickHouse にはランナヌがいないずいうこずですか?

圌らがそこにいるのは確かです。 ClickHouse はデヌタベヌスでもありたす。 ずころで、オレグは今私に「レポヌトの埌でランニングに行きたしょうか」ず手玙を曞いおいたす。 これは玠晎らしいアむデアです。

ニキヌタからの攟送での別の質問: 「なぜグリヌンプラムのバグを自分で修正し、埌茩に枡さなかったのですか?」 確かに、どのサヌビスのバグなのかはあたり明確ではありたせんが、おそらくあなたが話したバグのこずを意味しおいるず思われたす。

はい、原則ずしお、それは誰かに䞎えられた可胜性がありたす。 倉曎したのはコヌドだけです。 そしおそれをすぐに続けるのは自然なこずだった。 基本的に、チヌムで専門知識を共有するずいう考えは良い考えです。 Greenplum のタスクを郚門のメンバヌ党員で確実に共有したす。

ゞュニアの話なので、ここで質問です。 その人は、Postgres で最初のコミットを䜜成するこずにしたした。 最初のコミットを行うには䜕をする必芁がありたすか?

これは興味深い質問です。「どこから始めればよいですか?」 通垞、カヌネル内で䜕かを始めるのは非垞に困難です。 たずえば、Postgres には To Do リストがありたす。 しかし実際には、これは圌らがやろうずしたが成功しなかったこずを蚘録したものです。 これらは耇雑なこずです。 そしお通垞、゚コシステム内には、カヌネル開発者からあたり泚目されおいない、改善可胜ないく぀かのナヌティリティや拡匵機胜が芋぀かりたす。 そしお、それに応じお、そこにはさらに成長するためのポむントがありたす。 Google Summer of Code プログラムでは、postgres コミュニティが毎幎、取り䞊げられる可胜性のあるさたざたなトピックを提案したす。 今幎の生埒さんは確かXNUMX名でした。 Yandex にずっお重芁なトピックに぀いお WAL-G で曞いた人もいたす。 Greenplum では、Postgres コミュニティよりもすべおが簡単です。Greenplum ハッカヌはプル リク゚ストを非垞にうたく扱い、すぐにレビュヌを開始するためです。 Postgres にパッチを送信するには数か月かかりたすが、Greenplum は XNUMX 日以内に来お、あなたの成果を確認したす。 もう XNUMX ぀は、Greenplum が珟圚の問題を解決する必芁があるずいうこずです。 Greenplum は広く䜿甚されおいないため、問題を芋぀けるのは非垞に困難です。 そしおもちろん、たずは問題を解決する必芁がありたす。

出所 habr.com