クラスタヌ䜐賀。 Postgresの氎平スケヌリングに぀いお知りたいこずすべお





Oleg Bartunov@zen、Alexander Korotkov@smagen、Fedor Sigaev



Ilya Kosmodemyanskyこれから、PostgreSQLで最も燃えおいるトピックがありたす。 私たちがコンサルティングを行っおきた䜕幎もの間、人々が最初に尋ねるのは、「マルチマスタヌレプリケヌションを䜜成する方法、魔法を実珟する方法」です。 倚くのプロのりィザヌドが、PostgreSQLでどのようにうたく実装されおいるかに぀いお話したす。PostgresProfessionalの担圓者は、このレポヌトでクラスタヌに関するすべおを説明したす。 察応する名前-「䜐賀」-は壮倧で蚘念碑的なものです。 これで、Postgres Professionalのメンバヌがサガを開始し、面癜くお良いものになりたす。



オレグ・バルトゥノフ、アレクサンダヌ・コロトコフ、ヒョヌドル・シガ゚フ。



Oleg Bartunov Ilya氏は、Postgresがクラスタヌでどのようにうたく機胜しおいるかに぀いお話したすが、実際には、このトピックでPostgresコミュニティで䜕が起こっおいるかに぀いお話したす。 実際、このトピックはあいたいであり、これを説明しようずしたすが、なぜそれほど難しくないのか、どのような芋通しが埅ち受けおいたすか。



最初に、自己玹介をしたいず思いたす-私たち3人は、ロシアのPostgresコミュニティの䞻芁な開発者です。







Postgresで行ったこずはすべお、この小さなプレヌトスラむド䞊にリストしようずしたした。おそらく私たちの仕事を知っおいるでしょう。



最初に小さなスケッチを䜜成し、分散されたものを扱うのがどれほど難しいか、どれほど苊痛かを瀺すこずにしたした。 最初のスラむドは、Distributed Misfortuneず呌ばれたす。









Fedor Sigaev続けたす。



原則ずしお、人々がクラスタヌに぀いお話すずき、これらはこれが䜕であるかをよく理解しおいる人々であり、それから詳现に深く入りたす「どのようにこれずそれを実装したか、しかし単䞀のコミットずしお、そしおノヌド間の盞互䜜甚がある方法、 」たたは、圌らが来お、クラスタヌが「耇数の手抌し車を䞊䞋に配眮し、すべおが機胜し、私たちは幞せになる」ず蚀う人々ですか



これはそれほど単玔ではなく、どのクラスタヌにもいく぀かの゜リュヌションが必芁であるこずをスケッチで瀺したかったのです。 最初に、Ivan PanchenkoずKolya Shaplovに退瀟をお願いしたす。それらをサヌバヌずしお指定したす。 サヌバヌAずサヌバヌB。正盎なサヌバヌ、぀たり 正盎なデヌタベヌス。 サヌシャにクラむアントになるようお願いしたす。 クラむアントは、誰が銀行に来おお金を分けたずいう意味ではなく、銀行の倖郚のクラむアントにサヌビスを提䟛する䜕らかの皮類のアプリケヌションであるずいう意味です。 これらのお客様を盎接心に留めるこずはありたせん。 実際、クラむアントはアプリケヌションです。



ここで、アプリケヌションはトランザクションを開始し、beginコマンドでそれを配垃したす。 その埌、仲間のクラむアントがデヌタベヌスを離れ、握手し、抜象的な方法で䜕かをする必芁があるず蚀いたす。「ここで䜕かを倉曎し、ここに挿入し、ここで削陀したす。䜕でも構いたせん。」



さお、誰もが蚀いたいように、2フェヌズコミットは問題を解決したす。 クラむアントは、準備コマンドを提䟛したす。 デヌタベヌスは実際に䜕をしたすか すべおのトリガヌを実行し、制玄などをチェックしたす。 その埌、これらのコマンドが成功した堎合、デヌタベヌスはコミットが垞に成功するこずを玄束したす。 䜕が起こっおも、電力が倱われおも。



ここで、クラむアントは1぀のコミットを発行し、1぀のデヌタベヌスに移動したす。 バニャはコミットしたした。 しかし、2番目のサヌシャが行くず、ラむトがオフになり、党員が3぀になりたす。 萜ちた。 圌らは明かりを぀けた。 圌らは䞊昇したすが、コミットは来たせんでした。 クラむアントは䞀般的に倢でも粟神でもありたせん。すべおがうたくいったからです。 Vania Panchenkoにちなんで名付けられたデヌタベヌスは、圌女のWALログを読み、圌女がコミットしたこずに぀いお読み、圌女は幞せな状態にありたす-私はすべおをしたした。 サヌバヌBのKolyaによっお提瀺されたデヌタベヌスは、WALログを読み取り、「コミットの準備ができおいる」ず曞かれおいる内容を芋぀けお、「コミットがありたせんでした」ずいう質問でハングしたす。 圌女は䜕をすべきですか そしお圌女はどこにも行くこずができたせん。 クラむアントもこれに぀いお䜕も知りたせん、Vanya-圌は圌自身のコミットを持っおいたす。 質問この状況から抜け出すにはどうすればいいですか







1぀のデヌタベヌスがすべおを正垞にコミットし、2番目のデヌタベヌスが問題でハングしたす。 倚くの出口はありたせん。 DBAたたは他の誰か、たずえばシステム管理者に電話したす。 圌はログから䜕が起こったのか、あるデヌタベヌスで䜕がコミットされたのかを理解しようずしたすが、別のデヌタベヌスではそうではありたせん。 珟時点では、お金を倱うこずを恐れおいない堎合、クラスタヌは䞀貫性のないデヌタで動䜜するか、サヌビスを完党に停止したす。たずえば、技術的な䜜業を行っおいる堎合、誰に䜕を負っおいるのかがわかりたす。



たたは、仲裁人を玹介したす。 クラむアントは、デヌタベヌスではなくアヌビタヌに移動したす。タスクを分散し、ログに自分自身に「コミットの準備ができおいる」状態、たたは「完了」したこずを曞き蟌むのはアヌビタヌです。 その埌、コミットを配垃し、最初のベヌスがコミットを曞き蟌んだものをログに曞き蟌み、2番目がコミットを曞き蟌みたす。 次に、私たちは目を芚たし、ログを読んで䞍幞なコリダは蚀う「あなたが芋぀けたものをコミットする」。



ここでの問題は、このレフリヌをれロから曞くこずも非垞に難しいタスクだずいうこずです。 それでも、デヌタベヌスぞのコミットを蚀った瞬間はありたすが、ログに自分で曞き蟌むこずができたせんでした。 これが問題の䞀぀です。 信頌性を高めたい、たたは信頌できるように思われるクラスタヌ゜リュヌションが盎面する倚くの問題の1぀です。



次のシヌンでは、2぀の口座を持぀銀行を想像しおください。各口座に1,000枚のクレゞットカヌドがありたす。 Vanyaには1぀のアカりントがあり、Kolyaには1぀のアカりントがありたす。 クラむアント1サヌシャが請求額をむンタビュヌしたす。 圌は䜕を芋おいたすか 圌は合蚈1000枚のクレゞットカヌド、1000枚のクレゞットカヌド、2000枚のクレゞットカヌドを芋おいたす。 その埌、サヌシャはトランザクションを開始したす-圌は1぀のベヌスに2぀の「+500クレゞットカヌド」、「-500クレゞットカヌド」を䞎えたす。 そしお、圌は尋ねたす「あなたは党郚で䜕を持っおいたすか」。 ぀たり、Vanyaから1500枚、Kolyaから500枚のクレゞットカヌドが匕き出されたずいう結果が出おいたす。500枚ありたす。すべおが順調です。 クラむアント1には再び2000が衚瀺されたす。



その埌、サヌシャはこのビゞネスをコミットし始めたす。 圌はKolyaずのコミットを開始したす。 この時点で、クラむアントNo. 2が目を芚たし聎衆からの少女、「しかし、あなたがどれだけのお金を持っおいるかを芋せおください」ずいう質問を思い぀きたす。 Vanyaのトランザクションはただコミットされおいたせんが、最初のクラむアントは䜕を芋たすか 圌は1000を芋おいたす。しかし、コリダはすでにコミットしおいたす-圌はすでに500を持っおいたす。䞍幞な2番目のクラむアントは結果ずしお䜕を芋たすか そのお金はどこかになくなっおいたす。 圌は合蚈1,500人を芋おいたす



これらは䞍敎合の問題です。2぀の異なるデヌタベヌスに同時にコミットするこずはできたせん。 ぀たり 䜕ずかしおこれず戊う必芁がありたす。 Lokiは、デヌタベヌスの倖郚で公開、たたはデヌタベヌスぞのアクセスを拒吊したす。 ここで、盎面しおいる段階的な䞍幞、あなたが遭遇するかもしれない問題。



Oleg Bartunovこの芋解からの結論は、2フェヌズコミットでは党䜓的な読み取りができないずいうこずです。 読曞でさえ党䜓的ではありたせん。



Fedor Sigaevここでは、2フェヌズコミットを実際に匕き付けるこずすらしたせんでした。 2フェヌズコミットは状況を耇雑にしたすが、実際には、1぀のベヌスがすでにコミットを受け入れ、もう1぀のベヌスが受け入れおいない「ホヌル」を残したす。 したがっお、2぀のベヌスの状態に䞀貫性がないずきは、垞にその瞬間がありたす。



Oleg Bartunovすべおがそれほど単玔ではないこずを瀺した埌、いく぀かの政治ゲヌムに移りたす。



なぜ政治ゲヌムなのか これは条件付きの名前です。 Postgresはコミュニティによっお開発されおおり、コミュニティには䞀皮の民䞻䞻矩がありたす。1぀の゜リュヌションを実珟するには、あらゆる皮類のゞェスチャヌや䌚話などを倚数適甚する必芁がありたす。 これらすべおを政治ゲヌムず呌びたす。



最近たで、これに぀いおはたったく考えおいたせんでした。 そしお、文字通り玄2〜3幎前、そのような状況はオヌプン゜ヌスで発生したした。 オヌプン゜ヌスが支配的な゜フトりェア開発モデルになり぀぀ありたす。 このグラフでは、グロヌバルな傟向を芋るこずができたす







オヌプン゜ヌスデヌタベヌスが成長しおおり、専有デヌタベヌスが枛少しおいるこずがわかりたす。



単なる゜リュヌションモデル。 ここでは、GartnerのMagic Quadrantが瀺しおいたす。巊偎が昚幎、右偎が今幎です。







EnterpriseDBず富士通に盎面したPostgresは、すでにデヌタベヌスのリヌダヌになっおいるこずがわかりたす。 2014幎に初めおオヌプン゜ヌスデヌタベヌスがデヌタベヌスリヌダヌのリストに远加されたこずは、かなり泚目に倀するむベントです。 ぀たり 垂堎は過熱しおいたす。







2018幎には、デヌタベヌスの70がオヌプン゜ヌスになるこずがわかりたす。 この予枬は、あなたはそれを信じるこずができたすが、信じるこずはできたせんが、今では人々はたすたすデヌタベヌスを䜿いたがっおいる傟向がありたす。 そしお、オヌプン゜ヌスデヌタベヌスのリヌダヌはPostgresです。 たた、MySQLもありたす。これも非垞に優れたデヌタベヌスですが、Postgresは本栌的なデヌタベヌスであり、珟圚非垞に優れおいたす。 そしお、これは私たちのコミュニティで感じられたす。なぜなら、私たちが蚪れるすべおのクラむアントが質問を始め、Postgresからいく぀かの機胜を求め始めるからです。







このスラむドをEnterpriseDBプレれンテヌションから抜粋したした。これはPostgres開発の段階を瀺しおいたす。 圌らは次のように述べたした今ぱンタヌプラむズの段階です。 そこに曞かれおいる機胜、぀たり゚ンタヌプラむズず呌ばれる機胜に泚意しおください。 すべおは問題ありたせんが、「クラスタ」ずいう単語は衚瀺されたせん。 ぀たり 本圓にそうです。 コミュニティでは、クラスタヌ゜リュヌションが必芁であるずいう意芋はただありたせん。







Todo特別にスクリヌンショットを䜜成したしたを芋るず、そこにクラスタヌがありたすが、これは同じクラスタヌではありたせん。 これはクラスタコマンドです。 ぀たり Todoでさえ、氎平クラスタヌなどを行うために必芁なこずに぀いおの蚀葉はありたせん。



これは偶然ではありたせんでした。 䞀方では、コミュニティは保守的であり、他方では、垂堎はただ私たちをサポヌトしおいたせん。



珟圚、特にロシアでは、Postgresは非垞に倧芏暡なプロゞェクトの候補ず芋なされおおり、クラスタヌの抂念は必須になっおいたす。







Postgres forkペヌゞをご芧ください。 フォヌクの数を確認したす。 それだけではありたせん。



赀い䞞で、クラスタヌがフィヌチャであるフォヌクをマヌクしたした。 Postgresから衚瀺されるほずんどすべおのフォヌクは、クラスタヌが欠萜しおいるためにのみ衚瀺されおいるこずがわかりたす。 そしお最終的に、コミュニティはクラスタヌが本圓にTodoにあるべきだず考え始め、䜕かをするべきだず考え始めたした。







これは初めおのこずではありたせん。 叀いナヌザヌであるPostgresの叀いナヌザヌは、レプリケヌションに぀いお話したこずを芚えおいたす。 か぀おPostgresにはレプリケヌションがなく、カヌネルではレプリケヌションが䞍芁であるず蚀われおいたした。レプリケヌションはサヌドパヌティ補品でなければなりたせん。 そしお、再び、ナヌザヌは、コミュニティが突然コアにあるべきだず気づきたした。 そしお、私たちはそれを手に入れ、今ではレプリケヌションは誰もが䜿甚する良い通垞のツヌルです。 たた、Windowsのポヌトに関するストヌリヌもありたした。どのくらいの電力が必芁か、どのくらいの電力が必芁か、Windowsのポヌトをキックオフしたしたが、最終的にはそれを行いたした。



ヒョヌドル・シガ゚フしかし、私たちはキックオフしたした。



オレグ・バルトゥノフその結果、今では非垞に革呜的な状況になりたした。䞋局階玚が望んでいたすが、䞊局階玚は決定しおいたせん。 さらに、興味深い状況-私たちは䌚瀟を組織し、顧客ず話し、「クラスタヌを䜜る」ず蚀いたす。 2ndQuadrantは同じこずを蚀っおいたす「クラスタヌを䜜成したす」。 EnterpriseDBは、「私たちもクラスタヌを䜜っおいたす」ず蚀いたす。 しかし、すべおの慣習は、「ロヌドマップには興味がなく、ロヌドマップコミュニティに興味がありたす」ず蚀いたす。 このクラスタヌがコミュニティヌに必芁であり、コミュニティヌが機胜する必芁がありたす。



スラむド䞊で、私は手短に決定を䞋したずサヌシャは語る。



アレクサンダヌ・コロトコフ





オレグ・バルトゥノフ私は、これらがすでにラむブナヌザヌを持っおいるデヌタベヌス、぀たり 䞭囜の倚くの銀行がこれらのXCを䜿甚しおいたす。



アレクサンダヌ・コロトコフ䞀貫性のあるバグがあったずいう事実にもかかわらず、䞭囜は非垞に勇敢で、これに関しお銀行を立ち䞊げる準備ができおいたす。





EnterpriseDBは珟圚、Aggregate Pushdownを実行できるようにパッチに取り組んでいたす。 シャヌドからすべおをプルしないようにしおから、集蚈をカりントし、シャヌド自䜓の集蚈をカりントできるようにしたす。 同様に、プッシュダりンに参加したす...そしお、このようなかなり長いロヌドマップは、完党には完成しおいたせん。おそらく、本栌的な分散オプティマむザヌを入手するのは明確ではありたせん。 ただし、このアプロヌチの利点は、FDWを改善しおいるこずです。





Oleg Bartunov GitHubでGreenplumをダりンロヌドし、コンパむル、むンストヌルすれば、eBayが長い間働いおいたのず同じ倧芏暡な䞊列デヌタベヌスをすでに持っおいるこずになりたす。 ぀たり ここでのオヌプン゜ヌス開発モデルはオヌプンであり、その利点を瀺しおいたす。



Fedor Sigaev芚えおおいおください-これらはOLAPデヌタベヌスであり、OLTPではありたせん。 Postgresで䜕かを倧量に分析する必芁がある堎合は、Greenplumたたはpg_shardでそれを感じるこずができたすが、確実に転送されるこずを期埅しおそこにお金を入れない方が良いです。



Alexander Korotkovそしお、私たちが始めたプロゞェクトは、Postgresりィザヌド甚の分散トランザクションマネヌゞャヌです。 圌に぀いおもう少し詳しくお話したす。



Oleg Bartunovこれらは掻発で掻発なプロゞェクトであり、独自のカスタムマヌがあり、開発䞭です。 そしお、我々はリ゜ヌスがあるこずがわかりたすが、コミュニティの決定はありたせん。



前回のPGConで、この問題を提起し、この問題を解決するための倧きな䌚議、いわゆるクラスタヌサミットを開催するこずに同意したした。







2日前、私たちはこの䌚議から飛びたした。 私たちはりィヌンで䌚い、クラスタヌの燃焌問題、぀たり コミュニティがTodoでクラスタヌ化された゜リュヌションを䜿甚するかどうかずいう問題を提起したした。







私たちは、状況が非垞に成熟しおいるため、Todoに瀺す必芁があるず刀断したした。 同時に、クラスタヌ゜リュヌションの開発を継続する必芁がありたす。既に瀺したように、クラスタヌ゜リュヌションは非垞に耇雑なものであり、明日たたは2幎埌にこの゜リュヌションが勝぀ずは蚀えないため、゜リュヌションを開発する必芁がありたす。 さらに、たずえば、圓瀟のコミットメントが他の゜リュヌションぞの道を劚げないような方法で開発する必芁がありたす-これは非垞に重芁です。 決定-平和ず愛。



クラスタ゜リュヌションを拡匵ずしお開発できるようにPostgresむンフラストラクチャを䜜成するずいうアむデアがありたした。これにより、開発が倧幅に促進されたす。 分散トランザクションマネヌゞャヌに぀いお話したしたが、このアむデアは人々にずっお興味深いものでした。この問題を9.6にプッシュしたす。 9.6では、分散トランザクションが既にPostgresにあり、少なくずも誰かが既にクラスタヌを䜜成できるようにしたすか アプリケヌションレベルで。







2015幎10月31日にEnterpriseDBから取埗したスラむドに远加したした。 この期間を氎平スケヌリングシャヌディングず呌び、解決する必芁のあるタスクのリストを䜜成したした。 ぀たり これがコミュニティで掚進されおいるもので、コミュニティがこれを凊理したす。



アレクサンダヌ・コロトコフ目暙は明確であり、読み取りず曞き蟌みの䞡方のスケヌラビリティに加えお、高い䟡倀を求めおいたす。 これは、たずえば冗長性を䜿甚しお実珟できたす。 同じシャヌドは1぀のコピヌではなく、2぀のコピヌに保持されたす。



そしお、圌らはここでタスクを売り蟌みたした、ここで最倧です。 実際にはもっず倚くあるこずは明らかです。 私たちが扱っおいるタスクは、分散トランザクションの管理です。 珟圚、倚くの異なる関心事が亀差しおいるのは、分散リク゚ストのプランナヌず゚グれキュヌタヌです。 FDWは分散リク゚ストに察する1぀のアプロヌチであり、pg_shardは別のアプロヌチであり、Postgres XC XLは3番目のアプロヌチです。 そしお、おそらく4日、5日など。 しかし、遅かれ早かれこの方向で、共通の分母にも到達するこずを願っおいたす。



Oleg Bartunov Bruce Momzhanが䌚議にここにいたす。圌はTodoでのクラスタリングに関する条項を曞くべき責任者です。そうすれば、なんらかの努力を結集する必芁があるので、すべおがうたくいきたす。







この写真は、たくさんの材料があり、その䞭からたくさんのものを調理できるこずを意味したすが、それが刀明するずいう事実はありたせん。







アレクサンダヌ・コロトコフ衚では、このようなマトリックスを䜜成しようずしたした。ここにクラスタヌ゜リュヌションを入力したした。珟圚存圚し、開発䞭の゜リュヌションず、か぀お歎史的でサポヌトされなくなった゜リュヌションの䞡方です。



Fedor Sigaev最も人気のあるものを採甚したした。 Olegは最初、このマトリックスがさらに倧きく、ピクセルごずのグラフィックを䜜成できるこずを瀺したしたが、それからは䜕も明確ではありたせん。



オレグ・バルトゥノフこの衚は長い間怜蚎するこずができ、議論するこずができたす。理想的な解決策はないこずを瀺しおいたす。 たずえば、XC / XL / X2は最も魅力的に芋え、最もプラスになりたす。 FDWずpg_shardにも倚くの利点がありたすが、特にデヌタの敎合性に欠ける䜕かが欠けおいたす。



戊い党䜓が始たったずき、各䌁業は「私たちは決断を䞋す、私たちの決断は良い」などず述べたした。 たた、XLを䜿甚しお遊んで、独自のクラスタヌを䜜成するこずを決めたしたが、XLが実皌働で䜿甚する準備があたり敎っおいないこずに気付き、䞀般的な戊いには参加せず、その䞀般的な技術に集䞭するこずにしたした誰もが必芁ずする芁玠。 ぀たり すべおのクラスタ゜リュヌションには、分散トランザクションマネヌゞャが必芁です。



したがっお、この方向を遞択しお実装したした。 次に、それが䜕であるか、なぜそれが重芁であるか、そしおそれがクラスタヌ゜リュヌションに䞎えるものを説明したす。







アレクサンダヌ・コロトコフ分散トランザクションマネヌゞャヌには䞀般的に䜕が必芁ですか 分散システムでのコミットがアトミックであるこずは明らかです。 アトミックずは、たず、アトミックにあらゆる堎所を通過するか、あらゆる堎所に転がるこずを意味したす。 第二に、アトミックな可芖性、぀たり これは、耇数のデヌタベヌス2番目のシヌンで瀺したものの読み取り芁求を行った堎合、すべおのコミットを衚瀺するか、すべおのコミットを衚瀺する必芁がないこずを意味したす。 あるサヌバヌでお金が既に送金されおいるのを芋お、別のサヌバヌで送金されおいないこずがわかり、その結果、金額が収束したせん。



, . , , pluggable API . ぀たり Postgres' , — , . , , , - , , , .







API, , . , Postgres , so', , .



: , pluggable. pluggable, executer pluggable, , , , Transaction Manager pluggable.



: , , executer Postgres pluggable, .. executer, .







: , ? : , , Transaction Manager Postgres .



: , , .







, .. , Postgres.







, Transaction Manager.







次。







, , .









— , DTM. Postgres, , , , , . , , , , .







: . , . - , .







dtmd — . , begin, id' , . , join, . Global xmin , .







, , dtmd . dtmd , , , , . roadback, .







flow — , , .







— , Timestamp, , Postgres' .











, , . , .







. , .. TCP- — , , sockhub, .















, .







, , — . , , .



: pg_shard. pg_shard , , .







: , , — pg_shard FDW.







.





, , . , . Timestamp, , , .



: , , — , , . , , , , consistency high valability. .







.



: , , . , , . , , .







Roadmap — , XTM — 9.6., , , Timestamp , .



, :







-, pg_shard FDW — ACID . XC/XL/X2 , - , , , GTM.



: , , . , Todo
 , Postgres, , , .



連絡先



» zen

» smagen

» Postgres Professional



— HighLoad++ . 2016 — HighLoad++ , 7 8 .



HighLoad++? PostgreSQL! , , , .



- HighLoad.Guide — , , , . 30 . !





All Articles