{"id":71858,"date":"2020-02-28T21:00:08","date_gmt":"2020-02-28T18:00:08","guid":{"rendered":"https:\/\/prohoster.info\/blog\/patterny-hraneniya-dannyh-v-kubernetes"},"modified":"2020-03-03T16:14:09","modified_gmt":"2020-03-03T13:14:09","slug":"patterny-hraneniya-dannyh-v-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes","title":{"rendered":"Wzorce przechowywania danych w Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/490180\/\"><img decoding=\"async\" alt=\"Wzorce przechowywania danych w Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/148744e73101d47e7a5a76bdd3bb57e1.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\nCze\u015b\u0107, Habr!<\/p>\n<p>Przypominamy, \u017ce wydali\u015bmy kolejn\u0105 wyj\u0105tkowo ciekaw\u0105 i przydatn\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/new\/product\/patterny-kubernetes-shablony-razrabotki-sobstvennyh-oblachnyh-prilozheniy\">ksi\u0105\u017ck\u0119<\/a><\/noindex> o wzorcach Kubernetes. Wszystko zacz\u0119\u0142o si\u0119 jeszcze od \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/all\/product\/raspredelennye-sistemy-patterny-proektirovaniya\">Wzorc\u00f3w<\/a><\/noindex>\" Brendana Burnsa, a w ka\u017cdym razie nasza praca w tym segmencie <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/new\/product\/kubernetes-dlya-devops-razvertyvanie-zapusk-i-masshtabirovanie-v-oblake\">wrze<\/a><\/noindex>. Dzi\u015b proponujemy Ci przeczyta\u0107 artyku\u0142 z bloga MinIO, kt\u00f3ry w skr\u00f3cie przedstawia tendencje i specyfik\u0119 wzorc\u00f3w przechowywania danych w Kubernetes.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Kubernetes zasadniczo zmieni\u0142 tradycyjne wzorce rozwoju i wdra\u017cania aplikacji. Teraz zespo\u0142y mog\u0105 potrzebowa\u0107 zaledwie kilku dni na rozw\u00f3j, testowanie i wdra\u017canie aplikacji \u2014 w r\u00f3\u017cnych \u015brodowiskach, i to wszystko w ramach klastr\u00f3w Kubernetes. Tego rodzaju prace z technologiami poprzednich pokole\u0144 zazwyczaj zajmowa\u0142y ca\u0142e tygodnie, je\u015bli nie miesi\u0105ce.<\/p>\n<p>Takie przyspieszenie sta\u0142o si\u0119 mo\u017cliwe dzi\u0119ki abstrakcji oferowanej przez Kubernetes \u2014 to znaczy, dzi\u0119ki temu, \u017ce Kubernetes sam zarz\u0105dza interakcj\u0105 z niskopoziomowymi detalami fizycznych lub wirtualnych maszyn, pozwalaj\u0105c u\u017cytkownikom deklarowa\u0107 mi\u0119dzy innymi potrzebny procesor, odpowiedni\u0105 ilo\u015b\u0107 pami\u0119ci, liczb\u0119 instancji kontener\u00f3w. Poniewa\u017c wsparciem Kubernetes zajmuje si\u0119 ogromna spo\u0142eczno\u015b\u0107, a jego zastosowania stale si\u0119 rozszerzaj\u0105, z du\u017c\u0105 przewag\u0105 prowadzi on w\u015br\u00f3d wszystkich platform orkiestracji kontener\u00f3w.<\/p>\n<p><i><b>W miar\u0119 jak wzrasta zastosowanie Kubernetes, ro\u015bnie r\u00f3wnie\u017c zamieszanie dotycz\u0105ce stosowanych w nim wzorc\u00f3w przechowywania danych.<\/b><\/i>.<\/p>\n<p>W sytuacji, gdy konkurencja o kawa\u0142ek tortu Kubernetes (to znaczy, o magazyn danych) jest tak intensywna, podczas rozm\u00f3w o przechowywaniu danych sygna\u0142 ten ginie w silnym ha\u0142asie.<br \/>\nKubernetes wciela nowoczesny model rozwoju i wdra\u017cania aplikacji, a tak\u017ce ich zarz\u0105dzania. Taki nowoczesny model oddziela przechowywanie danych od oblicze\u0144. Aby w pe\u0142ni zrozumie\u0107 to oddzielenie w kontek\u015bcie Kubernetes, nale\u017cy tak\u017ce zrozumie\u0107, czym s\u0105 aplikacje dzia\u0142aj\u0105ce z zachowaniem stanu i bez tego, a tak\u017ce jak z tym zwi\u0105zane jest przechowywanie danych. Tutaj podej\u015bcie REST API u\u017cywane przez S3 ma wyra\u017ane przewagi w por\u00f3wnaniu z podej\u015bciem POSIX\/CSI, charakterystycznym dla innych rozwi\u0105za\u0144.<\/p>\n<p>W tym artykule porozmawiamy o wzorcach przechowywania danych w Kubernetes oraz osobno om\u00f3wimy sp\u00f3r dotycz\u0105cy aplikacji dzia\u0142aj\u0105cych z przechowywaniem stanu i bez niego, aby dok\u0142adnie zrozumie\u0107, na czym polega r\u00f3\u017cnica mi\u0119dzy nimi i dlaczego jest ona wa\u017cna. Nast\u0119pnie w tek\u015bcie zostan\u0105 om\u00f3wione aplikacje i stosowane w nich wzorce przechowywania danych w \u015bwietle najlepszych praktyk pracy z kontenerami i Kubernetes.<\/p>\n<h4>Kontenery bez stanu<\/h4>\n<p>\nKontenery s\u0105 z natury lekkie i efemeryczne. Mo\u017cna je \u0142atwo zatrzymywa\u0107, usuwa\u0107 lub wdra\u017ca\u0107 na innym w\u0119\u017ale \u2013 wszystko to zajmuje tylko kilka sekund. W du\u017cym systemie orkiestracji kontener\u00f3w takie operacje odbywaj\u0105 si\u0119 nieustannie, a u\u017cytkownicy nawet nie zauwa\u017caj\u0105 tych zmian. Jednak przemieszczenia s\u0105 mo\u017cliwe tylko wtedy, gdy kontener nie ma \u017cadnych zale\u017cno\u015bci od w\u0119z\u0142a, na kt\u00f3rym si\u0119 znajduje. O takich kontenerach m\u00f3wi si\u0119, \u017ce dzia\u0142aj\u0105 <i>bez stanu<\/i>.<\/p>\n<h4>Kontenery ze stanem<\/h4>\n<p>\nJe\u015bli kontener przechowuje dane na lokalnie pod\u0142\u0105czonych urz\u0105dzeniach (lub na urz\u0105dzeniu blokowym), to przechowywanie danych, na kt\u00f3rym si\u0119 znajduje, b\u0119dzie musia\u0142o zosta\u0107 przeniesione na nowy w\u0119ze\u0142 razem z samym kontenerem \u2014 w przypadku awarii. To wa\u017cne, poniewa\u017c w przeciwnym razie aplikacja uruchomiona w kontenerze nie b\u0119dzie mog\u0142a prawid\u0142owo funkcjonowa\u0107, poniewa\u017c musi mie\u0107 dost\u0119p do danych przechowywanych na lokalnych no\u015bnikach. O takich kontenerach m\u00f3wi si\u0119, \u017ce dzia\u0142aj\u0105 <i>ze stanem<\/i>.<\/p>\n<p>Z czysto technicznego punktu widzenia, kontenery ze stanem r\u00f3wnie\u017c mo\u017cna przenosi\u0107 na inne w\u0119z\u0142y. Zwykle odbywa si\u0119 to za pomoc\u0105 rozproszonych system\u00f3w plik\u00f3w lub blokowych sieciowych magazyn\u00f3w danych, kt\u00f3re s\u0105 pod\u0142\u0105czane do wszystkich w\u0119z\u0142\u00f3w, na kt\u00f3rych dzia\u0142aj\u0105 kontenery. Dzi\u0119ki temu kontenery uzyskuj\u0105 dost\u0119p do wolumen\u00f3w do przechowywania danych, a informacje s\u0105 przechowywane na dyskach rozmieszczonych w ca\u0142ej sieci. T\u0119 metod\u0119 nazywam \u201e<i>kontenerowym podej\u015bciem ze stanem<\/i>\u201d, i tak b\u0119d\u0119 j\u0105 nazywa\u0142 w dalszej cz\u0119\u015bci artyku\u0142u dla zachowania sp\u00f3jno\u015bci.<\/p>\n<p><img decoding=\"async\" alt=\"Wzorce przechowywania danych w Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/a5546db15801389d58476f50c8c66803.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW typowym podej\u015bciu kontenerowym z zachowaniem stanu wszystkie pody aplikacji s\u0105 przypisane do jednego rozproszonego systemu plik\u00f3w \u2013 powstaje w ten spos\u00f3b pewnego rodzaju wsp\u00f3\u0142dzielona przestrze\u0144, w kt\u00f3rej przechowywane s\u0105 wszystkie dane aplikacji. Chocia\u017c mo\u017cliwe s\u0105 pewne wariacje, to jest to podej\u015bcie na wysokim poziomie.<\/p>\n<p>Teraz zajmijmy si\u0119 tym, dlaczego podej\u015bcie kontenerowe z zachowaniem stanu w \u015bwiecie zorientowanym na chmur\u0119 jest antywzorem.<\/p>\n<h4>Projektowanie aplikacji zorientowanych na chmur\u0119<\/h4>\n<p>\nTradycyjnie aplikacje wykorzystywa\u0142y bazy danych do strukturalnego przechowywania informacji oraz lokalne dyski lub rozproszone systemy plik\u00f3w, do kt\u00f3rych zrzucano wszystkie nieustrukturyzowane lub nawet p\u00f3\u0142strukturyzowane dane. W miar\u0119 wzrostu ilo\u015bci danych nieustrukturyzowanych, programi\u015bci zdali sobie spraw\u0119, \u017ce POSIX jest zbyt 'rozgadany', wi\u0105\u017ce si\u0119 z znacznych kosztami i ostatecznie utrudnia dzia\u0142anie aplikacji przy przej\u015bciu do rzeczywi\u015bcie du\u017cych skali.<\/p>\n<p>To w g\u0142\u00f3wnej mierze przyczyni\u0142o si\u0119 do powstania nowego standardu przechowywania danych, czyli chmurowych magazyn\u00f3w, dzia\u0142aj\u0105cych g\u0142\u00f3wnie na podstawie REST API i uwalniaj\u0105cych aplikacj\u0119 od uci\u0105\u017cliwego zarz\u0105dzania lokalnym magazynem danych. W takim wypadku aplikacja przechodzi faktycznie w tryb pracy bez zachowania stanu (poniewa\u017c stan znajduje si\u0119 w zdalnym magazynie). Wsp wsp\u00f3\u0142czesne aplikacje s\u0105 budowane od podstaw z uwzgl\u0119dnieniem tego czynnika. Zazwyczaj ka\u017cda nowoczesna aplikacja zajmuj\u0105ca si\u0119 danymi r\u00f3\u017cnego rodzaju (logi, metadane, bloby itp.) jest zbudowana w oparciu o chmurow\u0105 paradygmat\u0119, gdzie stan jest przenoszony do specjalnie przeznaczonego do jego przechowywania systemu oprogramowania. <\/p>\n<p><i><b>Podej\u015bcie kontenerowe z zachowaniem stanu zmusza ca\u0142\u0105 t\u0119 paradygmat\u0119 do powrotu do tego, od czego si\u0119 zacz\u0119\u0142a! <\/b><\/i><\/p>\n<p>Kiedy aplikacje korzystaj\u0105 z interfejs\u00f3w POSIX do przechowywania danych, dzia\u0142aj\u0105 w ten sam spos\u00f3b, jak gdyby zapisywa\u0142y stan, przez co odst\u0119puj\u0105 od najwa\u017cniejszych zasad projektowania chmurowego, to znaczy od mo\u017cliwo\u015bci zmiany rozmiaru w\u0105tk\u00f3w roboczych aplikacji w zale\u017cno\u015bci od obci\u0105\u017cenia, przechodzenia na nowy w\u0119ze\u0142, gdy aktualny w\u0119ze\u0142 zawiedzie, i tak dalej.<\/p>\n<p>Przygl\u0105daj\u0105c si\u0119 tej sytuacji bli\u017cej, odkrywamy, \u017ce przy wyborze magazynu danych wci\u0105\u017c napotykamy dylemat \u201ePOSIX kontra REST API\u201d, ALE z dodatkowym pogorszeniem problem\u00f3w zwi\u0105zanych z POSIX, spowodowanym rozproszon\u0105 natur\u0105 \u015brodowisk Kubernetes. W szczeg\u00f3lno\u015bci,<\/p>\n<ul>\n<li><b>POSIX jest gadatliwy<\/b>: semantyka POSIX wymaga skojarzenia z ka\u017cd\u0105 operacj\u0105 metadanych i uchwyt\u00f3w plik\u00f3w, kt\u00f3re pomagaj\u0105 utrzyma\u0107 stan operacji. To prowadzi do znacznych koszt\u00f3w, kt\u00f3re nie maj\u0105 \u017cadnej realnej warto\u015bci. API do przechowywania obiekt\u00f3w, w szczeg\u00f3lno\u015bci API S3, pozby\u0142o si\u0119 tych wymaga\u0144, pozwalaj\u0105c aplikacji dzia\u0142a\u0107, a nast\u0119pnie \u201ezapomnie\u0107\u201d o wywo\u0142aniu. Odpowied\u017a systemu przechowywania danych wskazuje, czy dane dzia\u0142anie zako\u0144czy\u0142o si\u0119 sukcesem, czy te\u017c nie. W przypadku niepowodzenia aplikacja mo\u017ce spr\u00f3bowa\u0107 ponownie.<\/li>\n<li><b>Ograniczenia sieciowe<\/b>: W rozproszonej systemie zak\u0142ada si\u0119, \u017ce mo\u017ce istnie\u0107 wiele aplikacji pr\u00f3buj\u0105cych zapisa\u0107 dane na tym samym pod\u0142\u0105czonym no\u015bniku. Dlatego, opr\u00f3cz tego, \u017ce aplikacje b\u0119d\u0105 konkurowa\u0107 mi\u0119dzy sob\u0105 o pasmo sieciowe (aby wys\u0142a\u0107 dane na no\u015bnik), sam system przechowywania danych b\u0119dzie konkurowa\u0107 o to pasmo, rozdzielaj\u0105c dane mi\u0119dzy fizyczne dyski. Z powodu gadatliwo\u015bci POSIX liczba wywo\u0142a\u0144 sieciowych wzrasta kilkakrotnie. Z drugiej strony, API S3 zapewnia wyra\u017ane rozgraniczenie wywo\u0142a\u0144 sieciowych mi\u0119dzy tymi, kt\u00f3re pochodz\u0105 z klienta do serwera, a tymi, kt\u00f3re zachodz\u0105 w obr\u0119bie serwera.<\/li>\n<li><b>Bezpiecze\u0144stwo<\/b>: Model bezpiecze\u0144stwa POSIX zak\u0142ada aktywne uczestnictwo cz\u0142owieka: administratorzy konfiguruj\u0105 konkretne poziomy dost\u0119pu dla ka\u017cdego u\u017cytkownika lub grupy. Taka paradigma jest trudna do zaadoptowania w chmurowym \u015bwiecie. Nowoczesne aplikacje polegaj\u0105 na modelach bezpiecze\u0144stwa zwi\u0105zanych z API, gdzie prawa dost\u0119pu definiowane s\u0105 jako zestaw polityk, wyr\u00f3\u017cnione konta serwisowe, tymczasowe dane logowania itd.<\/li>\n<li><b>Zarz\u0105dzanie<\/b>: Kontenery z zachowaniem stanu nios\u0105 za sob\u0105 pewne koszty zwi\u0105zane z zarz\u0105dzaniem. Chodzi o synchronizacj\u0119 r\u00f3wnoleg\u0142ego dost\u0119pu do danych, zapewnienie sp\u00f3jno\u015bci danych, co wymaga starannego przemy\u015blenia, jakie wzorce dost\u0119pu do danych zastosowa\u0107. Trzeba instalowa\u0107, kontrolowa\u0107 i konfigurowa\u0107 dodatkowe programy, nie m\u00f3wi\u0105c ju\u017c o dodatkowych wysi\u0142kach, jakie trzeba w\u0142o\u017cy\u0107 w rozw\u00f3j.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Interfejs kontenera przechowywania danych<\/h4>\n<p>\nPodczas gdy interfejs kontenera przechowywania danych (CSI) znakomicie u\u0142atwi\u0142 dystrybucj\u0119 poziomu wolumen\u00f3w Kubernetes, cz\u0119\u015bciowo przekazuj\u0105c go zewn\u0119trznym dostawcom przechowywania danych, przypadkowo r\u00f3wnie\u017c wspiera\u0142 przekonanie, \u017ce podej\u015bcie kontenerowe z zachowaniem stanu jest zalecanym sposobem przechowywania danych w Kubernetes.<\/p>\n<p>CSI zosta\u0142 opracowany jako standard dostarczania dowolnych system\u00f3w blokowego i plikowego przechowywania danych dla system\u00f3w dziedziczonych podczas pracy z Kubernetes. Jak wykazano w tym artykule, jedyn\u0105 sytuacj\u0105, w kt\u00f3rej podej\u015bcie kontenerowe z zachowaniem stanu (i CSI w obecnej formie) jest uzasadnione, jest wtedy, gdy samo aplikacja jest systemem dziedziczonym, w kt\u00f3rym niemo\u017cliwe jest dodanie wsparcia dla API obiektowego przechowywania danych.<\/p>\n<p>Wa\u017cne jest, aby zrozumie\u0107, \u017ce korzystaj\u0105c z CSI w jego obecnej formie, to znaczy montuj\u0105c wolumeny podczas pracy z nowoczesnymi aplikacjami, napotkamy zbli\u017cone problemy, kt\u00f3re wyst\u0119powa\u0142y w systemach, gdzie przechowywanie danych zorganizowane by\u0142o w stylu POSIX.<\/p>\n<h4>Bardziej jako\u015bciowe podej\u015bcie<\/h4>\n<p>\nW tym przypadku wa\u017cne jest zrozumienie, \u017ce wi\u0119kszo\u015b\u0107 aplikacji nie jest zasadniczo przystosowana do pracy z zachowaniem stanu lub bez zachowania stanu. Takie zachowanie zale\u017cy od og\u00f3lnej architektury systemu oraz od konkretnych opcji wybranych podczas projektowania. Porozmawiajmy nieco o aplikacjach, kt\u00f3re zachowuj\u0105 stan.<\/p>\n<p>Zasadniczo wszystkie dane aplikacji mo\u017cna podzieli\u0107 na kilka szerokich typ\u00f3w:<\/p>\n<ul>\n<li>Dane log\u00f3w<\/li>\n<li>Dane znacznik\u00f3w czasowych<\/li>\n<li>Dane transakcji<\/li>\n<li>Metadane<\/li>\n<li>Obrazy kontener\u00f3w<\/li>\n<li>Dane blob\u00f3w (du\u017cych obiekt\u00f3w binarnych)<\/li>\n<\/ul>\n<p>\nWszystkie te typy danych s\u0105 bardzo dobrze wspierane na nowoczesnych platformach przechowywania danych, a istnieje kilka chmurowych platform przystosowanych do dostarczania danych w ka\u017cdym z tych konkretnych format\u00f3w. Na przyk\u0142ad dane transakcji i metadane mog\u0105 znajdowa\u0107 si\u0119 w nowoczesnej chmurowej bazie danych, takiej jak CockroachDB, YugaByte itd. Obrazy kontener\u00f3w lub dane blob\u00f3w mog\u0105 by\u0107 przechowywane w rejestrze dockera opartym na MinIO. Dane znacznik\u00f3w czasowych mog\u0105 by\u0107 przechowywane w bazie danych szereg\u00f3w czasowych, takiej jak InfluxDB itd. Nie b\u0119dziemy tutaj wdawa\u0107 si\u0119 w szczeg\u00f3\u0142y ka\u017cdego typu danych i odpowiadaj\u0105cych im aplikacji, ale og\u00f3lna idea polega na unikaniu trwa\u0142ego przechowywania danych opartego na lokalnym montowaniu dysk\u00f3w.<\/p>\n<p><img decoding=\"async\" alt=\"Wzorce przechowywania danych w Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/8e39996ef159f09915802549d4e8ecd5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPonadto, cz\u0119sto okazuje si\u0119, \u017ce efektywne jest udost\u0119pnienie poziomu tymczasowego buforowania, kt\u00f3ry s\u0142u\u017cy aplikacjom jako rodzaj magazynu plik\u00f3w tymczasowych, ale aplikacje nie powinny polega\u0107 na tym poziomie jako \u017ar\u00f3dle prawdy.<\/p>\n<h4>Magazyn dla aplikacji z zachowaniem stanu<\/h4>\n<p>\nPodczas gdy w wi\u0119kszo\u015bci przypadk\u00f3w korzystne jest utrzymywanie aplikacji bez zachowania stanu, te aplikacje, kt\u00f3re s\u0105 przeznaczone do przechowywania danych \u2013 na przyk\u0142ad bazy danych, magazyny obiektowe, magazyny kluczy i warto\u015bci \u2013 powinny zachowa\u0107 stan. Przyjrzyjmy si\u0119, dlaczego te aplikacje s\u0105 uruchamiane w Kubernetes. We\u017amy jako przyk\u0142ad MinIO, ale podobne zasady mo\u017cna zastosowa\u0107 do wszelkich innych du\u017cych chmurowych system\u00f3w przechowywania danych.<\/p>\n<p>Aplikacje oparte na chmurze projektowane s\u0105 z my\u015bl\u0105 o maksymalnie efektywnym wykorzystaniu elastyczno\u015bci charakterystycznej dla kontener\u00f3w. Oznacza to, \u017ce nie zak\u0142ada si\u0119 \u017cadnych warunk\u00f3w dotycz\u0105cych \u015brodowiska, w kt\u00f3rym b\u0119d\u0105 wdra\u017cane. Na przyk\u0142ad, w MinIO stosowany jest wewn\u0119trzny mechanizm kodyfikacji redundantnej (erasure coding), kt\u00f3ry zapewnia systemowi wystarczaj\u0105c\u0105 odporno\u015b\u0107, aby pozosta\u0142 funkcjonalny nawet przy awarii po\u0142owy dysk\u00f3w. MinIO zarz\u0105dza tak\u017ce integralno\u015bci\u0105 i bezpiecze\u0144stwem danych, wykorzystuj\u0105c w\u0142asne haszowanie i szyfrowanie po stronie serwera.<\/p>\n<p>Dla takich aplikacji opartych na chmurze jako lokalne archiwum najwygodniejsze s\u0105 lokalne trwa\u0142e wolumeny (PV). Lokalny PV zapewnia mo\u017cliwo\u015b\u0107 przechowywania surowych danych, podczas gdy aplikacje dzia\u0142aj\u0105ce na tych PV same zbieraj\u0105 informacje pozwalaj\u0105ce na skalowanie danych i zarz\u0105dzanie rosn\u0105cymi wymaganiami.<\/p>\n<p>To podej\u015bcie jest znacznie prostsze i lepiej skaluje si\u0119 w por\u00f3wnaniu do PV na bazie CSI, kt\u00f3re wprowadzaj\u0105 do systemu w\u0142asne poziomy zarz\u0105dzania danymi i redundancji; problem polega na tym, \u017ce te poziomy zazwyczaj koliduj\u0105 z aplikacjami zaprojektowanymi wed\u0142ug zasady zachowania stanu.<\/p>\n<h4>Pewny krok w kierunku oddzielenia danych od oblicze\u0144<\/h4>\n<p>\nW tym artykule om\u00f3wili\u015bmy, jak aplikacje przekszta\u0142caj\u0105 si\u0119 na prac\u0119 bez zachowania stanu, a innymi s\u0142owy, przechowywanie danych jest oddzielone od oblicze\u0144 nad nimi. Na zako\u0144czenie przyjrzymy si\u0119 kilku rzeczywistym przyk\u0142adom tego trendu.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/spark.apache.org\/\">Spark<\/a><\/noindex>, s\u0142ynna platforma do analizy danych, tradycyjnie by\u0142a u\u017cywana z zachowaniem stanu i wdra\u017cana w systemie plik\u00f3w HDFS. Jednak wraz z przej\u015bciem Sparka do chmurowego \u015bwiata, ta platforma coraz bardziej wykorzystywana jest bez zachowania stanu z u\u017cyciem `s3a`. Spark stosuje s3a do przesy\u0142ania stanu do innych system\u00f3w, podczas gdy same kontenery Spark dzia\u0142aj\u0105 ca\u0142kowicie bez zachowania stanu. Inni ogromni gracze z bran\u017cy analizy du\u017cych danych, w szczeg\u00f3lno\u015bci, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.vertica.com\/docs\/9.2.x\/HTML\/Content\/Authoring\/Eon\/Architecture.htm\">Vertica<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/min.io\/resources\/docs\/Teradata-solution-brief.pdf\">Teradata<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.pivotal.io\/partners\/minio-greenplum\/using.html\">Greenplum<\/a><\/noindex> r\u00f3wnie\u017c przechodz\u0105 na prac\u0119 z oddzieleniem przechowywania danych i oblicze\u0144 nad nimi.<\/p>\n<p>Podobne wzorce mo\u017cna r\u00f3wnie\u017c zauwa\u017cy\u0107 na innych du\u017cych platformach analitycznych, takich jak Presto, Tensorflow do R, Jupyter. Eksportuj\u0105c stan do zdalnych chmurowych system\u00f3w przechowywania danych, znacznie \u0142atwiej jest zarz\u0105dza\u0107 aplikacj\u0105 i skalowa\u0107 j\u0105. Ponadto sprzyja to przeno\u015bno\u015bci aplikacji w r\u00f3\u017cnych \u015brodowiskach.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/490180\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0432\u044b\u0448\u043b\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0430\u044f \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043a\u043d\u0438\u0433\u0430 \u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u0445 Kubernetes. \u041d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435 \u0435\u0449\u0435 \u0441 &quot;\u041f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432&quot; \u0411\u0440\u0435\u043d\u0434\u0430\u043d\u0430 \u0411\u0435\u0440\u043d\u0441\u0430, \u0438, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u0440\u0430\u0431\u043e\u0442\u0430 \u0432 \u044d\u0442\u043e\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435 \u0443 \u043d\u0430\u0441 \u043a\u0438\u043f\u0438\u0442. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0436\u0435 \u043c\u044b \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u0432\u0430\u043c \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0438\u0437 \u0431\u043b\u043e\u0433\u0430 MinIO, \u043a\u0440\u0430\u0442\u043a\u043e \u0438\u0437\u043b\u0430\u0433\u0430\u044e\u0449\u0443\u044e \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u0438 \u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Kubernetes. Kubernetes \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":71859,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-71858","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=\"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\/patterny-hraneniya-dannyh-v-kubernetes\" \/>\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\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes\" \/>\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-02-28T18:00:08+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:09+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\udd47Wzorce przechowywania danych w Kubernetes | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes","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\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Kubernetes | ProHoster","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes","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-02-28T18:00:08+00:00","article:modified_time":"2020-03-03T13:14:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"71858","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 18:55:27","updated":"2022-09-27 18:57:08","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\/71858","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=71858"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/71858\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/71859"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=71858"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=71858"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=71858"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}