{"id":54366,"date":"2019-12-24T00:00:00","date_gmt":"2019-12-23T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster"},"modified":"2020-02-18T14:02:22","modified_gmt":"2020-02-18T11:02:22","slug":"kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","title":{"rendered":"Jak przetrwa\u0107 w \u015bwiecie SQL w XXI wieku: chmury, Kubernetes i PostgreSQL multimaster.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Cze\u015b\u0107, u\u017cytkownicy Habr. Dzi\u015b rozpoczynaj\u0105 si\u0119 zaj\u0119cia w pierwszej grupie kursu <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/nwhU\/\">\u201ePostgreSQL\u201d<\/a><\/noindex>. W zwi\u0105zku z tym chcemy opowiedzie\u0107 o tym, jak przebiega\u0142 otwarty webinar dotycz\u0105cy tego kursu.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Jak przetrwa\u0107 w \u015bwiecie SQL w XXI wieku: chmury, Kubernetes i PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/e66e0d4919d45284dbdc4696d6cab555.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=yiXP8ihL2eA\">kolejnym otwartym lekcji<\/a><\/noindex> porozmawiali\u015bmy o wyzwaniach, przed kt\u00f3rymi stan\u0119\u0142y bazy danych SQL w erze chmur i Kubernetes. A przy okazji om\u00f3wili\u015bmy, jak bazy danych SQL przystosowuj\u0105 si\u0119 i mutuj\u0105 pod wp\u0142ywem tych wyzwa\u0144.<\/p>\n<p>Webinar poprowadzi\u0142 <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/IVe0\/\">Walerij Bezrukow<\/a><\/noindex>, Mened\u017cer ds. Realizacji Praktyki Google Cloud w EPAM Systems.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Kiedy drzewa by\u0142y ma\u0142e\u2026<\/h3>\n<p>\nNa pocz\u0105tek przypomnijmy sobie, jak wygl\u0105da\u0142 wyb\u00f3r system\u00f3w zarz\u0105dzania bazami danych na ko\u0144cu XX wieku. Jednak nie b\u0119dzie to trudne, poniewa\u017c wyb\u00f3r SGBD w tamtych czasach zaczyna\u0142 i ko\u0144czy\u0142 si\u0119 <b>Oracle<\/b>. <\/p>\n<p><img decoding=\"async\" alt=\"Jak przetrwa\u0107 w \u015bwiecie SQL w XXI wieku: chmury, Kubernetes i PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/5fdf02523892e7477fd47dd01eb21d04.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa ko\u0144cu lat 90-tych - na pocz\u0105tku lat 2000-nych, w zasadzie nie by\u0142o specjalnego wyboru, je\u015bli chodzi o przemys\u0142owe skalowalne Bazy Danych. Tak, istnia\u0142y IBM DB2, Sybase i kilka innych baz danych, kt\u00f3re pojawia\u0142y si\u0119 i znika\u0142y, ale og\u00f3lnie rzecz bior\u0105c, by\u0142y ma\u0142o zauwa\u017calne w por\u00f3wnaniu do Oracle. W zwi\u0105zku z tym umiej\u0119tno\u015bci in\u017cynier\u00f3w tamtych czas\u00f3w by\u0142y w taki czy inny spos\u00f3b zwi\u0105zane z tym jedynym wyborem, kt\u00f3ry istnia\u0142.<\/p>\n<p>Oracle DBA musia\u0142 umie\u0107:<\/p>\n<ul>\n<li> instalowa\u0107 Oracle Server z dystrybucji;<\/li>\n<li> konfigurowa\u0107 Oracle Server:<\/li>\n<\/ul>\n<p><\/p>\n<ul>\n<li>init.ora;<\/li>\n<li>listener.ora;<\/li>\n<\/ul>\n<p>\n\u2014 tworzy\u0107:<\/p>\n<ul>\n<li>przestrzenie tabel;<\/li>\n<li>schematy;<\/li>\n<li>u\u017cytkownik\u00f3w;<\/li>\n<\/ul>\n<p>\u2014 wykonywa\u0107 kopie zapasowe i odzyskiwanie;<br \/>\n\u2014 monitorowa\u0107;<br \/>\n\u2014 walczy\u0107 z nieoptymalnymi zapytaniami.<\/p>\n<p>Jednocze\u015bnie od Oracle DBA nie wymagano szczeg\u00f3lnie:<\/p>\n<ul>\n<li>umiej\u0119tno\u015bci wyboru optymalnego SGBD lub innej technologii przechowywania i przetwarzania danych;<\/li>\n<li>zapewnienia wysokiej dost\u0119pno\u015bci i poziomej skalowalno\u015bci (to nie zawsze by\u0142o pytanie dla DBA);<\/li>\n<li>dobrej znajomo\u015bci dziedziny, infrastruktury, architektury aplikacji, systemu operacyjnego;<\/li>\n<li>wykonywania \u0142adowania i pobierania danych, migracji danych mi\u0119dzy r\u00f3\u017cnymi SGBD.<\/li>\n<\/ul>\n<p>Generalnie, je\u015bli m\u00f3wimy o wyborze w tamtych czasach, przypomina to wyb\u00f3r w radzieckim sklepie na ko\u0144cu lat 80-tych:<\/p>\n<p><img decoding=\"async\" alt=\"Jak przetrwa\u0107 w \u015bwiecie SQL w XXI wieku: chmury, Kubernetes i PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/70b37faf295170d8507d5c605f4b2047.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Nasz czas<\/h3>\n<p>\nOd tego czasu, oczywi\u015bcie, drzewa uros\u0142y, \u015bwiat si\u0119 zmieni\u0142, a teraz wygl\u0105da to tak:<\/p>\n<p><img decoding=\"async\" alt=\"Jak przetrwa\u0107 w \u015bwiecie SQL w XXI wieku: chmury, Kubernetes i PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/e8698d658bd09e0071f02a672a5cb81e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZmienili si\u0119 r\u00f3wnie\u017c rynek SGBD, co dobrze wida\u0107 w \u015bwie\u017cym raporcie firmy Gartner:<\/p>\n<p><img decoding=\"async\" alt=\"Jak przetrwa\u0107 w \u015bwiecie SQL w XXI wieku: chmury, Kubernetes i PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/745f3969a3ad2e65162ef41cda6c0658.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI tutaj nie mo\u017cna nie zauwa\u017cy\u0107, \u017ce swoj\u0105 nisz\u0119 zaj\u0119\u0142y chmury, kt\u00f3rych popularno\u015b\u0107 ro\u015bnie. Je\u015bli przeczytamy ten sam raport firmy Gartner, zobaczymy nast\u0119puj\u0105ce wnioski:<\/p>\n<ol>\n<li>Wielu klient\u00f3w znajduje si\u0119 na drodze do migracji aplikacji do chmury. <\/li>\n<li>Nowe technologie pojawiaj\u0105 si\u0119 najpierw w chmurze i nie ma pewno\u015bci, \u017ce kiedykolwiek przenios\u0105 si\u0119 do infrastruktury lokalnej.<\/li>\n<li>Model cenowy oparty na zasadzie pay-as-you-go sta\u0142 si\u0119 powszechny. Wszyscy chc\u0105 p\u0142aci\u0107 tylko za to, z czego korzystaj\u0105, co jest ju\u017c nie tylko trendem, ale po prostu stwierdzeniem faktu. <\/li>\n<\/ol>\n<p><\/p>\n<h3>Co teraz?<\/h3>\n<p>\nDzi\u015b wszyscy jeste\u015bmy w chmurze. Pojawiaj\u0105ce si\u0119 pytania to pytania wyboru. A ten jest ogromny, nawet je\u015bli m\u00f3wi si\u0119 tylko o wyborze technologii baz danych w wersji On-premises. Mamy te\u017c us\u0142ugi zarz\u0105dzane i SaaS. W ten spos\u00f3b wyb\u00f3r z ka\u017cdym rokiem staje si\u0119 coraz bardziej skomplikowany.<\/p>\n<p>Obok pyta\u0144 wyboru dzia\u0142aj\u0105 tak\u017ce <b>ograniczaj\u0105ce czynniki<\/b>:<\/p>\n<ul>\n<li><b>cena<\/b>. Wiele technologii wci\u0105\u017c kosztuje pieni\u0105dze;<\/li>\n<li><b>umiej\u0119tno\u015bci<\/b>. Je\u015bli m\u00f3wimy o oprogramowaniu open-source, pojawia si\u0119 kwestia umiej\u0119tno\u015bci, poniewa\u017c darmowe oprogramowanie wymaga od os\u00f3b, kt\u00f3re je wdra\u017caj\u0105 i obs\u0142uguj\u0105, wystarczaj\u0105cej kompetencji;<\/li>\n<li><b>funkcjonalno\u015b\u0107<\/b>. Nie wszystkie us\u0142ugi dost\u0119pne w chmurze i budowane, powiedzmy, nawet na bazie Postgresa, maj\u0105 te same funkcje, co PostgreSQL On-premises. To istotny czynnik, kt\u00f3ry nale\u017cy zna\u0107 i rozumie\u0107. Co wi\u0119cej, ten czynnik staje si\u0119 wa\u017cniejszy ni\u017c znajomo\u015b\u0107 jakichkolwiek ukrytych mo\u017cliwo\u015bci danej bazy danych. <\/li>\n<\/ul>\n<p>\n<b>Czego oczekuj\u0105 teraz od DA\/DE:<\/b><\/p>\n<ul>\n<li>dobrego zrozumienia dziedziny oraz architektury aplikacji;<\/li>\n<li>umiej\u0119tno\u015bci w\u0142a\u015bciwego wyboru odpowiedniej technologii baz danych w zale\u017cno\u015bci od postawionego zadania;<\/li>\n<li>umiej\u0119tno\u015bci doboru optymalnej metody realizacji wybranej technologii w kontek\u015bcie istniej\u0105cych ogranicze\u0144;<\/li>\n<li>umiej\u0119tno\u015bci wykonywania przenoszenia i migracji danych;<\/li>\n<li>umiej\u0119tno\u015bci wdra\u017cania i obs\u0142ugi wybranych rozwi\u0105za\u0144.<\/li>\n<\/ul>\n<p>\nPoni\u017cszy przyk\u0142ad <b>oparty na GCP<\/b> demonstrates how the choice of a particular data technology is structured depending on its structure:<\/p>\n<p><img decoding=\"async\" alt=\"Jak przetrwa\u0107 w \u015bwiecie SQL w XXI wieku: chmury, Kubernetes i PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/fe324d8af9ed8f6afb58ed930dc21327.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZwr\u00f3\u0107 uwag\u0119, \u017ce w schemacie nie ma PostgreSQL, poniewa\u017c kryje si\u0119 on pod terminologi\u0105 <b>Cloud SQL<\/b>. A kiedy wchodzimy do Cloud SQL, musimy zn\u00f3w dokona\u0107 wyboru:<\/p>\n<p><img decoding=\"async\" alt=\"Jak przetrwa\u0107 w \u015bwiecie SQL w XXI wieku: chmury, Kubernetes i PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/bdf523e0b10fbfe753318a02a686a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNale\u017cy zauwa\u017cy\u0107, \u017ce ten wyb\u00f3r nie zawsze jest jasny, dlatego programi\u015bci aplikacji cz\u0119sto kieruj\u0105 si\u0119 intuicj\u0105. <\/p>\n<p><b>Podsumowuj\u0105c:<\/b><\/p>\n<ol>\n<li>Im dalej, tym bardziej aktualne staje si\u0119 pytanie wyboru. A nawet je\u015bli spojrze\u0107 tylko na GCP, us\u0142ugi zarz\u0105dzane i SaaS, to pewne wzmianki o RDBMS pojawiaj\u0105 si\u0119 dopiero na czwartym kroku (a tam Spanner obok). Dodatkowo, wyb\u00f3r PostgreSQL pojawia si\u0119 w og\u00f3le na pi\u0105tym kroku, a obok jeszcze MySQL i SQL Server, czyli <b>Bardzo du\u017co opcji, ale trzeba dokona\u0107 wyboru<\/b>. <\/li>\n<li>Nie mo\u017cna zapomina\u0107 o ograniczeniach w obliczu pokus. G\u0142\u00f3wnie wszyscy chc\u0105 Spanner, ale jest on drogi. W efekcie typowe zapytanie wygl\u0105da mniej wi\u0119cej tak: <i>\u201eProsz\u0119 zr\u00f3bcie nam Spanner, ale w cenie Cloud SQL, przecie\u017c jeste\u015bcie profesjonalistami!\u201d<\/i><\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Jak przetrwa\u0107 w \u015bwiecie SQL w XXI wieku: chmury, Kubernetes i PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/cc656b46d37d08fc6aeca937e1e9085b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Co robi\u0107?<\/h3>\n<p>\nNie roszcz\u0105c sobie pretensji do jedynej prawdy, powiedzmy tak:<\/p>\n<p><b>Nale\u017cy zmieni\u0107 podej\u015bcie do nauczania:<\/b><\/p>\n<ul>\n<li>uczenie tak, jak w przesz\u0142o\u015bci DBA, nie ma sensu;<\/li>\n<li>wiedza o jednym produkcie obecnie ju\u017c nie wystarcza;<\/li>\n<li>a znajomo\u015b\u0107 dziesi\u0119ciu na poziomie jednej \u2014 jest niemo\u017cliwa.<\/li>\n<\/ul>\n<p>\nNale\u017cy zna\u0107 nie tylko produkt, ani nawet nie ile, ale:<\/p>\n<ul>\n<li>przypadki jego zastosowania;<\/li>\n<li>r\u00f3\u017cne metody wdra\u017cania;<\/li>\n<li>zalety i wady ka\u017cdej z metod;<\/li>\n<li>analogiczne i alternatywne produkty, aby podejmowa\u0107 \u015bwiadomy i optymalny wyb\u00f3r, a nie zawsze w imi\u0119 znanego produktu.<\/li>\n<\/ul>\n<p>\nA tak\u017ce nale\u017cy umie\u0107 migrowa\u0107 dane i rozumie\u0107 podstawowe zasady integracji z ETL.<\/p>\n<h3>Przyk\u0142ad z \u017cycia<\/h3>\n<p>\nW niedawnej przesz\u0142o\u015bci musia\u0142em stworzy\u0107 backend dla aplikacji mobilnej. W momencie rozpocz\u0119cia pracy nad ni\u0105 backend by\u0142 ju\u017c opracowany i gotowy do wdro\u017cenia, a zesp\u00f3\u0142 deweloperski sp\u0119dzi\u0142 na tym projekcie oko\u0142o dw\u00f3ch lat. Przy tym postawiono nast\u0119puj\u0105ce zadania:<\/p>\n<ul>\n<li>zbudowa\u0107 CI\/CD;<\/li>\n<li>przeprowadzi\u0107 przegl\u0105d architektury;<\/li>\n<li>uruchomi\u0107 to wszystko w eksploatacji. <\/li>\n<\/ul>\n<p>\nSama aplikacja by\u0142a mikrous\u0142ugowa, a kod w Python\/Django zosta\u0142 opracowany od podstaw i od razu w GCP. Je\u015bli chodzi o grup\u0119 docelow\u0105, zak\u0142adano, \u017ce b\u0119d\u0105 dwa regiony \u2014 USA i EU, a ruch rozk\u0142adano za pomoc\u0105 Global Load Balancer. Wszystkie obci\u0105\u017cenia i obliczenia dzia\u0142a\u0142y w Google Kubernetes Engine. <\/p>\n<p>Je\u015bli chodzi o dane, to by\u0142y 3 struktury:<\/p>\n<ul>\n<li>Cloud Storage;<\/li>\n<li>Datastore;<\/li>\n<li>Cloud SQL (PostgreSQL).<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Jak przetrwa\u0107 w \u015bwiecie SQL w XXI wieku: chmury, Kubernetes i PostgreSQL multimaster.\" src=\"\/wp-content\/uploads\/2019\/12\/e6e38b1d861b2871edf20fb09378b491.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMo\u017ce pojawi\u0107 si\u0119 pytanie, dlaczego wybrano Cloud SQL? M\u00f3wi\u0105c szczerze, takie pytanie w ostatnich latach wywo\u0142uje pewn\u0105 niezr\u0119czno\u015b\u0107 \u2014 odnosi si\u0119 wra\u017cenie, \u017ce ludzie zacz\u0119li wstydzi\u0107 si\u0119 baz relacyjnych, ale mimo to nadal aktywnie je stosuj\u0105 ;-). <\/p>\n<p>Je\u015bli chodzi o nasz przypadek, Cloud SQL zosta\u0142 wybrany z nast\u0119puj\u0105cych powod\u00f3w:<\/p>\n<ol>\n<li>Jak wspomniano, aplikacja by\u0142a rozwijana przy u\u017cyciu Django, a w niej istnieje model mapowania trwa\u0142ych danych z bazy SQL na obiekty Python (Django ORM).<\/li>\n<li>Sam framework wspiera\u0142 wystarczaj\u0105co ograniczon\u0105 list\u0119 DBMS:<\/li>\n<\/ol>\n<p><\/p>\n<ul>\n<li>PostgreSQL;<\/li>\n<li>MariaDB;<\/li>\n<li>MySQL;<\/li>\n<li>Oracle;<\/li>\n<li>SQLite.<\/li>\n<\/ul>\n<p>\nW zwi\u0105zku z tym PostgreSQL wybrano z tej listy raczej intuicyjnie (no nie wybiera si\u0119 w ko\u0144cu Oracle).<\/p>\n<p><b>Czego brakowa\u0142o:<\/b><\/p>\n<ul>\n<li>aplikacja by\u0142a wdro\u017cona tylko w 2 regionach, a w planach pojawi\u0142 si\u0119 3. (Azja);<\/li>\n<li>Baza danych znajdowa\u0142a si\u0119 w regionie p\u00f3\u0142nocnoameryka\u0144skim (Iowa);<\/li>\n<li>ze strony klienta pojawi\u0142y si\u0119 obawy dotycz\u0105ce mo\u017cliwych <b>op\u00f3\u017anie\u0144 w dost\u0119pie<\/b> z Europy i Azji oraz <b>zak\u0142\u00f3ce\u0144 <\/b><b>w obs\u0142udze<\/b> w przypadku awarii bazy danych. <\/li>\n<\/ul>\n<p>\nPomimo \u017ce Django mo\u017ce dzia\u0142a\u0107 z wieloma bazami danych jednocze\u015bnie i dzieli\u0107 je na operacje odczytu i zapisu, zapisy w aplikacji nie by\u0142y liczne (ponad 90% to odczyt). W og\u00f3lnym zarysie, je\u015bli mo\u017cna by stworzy\u0107 <b>replik\u0119 odczytu g\u0142\u00f3wnej bazy w Europie i Azji,<\/b>by\u0142oby to kompromisowym rozwi\u0105zaniem. A co jest w tym trudnego?<\/p>\n<p>Trudno\u015b\u0107 polega\u0142a na tym, \u017ce klient nie chcia\u0142 rezygnowa\u0107 z korzystania z zarz\u0105dzanych us\u0142ug i Cloud SQL. Mo\u017cliwo\u015bci Cloud SQL w chwili obecnej s\u0105 ograniczone. Cloud SQL obs\u0142uguje Wysok\u0105 dost\u0119pno\u015b\u0107 (HA) i Replik\u0119 odczytu (RR), ale sama RR obs\u0142ugiwana jest tylko w jednym regionie. Tworz\u0105c baz\u0119 danych w regionie ameryka\u0144skim, nie mo\u017cna stworzy\u0107 repliki odczytu w europejskim regionie za pomoc\u0105 Cloud SQL, mimo \u017ce PostgreSQL to umo\u017cliwia. Korespondencja z pracownikami Google do niczego nie doprowadzi\u0142a i zako\u0144czy\u0142a si\u0119 obietnicami w stylu \u201ewiemy o problemie i pracujemy nad nim, pewnego dnia ta kwestia zostanie rozwi\u0105zana\u201d. <\/p>\n<p>Je\u015bli wymieni\u0107 mo\u017cliwo\u015bci Cloud SQL w punktach, to wygl\u0105da\u0142oby to mniej wi\u0119cej tak:<\/p>\n<p><b>1. Wysoka dost\u0119pno\u015b\u0107 (HA):<\/b><\/p>\n<ul>\n<li>w ramach jednego regionu;<\/li>\n<li>poprzez replikacj\u0119 dyskow\u0105;<\/li>\n<li>nie u\u017cywane s\u0105 mechanizmy PostgreSQL;<\/li>\n<li>mo\u017cliwe automatyczne i r\u0119czne zarz\u0105dzanie \u2014 failover\/failback;<\/li>\n<li>przy prze\u0142\u0105czaniu bazy danych jest niedost\u0119pna przez kilka minut.<\/li>\n<\/ul>\n<p>\n<b>2. Replika odczytu (RR):<\/b><\/p>\n<ul>\n<li>w ramach jednego regionu;<\/li>\n<li>hot standby;<\/li>\n<li>replikacja strumieniowa PostgreSQL.<\/li>\n<\/ul>\n<p>\nCo wi\u0119cej, jak to zwykle bywa, przy wyborze technologii zawsze natrafia si\u0119 na jakie\u015b <b>ograniczenia: klient nie chcia\u0142 mno\u017cy\u0107 zasob\u00f3w i korzysta\u0107 z IaaS, poza GKE;<\/b>:<\/p>\n<ul>\n<li>klient nie chcia\u0142 rozwija\u0107 us\u0142ug self service PostgreSQL\/MySQL;<\/li>\n<li>no i w og\u00f3le, Google Spanner by\u0142by odpowiedni, gdyby nie jego cena, chocia\u017c z nim Django ORM nie mo\u017ce pracowa\u0107, a tak to rzecz dobra.<\/li>\n<li>Bior\u0105c pod uwag\u0119 sytuacj\u0119, klient zada\u0142 pytanie na za\u015b:<\/li>\n<\/ul>\n<p>\n\u201eCzy mo\u017cecie stworzy\u0107 co\u015b podobnego, \u017ceby dzia\u0142a\u0142o jak Google Spanner, ale jeszcze wsp\u00f3\u0142pracowa\u0142o z Django ORM?\u201d <i>Opcja rozwi\u0105zania nr 0<\/i><\/p>\n<h3>Pierwsze, co przysz\u0142o mi do g\u0142owy:<\/h3>\n<p>\npozosta\u0107 w ramach CloudSQL;<\/p>\n<ul>\n<li>wbudowanej replikacji mi\u0119dzy regionami nie b\u0119dzie w \u017cadnej formie;<\/li>\n<li>Nie b\u0119dzie \u017cadnej wbudowanej replikacji mi\u0119dzy regionami w \u017cadnej formie;<\/li>\n<li>spr\u00f3bowa\u0107 po\u0142\u0105czy\u0107 replik\u0119 z istniej\u0105cym Cloud SQL by PostgreSQL;<\/li>\n<li>gdzie\u015b i w jaki\u015b spos\u00f3b uruchomi\u0107 instancj\u0119 PostgreSQL, ale przynajmniej nie rusza\u0107 mastera.<\/li>\n<\/ul>\n<p>\nNiestety, okaza\u0142o si\u0119, \u017ce nie da si\u0119 tego zrobi\u0107, poniewa\u017c nie ma dost\u0119pu do hosta (przebywa on w zupe\u0142nie innym projekcie) \u2014 pg_hba i tak dalej, a dodatkowo nie mamy dost\u0119pu jako superuser.<\/p>\n<h3>Opcja rozwi\u0105zania nr 1<\/h3>\n<p>\nPo kolejnych przemy\u015bleniach i bior\u0105c pod uwag\u0119 wcze\u015bniejsze okoliczno\u015bci, tok my\u015blenia nieco si\u0119 zmieni\u0142:<\/p>\n<ul>\n<li>wci\u0105\u017c pr\u00f3bujemy pozosta\u0107 w ramach CloudSQL, ale przechodzimy na MySQL, poniewa\u017c Cloud SQL by MySQL ma external master, kt\u00f3ry:<\/li>\n<\/ul>\n<p>\n\u2014 jest proxy dla zewn\u0119trznego MySQL;<br \/>\n\u2014 wygl\u0105da jak instancja MySQL;<br \/>\n\u2014 zosta\u0142 stworzony do migracji danych z innych chmur lub On-premises.<\/p>\n<p>Poniewa\u017c konfiguracja replikacji MySQL nie wymaga dost\u0119pu do hosta, w zasadzie wszystko dzia\u0142a\u0142o, ale by\u0142o bardzo niestabilne i niewygodne. A kiedy poszli\u015bmy dalej, sta\u0142o si\u0119 wr\u0119cz przera\u017caj\u0105ce, poniewa\u017c ca\u0142\u0105 struktur\u0119 rozwijali\u015bmy z u\u017cyciem terraform, a nagle okaza\u0142o si\u0119, \u017ce external master nie jest wspierany przez terraform. Tak, Google ma CLI, ale z jakiego\u015b powodu wszystko dzia\u0142a\u0142o jakby losowo \u2014 raz si\u0119 tworzy\u0142o, raz nie. Mo\u017ce dlatego, \u017ce CLI zosta\u0142o zaprojektowane do migracji danych z zewn\u0105trz, a nie do replikacji.<\/p>\n<p>W\u0142a\u015bciwie na tym sta\u0142o si\u0119 jasne, \u017ce Cloud SQL w og\u00f3le nie pasuje. Jak si\u0119 m\u00f3wi, zrobili\u015bmy wszystko, co mogli\u015bmy. <\/p>\n<h3>Opcja rozwi\u0105zania nr 2<\/h3>\n<p>\nPoniewa\u017c nie uda\u0142o si\u0119 pozosta\u0107 w ramach Cloud SQL, pr\u00f3bowali\u015bmy sformu\u0142owa\u0107 wymagania dotycz\u0105ce kompromisowego rozwi\u0105zania. Wymagania okaza\u0142y si\u0119 nast\u0119puj\u0105ce:<\/p>\n<ul>\n<li>Praca w Kubernetes, maksymalne wykorzystanie zasob\u00f3w i mo\u017cliwo\u015bci Kubernetes (DCS, &#8230;) oraz GCP (LB, &#8230;);<\/li>\n<li>brak balastu w postaci mn\u00f3stwa zb\u0119dnych rzeczy w chmurze, takich jak HA proxy;<\/li>\n<li>mo\u017cliwo\u015b\u0107 uruchomienia w g\u0142\u00f3wnym regionie HA PostgreSQL lub MySQL; w pozosta\u0142ych regionach \u2014 HA z RR g\u0142\u00f3wnego regionu plus jej kopia (dla niezawodno\u015bci);<\/li>\n<li>multi master (nie chcieli\u015bmy si\u0119 z nim \u0142\u0105czy\u0107, ale nie by\u0142o to bardzo istotne)<\/li>\n<\/ul>\n<p>. <br \/>\nW wyniku tych wymaga\u0144 na horyzoncie w ko\u0144cu pojawi\u0142y si\u0119 odpowiednie opcje DBMS i otaczaj\u0105ce technologie<b>MySQL Galera;<\/b>:<\/p>\n<ul>\n<li>CockroachDB;<\/li>\n<li>Narz\u0119dzia PostgreSQL<\/li>\n<li>\u2014 pgpool-II;<\/li>\n<\/ul>\n<p>:<br \/>\n\u2014 Patroni.<br \/>\nMySQL Galera<\/p>\n<h3>Technologia MySQL Galera zosta\u0142a opracowana przez firm\u0119 Codership i stanowi plugin dla InnoDB. Cechy:<\/h3>\n<p>\nmulti master;<\/p>\n<ul>\n<li>synchronizowana replikacja;<\/li>\n<li>odczyt z dowolnego w\u0119z\u0142a;<\/li>\n<li>zapis na dowolny w\u0119ze\u0142;<\/li>\n<li>wbudowany mechanizm HA;<\/li>\n<li>istnieje Helm chart od Bitnami.<\/li>\n<li>Istnieje Helm chart od Bitnami.<\/li>\n<\/ul>\n<p><\/p>\n<h3>CockroachDB<\/h3>\n<p>\nZ opisu wynika, \u017ce jest to niesamowity projekt open source, napisany w Go. G\u0142\u00f3wnym uczestnikiem jest Cockroach Labs (za\u0142o\u017cona przez by\u0142ych pracownik\u00f3w Google). Ta relacyjna baza danych zosta\u0142a stworzona jako rozproszona (z poziomym skalowaniem 'out of the box') i odporna na awarie. Jej tw\u00f3rcy z firmy postawili sobie za cel 'po\u0142\u0105czenie bogactwa funkcjonalno\u015bci SQL z poziom\u0105 dost\u0119pno\u015bci\u0105, znan\u0105 z rozwi\u0105za\u0144 NoSQL'.<\/p>\n<p>Mi\u0142ym dodatkiem jest wsparcie dla protoko\u0142u PostgreSQL. <\/p>\n<h3>Pgpool<\/h3>\n<p>\nTo nak\u0142adka na PostgreSQL, tak naprawd\u0119 nowy byt, kt\u00f3ry przejmuje wszystkie po\u0142\u0105czenia i je przetwarza. Ma w\u0142asny load balancer i parser, licencjonowany na zasadach BSD. Oferuje szerokie mo\u017cliwo\u015bci, ale wygl\u0105da troch\u0119 niepokoj\u0105co, poniewa\u017c obecno\u015b\u0107 nowego bytu mog\u0142aby sta\u0107 si\u0119 \u017ar\u00f3d\u0142em dodatkowych przyg\u00f3d. <\/p>\n<h3>Patroni<\/h3>\n<p>\nTo ostatnia rzecz, na kt\u00f3r\u0105 rzuci\u0142em okiem, i, jak si\u0119 okaza\u0142o, nie bez powodu. Patroni to open source'owe narz\u0119dzie, kt\u00f3re w zasadzie jest demonem w Pythonie, umo\u017cliwiaj\u0105cym automatyczn\u0105 obs\u0142ug\u0119 klastr\u00f3w PostgreSQL z r\u00f3\u017cnymi typami replikacji i automatycznym prze\u0142\u0105czaniem r\u00f3l. Okaza\u0142o si\u0119 to bardzo interesuj\u0105ce, poniewa\u017c dobrze integruje si\u0119 z Kubernetes i nie wprowadza nowych byt\u00f3w. <\/p>\n<h3>Co ostatecznie wybrali\u015bmy<\/h3>\n<p>\nWyb\u00f3r nie by\u0142 \u0142atwy:<\/p>\n<ol>\n<li><b>CockroachDB <\/b>\u2014 super, ale straszne;<\/li>\n<li><b>Technologia MySQL Galera zosta\u0142a opracowana przez firm\u0119 Codership i stanowi plugin dla InnoDB. Cechy:<\/b> \u2014 te\u017c niez\u0142e, u\u017cywane w wielu miejscach, ale MySQL;<\/li>\n<li><b>Pgpool <\/b>\u2014 zbyt wiele zb\u0119dnych byt\u00f3w, ca\u0142kiem kiepska integracja z chmur\u0105 i K8s;<\/li>\n<li><b>Patroni <\/b>\u2014 doskona\u0142a integracja z K8s, brak zb\u0119dnych byt\u00f3w, dobrze integruje si\u0119 z GCP LB.<\/li>\n<\/ol>\n<p>\nTak wi\u0119c wyb\u00f3r pad\u0142 na Patroni. <\/p>\n<h3>Wnioski<\/h3>\n<p>\nPrzyszed\u0142 czas na kr\u00f3tkie podsumowanie. Tak, \u015bwiat infrastruktury IT uleg\u0142 znacznym zmianom, a to dopiero pocz\u0105tek. Je\u015bli kiedy\u015b chmury by\u0142y tylko innym typem infrastruktury, to teraz wszystko jest inaczej. Co wi\u0119cej, innowacje w chmurach pojawiaj\u0105 si\u0119 na bie\u017c\u0105co i b\u0119d\u0105 si\u0119 pojawia\u0107, a by\u0107 mo\u017ce b\u0119d\u0105 si\u0119 pojawia\u0107 tylko w chmurach, a nast\u0119pnie, si\u0142ami startup\u00f3w, b\u0119d\u0105 przenoszone do On-premises.<\/p>\n<p>Je\u015bli chodzi o SQL, to SQL b\u0119dzie \u017cy\u0142. Oznacza to, \u017ce PostgreSQL i MySQL trzeba zna\u0107 i umie\u0107 z nimi pracowa\u0107, ale jeszcze wa\u017cniejsze jest umie\u0107 je poprawnie stosowa\u0107.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/481644\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u044d\u0442\u0438\u043c, \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0432\u0435\u0431\u0438\u043d\u0430\u0440 \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u0443\u0440\u0441\u0443. \u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0443\u0440\u043e\u043a\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u0442\u043e\u043c, \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c SQL-\u0431\u0430\u0437\u044b \u0432 \u044d\u0440\u0443 \u043e\u0431\u043b\u0430\u043a\u043e\u0432 \u0438 Kubernetes. \u0410 \u0437\u0430\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u043a\u0430\u043a \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 SQL \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u0430\u0431\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043c\u0443\u0442\u0438\u0440\u0443\u044e\u0442 \u043f\u043e\u0434 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-54366","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u0432\u044b\u0436\u0438\u0442\u044c SQL-\u0431\u0430\u0437\u0435 \u0432 21 \u0432\u0435\u043a\u0435: \u043e\u0431\u043b\u0430\u043a\u0430, Kubernetes \u0438 PostgreSQL multimaster | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-23T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Jak przetrwa\u0107 baz\u0119 SQL w XXI wieku: chmury, Kubernetes i PostgreSQL multimaster | ProHoster","description":"Cze\u015b\u0107, habrovczanie. Dzi\u015b zaczynaj\u0105 si\u0119 zaj\u0119cia w pierwszej grupie kursu 'PostgreSQL'.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u0432\u044b\u0436\u0438\u0442\u044c SQL-\u0431\u0430\u0437\u0435 \u0432 21 \u0432\u0435\u043a\u0435: \u043e\u0431\u043b\u0430\u043a\u0430, Kubernetes \u0438 PostgreSQL multimaster | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-23T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54366","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 11:06:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:30:12","updated":"2026-01-24 11:06:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/54366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=54366"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/54366\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=54366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=54366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=54366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}