{"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\/cs\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","title":{"rendered":"Jak p\u0159e\u017e\u00edt SQL datab\u00e1z\u00edm ve 21. stolet\u00ed: cloudy, Kubernetes a multimaster PostgreSQL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Ahoj, Habr\u00e1ci. Dnes za\u010d\u00edn\u00e1 v\u00fduka v prvn\u00ed skupin\u011b kurzu <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/nwhU\/\">\u201ePostgreSQL\u201c<\/a><\/noindex>. V souvislosti s t\u00edm bychom v\u00e1m cht\u011bli \u0159\u00edct, jak prob\u00edhal otev\u0159en\u00fd webin\u00e1\u0159 o tomto kurzu.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Jak p\u0159e\u017e\u00edt SQL datab\u00e1z\u00edm ve 21. stolet\u00ed: cloudy, Kubernetes a multimaster PostgreSQL\" src=\"\/wp-content\/uploads\/2019\/12\/e66e0d4919d45284dbdc4696d6cab555.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=yiXP8ihL2eA\">dal\u0161\u00edm otev\u0159en\u00e9m u\u010debn\u00edm kurzu<\/a><\/noindex> mluvili jsme o tom, s jak\u00fdmi v\u00fdzvami se SQL datab\u00e1ze pot\u00fdkaj\u00ed v \u00e9\u0159e cloud\u016f a Kubernetes. Z\u00e1rove\u0148 jsme prozkoumali, jak se SQL datab\u00e1ze p\u0159izp\u016fsobuj\u00ed a mutuj\u00ed pod vlivem t\u011bchto v\u00fdzev.<\/p>\n<p>Webin\u00e1\u0159 vedl <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/IVe0\/\">Valerij Bezkrov<\/a><\/noindex>, Google Cloud Practice Delivery Manager v EPAM Systems.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Kdy\u017e byly stromy mal\u00e9...<\/h3>\n<p>\nNejprve si p\u0159ipome\u0148me, jak se na konci minul\u00e9ho stolet\u00ed za\u010d\u00ednal v\u00fdb\u011br S\u0158BD. Nicm\u00e9n\u011b to nebude obt\u00ed\u017en\u00e9, proto\u017ee v\u00fdb\u011br S\u0158BD v t\u00e9 dob\u011b za\u010d\u00ednal a kon\u010dil <b>Oracle<\/b>. <\/p>\n<p><img decoding=\"async\" alt=\"Jak p\u0159e\u017e\u00edt SQL datab\u00e1z\u00edm ve 21. stolet\u00ed: cloudy, Kubernetes a multimaster PostgreSQL\" src=\"\/wp-content\/uploads\/2019\/12\/5fdf02523892e7477fd47dd01eb21d04.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa konci 90. let a na za\u010d\u00e1tku nult\u00fdch let, ve skute\u010dnosti nebylo moc na v\u00fdb\u011br, pokud hovo\u0159\u00edme o pr\u016fmyslov\u011b \u0161k\u00e1lovateln\u00fdch DB. Ano, existovaly IBM DB2, Sybase a je\u0161t\u011b n\u011bjak\u00e9 dal\u0161\u00ed datab\u00e1ze, kter\u00e9 se objevily a zmizely, ale celkov\u011b nebyly p\u0159\u00edli\u0161 viditeln\u00e9 na pozad\u00ed Oracle. Podle toho byly dovednosti in\u017een\u00fdr\u016f t\u00e9 doby v\u00e1z\u00e1ny na ten jedin\u00fd v\u00fdb\u011br, kter\u00fd existoval.<\/p>\n<p>Oracle DBA musel um\u011bt:<\/p>\n<ul>\n<li> nainstalovat Oracle Server z distribu\u010dn\u00edho bal\u00ed\u010dku;<\/li>\n<li> nastavit 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 vytv\u00e1\u0159et:<\/p>\n<ul>\n<li>tabulkov\u00e1 prostory;<\/li>\n<li>sch\u00e9my;<\/li>\n<li>u\u017eivatel\u00e9;<\/li>\n<\/ul>\n<p>\u2014 prov\u00e1d\u011bt z\u00e1lohov\u00e1n\u00ed a obnovu;<br \/>\n\u2014 monitorovat;<br \/>\n\u2014 bojovat s neoptim\u00e1ln\u00edmi dotazy.<\/p>\n<p>P\u0159itom se od Oracle DBA zvl\u00e1\u0161\u0165 ne\u017e\u00e1dalo, aby:<\/p>\n<ul>\n<li>um\u011bl vyb\u00edrat optim\u00e1ln\u00ed S\u0158BD nebo jinou technologii pro uchov\u00e1v\u00e1n\u00ed a zpracov\u00e1n\u00ed dat;<\/li>\n<li>zaji\u0161\u0165oval vysokou dostupnost a horizont\u00e1ln\u00ed \u0161k\u00e1lovatelnost (to nebyla v\u017edy ot\u00e1zka DBA);<\/li>\n<li>dob\u0159e znal obor, infrastrukturu, aplika\u010dn\u00ed architekturu, OS;<\/li>\n<li>prov\u00e1d\u011bl na\u010d\u00edt\u00e1n\u00ed a vykl\u00e1d\u00e1n\u00ed dat, migraci dat mezi r\u016fzn\u00fdmi S\u0158BD.<\/li>\n<\/ul>\n<p>Obecn\u011b plat\u00ed, \u017ee pokud hovo\u0159\u00edme o v\u00fdb\u011bru v t\u00e9 dob\u011b, p\u0159ipom\u00edn\u00e1 to v\u00fdb\u011br v sov\u011btsk\u00e9m obchod\u011b na konci 80. let:<\/p>\n<p><img decoding=\"async\" alt=\"Jak p\u0159e\u017e\u00edt SQL datab\u00e1z\u00edm ve 21. stolet\u00ed: cloudy, Kubernetes a multimaster PostgreSQL\" src=\"\/wp-content\/uploads\/2019\/12\/70b37faf295170d8507d5c605f4b2047.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Na\u0161e doba<\/h3>\n<p>\nOd t\u00e9 doby se samoz\u0159ejm\u011b stromy vyrostly, sv\u011bt se zm\u011bnil a stalo se to n\u011bjak takto:<\/p>\n<p><img decoding=\"async\" alt=\"Jak p\u0159e\u017e\u00edt SQL datab\u00e1z\u00edm ve 21. stolet\u00ed: cloudy, Kubernetes a multimaster PostgreSQL\" src=\"\/wp-content\/uploads\/2019\/12\/e8698d658bd09e0071f02a672a5cb81e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZm\u011bnil se i trh S\u0158BD, co\u017e je dob\u0159e vid\u011bt na \u010derstv\u00e9 zpr\u00e1v\u011b spole\u010dnosti Gartner:<\/p>\n<p><img decoding=\"async\" alt=\"Jak p\u0159e\u017e\u00edt SQL datab\u00e1z\u00edm ve 21. stolet\u00ed: cloudy, Kubernetes a multimaster PostgreSQL\" src=\"\/wp-content\/uploads\/2019\/12\/745f3969a3ad2e65162ef41cda6c0658.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA zde nelze opomenout, \u017ee svou niku obsadily cloudy, jejich\u017e popularita roste. Pokud si p\u0159e\u010dteme stejnou zpr\u00e1vu spole\u010dnosti Gartner, uvid\u00edme n\u00e1sleduj\u00edc\u00ed z\u00e1v\u011bry:<\/p>\n<ol>\n<li>Mnoho z\u00e1kazn\u00edk\u016f je na cest\u011b k migraci aplikac\u00ed do cloudu. <\/li>\n<li>Nov\u00e9 technologie se nejprve objevuj\u00ed v cloudu a nen\u00ed jist\u00e9, zda se v\u016fbec n\u011bkdy p\u0159esunou do necloudov\u00e9 infrastruktury.<\/li>\n<li>Model cenotvorby na principu pay-as-you-go se stal b\u011b\u017en\u00fdm. V\u0161ichni cht\u011bj\u00ed platit pouze za to, co vyu\u017e\u00edvaj\u00ed, a to u\u017e ani nen\u00ed trend, ale prost\u011b konstatov\u00e1n\u00ed faktu. <\/li>\n<\/ol>\n<p><\/p>\n<h3>Co se d\u011bje te\u010f?<\/h3>\n<p>\nDnes jsme v\u0161ichni v cloudu. A ot\u00e1zky, kter\u00e9 n\u00e1s zaj\u00edmaj\u00ed, jsou ot\u00e1zkami v\u00fdb\u011bru. Ten je obrovsk\u00fd, i kdy\u017e mluv\u00edme pouze o v\u00fdb\u011bru technologi\u00ed DBMS v On-premises form\u00e1tu. A m\u00e1me tak\u00e9 managed services a SaaS. V\u00fdb\u011br se tedy s ka\u017ed\u00fdm rokem jen zt\u011b\u017euje.<\/p>\n<p>Krom\u011b ot\u00e1zek v\u00fdb\u011bru existuj\u00ed tak\u00e9 <b>omezuj\u00edc\u00ed faktory<\/b>:<\/p>\n<ul>\n<li><b>cena<\/b>. Mnoho technologi\u00ed st\u00e1le stoj\u00ed pen\u00edze;<\/li>\n<li><b>dovednosti<\/b>. Pokud mluv\u00edme o open-source software, vyvst\u00e1v\u00e1 ot\u00e1zka dovednost\u00ed, proto\u017ee bezplatn\u00fd software vy\u017eaduje od lid\u00ed, kte\u0159\u00ed jej nasazuj\u00ed a provozuj\u00ed, dostate\u010dnou kompetenci;<\/li>\n<li><b>funkce<\/b>. Ne v\u0161echny slu\u017eby, kter\u00e9 jsou dostupn\u00e9 v cloudu a postaven\u00e9 nap\u0159\u00edklad na z\u00e1klad\u011b Postgres, maj\u00ed stejn\u00e9 vlastnosti jako Postgres On-premises. To je z\u00e1sadn\u00ed faktor, kter\u00fd je t\u0159eba zn\u00e1t a porozum\u011bt mu. A co v\u00edc, tento faktor nab\u00fdv\u00e1 v\u011bt\u0161\u00edho v\u00fdznamu ne\u017e znalost n\u011bjak\u00fdch skryt\u00fdch mo\u017enost\u00ed konkr\u00e9tn\u00edho DBMS. <\/li>\n<\/ul>\n<p>\n<b>Co nyn\u00ed o\u010dek\u00e1vaj\u00ed od DA\/DE:<\/b><\/p>\n<ul>\n<li>dobr\u00e9 porozum\u011bn\u00ed oboru a aplika\u010dn\u00ed architektury;<\/li>\n<li>schopnost spr\u00e1vn\u011b vybrat vhodnou technologii DBMS s ohledem na dan\u00fd \u00fakol;<\/li>\n<li>schopnost zvolit optim\u00e1ln\u00ed metodu realizace vybran\u00e9 technologie v kontextu existuj\u00edc\u00edch omezen\u00ed;<\/li>\n<li>schopnost prov\u00e1d\u011bt migraci a p\u0159enos dat;<\/li>\n<li>schopnost realizovat a provozovat vybran\u00e1 \u0159e\u0161en\u00ed.<\/li>\n<\/ul>\n<p>\nN\u00e1sleduj\u00edc\u00ed p\u0159\u00edklad <b>na z\u00e1klad\u011b GCP<\/b> ukazuje, jak se vyb\u00edr\u00e1 ta nebo ona technologie pro pr\u00e1ci s daty v z\u00e1vislosti na jejich struktu\u0159e:<\/p>\n<p><img decoding=\"async\" alt=\"Jak p\u0159e\u017e\u00edt SQL datab\u00e1z\u00edm ve 21. stolet\u00ed: cloudy, Kubernetes a multimaster PostgreSQL\" src=\"\/wp-content\/uploads\/2019\/12\/fe324d8af9ed8f6afb58ed930dc21327.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV\u0161imn\u011bte si, \u017ee ve sch\u00e9matu chyb\u00ed PostgreSQL, a to proto, \u017ee se skr\u00fdv\u00e1 pod terminologi\u00ed <b>Cloud SQL<\/b>. A kdy\u017e se dostaneme do Cloud SQL, mus\u00edme op\u011bt u\u010dinit v\u00fdb\u011br:<\/p>\n<p><img decoding=\"async\" alt=\"Jak p\u0159e\u017e\u00edt SQL datab\u00e1z\u00edm ve 21. stolet\u00ed: cloudy, Kubernetes a multimaster PostgreSQL\" src=\"\/wp-content\/uploads\/2019\/12\/bdf523e0b10fbfe753318a02a686a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJe t\u0159eba poznamenat, \u017ee tento v\u00fdb\u011br nen\u00ed v\u017edy jasn\u00fd, a proto v\u00fdvoj\u00e1\u0159i aplikac\u00ed \u010dasto \u0159\u00edd\u00ed svou intuic\u00ed. <\/p>\n<p><b>Celkem:<\/b><\/p>\n<ol>\n<li>\u010c\u00edm d\u00e1l, t\u00edm v\u00edce se st\u00e1v\u00e1 ot\u00e1zka v\u00fdb\u011bru aktu\u00e1ln\u00ed. A i kdy\u017e se zam\u011b\u0159\u00edme pouze na GCP, managed services a SaaS, n\u011bjak\u00e1 zm\u00ednka o RDBMS se objevuje a\u017e ve \u010dtvrt\u00e9m kroku (a tam je vedle n\u011bj Spanner). Nav\u00edc, volba PostgreSQL se objevuje v\u016fbec a\u017e v p\u00e1t\u00e9m kroku, p\u0159i\u010dem\u017e vedle jsou je\u0161t\u011b MySQL a SQL Server, tedy <b>je toho hodn\u011b, ale je t\u0159eba vyb\u00edrat<\/b>. <\/li>\n<li>Nelze zapom\u00ednat ani na omezen\u00ed v kontextu svod\u016f. V z\u00e1sad\u011b, v\u0161ichni cht\u011bj\u00ed Spanner, ale ten je drah\u00fd. Nakonec typick\u00e1 popt\u00e1vka vypad\u00e1 p\u0159ibli\u017en\u011b takto: <i>\u201eUd\u011bl\u00e1te n\u00e1m pros\u00edm Spanner, ale za cenu Cloud SQL, vy jste p\u0159ece profesion\u00e1lov\u00e9!\u201c<\/i><\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Jak p\u0159e\u017e\u00edt SQL datab\u00e1z\u00edm ve 21. stolet\u00ed: cloudy, Kubernetes a multimaster PostgreSQL\" src=\"\/wp-content\/uploads\/2019\/12\/cc656b46d37d08fc6aeca937e1e9085b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>A co te\u010f d\u011blat?<\/h3>\n<p>\nBez n\u00e1roku na pravdu v posledn\u00ed instanci, \u0159ekn\u011bme n\u00e1sleduj\u00edc\u00ed:<\/p>\n<p><b>Je t\u0159eba zm\u011bnit p\u0159\u00edstup k v\u00fduce:<\/b><\/p>\n<ul>\n<li>u\u010dit tak, jak se u\u010dilo d\u0159\u00edve DBA, nem\u00e1 smysl;<\/li>\n<li>znalost jednoho produktu je nyn\u00ed ji\u017e nedosta\u010duj\u00edc\u00ed;<\/li>\n<li>a zn\u00e1t des\u00edtky na \u00farovni jednoho \u2014 nemo\u017en\u00e9.<\/li>\n<\/ul>\n<p>\nJe t\u0159eba zn\u00e1t nejen a ne tolik produkt, ale:<\/p>\n<ul>\n<li>use case jeho pou\u017eit\u00ed;<\/li>\n<li>r\u016fzn\u00e9 metody nasazen\u00ed;<\/li>\n<li>v\u00fdhody a nev\u00fdhody ka\u017ed\u00e9 z metod;<\/li>\n<li>podobn\u00e9 a alternativn\u00ed produkty, abychom mohli u\u010dinit v\u011bdomou a optim\u00e1ln\u00ed volbu a ne v\u017edy ve prosp\u011bch zn\u00e1m\u00e9ho produktu.<\/li>\n<\/ul>\n<p>\nA tak\u00e9 je t\u0159eba um\u011bt migrovat data a rozum\u011bt z\u00e1kladn\u00edm princip\u016fm integrace s ETL.<\/p>\n<h3>Skute\u010dn\u00fd p\u0159\u00edpad<\/h3>\n<p>\nV ned\u00e1vn\u00e9 minulosti bylo t\u0159eba vytvo\u0159it backend pro mobiln\u00ed aplikaci. K okam\u017eiku zah\u00e1jen\u00ed pr\u00e1ce na n\u00ed byl backend ji\u017e vyvinut a p\u0159ipraven k nasazen\u00ed, a t\u00fdm v\u00fdvoj\u00e1\u0159\u016f str\u00e1vil na tomto projektu p\u0159ibli\u017en\u011b dva roky. Byly stanoveny n\u00e1sleduj\u00edc\u00ed \u00fakoly:<\/p>\n<ul>\n<li>vybudovat CI\/CD;<\/li>\n<li>prov\u00e9st revizi architektury;<\/li>\n<li>spustit to cel\u00e9 do provozu. <\/li>\n<\/ul>\n<p>\nAplikace byla mikroslu\u017ebov\u00e1 a k\u00f3d na Python\/Django byl vyvinut od nuly p\u0159\u00edmo v GCP. Co se t\u00fd\u010de c\u00edlov\u00e9 skupiny, p\u0159edpokl\u00e1dalo se, \u017ee budou dv\u011b oblasti \u2014 US a EU, a provoz byl rozd\u011blen p\u0159es Global Load balancer. V\u0161echny Workloads a v\u00fdpo\u010detn\u00ed z\u00e1t\u011b\u017e pracovaly v Google Kubernetes Engine. <\/p>\n<p>Pokud jde o data, existovaly 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 p\u0159e\u017e\u00edt SQL datab\u00e1z\u00edm ve 21. stolet\u00ed: cloudy, Kubernetes a multimaster PostgreSQL\" src=\"\/wp-content\/uploads\/2019\/12\/e6e38b1d861b2871edf20fb09378b491.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nM\u016f\u017ee se objevit ot\u00e1zka, pro\u010d byl vybr\u00e1n Cloud SQL? \u0158eknu pravdu, takov\u00e1 ot\u00e1zka v posledn\u00edch letech vyvol\u00e1v\u00e1 jakousi trapnou pauzu \u2014 zd\u00e1 se, \u017ee se lid\u00e9 za\u010dali styd\u011bt za rela\u010dn\u00ed datab\u00e1ze, ale p\u0159esto je i nad\u00e1le aktivn\u011b pou\u017e\u00edvaj\u00ed ;-). <\/p>\n<p>Co se t\u00fd\u010de na\u0161eho p\u0159\u00edpadu, Cloud SQL byl vybr\u00e1n z n\u00e1sleduj\u00edc\u00edch d\u016fvod\u016f:<\/p>\n<ol>\n<li>Jak bylo uvedeno, aplikace byla vyvinuta pomoc\u00ed Django, a obsahuje model pro zobrazen\u00ed trval\u00fdch dat ze SQL datab\u00e1ze do objekt\u016f Python (Django ORM).<\/li>\n<li>S\u00e1m framework podporoval dostate\u010dn\u011b kone\u010dn\u00fd seznam 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>\nProto jsme intuitivn\u011b zvolili PostgreSQL z tohoto seznamu (no p\u0159ece ne Oracle).<\/p>\n<p><b>Co chyb\u011blo:<\/b><\/p>\n<ul>\n<li>aplikace byla nasazena pouze ve dvou regionech, a ve pl\u00e1nech se objevil t\u0159et\u00ed (Asie);<\/li>\n<li>DB se nach\u00e1zela v severoamerick\u00e9m regionu (Iowa);<\/li>\n<li>ze strany objednavatele byly obavy ohledn\u011b mo\u017en\u00fdch <b>zpo\u017ed\u011bn\u00ed v p\u0159\u00edstupu<\/b> z Evropy a Asie a <b>v\u00fdpadk\u016f <\/b><b>v provozu<\/b> v p\u0159\u00edpad\u011b v\u00fdpadku DB. <\/li>\n<\/ul>\n<p>\nI kdy\u017e samotn\u00fd Django m\u016f\u017ee pracovat s n\u011bkolika DB paraleln\u011b a rozd\u011blovat je podle \u010dten\u00ed a z\u00e1pisu, z\u00e1pis\u016f v aplikaci nebylo zas tolik (v\u00edce ne\u017e 90 % \u2014 \u010dten\u00ed). Celkov\u011b, pokud by bylo mo\u017en\u00e9 vytvo\u0159it <b>read-replikaci hlavn\u00ed datab\u00e1ze v Evrop\u011b a Asii<\/b>, bylo by to kompromisn\u00edm \u0159e\u0161en\u00edm. Co na tom m\u016f\u017ee b\u00fdt t\u011b\u017ek\u00e9ho?<\/p>\n<p>T\u011b\u017ekost spo\u010d\u00edvala v tom, \u017ee objednavatel necht\u011bl opustit pou\u017e\u00edv\u00e1n\u00ed managed services a Cloud SQL. A mo\u017enosti Cloud SQL jsou moment\u00e1ln\u011b omezen\u00e9. Cloud SQL podporuje vysokou dostupnost (HA) a Read Replica (RR), ale stejn\u00e1 RR je podporov\u00e1na pouze v jednom regionu. Vytvo\u0159en\u00edm DB v americk\u00e9m regionu nelze vytvo\u0159it read-replikaci v evropsk\u00e9m regionu pomoc\u00ed Cloud SQL, i kdy\u017e samotn\u00fd PostgreSQL to nebr\u00e1n\u00ed. Korespondence s pracovn\u00edky Google nijak nepomohla a skon\u010dila sliby ve stylu \u201ezn\u00e1me probl\u00e9m a pracujeme na jeho vy\u0159e\u0161en\u00ed, jednou to bude vy\u0159e\u0161eno\u201c. <\/p>\n<p>Pokud shrneme mo\u017enosti Cloud SQL bodov\u011b, vypadalo by to p\u0159ibli\u017en\u011b takto:<\/p>\n<p><b>1. Vysok\u00e1 dostupnost (HA):<\/b><\/p>\n<ul>\n<li>v r\u00e1mci jednoho regionu;<\/li>\n<li>prost\u0159ednictv\u00edm diskov\u00e9 replikace;<\/li>\n<li>mechanismy PostgreSQL nejsou pou\u017e\u00edv\u00e1ny;<\/li>\n<li>mo\u017enost automatick\u00e9ho a ru\u010dn\u00edho \u0159\u00edzen\u00ed \u2014 failover\/failback;<\/li>\n<li>p\u0159i p\u0159epnut\u00ed nen\u00ed DB k dispozici po dobu n\u011bkolika minut.<\/li>\n<\/ul>\n<p>\n<b>2. Read Replica (RR):<\/b><\/p>\n<ul>\n<li>v r\u00e1mci jednoho regionu;<\/li>\n<li>hot standby;<\/li>\n<li>streaming replikace PostgreSQL.<\/li>\n<\/ul>\n<p>\nNav\u00edc, jak je b\u011b\u017en\u00e9, p\u0159i v\u00fdb\u011bru technologie se v\u017edy setk\u00e1v\u00e1te s n\u011bjak\u00fdmi <b>omezen\u00edmi,<\/b>:<\/p>\n<ul>\n<li>objednavatel necht\u011bl zbyte\u010dn\u011b roz\u0161i\u0159ovat entity a pou\u017e\u00edvat IaaS, krom\u011b jak GKE;<\/li>\n<li>objednavatel necht\u011bl nasazovat self-service PostgreSQL\/MySQL;<\/li>\n<li>A vlastn\u011b, Google Spanner by byl docela vhodn\u00fd, kdyby to nebylo tak drah\u00e9, pravda, s n\u00edm Django ORM nepracuje, ale jinak je to dobr\u00e1 v\u011bc.<\/li>\n<\/ul>\n<p>\nVzhledem k situaci p\u0159i\u0161la od klienta ot\u00e1zka na zamy\u0161len\u00ed: <i>\u201eM\u016f\u017eete ud\u011blat n\u011bco podobn\u00e9ho, aby to fungovalo jako Google Spanner, ale tak\u00e9 to fungovalo s Django ORM?\u201c<\/i><\/p>\n<h3>Varianta \u0159e\u0161en\u00ed \u010d. 0<\/h3>\n<p>\nPrvn\u00ed, co m\u011b napadlo:<\/p>\n<ul>\n<li>z\u016fstat u CloudSQL;<\/li>\n<li>nebudou \u017e\u00e1dn\u00e9 vestav\u011bn\u00e9 replikace mezi regiony;<\/li>\n<li>pokusit se p\u0159ipojit replikaci k existuj\u00edc\u00edmu Cloud SQL by PostgreSQL;<\/li>\n<li>n\u011bkde a n\u011bjak spustit instanci PostgreSQL, ale alespo\u0148 nem\u011bnit master.<\/li>\n<\/ul>\n<p>\nBohu\u017eel, uk\u00e1zalo se, \u017ee to nejde, proto\u017ee nen\u00ed p\u0159\u00edstup k hostiteli (ten je v\u016fbec v jin\u00e9m projektu) \u2014 pg_hba a tak d\u00e1le, a nav\u00edc nen\u00ed p\u0159\u00edstup pod superu\u017eivatelem.<\/p>\n<h3>Varianta \u0159e\u0161en\u00ed \u010d. 1<\/h3>\n<p>\nPo dal\u0161\u00edm zamy\u0161len\u00ed a s ohledem na p\u0159edchoz\u00ed okolnosti se my\u0161len\u00ed trochu zm\u011bnilo:<\/p>\n<ul>\n<li>st\u00e1le se sna\u017e\u00edme z\u016fstat u CloudSQL, ale p\u0159ech\u00e1z\u00edme na MySQL, proto\u017ee Cloud SQL by MySQL m\u00e1 extern\u00ed master, kter\u00fd:<\/li>\n<\/ul>\n<p>\n\u2014 je proxy pro extern\u00ed MySQL;<br \/>\n\u2014 vypad\u00e1 jako instance MySQL;<br \/>\n\u2014 byl vynalezen pro migraci dat z jin\u00fdch cloud\u016f nebo on-premises.<\/p>\n<p>Proto\u017ee nastaven\u00ed replikace MySQL nevy\u017eaduje p\u0159\u00edstup k hostiteli, v z\u00e1sad\u011b v\u0161echno fungovalo, ale velmi nestabiln\u011b a nepohodln\u011b. A kdy\u017e jsme se dostali d\u00e1l, za\u010dalo to b\u00fdt opravdu d\u011bsiv\u00e9, proto\u017ee jsme celou strukturu vytv\u00e1\u0159eli pomoc\u00ed terraformu, a najednou se uk\u00e1zalo, \u017ee extern\u00ed master nen\u00ed terraformem podporov\u00e1n. Ano, Google m\u00e1 CLI, ale z n\u011bjak\u00e9ho d\u016fvodu to zde fungovalo nevyzpytateln\u011b \u2014 n\u011bkdy se vytvo\u0159\u00ed, n\u011bkdy ne. Mo\u017en\u00e1 proto, \u017ee CLI bylo navr\u017eeno pro migraci dat z vn\u011bj\u0161ku, nikoli pro repliky.<\/p>\n<p>Ve skute\u010dnosti se uk\u00e1zalo, \u017ee Cloud SQL rozhodn\u011b nevyhovuje. Jak se \u0159\u00edk\u00e1, ud\u011blali jsme v\u0161e, co jsme mohli. <\/p>\n<h3>Varianta \u0159e\u0161en\u00ed \u010d. 2<\/h3>\n<p>\nProto\u017ee se n\u00e1m nepoda\u0159ilo z\u016fstat v r\u00e1mci Cloud SQL, pokusili jsme se formulovat po\u017eadavky na kompromisn\u00ed \u0159e\u0161en\u00ed. Po\u017eadavky byly n\u00e1sleduj\u00edc\u00ed:<\/p>\n<ul>\n<li>pr\u00e1ce v Kubernetes, maxim\u00e1ln\u00ed vyu\u017eit\u00ed zdroj\u016f a mo\u017enost\u00ed Kubernetes (DCS, &#8230;) a GCP (LB, &#8230;);<\/li>\n<li>absenci balastu z hromady zbyte\u010dn\u00fdch v\u011bc\u00ed v cloudu, jako je HA proxy;<\/li>\n<li>mo\u017enost provozovat v hlavn\u00edm regionu HA PostgreSQL nebo MySQL; v ostatn\u00edch regionech \u2014 HA z RR hlavn\u00edho regionu plus jej\u00ed kopii (pro spolehlivost);<\/li>\n<li>multimaster (s n\u00edm se necht\u011blo spojovat, ale to nebylo p\u0159\u00edli\u0161 z\u00e1sadn\u00ed)<\/li>\n<\/ul>\n<p>. <br \/>\nV d\u016fsledku t\u011bchto po\u017eadavk\u016f se na obzoru kone\u010dn\u011b objevilo p<b>vhodn\u00e9 mo\u017enosti DBMS a vazby<\/b>:<\/p>\n<ul>\n<li>MySQL Galera;<\/li>\n<li>CockroachDB;<\/li>\n<li>n\u00e1stroje PostgreSQL<\/li>\n<\/ul>\n<p>:<br \/>\n\u2014 pgpool-II;<br \/>\n\u2014 Patroni.<\/p>\n<h3>MySQL Galera<\/h3>\n<p>\nTechnologie MySQL Galera byla vyvinuta spole\u010dnost\u00ed Codership a p\u0159edstavuje plugin pro InnoDB. Vlastnosti:<\/p>\n<ul>\n<li>multi master;<\/li>\n<li>synchronn\u00ed replikace;<\/li>\n<li>\u010dten\u00ed z jak\u00e9hokoli uzlu;<\/li>\n<li>z\u00e1pis na libovoln\u00fd uzel;<\/li>\n<li>vestav\u011bn\u00fd mechanismus HA;<\/li>\n<li>existuje Helm chart od Bitnami.<\/li>\n<\/ul>\n<p><\/p>\n<h3>CockroachDB<\/h3>\n<p>\nPodle popisu je to naprosto \u00fa\u017easn\u00e1 v\u011bc a p\u0159edstavuje open source projekt napsan\u00fd v Go. Hlavn\u00edm \u00fa\u010dastn\u00edkem je Cockroach Labs (zalo\u017een\u00e1 b\u00fdval\u00fdmi pracovn\u00edky Googlu). Tato rela\u010dn\u00ed DBMS byla od sam\u00e9ho za\u010d\u00e1tku navr\u017eena jako distribuovan\u00e1 (s horizont\u00e1ln\u00edm \u0161k\u00e1lov\u00e1n\u00edm \u201ez krabice\u201c) a odoln\u00e1 v\u016f\u010di chyb\u00e1m. Jej\u00ed auto\u0159i maj\u00ed c\u00edl \u201eslou\u010dit bohatstv\u00ed funkc\u00ed SQL s horizont\u00e1ln\u00ed dostupnost\u00ed typickou pro NoSQL \u0159e\u0161en\u00ed\u201c.<\/p>\n<p>Jako p\u0159\u00edjemn\u00fd bonus \u2014 podpora PostgreSQL protokolu p\u0159ipojen\u00ed. <\/p>\n<h3>Pgpool<\/h3>\n<p>\nJe to nadstavba nad PostgreSQL, ve skute\u010dnosti nov\u00e1 entita, kter\u00e1 na sebe p\u0159eb\u00edr\u00e1 v\u0161echna p\u0159ipojen\u00ed a zpracov\u00e1v\u00e1 je. M\u00e1 sv\u016fj load balancer a parser, licencuje se pod licenc\u00ed BSD. Nab\u00edz\u00ed \u0161irok\u00e9 mo\u017enosti, ale vypad\u00e1 pon\u011bkud zastra\u0161uj\u00edc\u00edm zp\u016fsobem, proto\u017ee existence nov\u00e9 entity mohla p\u0159in\u00e9st ur\u010dit\u00e9 dodate\u010dn\u00e9 komplikace. <\/p>\n<h3>Patroni<\/h3>\n<p>\nToto bylo posledn\u00ed, co upoutalo pozornost, a jak se uk\u00e1zalo, nebylo to zbyte\u010dn\u00e9. Patroni je open-source n\u00e1stroj, kter\u00fd v z\u00e1sad\u011b p\u0159edstavuje daemon napsan\u00fd v Pythonu, umo\u017e\u0148uj\u00edc\u00ed automaticky spravovat PostgreSQL clustery s r\u016fzn\u00fdmi typy replikace a automatick\u00fdm p\u0159ep\u00edn\u00e1n\u00edm rol\u00ed. Uk\u00e1zalo se to jako velmi zaj\u00edmav\u00e9, proto\u017ee se to dob\u0159e integruje s Kubernetes a nenese \u017e\u00e1dn\u00e9 nov\u00e9 entity. <\/p>\n<h3>Co jsme nakonec vybrali<\/h3>\n<p>\nV\u00fdb\u011br nebyl snadn\u00fd:<\/p>\n<ol>\n<li><b>CockroachDB <\/b>\u2014 skv\u011bl\u00fd, ale riskantn\u00ed;<\/li>\n<li><b>MySQL Galera<\/b> \u2014 tak\u00e9 dobr\u00e9, hodn\u011b pou\u017e\u00edvan\u00e9, ale MySQL;<\/li>\n<li><b>Pgpool <\/b>\u2014 spousta nadbyte\u010dn\u00fdch entit, integrace s cloudem a K8s nic moc;<\/li>\n<li><b>Patroni <\/b>\u2014 skv\u011bl\u00e1 integrace s K8s, \u017e\u00e1dn\u00e9 nadbyte\u010dn\u00e9 entity, dob\u0159e se integruje s GCP LB.<\/li>\n<\/ol>\n<p>\nTak\u017ee v\u00fdb\u011br padl na Patroni. <\/p>\n<h3>Z\u00e1v\u011bry<\/h3>\n<p>\nNyn\u00ed je \u010das shrnout stru\u010dn\u00e9 z\u00e1v\u011bry. Ano, sv\u011bt IT infrastruktury se v\u00fdrazn\u011b zm\u011bnil a to je teprve za\u010d\u00e1tek. A pokud d\u0159\u00edve byly cloudd technologie pouze jin\u00fdm typem infrastruktury, nyn\u00ed je to jinak. Nav\u00edc inovace v oblac\u00edch neust\u00e1le p\u0159ich\u00e1zej\u00ed, budou pokra\u010dovat a mo\u017en\u00e1 se budou objevovat pouze v oblac\u00edch a n\u00e1sledn\u011b, d\u00edky startup\u016fm, se budou p\u0159esouvat na On-premises.<\/p>\n<p>Co se t\u00fd\u010de SQL, SQL zde z\u016fstane. To znamen\u00e1, \u017ee PostgreSQL a MySQL je pot\u0159eba zn\u00e1t a um\u011bt s nimi pracovat, ale je\u0161t\u011b d\u016fle\u017eit\u011bj\u0161\u00ed je um\u011bt je spr\u00e1vn\u011b aplikovat.<br \/>\n<br \/>Zdroj: <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.3 - 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\/cs\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\/cs\/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 p\u0159e\u017e\u00edt SQL datab\u00e1zi ve 21. stolet\u00ed: cloud, Kubernetes a PostgreSQL multimaster | ProHoster","description":"Ahoj, Habr\u00e1ci. Dnes za\u010d\u00ednaj\u00ed lekce v prvn\u00ed skupin\u011b kurzu \u201ePostgreSQL\u201c.","canonical_url":"https:\/\/prohoster.info\/cs\/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":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/54366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=54366"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/54366\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=54366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=54366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=54366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}