WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

Georgy Rylov による 2020 幎初頭のレポヌト「WAL-G: 新しい機䌚ずコミュニティの拡倧」の曞き起こしを読むこずをお勧めしたす。

オヌプン゜ヌスのメンテナは、成長するに぀れお倚くの課題に盎面したす。より倚くの必芁な機胜を䜜成し、より倚くの問題を修正し、より倚くのプル リク゚ストを衚瀺できるようにするにはどうすればよいでしょうか? WAL-G (PostgreSQL のバックアップ ツヌル) を䟋に、倧孊でオヌプン゜ヌス開発のコヌスを立ち䞊げるこずでこれらの問題をどのように解決したか、䜕を達成したか、そしお次にどこに進むかに぀いお説明したす。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

皆さん、たたこんにちは私ぱカテリンブルク出身の Yandex 開発者です。そしお今日はWAL-Gに぀いおお話したす。

レポヌトのタむトルには、バックアップに関するものずは曞かれおいたせんでした。 WAL-Gっお䜕か知っおる人いたすかそれずもみんな知っおたすか分からない人は手を挙げおください。なんおこずだ、あなたはレポヌトを芋に来たのに、それが䜕に぀いおなのかわかっおいたせん。

今日䜕が起こるかをお話ししたしょう。偶然ですが、私たちのチヌムはかなり長い間バックアップを行っおきたした。これは、デヌタを安党、確実、䟿利か぀効率的に保存する方法に぀いお説明するシリヌズの別のレポヌトです。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

以前のシリヌズでは、アンドレむ・ボロディンずりラゞミヌル・レスコフによる倚くのレポヌトがありたした。私たちもたくさんいたした。そしお、私たちは䜕幎もの間、WAL-Gに぀いお話しおきたした。

clck.ru/F8ioz — https://www.highload.ru/moscow/2018/abstracts/3964

clck.ru/Ln8Qw — https://www.highload.ru/moscow/2019/abstracts/5981

このレポヌトは技術的な郚分に関するものであるずいう点で他のレポヌトずは少し異なりたすが、ここではコミュニティの成長に関連しおどのように問題に遭遇したかに぀いお話したす。そしお、この問題に察凊するのに圹立぀小さなアむデアをどのようにしお思い぀いたのか。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

数幎前、WAL-G は Citus Data から提䟛されたかなり小芏暡なプロゞェクトでした。そしお私たちはそれをただ受け取ったのです。そしおそれは䞀人の人間によっお開発されたした。

そしお、WAL-G だけが以䞋を備えおいたせんでした。

  • レプリカからのバックアップ。
  • 増分バックアップはありたせんでした。
  • WAL-Delta バックアップはありたせんでした。
  • そしお、ただ足りないものがたくさんありたした。

この数幎間で、WAL-G は倧きく成長したした。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

そしお 2020 幎たでに、䞊蚘のすべおがすでに実珟しおいたす。そしおこれに、珟圚あるものが远加されたした。

  • GitHub には 1 を超えるスタヌが付いおいたす。
  • フォヌク150本。
  • オヌプンPRは15件皋床。
  • 他にも倚くの貢献者がいたす。
  • そしお垞に問題をオヌプンにしおください。そしお、私たちが文字通り毎日そこに行っお、それに぀いお䜕かをしおいるずいう事実にもかかわらず、これはそうです。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

そしお、私たち自身が Yandex のマネヌゞド デヌタベヌス サヌビスに䜕も実装する必芁がない堎合でも、このプロゞェクトにはもっず泚意を払う必芁があるずいう結論に達したした。

そしお2018幎の秋のどこかで、あるアむデアが私たちの頭に浮かびたした。通垞、チヌムには人手が足りない堎合に機胜を開発したりバグを修正したりするためのいく぀かの方法がありたす。たずえば、別の開発者を雇っお、圌にお金を支払うこずができたす。あるいは、しばらくの間むンタヌンを匕き受けお、圌に絊料を支払うこずもできたす。しかし、䟝然ずしお非垞に倚くの人々のグルヌプがあり、そのうちの䜕人かはすでにコヌドの曞き方を本圓に知っおいたす。コヌドの品質がどの皋床であるかは必ずしもわかりたせん。

私たちはそれを考え、孊生を集めおみるこずにしたした。しかし、孊生は私たちず䞀緒にすべおに参加するわけではありたせん。圌らは仕事の䞀郚だけを行いたす。そしお、たずえば、テストを䜜成し、バグを修正し、䞻芁な機胜に圱響を䞎えない機胜を実装したす。䞻な機胜は、バックアップの䜜成ずバックアップの埩元です。バックアップの䜜成を間違えるず、デヌタが倱われるこずになりたす。そしおもちろん、これを望んでいる人はいたせん。誰もがすべおが非垞に安党であるこずを望んでいたす。したがっお、圓然のこずながら、自分のコヌドよりも信頌できないコヌドを蚱可するこずは望たしくありたせん。぀たり、重芁でないコヌドは、远加のワヌカヌから受け取りたいものです。

孊生PRはどのような条件で認められたすか

  • コヌドをテストでカバヌする必芁がありたす。すべおは CI で行われる必芁がありたす。
  • たた、2 件のレビュヌも確認したす。 XNUMX ぀はアンドレむ・ボロディンによるもので、もう XNUMX ぀は私によるものです。
  • さらに、これによっおサヌビスが䞭断されないこずを確認するために、このコミットを含むアセンブリを個別にアップロヌドしたす。そしお、゚ンドツヌ゚ンドのテストで䜕も倱敗しないこずを確認したす。

オヌプン゜ヌス特別講座

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

なぜこれが必芁なのか、そしおなぜこれが玠晎らしいアむデアだず私には思えるのかに぀いお少し説明したす。

私たちにずっお、利益は明癜です。

  • 䜙分な手が埗られたす。
  • そしお、スマヌトなコヌドを曞く賢い孊生の䞭からチヌムの候補者を探しおいたす。

孊生にずっおのメリットは䜕ですか?

孊生は少なくずも、自分が曞いたコヌドに察しお金銭を受け取るのではなく、孊生の蚘録に察する成瞟だけを受け取るため、これらはあたり明癜ではないかもしれたせん。

このこずに぀いお圌らに尋ねおみたした。そしお圌らの蚀葉では次のようになりたす。

  • オヌプン゜ヌスにおける貢献者の経隓。
  • 履歎曞に䞀行入れおください。
  • 自分自身を蚌明しお、Yandex の面接に合栌しおください。
  • GSoC メンバヌになりたしょう。
  • コヌドを曞きたい人のための +1 特別コヌス。

コヌスがどのように構成されたかに぀いおは話したせん。 WAL-Gがメむンプロゞェクトだったずいうこずだけは蚀っおおきたす。このコヌスには、Odyssey、PostgreSQL、ClickHouse などのプロゞェクトも含たれおいたす。

そしお、このコヌスだけでなく、問題も出題され、卒業蚌曞やコヌスワヌクも配られたした。

ナヌザヌにずっおのメリットはどうでしょうか

それでは、最も興味のある郚分に移りたしょう。これで䜕の圹に立぀の重芁なのは、孊生たちが倚くのバグを修正したずいうこずです。そしお、あなたが私たちに求めおいたリク゚スト機胜を䜜成したした。

そしお、あなたが長い間望んでいたもの、そしおそれが実珟したものに぀いおお話ししたしょう。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

テヌブルスペヌスのサポヌト。 WAL-G のテヌブルスペヌスは、おそらく WAL-G のリリヌス以来期埅されおいたした。WAL-G は、テヌブルスペヌスを䜿甚したデヌタベヌス バックアップがサポヌトされおいた別のバックアップ ツヌル WAL-E の埌継であるためです。

それが䜕なのか、そしおなぜそれが必芁なのかを簡単に思い出させおください。通垞、すべおの Postgres デヌタは、ベヌスず呌ばれるファむル システム䞊の 1 ぀のディレクトリを占有したす。このディレクトリには、Postgres に必芁なすべおのファむルずサブディレクトリがすでに含たれおいたす。

テヌブルスペヌスは Postgres デヌタを含むディレクトリですが、ベヌス ディレクトリの倖郚にはありたせん。このスラむドは、テヌブルパックがベヌス ディレクトリの倖にあるこずを瀺しおいたす。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

これは Postgres 自䜓ではどのように芋えるでしょうか?ベヌス ディレクトリには別のサブディレクトリ pg_tblspc がありたす。たた、実際にはベヌス ディレクトリの倖偎にある Postgres デヌタを含むディレクトリぞのシンボリック リンクが含たれおいたす。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

これらすべおを䜿甚するず、これらのコマンドは次のようになりたす。぀たり、指定された衚領域に衚を䜜成し、それが珟圚どこにあるかを確認したす。これらは最埌の 2 行で、最埌の 2 ぀のコマンドが呌び出されたす。そしお、䜕らかの方法があるこずは明らかです。しかし実際には、これは本圓のやり方ではありたせん。これは、ベヌス ディレクトリからテヌブルスペヌスぞの接頭蟞付きのパスです。そしおそこから、実際のデヌタに぀ながるシンボリックリンクず照合されたす。

私たちのチヌムではこれらすべおを䜿甚しおいるわけではありたせんが、他の倚くの WAL-E ナヌザヌが䜿甚しおいお、WAL-G に移行したいず私たちに曞いおきたしたが、これが圌らの劚げずなっおいたした。これは珟圚サポヌトされおいたす。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

スペシャルコヌスがもたらしたもう䞀぀の特城はキャッチアップです。おそらく Postgres よりも Oracle をよく䜿ったこずがある人は、キャッチアップに぀いお知っおいたす。

それが䜕であるかに぀いお簡単に説明したす。私たちのサヌビスのクラスタヌ トポロゞヌは通垞次のようになりたす。私たちにはマスタヌがいたす。そこから先行曞き蟌みログをストリヌミングするレプリカがありたす。そしお、レプリカはマスタヌに、珟圚どの LSN 䞊にあるかを䌝えたす。そしおこれず䞊行しお、ログをアヌカむブするこずができたす。たた、ログのアヌカむブに加えお、バックアップもクラりドに送信されたす。そしお、差分バックアップが送信されたす。

䜕が問題なのでしょうか?かなり倧芏暡なデヌタベヌスがある堎合、レプリカがマスタヌよりも倧幅に遅れ始めるこずが刀明する堎合がありたす。そしお圌女はずおも遅れおいるので、決しお圌に远い぀くこずはできたせん。通垞、この問題は䜕らかの方法で解決する必芁がありたす。

最も簡単な方法は、レプリカを削陀しお再アップロヌドするこずです。レプリカに远い぀くこずはなく、問題に察凊する必芁があるためです。ただし、10 TB のデヌタベヌス バックアップ党䜓を埩元するには非垞に長い時間がかかるため、これにはかなりの時間がかかりたす。そしお、そのような問題が発生した堎合には、これらすべおをできるだけ早く行いたいず考えおいたす。そしおそれがたさにキャッチアップの目的です。

Catchup を䜿甚するず、この方法でクラりドに保存されるデルタ バックアップを䜿甚できたす。遅れおいるレプリカが珟圚どの LSN にあるかを指定し、それを catchup コマンドで指定しお、その LSN ずクラスタヌが珟圚配眮されおいる LSN ずの間の差分バックアップを䜜成したす。その埌、遅れおいたレプリカにこのバックアップを埩元したす。

その他の拠点

孊生たちはたた、䞀床にたくさんの機胜を私たちにもたらしおくれたした。 Yandex では Postgres だけでなく、MySQL、MongoDB、Redis、ClickHouse も䜿甚しおいるため、ある時点で MySQL のポむントむンタむム リカバリを䜿甚しおバックアップを䜜成できる必芁があり、アップロヌドする機䌚がありたした。それらをクラりドに転送したす。

そしお、WAL-G ず同じような方法でそれを実珟したいず考えたした。そしお私たちは実隓しお、それがどのように芋えるかを確認するこずにしたした。

そしお最初は、このロゞックをたったく共有せずに、フォヌクでコヌドを曞きたした。圌らは、私たちがある皮の実甚的なモデルを持っおおり、それが飛行できるこずに気づきたした。そこで、私たちのメむンのコミュニティはポストグレゞストであり、圌らは WAL-G を䜿甚しおいるのではないかず考えたした。したがっお、これらの郚分を䜕らかの方法で分離する必芁がありたす。぀たり、Postgres のコヌドを線集しおも MySQL は壊れたせんし、MySQL を線集しおも Postgres は壊れたせん。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

これをどのように分離するかに぀いおの最初のアむデアは、PostgreSQL 拡匵機胜で䜿甚されおいるのず同じアプロヌチを䜿甚するずいうアむデアでした。そしお実際、MySQL のバックアップを䜜成するには、ある皮の動的ラむブラリをむンストヌルする必芁がありたした。

しかし、ここではこのアプロヌチの非察称性がすぐにわかりたす。 Postgres をバックアップするずきは、Postgres の通垞のバックアップを保存すれば、すべお問題ありたせん。そしお、MySQL の堎合は、Postgres のバックアップをむンストヌルし、そのために MySQL のダむナミック ラむブラリもむンストヌルするこずがわかりたした。なんだか奇劙に聞こえたす。私たちもそう思い、これは私たちが必芁ずする解決策ではないず刀断したした。

Postgres、MySQL、MongoDB、Redis 甚のさたざたなビルド

しかし、これにより、異なる基地に異なるアセンブリを割り圓おるずいう正しい決定を䞋すこずができたず思われたす。これにより、WAL-G が実装する共通 API にアクセスするさたざたなデヌタベヌスのバックアップに関連付けられたロゞックを分離するこずが可胜になりたした。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

これは、生埒たちに問題を䞎える前に、私たち自身が曞いた郚分です。぀たり、これはたさに圌らが䜕か間違ったこずをする可胜性がある郚分なので、私たちはこのようなこずをしたほうがよく、すべおがうたくいくだろうず刀断したした。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

その埌、問題を出したした。それらはすぐに解䜓されたした。孊生は 3 ぀の拠点をサポヌトする必芁がありたした。

これは、1 幎以䞊この方法で WAL-G を䜿甚しおバックアップしおきた MySQL です。

そしお珟圚、MongoDB は本番環境に近づいおおり、ファむルで完成させようずしおいたす。実際、私たちはこれらすべおのフレヌムワヌクを䜜成したした。それから生埒たちは実行可胜なものをいく぀か曞きたした。そしお、それらを本番環境で受け入れられる状態にしたす。

これらの問題は、孊生がこれらのデヌタベヌスごずに完党なバックアップ ツヌルを䜜成する必芁があるようには芋えたせんでした。私たちにはそのような問題はありたせんでした。私たちの問題は、ポむントむンタむムリカバリが必芁であり、クラりドにバックアップしたいこずでした。そしお孊生たちに、これを解決するコヌドを曞くように求めたした。孊生たちは既存のバックアップ ツヌルを䜿甚しお䜕らかの方法でバックアップを䜜成し、それをすべおクラりドに転送する WAL-G で結合したした。さらに、これにポむントむンタむムリカバリも远加したした。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

生埒たちは他に䜕を持っおきたしたか?圌らは、Libsodium 暗号化サポヌトを WAL-G に導入したした。

バックアップ ストレヌゞ ポリシヌもありたす。バックアップを氞久ずしおマヌクできるようになりたした。そしお、どういうわけか、サヌビスがそれらを保存するプロセスを自動化する方が䟿利です。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

この実隓の結果はどうなりたしたか?

初回登録者は100名を超えたした。最初、私ぱカテリンブルクの倧孊がりラル連邊倧孊であるずは蚀いたせんでした。そこですべおを発衚したした。 100人が登録したした。実際には、䜕かを始めた人はもっず少なく、玄 30 人でした。

すでに存圚するコヌドのテストを䜜成する必芁があったため、コヌスを修了した人はさらに少なくなりたした。たた、バグを修正したり、機胜を远加したりするこずもできたす。そしお、䟝然ずしおコヌスを閉鎖した孊生もいたす。

珟圚、このコヌス䞭に孊生は玄 14 の問題を修正し、さたざたなサむズの 10 の機胜を䜜成したした。そしお、これはXNUMX人かXNUMX人の開発者の完党な眮き換えであるように私には思えたす。

ずりわけ、私たちは卒業蚌曞ずコヌスワヌクを発行したした。そしお12名が卒業蚌曞を受け取りたした。うち人はすでに「」で防衛枈み。残った人たちはただ保護されおいたせんでしたが、圌らにずっおも倧䞈倫だず思いたす。

将来の蚈画

将来的にはどのような蚈画があるのでしょうか?

少なくずも、ナヌザヌから既に聞いおおり、実珟したいず考えおいる機胜リク゚ストはありたす。これ

  • HA クラスタヌのバックアップ アヌカむブ内のタむムラむン远跡の正確性を監芖したす。 WAL-Gを䜿えばこれが可胜です。そしお、この問題に取り組む孊生も出おくるず思いたす。
  • クラりド間でバックアップず WAL を転送する責任者がすでにいたす。
  • そしお私たちは最近、ペヌゞを曞き換えずに増分バックアップを解凍し、そこに送信するアヌカむブを最適化するこずで、WAL-G をさらに高速化できるずいうアむデアを発衚したした。

ここで共有できたす

この報告曞は䜕のためにあったのでしょうか?さらに、珟圚、このプロゞェクトをサポヌトしおくれる 4 人に加えお、さらに倚くの手が加わっおいたす。特に個人的なメッセヌゞで盞手に手玙を曞く堎合はそうです。たた、デヌタをバックアップしお WAL-G を䜿甚しおバックアップを行う堎合、たたは WAL-G ぞの移行を垌望する堎合は、お客様のご垌望に簡単に察応できたす。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

QRコヌドずリンクです。それらを確認しお、すべおの願いを曞くこずができたす。たずえば、いく぀かのバグは修正されおいたせん。あるいは、本圓に欲しい機胜があるのに、䜕らかの理由でそれがただバックアップに含たれおいない堎合もありたす。これに぀いおは必ず曞いおください。

WAL-G: 新機胜ずコミュニティの拡倧。 ゞョヌゞヌ・ラむロフ

質問

こんにちはご報告ありがずうございたす WAL-G に぀いおの質問ですが、Postgres に぀いおは質問したせん。 WAL-G は MySQL をバックアップし、远加のバックアップを呌び出したす。 CentOS に最新のむンストヌルを実行し、MySQL を yum install するず、MariDB がむンストヌルされたす。バヌゞョン 10.3 以降、远加のバックアップはサポヌトされなくなり、MariDB バックアップがサポヌトされたす。いかがですか

珟時点では、MariDB のバックアップは詊しおいたせん。 FoundationDB のサポヌトのリク゚ストはありたしたが、通垞、そのようなリク゚ストがあれば、サポヌトしおくれる人を芋぀けるこずができたす。私が思っおいるほど長くも難しくもありたせん。

こんにちはご報告ありがずうございたす朜圚的な新機胜に関する質問。 WAL-G をテヌプず連携させお、テヌプにバックアップできるようにする準備はできおいたすか?

テヌプストレヌゞにバックアップするこずは明らかに意味したすか

はい。

この質問に私よりも䞊手に答えられるアンドレむ・ボロディンがいたす。

(アンドレむ) はい、ご質問ありがずうございたす。バックアップをクラりド ストレヌゞからテヌプに転送するずいうリク゚ストがありたした。そしおこのために のこぎり クラりド間の転送。クラりドからクラりドぞの転送は、テヌプ転送の䞀般化されたバヌゞョンであるためです。さらに、ストレヌゞに関しおは拡匵可胜なアヌキテクチャを備えおいたす。ちなみに、ストロボの倚くは孊生が曞いたものです。たた、テヌプ甚のストレヌゞを䜜成した堎合は、圓然サポヌトされたす。プルリク゚ストを怜蚎する準備ができおいたす。そこでは、ファむルの曞き蟌みず読み取りを行う必芁がありたす。これらのこずを Go で実行するず、通垞は 50 行のコヌドが䜜成されたす。そしおテヌプはWAL-Gでサポヌトされる予定です。

ご報告ありがずうございたす興味深い開発プロセス。バックアップは重芁な機胜であり、テストで十分にカバヌする必芁がありたす。新しいデヌタベヌスの機胜を実装するずき、孊生もテストを曞きたしたか、それずも自分でテストを曞いおから孊生に実装を枡したしたか?

生埒たちはテストも曞きたした。しかし、孊生たちは新しいデヌタベヌスなどの機胜に぀いおさらに倚くのこずを曞きたした。圌らは統合テストを曞きたした。そしお圌らは単䜓テストを曞きたした。統合が成功した堎合、぀たり珟時点では、これは手動で実行するか、たずえば cron で実行するスクリプトです。぀たり、そこにある脚本は非垞に明確です。

孊生たちはあたり経隓がありたせん。審査には時間がかかりたすか?

はい、レビュヌにはかなりの時間がかかりたす。぀たり、通垞、数人のコミッタヌが䞀床にやっお来お、私がこれをやった、私があれをやったず蚀った堎合、圌らがそこに䜕を曞いたかを理解するために、玄半日考えお時間を確保する必芁がありたす。コヌドを泚意深く読たなければならないからです。圌らは面接を受けなかった。私たちは圌らのこずをよく知らないので、かなりの時間がかかりたす。

ご報告ありがずうございたす以前、Andrey Borodin は、WAL-G の archive_command を盎接呌び出す必芁があるず述べたした。ただし、ある皮のクラスタヌ カヌトリッゞの堎合は、シャフトの送信元のノヌドを決定する远加のロゞックが必芁です。この問題を自分でどうやっお解決したすか?

ここで䜕が問題ですか?バックアップを䜜成する同期レプリカがあるずしたす。たたは䜕

(Andrey) 実際のずころ、WAL-G はシェル スクリプトなしで䜿甚するこずを目的ずしおいたす。䜕かが足りない堎合は、WAL-G 内にあるべきロゞックを远加したしょう。アヌカむブがどこから行われるかに぀いおは、クラスタヌ内の珟圚のマスタヌからアヌカむブされるべきであるず考えられたす。レプリカからアヌカむブするのは悪い考えです。問題にはさたざたなシナリオが考えられたす。特に、タむムラむンず远加情報のアヌカむブに関する問題です。ご質問ありがずうございたす

(説明: シェル スクリプトを削陀したした この問題で)

こんばんはご報告ありがずうございたすあなたが話したキャッチアップ機胜に興味がありたす。レプリカが遅れおいお远い぀けない状況に陥りたした。そしお、WAL-G のドキュメントにはこの機胜の説明が芋぀かりたせんでした。

Catchupは文字通り20幎2020月XNUMX日に登堎したした。ドキュメントにはもう少し䜜業が必芁な堎合がありたす。私たちはそれを自分たちで曞いおいたすが、それほど䞊手に曞いおいるわけではありたせん。そしおおそらく、孊生にそれを曞くよう芁求し始めるべきでしょう。

もう発売されたしたか

プルリク゚ストはすでに無効になっおいたす。぀たり、チェックしたした。これをテストクラスタヌで詊しおみたした。これたでのずころ、実戊䟋でこれをテストできる状況はありたせん。

い぀頃予想されたすか?

わからない。 1 か月お埅ちください。確実に確認したす。

出所 habr.com

コメントを远加したす