{"id":83248,"date":"2020-05-29T19:42:48","date_gmt":"2020-05-29T17:42:48","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam"},"modified":"2020-05-29T19:42:48","modified_gmt":"2020-05-29T17:42:48","slug":"dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam","title":{"rendered":"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Cze\u015b\u0107 wszystkim! Mamy \u015bwietne wie\u015bci, w czerwcu OTUS ponownie uruchamia kurs <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/rVZl\/\">\u201eArchitekt Oprogramowania\u201d<\/a><\/noindex>, z tej okazji tradycyjnie dzielimy si\u0119 z wami przydatnym materia\u0142em.<\/b><\/i><\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/6092ffb23e765239b4a8f27d4a0cb846.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n Je\u015bli natkn\u0105\u0142e\u015b si\u0119 na ca\u0142\u0105 t\u0119 histori\u0119 o mikroserwisach bez \u017cadnego kontekstu, mo\u017cna zrozumie\u0107, \u017ce wydaje si\u0119 ona nieco dziwna. Podzia\u0142 aplikacji na fragmenty, po\u0142\u0105czone ze sob\u0105 sieci\u0105, z pewno\u015bci\u0105 oznacza dodanie skomplikowanych tryb\u00f3w odporno\u015bci na awarie do powsta\u0142ego rozproszonego systemu. <\/p>\n<p>Mimo \u017ce takie podej\u015bcie polega na podziale na wiele niezale\u017cnych serwis\u00f3w, ostateczny cel jest znacznie wi\u0119kszy ni\u017c tylko dzia\u0142anie tych serwis\u00f3w na r\u00f3\u017cnych maszynach. Chodzi tutaj o interakcj\u0119 z otaczaj\u0105cym \u015bwiatem, kt\u00f3ry z natury r\u00f3wnie\u017c jest rozproszony. Nie w sensie technicznym, a raczej w sensie ekosystemu, kt\u00f3ry sk\u0142ada si\u0119 z wielu ludzi, zespo\u0142\u00f3w, program\u00f3w, gdzie ka\u017cda z tych cz\u0119\u015bci w taki czy inny spos\u00f3b musi wykonywa\u0107 swoj\u0105 prac\u0119.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Firmy na przyk\u0142ad s\u0105 zbiorem rozproszonych system\u00f3w, kt\u00f3re wsp\u00f3lnie przyczyniaj\u0105 si\u0119 do osi\u0105gni\u0119cia jakiego\u015b celu. Ignorowali\u015bmy ten fakt przez dekady, pr\u00f3buj\u0105c osi\u0105gn\u0105\u0107 integracj\u0119, przesy\u0142aj\u0105c pliki przez FTP lub korzystaj\u0105c z narz\u0119dzi integracji korporacyjnej, koncentruj\u0105c si\u0119 przy tym na swoich osobistych, odosobnionych celach. Jednak z nadej\u015bciem serwis\u00f3w wszystko si\u0119 zmieni\u0142o. Serwisy pomog\u0142y nam spojrze\u0107 za horyzont i zobaczy\u0107 \u015bwiat wzajemnie zale\u017cnych program\u00f3w, kt\u00f3re wsp\u00f3\u0142pracuj\u0105. Jednak aby dzia\u0142a\u0107 z sukcesem, trzeba zrozumie\u0107 i zaprojektowa\u0107 dwa zasadniczo r\u00f3\u017cne \u015bwiaty: \u015bwiat zewn\u0119trzny, w kt\u00f3rym \u017cyjemy w ekosystemie wielu innych serwis\u00f3w, oraz nasz osobisty, wewn\u0119trzny \u015bwiat, w kt\u00f3rym rz\u0105dzimy sami.<\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/93f535f6f3319d7b2829d35c0fe1c48f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Taki rozproszony \u015bwiat r\u00f3\u017cni si\u0119 od tego, w kt\u00f3rym dorastali\u015bmy i do kt\u00f3rego przywykli\u015bmy. Zasady budowy tradycyjnej architektury monolitycznej nie znosz\u0105 krytyki. Dlatego prawid\u0142owe zrozumienie takich system\u00f3w to co\u015b wi\u0119cej ni\u017c stworzenie fajnego schematu na bia\u0142ej tablicy lub \u015bwietnego dowodu koncepcji. Chodzi o to, aby taki system skutecznie funkcjonowa\u0142 przez d\u0142ugi czas. Na szcz\u0119\u015bcie serwisy istniej\u0105 ju\u017c od dawna, chocia\u017c wygl\u0105daj\u0105 r\u00f3\u017cnie. <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Service-oriented_architecture\">Lekcje SOA<\/a><\/noindex> s\u0105 nadal aktualne, nawet je\u015bli przyprawione Dockerem, Kubernetesem i nieco zniszczone hipsterskimi brodami. <\/p>\n<p>Dzi\u015b przyjrzymy si\u0119, jak zmieni\u0142y si\u0119 zasady, dlaczego musimy przeanalizowa\u0107 nasze podej\u015bcie do us\u0142ug i danych, kt\u00f3re mi\u0119dzy sob\u0105 przesy\u0142aj\u0105, oraz dlaczego b\u0119dziemy potrzebowa\u0107 zupe\u0142nie innego zestawu narz\u0119dzi.<\/p>\n<h3>Enkapsulacja nie zawsze b\u0119dzie dla Ciebie przyjacielem.<\/h3>\n<p>\n Mikroserwisy mog\u0105 dzia\u0142a\u0107 niezale\u017cnie od siebie. To w\u0142a\u015bnie ta cecha nadaje im najwi\u0119ksz\u0105 warto\u015b\u0107. Ta sama cecha pozwala us\u0142ugom na skalowanie i rozw\u00f3j. Nie tyle w sensie skalowania do kwadrylion\u00f3w u\u017cytkownik\u00f3w czy petabajt\u00f3w danych (chocia\u017c w tym r\u00f3wnie\u017c mog\u0105 pom\u00f3c), ale w sensie skalowania pod wzgl\u0119dem ludzi, poniewa\u017c zespo\u0142y i organizacje ci\u0105gle rosn\u0105.<\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/ec36218b6152c2b713f72689b4ea6916.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJednak niezale\u017cno\u015b\u0107 to miecz obosieczny. Us\u0142uga sama w sobie mo\u017ce dzia\u0142a\u0107 p\u0142ynnie i beztrosko. Ale je\u015bli w obr\u0119bie us\u0142ugi realizowana jest funkcja, kt\u00f3ra wymaga zaanga\u017cowania innej us\u0142ugi, to w ko\u0144cu musimy wprowadzi\u0107 zmiany w obu us\u0142ugach niemal r\u00f3wnocze\u015bnie. W monolicie jest to \u0142atwe \u2014 po prostu wprowadzasz zmian\u0119 i wysy\u0142asz j\u0105 do wersji, ale w przypadku synchronizacji niezale\u017cnych us\u0142ug, problem\u00f3w b\u0119dzie znacznie wi\u0119cej. Koordynacja pomi\u0119dzy zespo\u0142ami i cyklami wydania narusza elastyczno\u015b\u0107.<\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/5fc993636f29e9eb9831d05cbc0bd7f8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW ramach standardowego podej\u015bcia niechciane zmiany mi\u0119dzy us\u0142ugami s\u0105 po prostu starannie unikane, jasno oddzielaj\u0105c funkcjonalno\u015b\u0107 mi\u0119dzy us\u0142ugami. Us\u0142uga jednego punktu wej\u015bcia do systemu mo\u017ce by\u0107 dobrym przyk\u0142adem. Ma ona jasno okre\u015blon\u0105 rol\u0119, kt\u00f3ra odr\u00f3\u017cnia j\u0105 od innych us\u0142ug. Takie wyra\u017ane oddzielenie oznacza, \u017ce w \u015bwiecie szybko zmieniaj\u0105cych si\u0119 wymaga\u0144 wobec otaczaj\u0105cych j\u0105 us\u0142ug, us\u0142uga jednego punktu wej\u015bcia do systemu prawdopodobnie nie b\u0119dzie ulega\u0107 zmianom. Istnieje w \u015bci\u015ble ograniczonym kontek\u015bcie.<\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/095fd7a6e02ead4924abf180e3b1d26b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Problem polega na tym, \u017ce w rzeczywistym \u015bwiecie us\u0142ugi biznesowe nie mog\u0105 stale utrzymywa\u0107 czystego podzia\u0142u r\u00f3l. Na przyk\u0142ad, te same us\u0142ugi biznesowe w wi\u0119kszym stopniu operuj\u0105 na danych pochodz\u0105cych od innych podobnych us\u0142ug. Je\u015bli zajmujesz si\u0119 handlem internetowym, przetwarzanie strumienia zam\u00f3wie\u0144, katalogu produkt\u00f3w czy informacji o u\u017cytkownikach b\u0119dzie wymaga\u0107 od wielu Twoich us\u0142ug dost\u0119pu do tych danych. <\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/2a3d23850c88d574c990dfdc6015072c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Wi\u0119kszo\u015b\u0107 us\u0142ug biznesowych korzysta z tego samego strumienia danych, dlatego ich praca niezmiennie si\u0119 przeplata.<\/i><\/p>\n<p>W ten spos\u00f3b dotarli\u015bmy do wa\u017cnego momentu, o kt\u00f3rym warto porozmawia\u0107. Podczas gdy us\u0142ugi dobrze dzia\u0142aj\u0105 w przypadku komponent\u00f3w infrastruktury, kt\u00f3re funkcjonuj\u0105 w znacznym stopniu oddzielnie, wi\u0119kszo\u015b\u0107 us\u0142ug biznesowych okazuje si\u0119 by\u0107 ze sob\u0105 znacznie \u015bci\u015blej powi\u0105zana.<\/p>\n<h3>Dychotomia danych<\/h3>\n<p>\n Podej\u015bcia oparte na us\u0142ugach mog\u0105 ju\u017c istnie\u0107, jednak wci\u0105\u017c brakuje informacji na temat wymiany du\u017cych ilo\u015bci danych mi\u0119dzy us\u0142ugami.<\/p>\n<p>G\u0142\u00f3wny problem polega na tym, \u017ce dane i us\u0142ugi s\u0105 nieroz\u0142\u0105czne. Z jednej strony, enkapsulacja wzywa nas do ukrywania danych, aby us\u0142ugi mo\u017cna by\u0142o oddzieli\u0107 od siebie i u\u0142atwi\u0107 ich rozw\u00f3j oraz dalsze zmiany. Z drugiej strony, musimy mie\u0107 mo\u017cliwo\u015b\u0107 swobodnego dzielenia si\u0119 i zarz\u0105dzania wsp\u00f3lnymi danymi, jak i innymi. Chodzi o to, aby mie\u0107 mo\u017cliwo\u015b\u0107 natychmiastowego rozpocz\u0119cia pracy, tak swobodnie, jak w ka\u017cdym innym systemie informacyjnym.<\/p>\n<p>Jednak systemy informacyjne maj\u0105 ma\u0142o wsp\u00f3lnego z enkapsulacj\u0105. W rzeczywisto\u015bci jest wr\u0119cz przeciwnie. Bazy danych robi\u0105 wszystko, co w ich mocy, aby zapewni\u0107 dost\u0119p do przechowywanych w nich danych. Oferuj\u0105 pot\u0119\u017cny deklaratywny interfejs, kt\u00f3ry pozwala na modyfikacj\u0119 danych wed\u0142ug Twoich potrzeb. Taka funkcjonalno\u015b\u0107 jest wa\u017cna na etapie wst\u0119pnych bada\u0144, ale nie w zarz\u0105dzaniu rosn\u0105c\u0105 z\u0142o\u017cono\u015bci\u0105 stale rozwijaj\u0105cych si\u0119 us\u0142ug.<\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/830465d4aa3bd2e6c02772a982f170bd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n I tu pojawia si\u0119 dylemat. Sprzeczno\u015b\u0107. Dychotomia. Bowiem systemy informacyjne to kwestia udost\u0119pniania danych, a us\u0142ugi to kwestia ich ukrywania.<\/p>\n<p>Te dwie si\u0142y s\u0105 fundamentalne. Le\u017c\u0105 u podstaw wi\u0119kszo\u015bci naszej pracy, nieustannie rywalizuj\u0105c o dominacj\u0119 w systemach, kt\u00f3re tworzymy.<\/p>\n<p>W miar\u0119 jak systemy us\u0142ugowe rosn\u0105 i ewoluuj\u0105, dostrzegamy r\u00f3\u017cne manifestacje konsekwencji dylematu danych. Albo interfejs us\u0142ugi b\u0119dzie si\u0119 rozwija\u0142, oferuj\u0105c coraz szerszy zestaw funkcji i zacznie wygl\u0105da\u0107 jak dziwaczna, domowej roboty baza danych, albo napotkamy rozczarowanie i wdro\u017cymy spos\u00f3b na masowe wydobywanie lub przenoszenie kompletnych zestaw\u00f3w danych z us\u0142ugi do us\u0142ugi.<\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/da718c87570a4eb20b18f9c880ae8a1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Stworzenie czego\u015b, co wygl\u0105da jak dziwaczna, domowej roboty baza danych, prowadzi do szeregu problem\u00f3w. Nie zag\u0142\u0119biaj\u0105c si\u0119 w szczeg\u00f3\u0142y, czym powinna by\u0107 <i>shared database<\/i>, po prostu powiedzmy, \u017ce wi\u0105\u017ce si\u0119 to z znacznymi kosztownymi wyzwaniami in\u017cynieryjnymi i operacyjnymi <noindex><a rel=\"nofollow\" href=\"http:\/\/microservices.io\/patterns\/data\/shared-database.html\">trudno\u015bciami<\/a><\/noindex> dla firmy pr\u00f3buj\u0105cej j\u0105 wykorzysta\u0107.<\/p>\n<p>Gorsze jest to, \u017ce ilo\u015b\u0107 danych zaostrza problemy z granicami us\u0142ug. Im wi\u0119cej wsp\u00f3lnych danych znajduje si\u0119 wewn\u0105trz us\u0142ugi, tym trudniejszy staje si\u0119 interfejs i tym trudniej \u0142\u0105czy\u0107 zestawy danych pochodz\u0105ce z r\u00f3\u017cnych us\u0142ug.<\/p>\n<p>Alternatywne podej\u015bcie do wydobywania i przenoszenia ca\u0142ych zestaw\u00f3w danych tak\u017ce ma swoje problemy. Powszechny spos\u00f3b podej\u015bcia do tej kwestii polega na prostym wydobyciu i przechowywaniu ca\u0142ego zestawu danych, a nast\u0119pnie przechowywaniu go lokalnie w ka\u017cdej us\u0142udze konsumuj\u0105cej.<\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/63934c6876cb89e87155d4c097657617.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Problem polega na tym, \u017ce r\u00f3\u017cne us\u0142ugi r\u00f3\u017cnie interpretuj\u0105 dane, kt\u00f3re konsumuj\u0105. Te dane s\u0105 zawsze pod r\u0119k\u0105. Modyfikowane i przetwarzane lokalnie, szybko przestaj\u0105 mie\u0107 cokolwiek wsp\u00f3lnego z danymi w \u017ar\u00f3dle.<\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/616e390ad3df3317ac34ac8d861ce804.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Im bardziej mutowalne s\u0105 kopie, tym bardziej dane b\u0119d\u0105 si\u0119 r\u00f3\u017cni\u0107 z up\u0142ywem czasu.<\/i><\/p>\n<p>Co gorsza, takie dane trudno poprawi\u0107 wstecz (<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Master_data_management\">MDM<\/a><\/noindex> tutaj naprawd\u0119 mo\u017ce si\u0119 przyda\u0107). W rzeczywisto\u015bci niekt\u00f3re z trudnych do rozwi\u0105zania problem\u00f3w technologicznych, z kt\u00f3rymi boryka si\u0119 biznes, wynikaj\u0105 z zr\u00f3\u017cnicowanych danych mno\u017c\u0105cych si\u0119 od aplikacji do aplikacji.<\/p>\n<p>Aby znale\u017a\u0107 rozwi\u0105zanie tego problemu z wsp\u00f3lnymi danymi, trzeba my\u015ble\u0107 inaczej. Powinny sta\u0107 si\u0119 pierwszorz\u0119dnymi obiektami w architekturach, kt\u00f3re budujemy. <noindex><a rel=\"nofollow\" href=\"http:\/\/cidrdb.org\/cidr2005\/papers\/P12.pdf\">Pat Helland<\/a><\/noindex> nazywa te dane \u201ezewn\u0119trznymi\u201d, a jest to bardzo wa\u017cna cecha. Potrzebujemy inkapsulacji, aby nie ujawnia\u0107 wewn\u0119trznej struktury us\u0142ugi, ale musimy u\u0142atwi\u0107 us\u0142ugom dost\u0119p do danych wsp\u00f3\u0142dzielonych, aby mog\u0142y prawid\u0142owo wykonywa\u0107 swoj\u0105 prac\u0119.<\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/9703ffdbb528320edc62ee7a680a3258.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Problem polega na tym, \u017ce \u017caden z obecnych podej\u015b\u0107 nie jest ju\u017c aktualny, poniewa\u017c ani interfejsy us\u0142ug, ani wymiana wiadomo\u015bci, ani baza danych wsp\u00f3\u0142dzielonych nie oferuj\u0105 dobrego rozwi\u0105zania do pracy z danymi zewn\u0119trznymi. Interfejsy us\u0142ug s\u0142abo nadaj\u0105 si\u0119 do wymiany danych w jakiejkolwiek skali. Wymiana wiadomo\u015bci przenosi dane, ale nie przechowuje ich historii, co prowadzi do uszkodzenia danych w miar\u0119 up\u0142ywu czasu. Bazy danych wsp\u00f3\u0142dzielonych s\u0105 zbyt mocno skoncentrowane w jednym punkcie, co ogranicza rozw\u00f3j post\u0119pu. Nieuchronnie utkn\u0119li\u015bmy w cyklu niew\u0142a\u015bciwych danych.<\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/f17ac7063a813cb76bad71ae8622912c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Cykl niew\u0142a\u015bciwych danych<\/i><\/p>\n<h3>Potoki: zdecentralizowane podej\u015bcie do danych i us\u0142ug<\/h3>\n<p>\n W idealnym przypadku musimy zmieni\u0107 podej\u015bcie do tego, jak us\u0142ugi pracuj\u0105 z danymi wsp\u00f3lnymi. W tej chwili ka\u017cde podej\u015bcie napotyka wspomnian\u0105 wcze\u015bniej dychotomi\u0119, poniewa\u017c nie ma \u017cadnego magicznego proszku, kt\u00f3rym mo\u017cna by obficie posypa\u0107 i sprawi\u0107, by znikn\u0119\u0142a. Jednak mo\u017cemy przemy\u015ble\u0107 problem i doj\u015b\u0107 do kompromisu.<\/p>\n<p>Ten kompromis zak\u0142ada pewien stopie\u0144 centralizacji. Mo\u017cemy skorzysta\u0107 z mechanizmu rozproszonych log\u00f3w, poniewa\u017c zapewnia on niezawodne, skalowalne potoki. Teraz potrzebujemy, aby us\u0142ugi mog\u0142y do\u0142\u0105cza\u0107 i wykorzystywa\u0107 te wsp\u00f3lne potoki, jednak chcemy unikn\u0105\u0107 skomplikowanych centralnych us\u0142ug typu God Service, kt\u00f3re wykonuj\u0105 takie przetwarzanie. Dlatego najlepszym rozwi\u0105zaniem jest wbudowanie przetwarzania strumieniowego w ka\u017cd\u0105 us\u0142ug\u0119-konsumenta. W ten spos\u00f3b us\u0142ugi b\u0119d\u0105 mog\u0142y \u0142\u0105czy\u0107 zbiory danych z r\u00f3\u017cnych \u017ar\u00f3de\u0142 i pracowa\u0107 z nimi tak, jak potrzebuj\u0105.<\/p>\n<p>Jednym ze sposob\u00f3w osi\u0105gni\u0119cia takiego podej\u015bcia jest u\u017cycie platformy strumieniowej. Istnieje wiele opcji, ale dzisiaj przyjrzymy si\u0119 szczeg\u00f3lnie Kafka, poniewa\u017c wykorzystanie jej Stateful Stream Processing umo\u017cliwia skuteczne rozwi\u0105zanie przedstawionego problemu.<\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/353c7f12af87901e721abb7ea92d8196.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Wykorzystanie mechanizmu rozproszonego logowania pozwala nam pod\u0105\u017ca\u0107 utart\u0105 \u015bcie\u017ck\u0105 i u\u017cywa\u0107 wymiany wiadomo\u015bci, aby pracowa\u0107 z <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Event-driven_architecture\">architektur\u0105 opart\u0105 na zdarzeniach<\/a><\/noindex>. Uwa\u017ca si\u0119, \u017ce takie podej\u015bcie zapewnia lepsz\u0105 skalowalno\u015b\u0107 i podzia\u0142 ni\u017c mechanizm \u201e\u017c\u0105danie-odpowied\u017a\u201d, poniewa\u017c kontrol\u0119 nad przep\u0142ywem oddaje odbiorcy, a nie nadawcy. Jednak za wszystko w \u017cyciu trzeba p\u0142aci\u0107, a w tym przypadku potrzebny b\u0119dzie broker. Ale dla du\u017cych system\u00f3w ten kompromis jest tego wart (czego nie mo\u017cna powiedzie\u0107 o przeci\u0119tnych aplikacjach internetowych).<\/p>\n<p>Je\u015bli za rozproszone logowanie odpowiada broker, a nie tradycyjny system wymiany wiadomo\u015bci, mo\u017cna skorzysta\u0107 z dodatkowych funkcji. Transport mo\u017cna liniowo skalowa\u0107 prawie tak dobrze, jak rozproszony system plik\u00f3w. Dane mog\u0105 by\u0107 przechowywane w logach wystarczaj\u0105co d\u0142ugo, dzi\u0119ki czemu otrzymujemy nie tylko wymian\u0119 wiadomo\u015bci, ale i magazyn danych. Skalowalny magazyn bez obaw o uzyskanie zmiennego wsp\u00f3lnego stanu.<\/p>\n<p>Nast\u0119pnie mo\u017cna u\u017cy\u0107 mechanizmu stateful stream processing (przetwarzanie strumieniowe ze stanem) do dodawania deklaratywnych narz\u0119dzi baz danych do us\u0142ug odbiorc\u00f3w. To bardzo wa\u017cna my\u015bl. Dop\u00f3ki dane s\u0105 przechowywane w wsp\u00f3lnych strumieniach, do kt\u00f3rych mog\u0105 mie\u0107 dost\u0119p wszystkie us\u0142ugi, integracja i przetwarzanie, kt\u00f3re wykonuje us\u0142uga, s\u0105 prywatne. S\u0105 izolowane wewn\u0105trz \u015bci\u015ble okre\u015blonego kontekstu.<\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/01c8beabb9a02e4c06dffb84f9161324.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Pozb\u0105d\u017a si\u0119 dychotomii danych, dziel\u0105c niezmienny strumie\u0144 stan\u00f3w. Nast\u0119pnie dodaj t\u0119 funkcj\u0119 do ka\u017cdej us\u0142ugi za pomoc\u0105 Stateful Stream Processing.<\/i><\/p>\n<p>W ten spos\u00f3b, je\u015bli twoja us\u0142uga musi obs\u0142ugiwa\u0107 zam\u00f3wienia, katalog produkt\u00f3w, magazyn, b\u0119dzie mia\u0142a pe\u0142ny dost\u0119p: tylko ty zdecydujesz, kt\u00f3re dane \u0142\u0105czy\u0107, gdzie je przetwarza\u0107 i jak powinny si\u0119 zmienia\u0107 w czasie. Mimo \u017ce dane s\u0105 wsp\u00f3lne, ich przetwarzanie jest ca\u0142kowicie zdecentralizowane. Odbywa si\u0119 wewn\u0105trz ka\u017cdej us\u0142ugi, w \u015bwiecie, w kt\u00f3rym wszystko odbywa si\u0119 wed\u0142ug twoich zasad.<\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/4b2635ad8ddd18f455eea654e472f85e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Dziel si\u0119 danymi w spos\u00f3b, kt\u00f3ry nie narusza ich integralno\u015bci. Inkap\u0441\u0443\u0142uj funkcj\u0119, a nie \u017ar\u00f3d\u0142o, w ka\u017cdej us\u0142udze, kt\u00f3ra jej potrzebuje.<\/i><\/p>\n<p>Czasami zachodzi potrzeba masowego przenoszenia danych. Czasami us\u0142uga wymaga lokalnego zestawu historycznych danych w wybranym silniku bazy danych. Kluczowe jest to, \u017ce mo\u017cna zagwarantowa\u0107, i\u017c w razie potrzeby kopia mo\u017ce by\u0107 przywr\u00f3cona z \u017ar\u00f3d\u0142a za pomoc\u0105 dost\u0119pu do mechanizmu rozproszonego logowania. Konektory w Kafka doskonale radz\u0105 sobie z tym zadaniem.<\/p>\n<p>Zatem omawiana dzisiaj metoda ma kilka zalet:<\/p>\n<ul>\n<li>Dane s\u0105 wykorzystywane w postaci og\u00f3lnych strumieni, kt\u00f3re mog\u0105 by\u0107 d\u0142ugo przechowywane w logach, a sam mechanizm pracy z danymi og\u00f3lnymi jest zaszyty w ka\u017cdym kontek\u015bcie, co pozwala us\u0142ugom pracowa\u0107 \u0142atwo i szybko. W ten spos\u00f3b mo\u017cna zr\u00f3wnowa\u017cy\u0107 dwoisto\u015b\u0107 danych.<\/li>\n<li>Dane pochodz\u0105ce z r\u00f3\u017cnych us\u0142ug mog\u0105 by\u0107 \u0142atwo \u0142\u0105czone w zestawy. Uproszczone w ten spos\u00f3b oddzia\u0142ywanie z danymi og\u00f3lnymi eliminuje konieczno\u015b\u0107 utrzymywania lokalnych zestaw\u00f3w danych w bazie danych.<\/li>\n<li>Stateful Stream Processing jedynie buforuje dane, a \u017ar\u00f3d\u0142em prawdy pozostaj\u0105 og\u00f3lne logi, dlatego problem uszkodzenia danych z czasem nie jest tak pal\u0105cy.<\/li>\n<li>Z natury rzeczy, us\u0142ugi s\u0105 zarz\u0105dzane danymi, co oznacza, \u017ce pomimo ci\u0105g\u0142ego wzrostu wolumen\u00f3w danych, us\u0142ugi mog\u0105 szybko reagowa\u0107 na wydarzenia biznesowe.<\/li>\n<li>Problemy ze skalowalno\u015bci\u0105 spoczywaj\u0105 na brokerze, a nie na us\u0142ugach. W ten spos\u00f3b znacznie zmniejsza si\u0119 z\u0142o\u017cono\u015b\u0107 pisania us\u0142ug, poniewa\u017c nie ma potrzeby my\u015blenia o skalowalno\u015bci.<\/li>\n<li>Dodawanie nowych us\u0142ug nie wymaga zmian w starych, dlatego pod\u0142\u0105czenie nowych us\u0142ug staje si\u0119 \u0142atwiejsze.<\/li>\n<\/ul>\n<p>\nJak wida\u0107, to wi\u0119cej ni\u017c tylko REST. Otrzymali\u015bmy zestaw narz\u0119dzi, kt\u00f3ry umo\u017cliwia prac\u0119 z danymi og\u00f3lnymi w spos\u00f3b zdecentralizowany.<\/p>\n<p>W dzisiejszym artykule nie om\u00f3wili\u015bmy wszystkich aspekt\u00f3w. Nadal musimy zdecydowa\u0107, jak zr\u00f3wnowa\u017cy\u0107 paradygmat \"\u017c\u0105danie-odpowied\u017a\" z paradygmatem opartym na zdarzeniach. Ale tym zajmiemy si\u0119 nast\u0119pnym razem. S\u0105 tematy, kt\u00f3re warto lepiej pozna\u0107, na przyk\u0142ad, dlaczego Stateful Stream Processing jest tak dobry. O tym porozmawiamy w trzecim artykule. Istniej\u0105 r\u00f3wnie\u017c inne pot\u0119\u017cne konstrukcje, z kt\u00f3rych mo\u017cemy skorzysta\u0107, je\u015bli zdecydujemy si\u0119 na nie, na przyk\u0142ad, <noindex><a rel=\"nofollow\" href=\"https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/KIP-98+-+Exactly+Once+Delivery+and+Transactional+Messaging\">Dok\u0142adnie Jednokrotne Przetwarzanie<\/a><\/noindex>. Dzi\u0119ki niej zmieniaj\u0105 si\u0119 zasady gry dla rozproszonych system\u00f3w biznesowych, poniewa\u017c ta konstrukcja zapewnia gwarancje transakcyjne dla <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/X\/Open_XA\">XA<\/a><\/noindex> w skalowalnej formie. O tym b\u0119dzie mowa w czwartym artykule. A na koniec musimy przejrze\u0107 szczeg\u00f3\u0142y realizacji tych zasad.<\/p>\n<p><img decoding=\"async\" alt=\"Dichotomia danych: przewarto\u015bciowanie podej\u015bcia do danych i us\u0142ug\" src=\"\/wp-content\/uploads\/2020\/05\/f66eadcc538cf3da74ccb120e1de2ae7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAle na razie zapami\u0119tajcie nast\u0119puj\u0105ce: dychotomia danych to ta si\u0142a, z kt\u00f3r\u0105 si\u0119 stykamy przy tworzeniu us\u0142ug biznesowych. Musimy o tym pami\u0119ta\u0107. Kluczem jest przewr\u00f3cenie wszystkiego do g\u00f3ry nogami i zacz\u0119cie traktowania wsp\u00f3lnych danych jako obiekt\u00f3w pierwszej klasy. Stateful Stream Processing zapewnia w tym zakresie unikalny kompromis. Unika scentralizowanych \u201eGod Components\u201d, kt\u00f3re hamuj\u0105 post\u0119p. Co wi\u0119cej, zapewnia sprawno\u015b\u0107, skalowalno\u015b\u0107 i odporno\u015b\u0107 na awarie pipeline'\u00f3w strumieniowych danych, dodaj\u0105c je do ka\u017cdej us\u0142ugi. Dzi\u0119ki temu mo\u017cemy skupi\u0107 si\u0119 na og\u00f3lnym strumieniu \u015bwiadomo\u015bci, do kt\u00f3rego mo\u017ce pod\u0142\u0105czy\u0107 si\u0119 ka\u017cda us\u0142uga i pracowa\u0107 z danymi. Tak us\u0142ugi staj\u0105 si\u0119 bardziej skalowalne, wymienne i autonomiczne. Dlatego b\u0119d\u0105 nie tylko dobrze wygl\u0105da\u0107 na tablicach i podczas weryfikacji hipotez, ale tak\u017ce b\u0119d\u0105 dzia\u0142a\u0107 i rozwija\u0107 si\u0119 przez dziesi\u0119ciolecia. <\/p>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/rVZl\/\">Dowiedz si\u0119 wi\u0119cej o kursie.<br \/>\n<\/a><\/noindex><\/p>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/504310\/\">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! \u0423 \u043d\u0430\u0441 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u0432 \u0438\u044e\u043d\u0435 OTUS \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043a\u0443\u0440\u0441 \u00ab\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440 \u041f\u041e\u00bb, \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0447\u0435\u043c \u043c\u044b \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c. \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441\u043e \u0432\u0441\u0435\u0439 \u044d\u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438 \u0431\u0435\u0437 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0442\u043e \u0432\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0439. \u0420\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0441\u0435\u0442\u044c\u044e, \u043d\u0435\u043f\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":83249,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-83248","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!\" \/>\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\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam\" \/>\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\u0414\u0438\u0445\u043e\u0442\u043e\u043c\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445: \u043f\u0435\u0440\u0435\u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam\" \/>\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-05-29T17:42:48+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-29T17:42:48+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\udd47Dychotomia danych: przemy\u015blenie podej\u015bcia do danych i us\u0142ug | ProHoster","description":"Cze\u015b\u0107 wszystkim!","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam","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\u0414\u0438\u0445\u043e\u0442\u043e\u043c\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445: \u043f\u0435\u0440\u0435\u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam","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-05-29T17:42:48+00:00","article:modified_time":"2020-05-29T17:42:48+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"83248","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 15:22:24","updated":"2022-09-30 09:53:41","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\/83248","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=83248"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/83248\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/83249"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=83248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=83248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=83248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}