{"id":73446,"date":"2020-03-09T20:41:59","date_gmt":"2020-03-09T17:41:59","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/pochemu-mozhet-ponadobitsya-polusinhronnaya-replikacziya"},"modified":"2020-03-09T20:41:59","modified_gmt":"2020-03-09T17:41:59","slug":"pochemu-mozhet-ponadobitsya-polusinhronnaya-replikacziya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/pochemu-mozhet-ponadobitsya-polusinhronnaya-replikacziya","title":{"rendered":"Dlaczego mo\u017ce by\u0107 potrzebna p\u00f3\u0142synchroniczna replikacja?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Cze\u015b\u0107 wszystkim. Z tej strony W\u0142adys\u0142aw Rodin. Obecnie ucz\u0119 na portalu OTUS kurs\u00f3w dotycz\u0105cych architektury oprogramowania i architektury oprogramowania pod du\u017cym obci\u0105\u017ceniem. <b>W przeddzie\u0144 rozpocz\u0119cia nowej edycji kursu <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/jvDY\/\">\u201eArchitekt wysokich obci\u0105\u017ce\u0144\u201d<\/a><\/noindex> postanowi\u0142em napisa\u0107 kr\u00f3tki autorski materia\u0142, kt\u00f3rym chc\u0119 si\u0119 z wami podzieli\u0107.<\/b><\/i><\/p>\n<p><img decoding=\"async\" alt=\"Dlaczego mo\u017ce by\u0107 potrzebna p\u00f3\u0142synchroniczna replikacja?\" src=\"\/wp-content\/uploads\/2020\/03\/c2a1ea514249f8fca1ab9f668a899981.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Wprowadzenie<\/h2>\n<p>\nZ uwagi na to, \u017ce na dysku HDD mo\u017cna przeprowadza\u0107 jedynie oko\u0142o 400-700 operacji na sekund\u0119 (co jest niepor\u00f3wnywalne z typowymi rps\u2019ami, kt\u00f3re wyst\u0119puj\u0105 w systemach o du\u017cym obci\u0105\u017ceniu), klasyczna baza danych na dysku jest w\u0105skim gard\u0142em architektury. Dlatego konieczne jest zwr\u00f3cenie szczeg\u00f3lnej uwagi na wzorce skalowania tego magazynu.<\/p>\n<p>Na obecny moment s\u0105 dwa wzory skalowania bazy: replikacja oraz shardowanie. Shardowanie pozwala na skalowanie operacji zapisu, co w efekcie zmniejsza rps zapisu na jeden serwer w twoim klastrze. Replikacja umo\u017cliwia to samo, ale w przypadku operacji odczytu. W\u0142a\u015bnie temu wzorowi po\u015bwi\u0119cony jest ten artyku\u0142.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Replikacja<\/h2>\n<p>\nPatrz\u0105c na replikacj\u0119 z wysokiego poziomu, to prosta sprawa: mia\u0142e\u015b jeden serwer, na kt\u00f3rym by\u0142y dane, a nast\u0119pnie ten serwer przesta\u0142 sobie radzi\u0107 z obci\u0105\u017ceniem podczas odczytu tych danych. Dodajesz kilka serwer\u00f3w, synchronizujesz dane na wszystkich serwerach, a u\u017cytkownik mo\u017ce odczytywa\u0107 z dowolnego serwera swojego klastra. <\/p>\n<p>Pomimo pozornej prostoty, istnieje kilka klasyfikacji r\u00f3\u017cnych realizacji tego schematu:<\/p>\n<ul>\n<li>Wed\u0142ug r\u00f3l w klastrze (master-master lub master-slave)<\/li>\n<li>Wed\u0142ug przesy\u0142anych obiekt\u00f3w (oparte na wierszach, oparte na instrukcjach lub mieszane)<\/li>\n<li>Wed\u0142ug mechanizmu synchronizacji w\u0119z\u0142\u00f3w<\/li>\n<\/ul>\n<p>\nDzi\u015b zajmiemy si\u0119 w\u0142a\u015bnie 3. punktem. <\/p>\n<h2>Jak przebiega realizacja transakcji<\/h2>\n<p>\nTemat ten nie dotyczy bezpo\u015brednio replikacji, mo\u017cna o nim napisa\u0107 oddzielny artyku\u0142, jednak poniewa\u017c zrozumienie mechanizmu realizacji transakcji jest kluczowe, pozwol\u0119 sobie przypomnie\u0107 najwa\u017cniejsze kwestie. Realizacja transakcji przebiega w 3 etapach:<\/p>\n<ol>\n<li>Rejestracja transakcji w dzienniku bazy danych.<\/li>\n<li>Zastosowanie transakcji w silniku bazy danych.<\/li>\n<li>Zwr\u00f3cenie potwierdzenia klientowi o pomy\u015blnym zastosowaniu transakcji.<\/li>\n<\/ol>\n<p>\nW r\u00f3\u017cnych bazach w tym algorytmie mog\u0105 wyst\u0119powa\u0107 niuanse: na przyk\u0142ad w silniku InnoDB bazie MySQL s\u0105 2 dzienniki: jeden do replikacji (binary log), a drugi do utrzymania ACID (undo\/redolog), podczas gdy w PostgreSQL jest tylko jeden dziennik, kt\u00f3ry spe\u0142nia obie funkcje (write ahead log = WAL). Jednak powy\u017cej przedstawiona jest og\u00f3lna koncepcja, kt\u00f3ra pozwala nie bra\u0107 pod uwag\u0119 tych niuans\u00f3w.<\/p>\n<h2>Replikacja synchronizacyjna (sync)<\/h2>\n<p>\nDodajmy do algorytmu zatwierdzania transakcji logik\u0119 replikacji uzyskanych zmian:<\/p>\n<ol>\n<li>Rejestracja transakcji w dzienniku bazy danych.<\/li>\n<li>Zastosowanie transakcji w silniku bazy danych.<\/li>\n<li><b>Wysy\u0142anie danych do wszystkich replik.<\/b><\/li>\n<li><b>Otrzymywanie potwierdzenia od wszystkich replik o wykonaniu na nich transakcji.<\/b><\/li>\n<li>Zwr\u00f3cenie potwierdzenia klientowi o pomy\u015blnym zastosowaniu transakcji.<\/li>\n<\/ol>\n<p>\nPrzy tym podej\u015bciu napotykamy na szereg niedogodno\u015bci: <\/p>\n<ul>\n<li>klient czeka na zastosowanie zmian na wszystkich replikach.<\/li>\n<li>wraz ze wzrostem liczby w\u0119z\u0142\u00f3w w klastrze zmniejszamy prawdopodobie\u0144stwo, \u017ce operacja zapisu zako\u0144czy si\u0119 sukcesem.<\/li>\n<\/ul>\n<p>\nJe\u015bli pierwszy punkt jest w miar\u0119 jasny, to przyczyny drugiego punktu warto wyja\u015bni\u0107. Je\u015bli podczas replikacji synchronizacyjnej nie otrzymamy odpowiedzi od przynajmniej jednego w\u0119z\u0142a, cofn\u0119 transakcj\u0119. Zwi\u0119kszaj\u0105c liczb\u0119 w\u0119z\u0142\u00f3w w klastrze, zwi\u0119kszasz prawdopodobie\u0144stwo, \u017ce operacja zapisu si\u0119 nie powiedzie. <\/p>\n<p>Czy mo\u017cemy czeka\u0107 na potwierdzenie tylko od jakiej\u015b cz\u0119\u015bci w\u0119z\u0142\u00f3w, na przyk\u0142ad od 51% (kworum)? Tak, mo\u017cemy, jednak w klasycznej wersji wymagane jest potwierdzenie od wszystkich w\u0119z\u0142\u00f3w, poniewa\u017c w ten spos\u00f3b mo\u017cemy zapewni\u0107 pe\u0142n\u0105 sp\u00f3jno\u015b\u0107 danych w klastrze, co stanowi niew\u0105tpliw\u0105 zalet\u0119 tego typu replikacji.<\/p>\n<h2>Replikacja asynchronizacyjna (async)<\/h2>\n<p>\nZmie\u0144my poprzedni algorytm. Dane do replik b\u0119dziemy wysy\u0142a\u0107 \u201ekiedy\u015b p\u00f3\u017aniej\u201d, a \u201ekiedy\u015b p\u00f3\u017aniej\u201d zmiany zostan\u0105 zastosowane na replikach:<\/p>\n<ol>\n<li>Rejestracja transakcji w dzienniku bazy danych.<\/li>\n<li>Zastosowanie transakcji w silniku bazy danych.<\/li>\n<li>Zwr\u00f3cenie potwierdzenia klientowi o pomy\u015blnym zastosowaniu transakcji.<\/li>\n<li><b>Wysy\u0142anie danych do replik i zastosowanie zmian przez nie.<\/b><\/li>\n<\/ol>\n<p>\nTo podej\u015bcie prowadzi do tego, \u017ce klaster dzia\u0142a szybko, poniewa\u017c nie trzymamy klienta w oczekiwaniu, a\u017c dane dotr\u0105 do replik i zostan\u0105 zatwierdzone.<\/p>\n<p>Jednak\u017ce warunek przesy\u0142ania danych do replik \u201ekiedy\u015b p\u00f3\u017aniej\u201d mo\u017ce prowadzi\u0107 do utraty transakcji, zw\u0142aszcza utraty potwierdzonej u\u017cytkownikowi transakcji, poniewa\u017c je\u015bli dane nie zd\u0105\u017c\u0105 si\u0119 zreplikowa\u0107, a potwierdzenie o pomy\u015blnym wykonaniu operacji zosta\u0142o wys\u0142ane do klienta, a w\u0119ze\u0142, do kt\u00f3rego wp\u0142yn\u0119\u0142y zmiany, ma problem z dyskiem HDD, tracimy transakcj\u0119, co mo\u017ce prowadzi\u0107 do bardzo nieprzyjemnych konsekwencji.<\/p>\n<h2>Replikacja p\u00f3\u0142synchroniczna (semisync)<\/h2>\n<p>\nW ko\u0144cu dotarli\u015bmy do replikacji p\u00f3\u0142-synchronnej. Ten typ replikacji nie jest zbyt znany i nie jest zbyt powszechny, jednak stanowi znacz\u0105ce zainteresowanie, poniewa\u017c mo\u017ce po\u0142\u0105czy\u0107 zalety zar\u00f3wno replikacji synchronnej, jak i asynchronnej.<\/p>\n<p>Spr\u00f3bujemy po\u0142\u0105czy\u0107 2 poprzednie podej\u015bcia. Nie b\u0119dziemy d\u0142ugo trzyma\u0107 klienta, ale za\u017c\u0105damy, aby dane zosta\u0142y zreplikowane:<\/p>\n<ol>\n<li>Rejestracja transakcji w dzienniku bazy danych.<\/li>\n<li>Zastosowanie transakcji w silniku bazy danych.<\/li>\n<li><b>Wysy\u0142anie danych do replik.<\/b><\/li>\n<li><b>Otrzymanie potwierdzenia od repliki o otrzymaniu zmian (zastosowane b\u0119d\u0105 \u00abkiedy\u015b p\u00f3\u017aniej\u00bb).<\/b><\/li>\n<li>Zwr\u00f3cenie potwierdzenia klientowi o pomy\u015blnym zastosowaniu transakcji.<\/li>\n<\/ol>\n<p>\nZauwa\u017c, \u017ce przy takim algorytmie utrata transakcji wyst\u0119puje tylko w przypadku awarii zar\u00f3wno w\u0119z\u0142a przyjmuj\u0105cego zmiany, jak i w\u0119z\u0142a-repliki. Prawdopodobie\u0144stwo takiej awarii uznaje si\u0119 za ma\u0142e i te ryzyka s\u0105 akceptowane. <\/p>\n<p>Jednak w tym podej\u015bciu istnieje ryzyko tzw. phantom reads. Wyobra\u017amy sobie nast\u0119puj\u0105cy scenariusz: na kroku 4 nie otrzymali\u015bmy potwierdzenia od \u017cadnej repliki. Musimy cofn\u0105\u0107 t\u0119 transakcj\u0119, a klientowi nie zwraca\u0107 potwierdzenia. Poniewa\u017c dane zosta\u0142y zastosowane na kroku 2, pomi\u0119dzy zako\u0144czeniem kroku 2 a cofaniem transakcji powstaje tymczasowy luk, w trakcie kt\u00f3rego r\u00f3wnoleg\u0142e transakcje mog\u0105 zobaczy\u0107 te zmiany, kt\u00f3rych nie powinno by\u0107 w bazie. <\/p>\n<h2>Replikacja lose-less semisync<\/h2>\n<p>\nJe\u015bli si\u0119 chwil\u0119 zastanowi\u0107, mo\u017cna jedynie zamieni\u0107 miejscami kroki algorytmu, aby rozwi\u0105za\u0107 problem phantom reads w tym scenariuszu:<\/p>\n<ol>\n<li>Rejestracja transakcji w dzienniku bazy danych.<\/li>\n<li><b>Wysy\u0142ka danych do repliki.<\/b><\/li>\n<li><b>Otrzymanie potwierdzenia od repliki o otrzymaniu zmian (zastosowane b\u0119d\u0105 \u00abkiedy\u015b p\u00f3\u017aniej\u00bb).<\/b><\/li>\n<li>Zastosowanie transakcji w silniku bazy danych.<\/li>\n<li>Zwr\u00f3cenie potwierdzenia klientowi o pomy\u015blnym zastosowaniu transakcji.<\/li>\n<\/ol>\n<p>\nTeraz zatwierdzamy zmiany tylko wtedy, gdy zosta\u0142y zreplikowane. <\/p>\n<h2>Wnioski<\/h2>\n<p>\nJak zawsze, nie ma idealnych rozwi\u0105za\u0144, istnieje zbi\u00f3r rozwi\u0105za\u0144, z kt\u00f3rych ka\u017cde ma swoje zalety i wady oraz nadaje si\u0119 do rozwi\u0105zania r\u00f3\u017cnych klas problem\u00f3w. To dotyczy r\u00f3wnie\u017c wyboru mechanizmu synchronizacji danych w replikowanej bazie danych. Zestaw zalet, jakie posiada replikacja p\u00f3\u0142-synchroniczna, jest wystarczaj\u0105co solidny i interesuj\u0105cy, aby zas\u0142ugiwa\u0142 na uwag\u0119, mimo \u017ce jest rzadko stosowany.<\/p>\n<p><b>Na tym ko\u0144czymy. Do zobaczenia na <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/jvDY\/\">kursie<\/a><\/noindex>!<\/b><br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/491106\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041d\u0430 \u0441\u0432\u044f\u0437\u0438 \u0412\u043b\u0430\u0434\u0438\u0441\u043b\u0430\u0432 \u0420\u043e\u0434\u0438\u043d. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u044f \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u044e \u043d\u0430 \u043f\u043e\u0440\u0442\u0430\u043b\u0435 OTUS \u043a\u0443\u0440\u0441\u044b, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u041f\u041e \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u041f\u041e, \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435. \u0412 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043a\u0443\u0440\u0441\u0430 \u00ab\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440 \u0432\u044b\u0441\u043e\u043a\u0438\u0445 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u043a\u00bb \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0418\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0430 HDD \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 400-700 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":73447,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-73446","post","type-post","status-publish","format-standard","has-post-thumbnail","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=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041d\u0430 \u0441\u0432\u044f\u0437\u0438 \u0412\u043b\u0430\u0434\u0438\u0441\u043b\u0430\u0432 \u0420\u043e\u0434\u0438\u043d. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u044f \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u044e \u043d\u0430 \u043f\u043e\u0440\u0442\u0430\u043b\u0435 OTUS \u043a\u0443\u0440\u0441\u044b, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u041f\u041e \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u041f\u041e, \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435.\" \/>\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\/pochemu-mozhet-ponadobitsya-polusinhronnaya-replikacziya\" \/>\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\u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u0443\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041d\u0430 \u0441\u0432\u044f\u0437\u0438 \u0412\u043b\u0430\u0434\u0438\u0441\u043b\u0430\u0432 \u0420\u043e\u0434\u0438\u043d. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u044f \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u044e \u043d\u0430 \u043f\u043e\u0440\u0442\u0430\u043b\u0435 OTUS \u043a\u0443\u0440\u0441\u044b, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u041f\u041e \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u041f\u041e, \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/pochemu-mozhet-ponadobitsya-polusinhronnaya-replikacziya\" \/>\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=\"2020-03-09T17:41:59+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-09T17:41:59+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\udd47Dlaczego replikacja p\u00f3\u0142-synchronna mo\u017ce by\u0107 potrzebna? | ProHoster","description":"Cze\u015b\u0107 wszystkim. Z tej strony W\u0142adys\u0142aw Rodin. Obecnie ucz\u0119 na portalu OTUS kurs\u00f3w dotycz\u0105cych architektury oprogramowania i architektury oprogramowania pod du\u017cym obci\u0105\u017ceniem.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/pochemu-mozhet-ponadobitsya-polusinhronnaya-replikacziya","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\u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u0443\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f? | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041d\u0430 \u0441\u0432\u044f\u0437\u0438 \u0412\u043b\u0430\u0434\u0438\u0441\u043b\u0430\u0432 \u0420\u043e\u0434\u0438\u043d. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u044f \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u044e \u043d\u0430 \u043f\u043e\u0440\u0442\u0430\u043b\u0435 OTUS \u043a\u0443\u0440\u0441\u044b, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u041f\u041e \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u041f\u041e, \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/pochemu-mozhet-ponadobitsya-polusinhronnaya-replikacziya","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":"2020-03-09T17:41:59+00:00","article:modified_time":"2020-03-09T17:41:59+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"73446","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:50:08","updated":"2022-09-28 11:57:57","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\/73446","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=73446"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/73446\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/73447"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=73446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=73446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=73446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}