{"id":80031,"date":"2020-05-02T13:42:49","date_gmt":"2020-05-02T11:42:49","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/top-fakapov-czian"},"modified":"2020-05-02T13:42:49","modified_gmt":"2020-05-02T11:42:49","slug":"top-fakapov-czian","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/top-fakapov-czian","title":{"rendered":"Najwi\u0119ksze wpadki Cian","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Najwi\u0119ksze wpadki Cian\" src=\"\/wp-content\/uploads\/2020\/05\/61cf8d25f1f3e858a3b9541cb026cf3c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWitam wszystkich!\u00a0<\/p>\n<p>Nazywam si\u0119 Nikita, jestem liderem zespo\u0142u in\u017cynier\u00f3w w Cian. Jednym z moich obowi\u0105zk\u00f3w w firmie jest doprowadzenie liczby incydent\u00f3w zwi\u0105zanych z infrastruktur\u0105 w produkcji do zera.<br \/>\nTemat, kt\u00f3ry poruszymy dalej, przysporzy\u0142 nam wielu problem\u00f3w, a celem tego artyku\u0142u jest zapobie\u017cenie powt\u00f3rzeniu naszych b\u0142\u0119d\u00f3w lub przynajmniej zminimalizowanie ich wp\u0142ywu.\u00a0<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Wst\u0119p<\/h3>\n<p>\nZa dawnych czas\u00f3w, kiedy Cian sk\u0142ada\u0142 si\u0119 z monolit\u00f3w i nie by\u0142o \u017cadnych wskaz\u00f3wek o mikrous\u0142ugach, mierzyli\u015bmy dost\u0119pno\u015b\u0107 zasob\u00f3w sprawdzaj\u0105c 3\u20135 stron.\u00a0<\/p>\n<p>Je\u015bli odpowiedzi by\u0142y - wszystko dobrze, je\u015bli nie by\u0142o odpowiedzi przez d\u0142u\u017cszy czas - alert. Ile czasu powinny nie dzia\u0142a\u0107, aby to uznawano za incydent, decydowali ludzie na spotkaniach. Zesp\u00f3\u0142 in\u017cynier\u00f3w zawsze uczestniczy\u0142 w badaniu incydentu. Gdy badanie by\u0142o zako\u0144czone, pisali\u015bmy post mortem - swoisty raport na e-mail w formacie: co si\u0119 sta\u0142o, jak d\u0142ugo trwa\u0142o, co zrobili\u015bmy w danym momencie, co zrobimy w przysz\u0142o\u015bci.\u00a0<\/p>\n<h3>G\u0142\u00f3wne strony serwisu lub jak rozumiemy, \u017ce dotkn\u0119li\u015bmy dna<\/h3>\n<p>\u00a0<br \/>\nAby jako\u015b zrozumie\u0107 priorytet b\u0142\u0119du, wydzielili\u015bmy najwa\u017cniejsze dla funkcjonalno\u015bci biznesowej strony serwisu. Na ich podstawie liczymy liczb\u0119 udanych\/niedanych \u017c\u0105da\u0144 i timeout\u00f3w. W ten spos\u00f3b mierzymy uptime.\u00a0<\/p>\n<p>Powiedzmy, \u017ce ustalili\u015bmy, \u017ce s\u0105 pewne superwa\u017cne sekcje serwisu, kt\u00f3re odpowiadaj\u0105 za g\u0142\u00f3wn\u0105 us\u0142ug\u0119 - wyszukiwanie i sk\u0142adanie og\u0142osze\u0144. Je\u015bli liczba \u017c\u0105da\u0144, kt\u00f3re zako\u0144czy\u0142y si\u0119 b\u0142\u0119dem, przekracza 1% - to jest to krytyczny incydent. Je\u015bli w ci\u0105gu 15 minut w godzinach szczytu procent b\u0142\u0119d\u00f3w przekracza 0,1% - to r\u00f3wnie\u017c uznaje si\u0119 za krytyczny incydent. Te kryteria pokrywaj\u0105 wi\u0119kszo\u015b\u0107 incydent\u00f3w, pozosta\u0142e wykraczaj\u0105 poza ramy tego artyku\u0142u.<\/p>\n<p><img decoding=\"async\" alt=\"Najwi\u0119ksze wpadki Cian\" src=\"\/wp-content\/uploads\/2020\/05\/f5d76b1784c9a52ae1dc4728f1509ccc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Top najlepszych incydent\u00f3w w Cian<\/h3>\n<p>\nZatem dok\u0142adnie nauczyli\u015bmy si\u0119 okre\u015bla\u0107, \u017ce incydent si\u0119 zdarzy\u0142.\u00a0<\/p>\n<p>Teraz ka\u017cdy incydent jest szczeg\u00f3\u0142owo opisany i odzwierciedlony w epiku Jira. Swoj\u0105 drog\u0105, dla tego celu za\u0142o\u017cyli\u015bmy osobny projekt, nazweali\u015bmy go FAIL - mo\u017cna w nim tworzy\u0107 tylko epiki.\u00a0<\/p>\n<p>Je\u015bli zbierzemy wszystkie pora\u017cki z ostatnich kilku lat, to dominuj\u0105:\u00a0<\/p>\n<ul>\n<li>incydenty zwi\u0105zane z mssql;<\/li>\n<li>incydenty spowodowane czynnikami zewn\u0119trznymi;<\/li>\n<li>b\u0142\u0119dy administrator\u00f3w.<\/li>\n<\/ul>\n<p>\nSkupimy si\u0119 bardziej szczeg\u00f3\u0142owo na b\u0142\u0119dach administrator\u00f3w oraz na innych interesuj\u0105cych pora\u017ckach.<\/p>\n<h4>Pi\u0119\u0107 miejsc - 'Porz\u0105dkujemy DNS'<\/h4>\n<p>\nTo by\u0142 pochmurny wtorek. Postanowili\u015bmy uporz\u0105dkowa\u0107 klaster DNS.\u00a0<\/p>\n<p>Zdecydowali\u015bmy si\u0119 przenie\u015b\u0107 wewn\u0119trzne serwery DNS z bind na powerdns, wydzielaj\u0105c na to zupe\u0142nie oddzielne serwery, na kt\u00f3rych nie ma nic poza DNS.\u00a0<\/p>\n<p>Umie\u015bcili\u015bmy po jednym serwerze DNS w ka\u017cdej lokalizacji naszych data center, a nadszed\u0142 czas przeniesienia stref z bind na powerdns oraz prze\u0142\u0105czenia infrastruktury na nowe serwery.\u00a0<\/p>\n<p>W trakcie przenoszenia z wszystkich <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/pl\/server\/\"   title=\"serwer\u00f3w\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1484\">serwer\u00f3w<\/a>, kt\u00f3re by\u0142y wskazane w lokalnych pami\u0119ciach cache bind na wszystkich serwerach, pozosta\u0142 tylko jeden, kt\u00f3ry znajdowa\u0142 si\u0119 w data center w Sankt Petersburgu. To data center pocz\u0105tkowo zosta\u0142o zadeklarowane jako niekrytyczne dla nas, ale nagle sta\u0142o si\u0119 single point of failure.<br \/>\nW takim w\u0142a\u015bnie okresie przeniesienia pad\u0142 kana\u0142 mi\u0119dzy Moskw\u0105 a Sankt Petersburgiem. Faktycznie zostali\u015bmy bez DNS przez pi\u0119\u0107 minut i wznowili\u015bmy dzia\u0142anie, gdy <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/pl\/\"   title=\"powinien umie\u0107 to zrobi\u0107)\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1206\">powinien umie\u0107 to zrobi\u0107)<\/a> usuni\u0119to usterki.\u00a0<\/p>\n<p><b>Wnioski: <\/b><\/p>\n<p>Je\u015bli wcze\u015bniej lekcewa\u017cyli\u015bmy zewn\u0119trzne czynniki podczas przygotowa\u0144 do prac, to teraz r\u00f3wnie\u017c zosta\u0142y one uwzgl\u0119dnione w li\u015bcie rzeczy, do kt\u00f3rych si\u0119 przygotowujemy. D\u0105\u017cymy do tego, aby wszystkie komponenty by\u0142y zarezerwowane w systemie n-2, a podczas prac mo\u017cemy obni\u017cy\u0107 ten poziom do n-1.<\/p>\n<ul>\n<li>Podczas tworzenia planu dzia\u0142ania zaznaczaj punkty, w kt\u00f3rych us\u0142uga mo\u017ce spa\u015b\u0107, i wymy\u015blaj scenariusz, w kt\u00f3rym wszystko idzie \"najgorzej jak to mo\u017cliwe\" z wyprzedzeniem.<\/li>\n<li>Rozdzielaj wewn\u0119trzne serwery DNS po r\u00f3\u017cnych geolokalizacjach\/data center\/szafach\/prze\u0142\u0105cznikach\/\u0142\u0105czeniach.<\/li>\n<li>Na ka\u017cdym serwerze zainstaluj lokalny serwer DNS cache, kt\u00f3ry przekierowuje zapytania do g\u0142\u00f3wnych serwer\u00f3w DNS, a w przypadku jego niedost\u0119pno\u015bci odpowiada z pami\u0119ci cache.\u00a0<\/li>\n<\/ul>\n<p><\/p>\n<h4>Czwarte miejsce - \"Porz\u0105dkujemy Nginx\"<\/h4>\n<p>\nPewnego pi\u0119knego dnia nasz zesp\u00f3\u0142 postanowi\u0142, \u017ce \"do\u015b\u0107 tego znosimy\" i rozpocz\u0105\u0142 proces refaktoryzacji konfiguracji Nginx. G\u0142\u00f3wnym celem by\u0142o nadanie konfiguracjom intuicyjnej struktury. Wcze\u015bniej wszystko by\u0142o \"historycznie ugruntowane\" i nie mia\u0142o \u017cadnej logiki. Teraz ka\u017cdy server_name zosta\u0142 przeniesiony do pliku o tej samej nazwie i wszystkie konfiguracje zosta\u0142y rozdzielone na foldery. Na marginesie \u2014 konfiguracja zawiera 253949 wierszy lub 7836520 znak\u00f3w i zajmuje prawie 7 megabajt\u00f3w. G\u00f3rny poziom struktury:\u00a0<\/p>\n<p>                        <b class=\"spoiler_title\">Struktura Nginx<\/b><\/p>\n<pre><code class=\"plaintext\">\u251c\u2500\u2500 dost\u0119p\n\u2502 \u00a0 \u251c\u2500\u2500 allow.list\n...\n\u2502 \u00a0 \u2514\u2500\u2500 whitelist.conf\n\u251c\u2500\u2500 geobase\n\u2502 \u00a0 \u251c\u2500\u2500 exclude.conf\n...\n\u2502 \u00a0 \u2514\u2500\u2500 geo_ip_to_region_id.conf\n\u251c\u2500\u2500 geodb\n\u2502 \u00a0 \u251c\u2500\u2500 GeoIP.dat\n\u2502 \u00a0 \u251c\u2500\u2500 GeoIP2-Country.mmdb\n\u2502 \u00a0 \u2514\u2500\u2500 GeoLiteCity.dat\n\u251c\u2500\u2500 inc\n\u2502 \u00a0 \u251c\u2500\u2500 error.inc\n...\n\u2502 \u00a0 \u2514\u2500\u2500 proxy.inc\n\u251c\u2500\u2500 lists.d\n\u2502 \u00a0 \u251c\u2500\u2500 bot.conf\n...\n\u2502 \u00a0 \u251c\u2500\u2500 dynamic\n\u2502 \u00a0 \u2514\u2500\u2500 geo.conf\n\u251c\u2500\u2500 lua\n\u2502 \u00a0 \u251c\u2500\u2500 cookie.lua\n\u2502 \u00a0 \u251c\u2500\u2500 log\n\u2502 \u00a0 \u2502 \u00a0 \u2514\u2500\u2500 log.lua\n\u2502 \u00a0 \u251c\u2500\u2500 logics\n\u2502 \u00a0 \u2502 \u00a0 \u251c\u2500\u2500 include.lua\n\u2502 \u00a0 \u2502 \u00a0 \u251c\u2500\u2500 ...\n\u2502 \u00a0 \u2502 \u00a0 \u2514\u2500\u2500 utils.lua\n\u2502 \u00a0 \u2514\u2500\u2500 prom\n\u2502 \u00a0 \u00a0 \u00a0 \u251c\u2500\u2500 stats.lua\n\u2502 \u00a0 \u00a0 \u00a0 \u2514\u2500\u2500 stats_prometheus.lua\n\u251c\u2500\u2500 map.d\n\u2502 \u00a0 \u251c\u2500\u2500 access.conf\n\u2502 \u00a0 \u251c\u2500\u2500 ..\u00a0\n\u2502 \u00a0 \u2514\u2500\u2500 zones.conf\n\u251c\u2500\u2500 nginx.conf\n\u251c\u2500\u2500 robots.txt\n\u251c\u2500\u2500 server.d\n\u2502 \u00a0 \u251c\u2500\u2500 cian.ru\n\u2502 \u00a0 \u2502 \u00a0 \u251c\u2500\u2500 cian.ru.conf\n\u2502 \u00a0 \u2502 \u00a0 \u251c\u2500\u2500 ...\n\u2502 \u00a0 \u2502 \u00a0 \u2514\u2500\u2500 my.cian.ru.conf\n\u251c\u2500\u2500 service.d\n\u2502 \u00a0 \u251c\u2500\u2500 ...\n\u2502 \u00a0 \u2514\u2500\u2500 status.conf\n\u2514\u2500\u2500 upstream.d\n\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 cian-mcs.conf\n\u00a0\u00a0\u00a0\u00a0\u251c\u2500\u2500 ...\n\u00a0\u00a0\u00a0\u00a0\u2514\u2500\u2500 wafserver.conf<\/code><\/pre>\n<p>Zdecydowanie sta\u0142o si\u0119 lepiej, ale podczas zmiany nazw i rozdzielania konfiguracji cz\u0119\u015b\u0107 z nich mia\u0142a niew\u0142a\u015bciwe rozszerzenie i nie trafi\u0142a do dyrektywy include *.conf. W rezultacie cz\u0119\u015b\u0107 host\u00f3w sta\u0142a si\u0119 niedost\u0119pna i zwraca\u0142a 301 na stron\u0119 g\u0142\u00f3wn\u0105. Poniewa\u017c kod odpowiedzi nie by\u0142 5xx\/4xx, zauwa\u017cono to dopiero nad ranem. Po tym zacz\u0119li\u015bmy pisa\u0107 testy do sprawdzenia komponent\u00f3w infrastrukturalnych.<\/p>\n<p><b>Wnioski:<\/b>\u00a0<\/p>\n<ul>\n<li>Poprawnie strukturyzuj konfiguracje (nie tylko nginx) i przemy\u015bl ich struktur\u0119 na wczesnym etapie projektu. Dzi\u0119ki temu b\u0119d\u0105 bardziej zrozumia\u0142e dla zespo\u0142u, co z kolei zmniejszy czas wprowadzenia na rynek (TTM).<\/li>\n<li>Dla niekt\u00f3rych komponent\u00f3w infrastrukturalnych pisz testy. Na przyk\u0142ad: sprawdzanie, czy wszystkie kluczowe server_name zwracaj\u0105 w\u0142a\u015bciwy status oraz tre\u015b\u0107 odpowiedzi. Wystarczy mie\u0107 kilka skrypt\u00f3w, kt\u00f3re sprawdzaj\u0105 podstawowe funkcje komponentu, aby nie trzeba by\u0142o w \u015brodku nocy nerwowo przypomina\u0107 sobie, co jeszcze nale\u017cy sprawdzi\u0107.\u00a0<\/li>\n<\/ul>\n<p><\/p>\n<h4>Trzecie miejsce \u2014 \"Nagle sko\u0144czy\u0142o si\u0119 miejsce w Cassandra\"<\/h4>\n<p>\nDane stopniowo ros\u0142y i wszystko by\u0142o dobrze, a\u017c do momentu, gdy w klastrze Cassandra zacz\u0119\u0142y pada\u0107 naprawy du\u017cych keyspace'\u00f3w, poniewa\u017c nie mog\u0142a dzia\u0142a\u0107 kompakcja.\u00a0<\/p>\n<p>Pewnego deszczowego dnia klaster niemal zamieni\u0142 si\u0119 w dyni\u0119, a dok\u0142adnie:<\/p>\n<ul>\n<li>pozosta\u0142o oko\u0142o 20% \u0142\u0105cznej przestrzeni w klastrze;<\/li>\n<li>nie mo\u017cna w pe\u0142ni doda\u0107 w\u0119z\u0142\u00f3w, poniewa\u017c nie przechodzi czyszczenie po dodaniu w\u0119z\u0142a z powodu braku miejsca na partycjach;<\/li>\n<li>wydajno\u015b\u0107 stopniowo spada, poniewa\u017c kompakcja nie dzia\u0142a;\u00a0<\/li>\n<li>klaster dzia\u0142a w trybie awaryjnym.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Najwi\u0119ksze wpadki Cian\" src=\"\/wp-content\/uploads\/2020\/05\/1d036fbc500a49a285fa4b0014e2a70d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWyj\u015bcie \u2014 dodano jeszcze 5 w\u0119z\u0142\u00f3w bez czyszczenia, po czym zacz\u0119li\u015bmy systematycznie wyprowadza\u0107 z klastra i ponownie wprowadza\u0107 jako puste w\u0119z\u0142y, na kt\u00f3rych sko\u0144czy\u0142o si\u0119 miejsce. Czas po\u015bwi\u0119cony jest znacznie wi\u0119kszy ni\u017c by\u015bmy chcieli. Istnia\u0142o ryzyko cz\u0119\u015bciowej lub ca\u0142kowitej niedost\u0119pno\u015bci klastra.\u00a0<\/p>\n<p><b>Wnioski:<\/b><\/p>\n<ul>\n<li>Na wszystkich serwerach Cassandra nie powinno by\u0107 zaj\u0119te wi\u0119cej ni\u017c 60% miejsca na ka\u017cdej partycji.\u00a0<\/li>\n<li>Powinny by\u0107 za\u0142adowane nie wi\u0119cej ni\u017c w 50% pod wzgl\u0119dem CPU.<\/li>\n<li>Nie nale\u017cy lekcewa\u017cy\u0107 planowania pojemno\u015bci i trzeba je przemy\u015ble\u0107 dla ka\u017cdego komponentu, bior\u0105c pod uwag\u0119 jego specyfik\u0119.<\/li>\n<li>Im wi\u0119cej w\u0119z\u0142\u00f3w w klastrze \u2014 tym lepiej. Serwery zawieraj\u0105ce ma\u0142\u0105 ilo\u015b\u0107 danych szybciej si\u0119 odnawiaj\u0105, a taki klaster \u0142atwiej przywr\u00f3ci\u0107 do dzia\u0142ania.\u00a0<\/li>\n<\/ul>\n<p><\/p>\n<h4>Drugie miejsce \u2014 \u201eZnikn\u0119\u0142y dane z magazynu kluczy warto\u015bci Consul\u201d<\/h4>\n<p>\nDo us\u0142ug odkrywania serwis\u00f3w u\u017cywamy, jak wielu, Consul. Ale nasz magazyn kluczy warto\u015bci jest wykorzystywany tak\u017ce do wdro\u017ce\u0144 blue-green monolitu. Przechowuje informacje o aktywnych i nieaktywnych upstreamach, kt\u00f3re zmieniaj\u0105 si\u0119 miejscami podczas wdro\u017cenia. W tym celu napisano us\u0142ug\u0119 wdro\u017cenia, kt\u00f3ra wsp\u00f3\u0142dzia\u0142a\u0142a z magazynem KV. W pewnym momencie dane z KV znikn\u0119\u0142y. Odzyskali\u015bmy wed\u0142ug pami\u0119ci, ale z licznymi b\u0142\u0119dami. W konsekwencji \u2014 podczas wdro\u017cenia obci\u0105\u017cenie na upstreamach roz\u0142o\u017cy\u0142o si\u0119 nier\u00f3wnomiernie, a otrzymali\u015bmy wiele b\u0142\u0119d\u00f3w 502 z powodu przeci\u0105\u017cenia backend\u00f3w pod wzgl\u0119dem CPU. Ostatecznie przenie\u015bli\u015bmy si\u0119 z magazynu KV Consul do Postgresa, sk\u0105d ich usuni\u0119cie nie jest ju\u017c tak proste.\u00a0\u00a0<\/p>\n<p><b>Wnioski:<br \/>\n<\/b><\/p>\n<ul>\n<li>Us\u0142ugi bez jakiejkolwiek autoryzacji nie powinny zawiera\u0107 krytycznych danych dla dzia\u0142ania strony. Na przyk\u0142ad, je\u015bli nie ma autoryzacji w ES \u2014 lepiej by\u0142oby zablokowa\u0107 dost\u0119p na poziomie sieci z wsz\u0119dzie, gdzie nie jest potrzebny, pozostawi\u0107 tylko niezb\u0119dne, a tak\u017ce ustawi\u0107 action.destructive_requires_name: true.<\/li>\n<li>Zastosuj mechanizm tworzenia kopii zapasowych i przywracania zawczasu. Na przyk\u0142ad, przygotuj skrypt (na przyk\u0142ad w Pythonie), kt\u00f3ry potrafi zar\u00f3wno tworzy\u0107 kopie zapasowe, jak i przywraca\u0107.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Pierwsze miejsce \u2014 \u201eKapitan Nieoczywisto\u015b\u0107\u201d\u00a0<\/h4>\n<p>\nW pewnym momencie zauwa\u017cyli\u015bmy nier\u00f3wnomierne roz\u0142o\u017cenie obci\u0105\u017cenia na upstreamy Nginx, gdy w backendzie by\u0142o 10+ serwer\u00f3w. Poniewa\u017c round-robin kierowa\u0142 zapytania od pierwszego do ostatniego upstreamu w kolejno\u015bci, a ka\u017cdy reload Nginx zaczyna\u0142 od nowa, na pierwsze upstreamy zawsze przypada\u0142o wi\u0119cej zapyta\u0144 ni\u017c na pozosta\u0142e. W rezultacie pracowa\u0142y one wolniej i ucierpia\u0142a ca\u0142a strona. Stawa\u0142o si\u0119 to coraz bardziej zauwa\u017calne wraz ze wzrostem ruchu. Proste zaktualizowanie Nginx, aby w\u0142\u0105czy\u0107 random, nie wystarczy\u0142o \u2014 trzeba by\u0142o przerobi\u0107 mas\u0119 kodu Lua, kt\u00f3ry nie dzia\u0142a\u0142 w wersji 1.15 (w tym czasie). Musieli\u015bmy poprawi\u0107 naszego Nginx 1.14.2, wprowadzaj\u0105c wsparcie dla random. To rozwi\u0105za\u0142o problem. Ten b\u0142\u0105d zdobywa nagrod\u0119 w kategorii \u201ekapitan nieoczywisto\u015b\u0107\u201d.<\/p>\n<p><b>Wnioski:<\/b><\/p>\n<p>To by\u0142o bardzo interesuj\u0105ce i anga\u017cuj\u0105ce badanie tego b\u0142\u0119du).\u00a0<\/p>\n<ul>\n<li>Ustawcie monitoring tak, aby pomaga\u0142 szybko znajdowa\u0107 podobne fluktuacje. Na przyk\u0142ad mo\u017cna u\u017cywa\u0107 ELK, aby obserwowa\u0107 rps na ka\u017cdym backendzie ka\u017cdego upstreamu, \u015bledzi\u0107 ich czasy odpowiedzi z perspektywy Nginx. W tym przypadku to w\u0142a\u015bnie pomog\u0142o nam zidentyfikowa\u0107 problem.\u00a0<\/li>\n<\/ul>\n<p>\nW rezultacie wi\u0119ksz\u0105 cz\u0119\u015b\u0107 awarii mo\u017cna by\u0142oby unikn\u0105\u0107 przy bardziej skrupulatnym podej\u015bciu do tego, co robisz. Zawsze trzeba pami\u0119ta\u0107 o prawie Murphy'ego:\u00a0<i>Cokolwiek mo\u017ce p\u00f3j\u015b\u0107 \u017ale, p\u00f3jdzie \u017ale, <\/i>i budowa\u0107 komponenty, kieruj\u0105c si\u0119 tym.\u00a0<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/cian\/blog\/499542\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u0434\u043e\u0431\u0440\u0430!\u00a0 \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041d\u0438\u043a\u0438\u0442\u0430, \u044f \u0442\u0438\u043c\u043b\u0438\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0426\u0438\u0430\u043d. \u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043c\u043e\u0438\u0445 \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u043d\u0430 \u043f\u0440\u043e\u0434\u0435, \u0434\u043e \u043d\u0443\u043b\u044f. \u0422\u043e, \u043e \u0447\u0435\u043c \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c \u0434\u0430\u043b\u0435\u0435, \u043f\u0440\u0438\u043d\u0435\u0441\u043b\u043e \u043d\u0430\u043c \u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0438, \u0438 \u0446\u0435\u043b\u044c \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043d\u0435 \u0434\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u043c \u043b\u044e\u0434\u044f\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043d\u0430\u0448\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u043b\u0438\u044f\u043d\u0438\u0435.\u00a0 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80032,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80031","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 \u0434\u043e\u0431\u0440\u0430! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041d\u0438\u043a\u0438\u0442\u0430, \u044f \u0442\u0438\u043c\u043b\u0438\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0426\u0438\u0430\u043d.\" \/>\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\/top-fakapov-czian\" \/>\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\u0422\u043e\u043f \u0444\u0430\u043a\u0430\u043f\u043e\u0432 \u0426\u0438\u0430\u043d | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u0434\u043e\u0431\u0440\u0430! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041d\u0438\u043a\u0438\u0442\u0430, \u044f \u0442\u0438\u043c\u043b\u0438\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0426\u0438\u0430\u043d.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/top-fakapov-czian\" \/>\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-02T11:42:49+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-02T11:42:49+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\udd47Najlepsze wpadki CIAN | ProHoster","description":"Wszystkiego dobrego! Nazywam si\u0119 Nikita, jestem liderem zespo\u0142u in\u017cynier\u00f3w CIAN.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/top-fakapov-czian","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\u0422\u043e\u043f \u0444\u0430\u043a\u0430\u043f\u043e\u0432 \u0426\u0438\u0430\u043d | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u0434\u043e\u0431\u0440\u0430! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041d\u0438\u043a\u0438\u0442\u0430, \u044f \u0442\u0438\u043c\u043b\u0438\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0426\u0438\u0430\u043d.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/top-fakapov-czian","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-02T11:42:49+00:00","article:modified_time":"2020-05-02T11:42:49+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80031","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:47:44","updated":"2026-02-09 16:50:24","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\/80031","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=80031"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/80031\/revisions"}],"predecessor-version":[{"id":158728,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/80031\/revisions\/158728"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/80032"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=80031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=80031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=80031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}