{"id":92806,"date":"2020-08-31T07:42:03","date_gmt":"2020-08-31T05:42:03","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-perestat-bespokoitsya-i-nachat-zhit-bez-monolita"},"modified":"2020-08-31T07:42:03","modified_gmt":"2020-08-31T05:42:03","slug":"kak-perestat-bespokoitsya-i-nachat-zhit-bez-monolita","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-perestat-bespokoitsya-i-nachat-zhit-bez-monolita","title":{"rendered":"Jak przesta\u0107 si\u0119 martwi\u0107 i zacz\u0105\u0107 \u017cy\u0107 bez monolitu","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Jak przesta\u0107 si\u0119 martwi\u0107 i zacz\u0105\u0107 \u017cy\u0107 bez monolitu\" src=\"\/wp-content\/uploads\/2020\/08\/eb6ab7fd08eeebd8cdad89b0e4e6588e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWszyscy lubimy historie. Lubimy, siedz\u0105c przy ognisku, opowiada\u0107 o swoich dawnych zwyci\u0119stwach, bitwach lub po prostu o swoim do\u015bwiadczeniu.<\/p>\n<p>Dzi\u015b jest w\u0142a\u015bnie taki dzie\u0144. I cho\u0107 nie siedzisz przy ognisku, mamy dla ciebie histori\u0119. Opowie\u015b\u0107 o tym, jak zacz\u0119li\u015bmy pracowa\u0107 z magazynem na Tarantool.<\/p>\n<p>Dawno temu w naszej firmie by\u0142y dwa \u00abmonolity\u00bb i jeden wsp\u00f3lny \u00absufit\u00bb, do kt\u00f3rego te monolity powoli, ale pewnie si\u0119 zbli\u017ca\u0142y, ograniczaj\u0105c rozw\u00f3j naszej firmy. I by\u0142o jedno zrozumienie: pewnego dnia mocno uderzymy w ten sufit.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nTeraz panuje u nas ideologia dzielenia wszystkiego, od sprz\u0119tu po logik\u0119 biznesow\u0105. W wyniku tego mamy na przyk\u0142ad dwa centra danych, praktycznie niezale\u017cne na poziomie sieci. A wtedy wszystko wygl\u0105da\u0142o zupe\u0142nie inaczej.<\/p>\n<p>Obecnie istnieje mn\u00f3stwo narz\u0119dzi i \u015brodk\u00f3w do wprowadzania zmian, takich jak CI\/CD, K8S itd. W czasach \u00abmonolitu\u00bb nie potrzebowali\u015bmy tak wielu obcych s\u0142\u00f3w. Wystarczy\u0142o po prostu poprawi\u0107 \u00abmagazyn\u00bb w bazie.<\/p>\n<p>Jednak czas mija\u0142, a liczba zapyta\u0144 ros\u0142a razem z nim, cz\u0119sto przekraczaj\u0105c nasze mo\u017cliwo\u015bci. Przy wej\u015bciu na rynek kraj\u00f3w WNP obci\u0105\u017cenie procesora bazy danych pierwszego monolitu nigdy nie spada\u0142o poni\u017cej 90%, a RPS utrzymywa\u0142y si\u0119 na poziomie 2400. I nie by\u0142y to tylko ma\u0142e selekcje, ale ogromne zapytania z mn\u00f3stwem sprawdze\u0144 i JOIN'\u00f3w, kt\u00f3re mog\u0142y przeszuka\u0107 niemal po\u0142ow\u0119 danych w kontek\u015bcie du\u017cego IO.<\/p>\n<p>Kiedy na scenie zacz\u0119\u0142y si\u0119 pojawia\u0107 prawdziwe wyprzeda\u017ce na \u00abCzarny pi\u0105tek\u00bb \u2014 a Wildberries jednymi z pierwszych w Rosji je organizowa\u0142 \u2014 sytuacja sta\u0142a si\u0119 bardzo smutna. W takie dni obci\u0105\u017cenie wzrasta trzy razy.<br \/>\nOjej, te \u00abmonolitowe czasy\u00bb! Jestem pewien, \u017ce i ty si\u0119 z tym spotka\u0142e\u015b i wci\u0105\u017c nie mo\u017cesz zrozumie\u0107, jak to mog\u0142o si\u0119 zdarzy\u0107.<\/p>\n<p>Co tu zrobi\u0107 \u2014 moda dotyczy te\u017c technologii. Jeszcze pi\u0119\u0107 lat temu musieli\u015bmy przewarto\u015bciowa\u0107 jedn\u0105 z takich mod w postaci istniej\u0105cej strony na .NET i MS SQL serwerze, kt\u00f3ry starannie przechowywa\u0142 ca\u0142\u0105 logik\u0119 dzia\u0142ania samej strony. Przechowywa\u0142 tak starannie, \u017ce rozdzielanie tego monolitu okaza\u0142o si\u0119 d\u0142ugim i bardzo trudnym przyjemno\u015bci\u0105.<br \/>\nMa\u0142e przerywnik. <\/p>\n<p>Na r\u00f3\u017cnego rodzaju wydarzeniach m\u00f3wi\u0119: \u201eje\u015bli nie odci\u0119li\u015bcie monolitu, to znaczy, \u017ce nie rozwijali\u015bcie si\u0119!\u201d Ciekawe jest wasze zdanie na ten temat, prosz\u0119 napiszcie je w komentarzach.<\/p>\n<h3>I grzmoty zadudni\u0142y<\/h3>\n<p>\nWr\u00f3\u0107my do naszego \u201eogniska\u201d. Aby roz\u0142o\u017cy\u0107 obci\u0105\u017cenie \u201emonolitycznej\u201d funkcjonalno\u015bci, postanowili\u015bmy podzieli\u0107 system na mikrous\u0142ugi, oparte na technologiach opensource. Poniewa\u017c ich skalowanie jest przynajmniej ta\u0144sze. A przekonanie, \u017ce b\u0119dziemy musieli skalowa\u0107 (i to znacz\u0105co) mieli\u015bmy na 100 %. Ju\u017c w\u00f3wczas uda\u0142o si\u0119 wej\u015b\u0107 na rynki s\u0105siednich kraj\u00f3w, a liczba rejestracji, jak i liczba zam\u00f3wie\u0144, zacz\u0119\u0142a rosn\u0105\u0107 jeszcze bardziej.<\/p>\n<p>Analizuj\u0105c pierwszych kandydat\u00f3w do wy\u0142\u0105czenia z monolitu w mikrous\u0142ugi, zrozumieli\u015bmy, \u017ce w 80% zapis w nich pochodzi w 99% z system\u00f3w back office, a odczyt \u2014 z frontu. W pierwszej kolejno\u015bci dotyczy\u0142o to kilku wa\u017cnych dla nas podsystem\u00f3w \u2014 danych u\u017cytkownik\u00f3w oraz systemu obliczania ostatecznych koszt\u00f3w towar\u00f3w na podstawie informacji o dodatkowych zni\u017ckach i kuponach dla klient\u00f3w.<\/p>\n<p>Na prawach dygresji. Teraz strach pomy\u015ble\u0107, ale opr\u00f3cz wspomnianych podsystem\u00f3w, z naszego monolitu zosta\u0142y r\u00f3wnie\u017c wydzielone katalogi produkt\u00f3w, koszyk u\u017cytkownika, system wyszukiwania produkt\u00f3w, system filtrowania katalog\u00f3w produkt\u00f3w oraz r\u00f3\u017cne systemy rekomendacji. Dla ka\u017cdego z nich istniej\u0105 osobne klasy \u015bci\u015ble dostosowanych system\u00f3w, ale kiedy\u015b wszystkie \u017cy\u0142y w jednym \u201edomku\u201d. <\/p>\n<p>Planowali\u015bmy wydzieli\u0107 dane o naszych klientach od razu do systemu shardowego. Natomiast wydzielenie funkcjonalno\u015bci obliczania ostatecznych koszt\u00f3w towar\u00f3w wymaga\u0142o dobrej skalowalno\u015bci w odczycie, poniewa\u017c generowa\u0142o najwi\u0119ksze obci\u0105\u017cenie RPS i by\u0142o najtrudniejsze w realizacji dla bazy (bardzo du\u017co danych jest zaanga\u017cowanych w proces oblicze\u0144). <\/p>\n<p>W wyniku tego powsta\u0142 schemat, kt\u00f3ry dobrze wsp\u00f3\u0142gra\u0142 z Tarantool.<\/p>\n<p>W tym czasie do pracy mikrous\u0142ug wybrano schematy dzia\u0142ania z wieloma centrami danych na maszynach wirtualnych i fizycznych. Jak pokazano na rysunkach, zastosowano r\u00f3\u017cne warianty replikacji Tarantool zar\u00f3wno w trybie master-master, jak i master-slave. <\/p>\n<p><img decoding=\"async\" alt=\"Jak przesta\u0107 si\u0119 martwi\u0107 i zacz\u0105\u0107 \u017cy\u0107 bez monolitu\" src=\"\/wp-content\/uploads\/2020\/08\/b7bf3d6646ec9f6a8f8af3a539adede1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Architektura. Wariant 1. Us\u0142uga u\u017cytkownik\u00f3w.<\/i><\/p>\n<p>Na obecny moment to 24 shardy, w ka\u017cdym z nich po 2 instancje (po jednej na ka\u017cdy DC), wszystkie w trybie master-master.<\/p>\n<p>Nad baz\u0105 danych znajduj\u0105 si\u0119 aplikacje, kt\u00f3re komunikuj\u0105 si\u0119 z replikami bazy danych. Aplikacje wsp\u00f3\u0142pracuj\u0105 z Tarantool poprzez nasz\u0105 w\u0142asn\u0105 bibliotek\u0119, kt\u00f3ra \u0440\u0435\u0430\u043b\u0438\u0437uje interfejs Go-drivera Tarantool. Widzi wszystkie repliki i mo\u017ce pracowa\u0107 z masterem w trybie odczytu i zapisu. W zasadzie wdra\u017ca model zestawu replik, w kt\u00f3ry dodano logik\u0119 wyboru replik, wykonywania ponownych pr\u00f3b, circuit breaker i limitu pr\u0119dko\u015bci.<\/p>\n<p>Istnieje mo\u017cliwo\u015b\u0107 konfigurowania polityki wyboru repliki w obr\u0119bie shardu. Na przyk\u0142ad, round-robin.<\/p>\n<p><img decoding=\"async\" alt=\"Jak przesta\u0107 si\u0119 martwi\u0107 i zacz\u0105\u0107 \u017cy\u0107 bez monolitu\" src=\"\/wp-content\/uploads\/2020\/08\/6dc36fa54e3d01bd51f879fccdfd8e0b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Architektura. Opcja 2. Us\u0142uga obliczania ko\u0144cowej warto\u015bci produktu<\/i><\/p>\n<p>Kilka miesi\u0119cy temu znaczna cz\u0119\u015b\u0107 zapyta\u0144 dotycz\u0105cych obliczania ko\u0144cowej warto\u015bci produkt\u00f3w przesz\u0142a do nowej us\u0142ugi, kt\u00f3ra zasadniczo dzia\u0142a bez baz danych, ale jaki\u015b czas temu 100% oblicze\u0144 przeprowadza\u0142a us\u0142uga z Tarantool pod mask\u0105.<\/p>\n<p>Baza danych us\u0142ugi to 4 mastery, do kt\u00f3rych synchronizator zbiera dane, a ka\u017cdy z tych master\u00f3w przez replikacj\u0119 przekazuje dane do replik tylko do odczytu. Ka\u017cdy master ma oko\u0142o 15 takich replik.<\/p>\n<p>W obu schematach, w przypadku niedost\u0119pno\u015bci jednego centrum danych, aplikacja mo\u017ce nadal otrzymywa\u0107 dane z drugiego.<\/p>\n<p>Warto zauwa\u017cy\u0107, \u017ce w Tarantool replikacja jest do\u015b\u0107 elastyczna i konfigurowana w czasie rzeczywistym. W innych systemach napotyka\u0142o si\u0119 trudno\u015bci. Na przyk\u0142ad, zmieniaj\u0105c parametry max_wal_senders i max_replication_slots w PostgreSQL, wymaga to ponownego uruchomienia mastera, co w niekt\u00f3rych przypadkach mo\u017ce spowodowa\u0107 zerwanie po\u0142\u0105cze\u0144 mi\u0119dzy aplikacj\u0105 a baz\u0105 danych.<\/p>\n<h3>Szukajcie, a znajdziecie!<\/h3>\n<p>\nDlaczego nie zrobili\u015bmy \u201ejak normalni ludzie\u201d i nie wybrali\u015bmy nietypowego sposobu? C\u00f3\u017c, co uwa\u017ca\u0107 za normalne. Wiele os\u00f3b tworzy klaster z MongoDB i rozk\u0142ada go na trzy geograficznie rozproszone centra danych.<\/p>\n<p>W tamtym czasie mieli\u015bmy ju\u017c dwa projekty na Redis. Pierwszy to pami\u0119\u0107 podr\u0119czna, a drugi by\u0142 persistentnym magazynem dla mniej krytycznych danych. Z tym ostatnim mieli\u015bmy do czynienia ze znacznymi trudno\u015bciami, cz\u0119\u015bciowo z naszej winy. Czasami do\u015b\u0107 du\u017ce ilo\u015bci danych by\u0142y sk\u0142adowane w jednym kluczu, a czasami strona mia\u0142a problemy. Ten system wykorzystywali\u015bmy w wariancie master-slave. I by\u0142o wiele sytuacji, gdy co\u015b dzia\u0142o si\u0119 z masterem i replikacja ulega\u0142a awarii. <\/p>\n<p>Redis jest wi\u0119c odpowiedni do zada\u0144 bezstanowych, a nie do zada\u0144 stanu. W zasadzie pozwala\u0142 rozwi\u0105za\u0107 wi\u0119kszo\u015b\u0107 problem\u00f3w, ale tylko wtedy, gdy chodzi\u0142o o rozwi\u0105zania typu key-value z kilkoma indeksami. Jednak w tamtym czasie Redis mia\u0142 do\u015b\u0107 s\u0142ab\u0105 persystencj\u0119 i replikacj\u0119. Poza tym by\u0142y zastrze\u017cenia co do wydajno\u015bci.<\/p>\n<p>My\u015bleli\u015bmy o MySQL i PostgreSQL. Jednak MySQL jako\u015b si\u0119 u nas nie przyj\u0105\u0142, a PostgreSQL to do\u015b\u0107 zaawansowany produkt, na kt\u00f3rym budowanie prostych us\u0142ug by\u0142oby nieefektywne.<br \/>\nPr\u00f3bowali\u015bmy RIAK, Cassandr\u0119, nawet baz\u0119 danych grafow\u0105. Wszystkie te rozwi\u0105zania s\u0105 do\u015b\u0107 niszowe i nie nadawa\u0142y si\u0119 na uniwersalne narz\u0119dzie do tworzenia us\u0142ug.<\/p>\n<p>Ostatecznie zdecydowali\u015bmy si\u0119 na Tarantool.<\/p>\n<p>Skontaktowali\u015bmy si\u0119 z nim, gdy by\u0142 w wersji 1.6. Zainteresowa\u0142 nas symbioza key-value i funkcjonalno\u015bci relacyjnej bazy danych. Istniej\u0105 indeksy drugorz\u0119dne, transakcje i spacje, kt\u00f3re s\u0105 jak tabele, ale nieco bardziej skomplikowane, mo\u017cna w nich przechowywa\u0107 r\u00f3\u017cn\u0105 liczb\u0119 kolumn. Jednak kluczow\u0105 cech\u0105 Tarantool by\u0142y indeksy drugorz\u0119dne w po\u0142\u0105czeniu z key-value i transakcyjno\u015bci\u0105.<\/p>\n<p>R\u00f3wnie\u017c wa\u017cn\u0105 rol\u0119 odegra\u0142a pomocna, rosyjskoj\u0119zyczna spo\u0142eczno\u015b\u0107, gotowa do wsparcia na czacie. Aktywnie z tego korzystali\u015bmy i praktycznie \u017cyli\u015bmy na czacie. Nie mo\u017cna te\u017c zapomina\u0107 o przyzwoitym dzia\u0142aniu bez ra\u017c\u0105cych b\u0142\u0119d\u00f3w czy usterek. Je\u015bli spojrze\u0107 na nasz\u0105 histori\u0119 z Tarantool, mieli\u015bmy wiele problem\u00f3w i wpadek z replikacj\u0105, ale nigdy nie stracili\u015bmy danych z jego powodu!<\/p>\n<h3>Wdro\u017cenie zacz\u0119\u0142o si\u0119 trudno.<\/h3>\n<p>\nW tym czasie naszym g\u0142\u00f3wnym stosem do tworzenia aplikacji by\u0142o .NET, do kt\u00f3rego nie by\u0142o konektora dla Tarantool. Od razu zacz\u0119li\u015bmy pisa\u0107 co\u015b na Go. Z Lua te\u017c sz\u0142o ca\u0142kiem nie\u017ale. G\u0142\u00f3wnym problemem w tamtym czasie by\u0142a debugowanie: w .NET to dzia\u0142a \u015bwietnie, a p\u00f3\u017aniej zanurzenie si\u0119 w \u015bwiat embedded Lua, gdy jedynym debuggowalnym narz\u0119dziem s\u0105 logi, by\u0142o trudne. Ponadto replikacja z jakiego\u015b powodu czasami si\u0119 psu\u0142a, musieli\u015bmy zag\u0142\u0119bi\u0107 si\u0119 w dzia\u0142anie silnika Tarantool. W tym pom\u00f3g\u0142 czat, w mniejszym stopniu \u2014 dokumentacja, czasami przegl\u0105dali\u015bmy kod. W tamtym czasie dokumentacja by\u0142a do\u015b\u0107 s\u0142aba.<\/p>\n<p>Tak w ci\u0105gu kilku miesi\u0119cy uda\u0142o si\u0119 zdoby\u0107 do\u015bwiadczenie i osi\u0105gn\u0105\u0107 zadowalaj\u0105ce wyniki w pracy z Tarantool. Spisali\u015bmy w gicie wzorcowe realizacje, kt\u00f3re pomaga\u0142y w tworzeniu nowych mikroserwis\u00f3w. Na przyk\u0142ad, gdy pojawia\u0142 si\u0119 zadanie: stworzy\u0107 kolejny mikroserwis, programista zerka\u0142 na \u017ar\u00f3d\u0142a wzorcowego rozwi\u0105zania w repozytorium, a stworzenie nowego zajmowa\u0142o nie wi\u0119cej ni\u017c tydzie\u0144. <\/p>\n<p>To by\u0142y szczeg\u00f3lne czasy. Mo\u017cna by\u0142o podej\u015b\u0107 do administratora przy s\u0105siednim stole i poprosi\u0107: \u201eDaj mi wirtualk\u0119\u201d. Po oko\u0142o trzydziestu minutach maszyna by\u0142a ju\u017c u ciebie. Sam si\u0119 \u0142\u0105czy\u0142e\u015b, wszystko instalowa\u0142e\u015b, a on kierowa\u0142 na ni\u0105 ruch.<\/p>\n<p>Dzi\u015b ju\u017c tak si\u0119 nie da: trzeba wdro\u017cy\u0107 monitoring serwisu, logowanie, pokry\u0107 funkcjonalno\u015b\u0107 testami, zam\u00f3wi\u0107 wirtualk\u0119 lub dostaw\u0119 do Kubernetesa itd. Og\u00f3lnie, tak b\u0119dzie lepiej, cho\u0107 d\u0142u\u017cej i bardziej k\u0142opotliwe.<\/p>\n<h3>Podziel i rz\u0105d\u017a. Jak wygl\u0105da sytuacja z Lua?<\/h3>\n<p>\nBy\u0142 powa\u017cny dylemat: niekt\u00f3rym zespo\u0142om nie udawa\u0142o si\u0119 niezawodnie wprowadza\u0107 zmian w serwisie z du\u017c\u0105 ilo\u015bci\u0105 logiki na Lua. Cz\u0119sto towarzyszy\u0142o temu niesprawno\u015b\u0107 serwisu. <\/p>\n<p>To znaczy, \u017ce programi\u015bci przygotowuj\u0105 jakie\u015b zmiany. Tarantool zaczyna robi\u0107 migracj\u0119, a replika ma jeszcze stary kod; przychodzi tam przez replikacj\u0119 jaki\u015b DDL, co\u015b jeszcze, a kod po prostu si\u0119 psuje, bo nie zosta\u0142o to uwzgl\u0119dnione. W rezultacie procedura aktualizacji u administrator\u00f3w by\u0142a zapisana na kartce A4: zatrzyma\u0107 replikacj\u0119, zaktualizowa\u0107 to, w\u0142\u0105czy\u0107 replikacj\u0119, wy\u0142\u0105czy\u0107 tu, zaktualizowa\u0107 tam. Koszmar! <\/p>\n<p>Ostatecznie, teraz najcz\u0119\u015bciej staramy si\u0119 nic nie robi\u0107 na Lua. Po prostu za pomoc\u0105 iproto (protoko\u0142u binarnego do interakcji z serwerem) i tyle. Mo\u017ce to brak wiedzy u programist\u00f3w, ale z tej perspektywy system jest skomplikowany.<\/p>\n<p>Nie zawsze \u015blepo pod\u0105\u017camy za tym schematem. Dzi\u015b nie mamy czerni i bieli: albo wszystko na Lua, albo wszystko na Go. Ju\u017c rozumiemy, jak mo\u017cna to po\u0142\u0105czy\u0107, aby p\u00f3\u017aniej nie mie\u0107 problem\u00f3w z migracj\u0105.<\/p>\n<p>Gdzie teraz jest Tarantool?<br \/>\nTarantool jest u\u017cywany w serwisie obliczania ko\u0144cowej ceny towar\u00f3w z uwzgl\u0119dnieniem kupon\u00f3w rabatowych, zwanym \u201ePromotajzer\u201d. Jak ju\u017c wcze\u015bniej wspomina\u0142em, teraz wychodzi z u\u017cycia: zast\u0119puje go nowy serwis katalogowy z wst\u0119pnie obliczonymi cenami, ale jeszcze p\u00f3\u0142 roku temu wszystkie obliczenia by\u0142y realizowane w \u201ePromotajzerze\u201d. Kiedy\u015b po\u0142owa jego logiki by\u0142a napisana w Lua. Dwa lata temu z serwisu zrobiono magazyn, a logik\u0119 przepisano na Go, poniewa\u017c mechanika dzia\u0142ania rabat\u00f3w nieco si\u0119 zmieni\u0142a, a serwisowi brakowa\u0142o wydajno\u015bci. <\/p>\n<p>Jednym z najwa\u017cniejszych serwis\u00f3w jest profil u\u017cytkownika. To znaczy, \u017ce wszyscy u\u017cytkownicy Wildberries s\u0105 przechowywani w Tarantool, a jest ich oko\u0142o 50 milion\u00f3w. System shardingowy wed\u0142ug ID u\u017cytkownika, rozproszony po kilku centrach danych z obw\u00f3dka w Go-serwisach. <br \/>\nKiedy\u015b liderem w RPS by\u0142 \u201ePromotajzer\u201d, dzia\u0142aj\u0105c do 6 tysi\u0119cy zapyta\u0144. W pewnym momencie mieli\u015bmy 50-60 instancji. Teraz jednak liderem w RPS s\u0105 profile u\u017cytkownik\u00f3w, zbli\u017caj\u0105ce si\u0119 do 12 tysi\u0119cy. W tym serwisie stosowane jest niestandardowe shardingowanie z podzia\u0142em na zakresy ID u\u017cytkownik\u00f3w. Serwis obs\u0142uguje ponad 20 maszyn, ale to zbyt wiele, planujemy zmniejszy\u0107 przydzielone zasoby, poniewa\u017c wystarcz\u0105 mu moce 4-5 maszyn.<\/p>\n<p>Serwis sesji to nasz pierwszy serwis na vshard i Cartridge. Konfiguracja vshard i aktualizacja Cartridge wymaga\u0142y od nas okre\u015blonych nak\u0142ad\u00f3w pracy, ale ostatecznie wszystko si\u0119 uda\u0142o.<\/p>\n<p>Serwis do wy\u015bwietlania r\u00f3\u017cnych baner\u00f3w na stronie i w aplikacji mobilnej by\u0142 jednym z pierwszych wydanych od razu na Tarantool. Ten serwis jest znany z tego, \u017ce ma oko\u0142o 6-7 lat, nadal dzia\u0142a i nigdy nie by\u0142 restartowany. Stosowano replikacj\u0119 master-master. Nigdy nic si\u0119 nie zepsu\u0142o.<\/p>\n<p>Jest przyk\u0142ad u\u017cycia Tarantool do funkcjonalno\u015bci szybkich spis\u00f3w w systemie magazynowym, aby szybko weryfikowa\u0107 informacje w niekt\u00f3rych przypadkach. Pr\u00f3bowali\u015bmy u\u017cywa\u0107 do tego celu Redis, ale dane w pami\u0119ci zajmowa\u0142y wi\u0119cej miejsca ni\u017c w Tarantool.<\/p>\n<p>Serwisy listy oczekiwania, subskrypcji klient\u00f3w, modnych ostatnio relacji i od\u0142o\u017conych towar\u00f3w r\u00f3wnie\u017c dzia\u0142aj\u0105 z Tarantool. Ostatni serwis zajmuje w pami\u0119ci oko\u0142o 120 GB. To najbardziej obszerny serwis spo\u015br\u00f3d wymienionych. <\/p>\n<h3>Podsumowanie<\/h3>\n<p>\nDzi\u0119ki wt\u00f3rnym indeksom w po\u0142\u0105czeniu z klucz-warto\u015b\u0107 oraz transakcyjno\u015bci\u0105, Tarantool doskonale nadaje si\u0119 do architektur opartych na mikroserwisach. Napotkali\u015bmy jednak trudno\u015bci, gdy wprowadzali\u015bmy zmiany w us\u0142ugach z du\u017c\u0105 ilo\u015bci\u0105 logiki w Lua \u2014 us\u0142ugi cz\u0119sto przestawa\u0142y dzia\u0142a\u0107. Nie uda\u0142o nam si\u0119 tego pokona\u0107, wi\u0119c z czasem doszli\u015bmy do r\u00f3\u017cnych kombinacji Lua i Go: wiemy, gdzie warto u\u017cy\u0107 jednego j\u0119zyka, a gdzie innego.<\/p>\n<p><b>Co jeszcze przeczyta\u0107 na ten temat<\/b><\/p>\n<ul>\n<li>Tworzymy od podstaw aplikacj\u0119 o wysokim obci\u0105\u017ceniu na Tarantool <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/510440\/\">habr.com\/ru\/company\/mailru\/blog\/510440<\/a><\/noindex><\/li>\n<li>Niezaworny wyb\u00f3r lidera w Tarantool Cartridge <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/513912\/\">habr.com\/ru\/company\/mailru\/blog\/513912<\/a><\/noindex><\/li>\n<li>Kana\u0142 Telegram Tarantool z wiadomo\u015bciami o produkcie <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/tarantool_news\">t.me\/tarantool_news<\/a><\/noindex><\/li>\n<li>Om\u00f3w Tarantool w czacie spo\u0142eczno\u015bciowym <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/tarantoolru\">t.me\/tarantoolru<\/a><\/noindex><\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/516932\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435 \u043c\u044b \u043b\u044e\u0431\u0438\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u041d\u0430\u043c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u0441\u0438\u0434\u044f \u0443 \u043a\u043e\u0441\u0442\u0440\u0430, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e \u0441\u0432\u043e\u0438\u0445 \u0431\u044b\u043b\u044b\u0445 \u043f\u043e\u0431\u0435\u0434\u0430\u0445, \u0441\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e \u0441\u0432\u043e\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u0430\u043a\u043e\u0439 \u0434\u0435\u043d\u044c. \u0418 \u043f\u0443\u0441\u0442\u044c \u0432\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435 \u0443 \u043a\u043e\u0441\u0442\u0440\u0430, \u043d\u043e \u0437\u0430\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0434\u043b\u044f \u0432\u0430\u0441. \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u043d\u0430 Tarantool. \u041a\u043e\u0433\u0434\u0430-\u0442\u043e \u0434\u0430\u0432\u043d\u044b\u043c-\u0434\u0430\u0432\u043d\u043e \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":92807,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-92806","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\u044b \u043b\u044e\u0431\u0438\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-perestat-bespokoitsya-i-nachat-zhit-bez-monolita\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0436\u0438\u0442\u044c \u0431\u0435\u0437 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435 \u043c\u044b \u043b\u044e\u0431\u0438\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-perestat-bespokoitsya-i-nachat-zhit-bez-monolita\" \/>\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-08-31T05:42:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-31T05:42:03+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 przesta\u0107 si\u0119 martwi\u0107 i zacz\u0105\u0107 \u017cy\u0107 bez monolitu | ProHoster","description":"Wszyscy uwielbiamy historie.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-perestat-bespokoitsya-i-nachat-zhit-bez-monolita","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0436\u0438\u0442\u044c \u0431\u0435\u0437 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 | ProHoster","og:description":"\u0412\u0441\u0435 \u043c\u044b \u043b\u044e\u0431\u0438\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u0438.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-perestat-bespokoitsya-i-nachat-zhit-bez-monolita","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-08-31T05:42:03+00:00","article:modified_time":"2020-08-31T05:42:03+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"92806","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 12:01:23","updated":"2022-10-01 20:28:38","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\/92806","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=92806"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/92806\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/92807"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=92806"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=92806"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=92806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}