{"id":38981,"date":"2019-10-31T22:27:10","date_gmt":"2019-10-31T19:27:10","guid":{"rendered":"https:\/\/prohoster.info\/blog\/servisy-siroty-obratnaya-storona-mikro-servisnoj-arhitektury\/"},"modified":"2019-10-31T22:27:10","modified_gmt":"2019-10-31T19:27:10","slug":"servisy-siroty-obratnaya-storona-mikro-servisnoj-arhitektury","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/servisy-siroty-obratnaya-storona-mikro-servisnoj-arhitektury","title":{"rendered":"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Dyrektor ds. eksploatacji portalu Banki.ru, Andriej Nikolski, opowiedzia\u0142 na zesz\u0142orocznej konferencji <noindex><a rel=\"nofollow\" href=\"http:\/\/devopsdays.ru\/?utm_source=habr&amp;utm_medium=social&amp;utm_campaign=dod-2019&amp;utm_content=post3\">DevOpsDays Moskwa<\/a><\/noindex> o serwisach-sierotach: jak rozpozna\u0107 sierot\u0119 w infrastrukturze, jakie s\u0142abo\u015bci maj\u0105 serwisy-sieroty, co z nimi zrobi\u0107 i jak post\u0119powa\u0107, je\u015bli nic nie pomaga.<\/p>\n<p>Pod katem znajduje si\u0119 tekstowa wersja referatu. <\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"j9I4oeEXBO8\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/j9I4oeEXBO8\/hqdefault.jpg\" alt=\"Odtwarzaj wideo\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nWitam, koledzy! Nazywam si\u0119 Andriej, kieruj\u0119 eksploatacj\u0105 w firmie Banki.ru.<\/p>\n<p>Mamy du\u017ce serwisy, to s\u0105 takie monolitowe serwisy, s\u0105 serwisy w bardziej klasycznym rozumieniu, i s\u0105 zupe\u0142nie ma\u0142e. W mojej roboczej terminologii m\u00f3wi\u0119, \u017ce je\u015bli serwis jest prosty i ma\u0142y, to jest mikro, a je\u015bli nie jest bardzo prosty i nie jest ma\u0142y, to jest po prostu serwis. <\/p>\n<h3><b>Zalety serwis\u00f3w<\/b><\/h3>\n<p>\nSzybko przelec\u0119 przez zalety serwis\u00f3w. <\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/4c34a3af9125c5869eb7c1650bc3855a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo pierwsze \u2014 skalowanie. Mo\u017cesz szybko zrobi\u0107 co\u015b na serwisie i uruchomi\u0107 w produkcji. Je\u015bli masz nap\u0142yw ruchu, klonujesz serwis. Gdy przychodzi kolejny ruch, klonujesz jeszcze raz i z tym \u017cyjesz. To dobra zaleta, i w zasadzie, kiedy zaczynali\u015bmy, uwa\u017cali\u015bmy to za najwa\u017cniejsze, dlaczego w og\u00f3le to robimy.<\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/c536f380ece14e0c873f765b587fb3c3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo drugie, izolowany rozw\u00f3j, gdy masz kilka zespo\u0142\u00f3w deweloperskich, kilku r\u00f3\u017cnych programist\u00f3w w ka\u017cdym zespole, i ka\u017cdy zesp\u00f3\u0142 tworzy jaki\u015b w\u0142asny serwis.<\/p>\n<p>Z zespo\u0142ami pojawia si\u0119 pewien niuans. Programi\u015bci mog\u0105 by\u0107 r\u00f3\u017cni. I na przyk\u0142ad istniej\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=VPDJXngp2bM\">ludzie-p\u0142atki \u015bniegu<\/a><\/noindex>. Po raz pierwszy zobaczy\u0142em to u Maksima Dorofiewa. Czasami ludzie-p\u0142atki \u015bniegu s\u0105 w niekt\u00f3rych zespo\u0142ach, a w innych ich nie ma. Sprawia to, \u017ce r\u00f3\u017cne serwisy u\u017cywane w firmie s\u0105 nieco nier\u00f3wnomierne. <\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/f1e18ab059bd2b975d4c6ff1b6434626.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZobacz na obrazek: to dobry programista, ma du\u017ce r\u0119ce, mo\u017ce zrobi\u0107 wiele. G\u0142\u00f3wna problem \u2014 sk\u0105d pochodz\u0105 te r\u0119ce. <\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/88fdc7266e97be8732f252908329a8f2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSerwisy daj\u0105 mo\u017cliwo\u015b\u0107 korzystania z r\u00f3\u017cnych j\u0119zyk\u00f3w programowania, bardziej odpowiednich do r\u00f3\u017cnych zada\u0144. Jaki\u015b serwis na Go, jaki\u015b na Erlangu, jaki\u015b na Rubym, co\u015b na PHP, co\u015b na Pythonie. Og\u00f3lnie mo\u017cna si\u0119 rozwin\u0105\u0107 bardzo szeroko. Tu r\u00f3wnie\u017c s\u0105 pewne niuanse.<\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/98a4b1037066d67e4f16bab934cebac6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nArchitektura oparta na serwisach to przede wszystkim kwestia devops. To znaczy, je\u015bli nie masz automatyzacji, nie masz procesu wdra\u017cania, je\u015bli konfigurujesz r\u0119cznie, twoje konfiguracje mog\u0105 si\u0119 r\u00f3\u017cni\u0107 mi\u0119dzy instancjami serwisu, i musisz tam interweniowa\u0107, to jeste\u015b w piekle. <\/p>\n<p>Na przyk\u0142ad, je\u015bli masz 20 us\u0142ug i musisz je wdra\u017ca\u0107 r\u0119cznie, masz 20 konsol i jednocze\u015bnie wciskasz \u201eenter\u201d jak ninja. To nie jest zbyt dobre. <\/p>\n<p>Je\u015bli masz us\u0142ug\u0119 po testach (je\u015bli s\u0105 testy, oczywi\u015bcie) i musisz j\u0105 jeszcze dopracowa\u0107, aby dzia\u0142a\u0142a w produkcji, mam dla ciebie z\u0142e wie\u015bci. <\/p>\n<p>Je\u015bli polegasz na specyficznych us\u0142ugach Amazona i pracujesz przy tym w Rosji, to dwa miesi\u0105ce temu r\u00f3wnie\u017c mia\u0142e\u015b \u201eWszystko wok\u00f3\u0142 p\u0142onie, jest dobrze, wszystko jest super\u201d.<\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/474f5f1c3f0ced131df5ee8f30f0aa15.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nU\u017cywamy Ansible do automatyzacji wdra\u017cania, Puppet do sp\u00f3jno\u015bci, Bamboo do automatyzacji wdro\u017ce\u0144, Confluence, aby to wszystko jako\u015b opisa\u0107.<\/p>\n<p>Nie b\u0119d\u0119 si\u0119 tym szczeg\u00f3\u0142owo zajmowa\u0142, poniewa\u017c wyst\u0105pienie dotyczy bardziej praktyk interakcji ni\u017c technicznej realizacji. <\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/ab837bed67ee319d72da705bc632e3f3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMieli\u015bmy na przyk\u0142ad problemy, gdy Puppet na serwerze dzia\u0142a z Ruby 2, a jaka\u015b aplikacja jest napisana pod Ruby 1.8 i razem nie dzia\u0142aj\u0105. Pojawia si\u0119 jaki\u015b b\u0142\u0105d. A gdy trzeba trzyma\u0107 na jednej maszynie kilka wersji Ruby, zazwyczaj zaczynaj\u0105 si\u0119 problemy. <\/p>\n<p>Na przyk\u0142ad, ka\u017cdemu programi\u015bcie wydajemy \u015brodowisko, w kt\u00f3rym jest prawie wszystko, co mamy, wszystkie us\u0142ugi, kt\u00f3re mo\u017cna rozwija\u0107, aby mia\u0142 izolowane \u015brodowisko, m\u00f3g\u0142 je psu\u0107 i budowa\u0107, jak chce. <\/p>\n<p>Czasami potrzebny jest specjalnie skompilowany pakiet z obs\u0142ug\u0105 czego\u015b tam. To jest do\u015b\u0107 trudne. S\u0142ucha\u0142em wyst\u0105pienia, w kt\u00f3rym obraz dockera wa\u017cy\u0142 45 GB. W Linuksie jest, oczywi\u015bcie, pro\u015bciej, tam wszystko jest mniejsze, ale i tak nie ma wystarczaj\u0105co du\u017co miejsca. <\/p>\n<p>Czasem wyst\u0119puj\u0105 sprzeczne zale\u017cno\u015bci, gdy jedna cz\u0119\u015b\u0107 projektu zale\u017cy od biblioteki jednej wersji, a inna cz\u0119\u015b\u0107 projektu od innej wersji, a biblioteki razem w og\u00f3le si\u0119 nie instaluj\u0105. <\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/acc4c38c547cd6d0580cf3524532393a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMamy strony i us\u0142ugi na PHP 5.6, wstydzimy si\u0119 za to, ale co zrobi\u0107. To jest nasze jedno \u015brodowisko. S\u0105 strony i us\u0142ugi na PHP 7, jest ich wi\u0119cej, nie wstydzimy si\u0119 za nie. I ka\u017cdy programista ma swoj\u0105 baz\u0119, gdzie rado\u015bnie przerabia. <\/p>\n<p>Je\u015bli w firmie piszesz w jednym j\u0119zyku, trzy wirtualki na programist\u0119 brzmi\u0105 ca\u0142kiem normalnie. Je\u015bli masz r\u00f3\u017cne j\u0119zyki programowania, sytuacja staje si\u0119 gorsza.<\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/9f5da38456024679ba6a41768466cb82.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTworzysz strony i us\u0142ugi, a potem jeszcze jedna platforma dla Go, jedna dla Ruby, a obok jeszcze jaki\u015b Redis. W rezultacie wszystko to zamienia si\u0119 w du\u017ce pole wsparcia, i ca\u0142y czas co\u015b mo\u017ce si\u0119 zepsu\u0107.<\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/20bde06e0aaceea028fabea09540d2a2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDlatego zast\u0105pili\u015bmy wygodne elementy j\u0119zyka programowania u\u017cywaniem r\u00f3\u017cnych framework\u00f3w, poniewa\u017c frameworki PHP s\u0105 do\u015b\u0107 r\u00f3\u017cne, maj\u0105 r\u00f3\u017cne mo\u017cliwo\u015bci, r\u00f3\u017cne spo\u0142eczno\u015bci, r\u00f3\u017cne wsparcie. Mo\u017cna pisa\u0107 us\u0142ugi tak, aby mie\u0107 ju\u017c co\u015b gotowego pod nie. <\/p>\n<h3><b>Ka\u017cda us\u0142uga ma swoj\u0105 ekip\u0119<\/b><\/h3>\n<p>\n<img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/ff32f7449c831e6dcb2bd9c41fb9c8e7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNaszym g\u0142\u00f3wnym atutem, kt\u00f3ry wykrystalizowa\u0142 si\u0119 przez kilka lat, jest to, \u017ce ka\u017cda us\u0142uga ma swoj\u0105 ekip\u0119. To wygodne w du\u017cym projekcie, mo\u017cna zaoszcz\u0119dzi\u0107 czas na dokumentacji, mened\u017cerowie dobrze znaj\u0105 sw\u00f3j projekt. <\/p>\n<p>Zadania zwi\u0105zane ze wsparciem mo\u017cna \u015bwietnie kierowa\u0107. Na przyk\u0142ad, gdy zepsuje si\u0119 us\u0142uga ubezpiecze\u0144. Od razu zesp\u00f3\u0142 zajmuj\u0105cy si\u0119 ubezpieczeniami przyst\u0119puje do naprawy. <\/p>\n<p>Nowe funkcje powstaj\u0105 szybko, poniewa\u017c gdy masz jedn\u0105, jak\u0105\u015b atomow\u0105 us\u0142ug\u0119, mo\u017cna w ni\u0105 szybko co\u015b wprowadzi\u0107. <\/p>\n<p>I kiedy zepsujesz swoj\u0105 us\u0142ug\u0119, co jest nieuniknione, nie wp\u0142ywa to na inne us\u0142ugi, i nie przybiegaj\u0105 do ciebie programi\u015bci z innych zespo\u0142\u00f3w z kijami m\u00f3wi\u0105c: \u201eAj-aj, nie r\u00f3b tak.\u201d <\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/30d99fa39654701437cdf90929d6a45e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJak zawsze, s\u0105 pewne niuanse. Mamy stabilne zespo\u0142y, mened\u017cerowie s\u0105 mocno zwi\u0105zani z zespo\u0142em. S\u0105 wyra\u017ane dokumenty, mened\u017cerowie bacznie to wszystko obserwuj\u0105. Ka\u017cdy zesp\u00f3\u0142 ma kilka us\u0142ug ze swoim mened\u017cerem, i jest konkretna dziedzina kompetencji. <\/p>\n<p>Je\u015bli zespo\u0142y s\u0105 ruchome (co si\u0119 u nas czasami zdarza), istnieje dobra metoda zwana \u201emap\u0105 gwiazd\u201d.<\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/cd18530d30973628f9351757a800dc37.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMasz list\u0119 us\u0142ug i ludzi. Gwiazdka oznacza, \u017ce osoba jest ekspertem w tej us\u0142udze, ksi\u0105\u017ceczka oznacza, \u017ce osoba uczy si\u0119 tej us\u0142ugi. Zadaniem osoby jest zamieni\u0107 ksi\u0105\u017ceczk\u0119 na gwiazdk\u0119. A je\u015bli przy us\u0142udze nic nie jest napisane, zaczynaj\u0105 si\u0119 problemy, o kt\u00f3rych b\u0119d\u0119 dalej m\u00f3wi\u0107. <\/p>\n<h3><b>Jak pojawiaj\u0105 si\u0119 us\u0142ugi-sieroty?<\/b><\/h3>\n<p>\n<img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/8ae33d6e940700a5941409b7cedf3e9a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPierwszym problemem, pierwszym sposobem na uzyskanie us\u0142ugi-sieroty w swojej infrastrukturze s\u0105 zwolnienia pracownik\u00f3w. Czy kto\u015b z Was mia\u0142 sytuacj\u0119, kiedy terminy biznesowe pojawiaj\u0105 si\u0119, zanim oceni si\u0119 zadania? Czasami tak si\u0119 zdarza, \u017ce terminy s\u0105 sztywne i brakuje czasu na dokumentacj\u0119. \u201eMusimy wprowadzi\u0107 us\u0142ug\u0119 do produkcji, potem dopiszemy.\u201d <\/p>\n<p>Je\u015bli zesp\u00f3\u0142 jest ma\u0142y, bywa, \u017ce jest tylko jeden programista, kt\u00f3ry pisze wszystko, a pozostali s\u0105 na podmianie. \u201eZrealizowa\u0142em g\u0142\u00f3wn\u0105 architektur\u0119, ty zajmij si\u0119 interfejsami.\u201d Potem w pewnym momencie mened\u017cer na przyk\u0142ad odchodzi. I w tym okresie, kiedy mened\u017cer odszed\u0142, a nowy jeszcze nie zosta\u0142 wyznaczony, programi\u015bci sami decyduj\u0105, w jakim kierunku pod\u0105\u017ca us\u0142uga, co si\u0119 z ni\u0105 dzieje. A jak wiemy (wr\u00f3\u0107my kilka slajd\u00f3w wstecz), w niekt\u00f3rych zespo\u0142ach s\u0105 osoby-wie\u017cowce, czasami wie\u017cowiec to lider zespo\u0142u. Potem on odchodzi, i otrzymujemy us\u0142ug\u0119-sierot\u0119. <\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/44741c897bfd9dc04e0a977c1cf08df3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTymczasem zadania od wsparcia i od biznesu nie znikaj\u0105, osiadaj\u0105 w backlogu. Je\u015bli podczas tworzenia us\u0142ugi by\u0142y jakie\u015b b\u0142\u0119dy architektoniczne, r\u00f3wnie\u017c osiadaj\u0105 w backlogu. Us\u0142uga powoli si\u0119 degraduje. <\/p>\n<h3><b>Jak rozpozna\u0107 sierot\u0119?<\/b> <\/h3>\n<p>\nTa lista ca\u0142kiem dobrze opisuje sytuacj\u0119. Kto zauwa\u017cy\u0142 co\u015b podobnego w swojej infrastrukturze?<\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/b852d070bb6864f48e3a6ae9921a12b1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO dokumentowanych obej\u015bciach: jest us\u0142uga, kt\u00f3ra w zasadzie dzia\u0142a, ma manual na dwie strony, jak z ni\u0105 pracowa\u0107, ale nikt nie wie, jak dzia\u0142a wewn\u0105trz. <\/p>\n<p>Albo, na przyk\u0142ad, mamy jaki\u015b skracacz link\u00f3w. U nas obecnie korzystamy z trzech skracaczy link\u00f3w do r\u00f3\u017cnych cel\u00f3w w r\u00f3\u017cnych us\u0142ugach. To s\u0105 bezpo\u015brednie konsekwencje. <\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/350a041f21fcd75d9a948d2b9b77cda8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTeraz b\u0119d\u0119 kapitanem oczywisto\u015bci. Co nale\u017cy zrobi\u0107? Po pierwsze, trzeba przekaza\u0107 us\u0142ug\u0119 innemu mened\u017cerowi, innemu zespo\u0142owi. Je\u015bli Tw\u00f3j lider zespo\u0142u jeszcze nie odszed\u0142, to do tego innego zespo\u0142u, kiedy zdajecie sobie spraw\u0119, \u017ce us\u0142uga przypomina sierot\u0119, trzeba w\u0142\u0105czy\u0107 kogo\u015b, kto cokolwiek o niej wie. <\/p>\n<p>Najwa\u017cniejsza rzecz: musicie mie\u0107 spisane procedury przekazywania, najlepiej z wielk\u0105 staranno\u015bci\u0105. W naszym przypadku zazwyczaj dbam o to, poniewa\u017c musz\u0119, \u017ceby to wszystko dzia\u0142a\u0142o. Mened\u017cerowie potrzebuj\u0105, aby to by\u0142o szybko oddane, a co si\u0119 z tym potem stanie, ich ju\u017c ma\u0142o interesuje. <\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/87b9d86c2c795f5d71db1489cab200a2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNast\u0119pny spos\u00f3b na stworzenie sieroty to \u201eZle\u0107my to na zewn\u0105trz, to b\u0119dzie szybsze, a potem przeka\u017cemy to zespo\u0142owi\u201d. Jasne, \u017ce wszyscy maj\u0105 jakie\u015b plany w zespole, kolejk\u0119. Cz\u0119sto zamawiaj\u0105cy my\u015bli, \u017ce na zleceniu zrobi\u0105 to tak samo, jak dzia\u0142 techniczny w firmie. Chocia\u017c motywacje s\u0105 r\u00f3\u017cne. Na zleceniach mo\u017cna spotka\u0107 dziwaczne rozwi\u0105zania technologiczne i algorytmiczne.<\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/b4208ccb134cbc694ea4993ec2751ec5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMieli\u015bmy na przyk\u0142ad serwis, w kt\u00f3rym Sphinx znajdowa\u0142 si\u0119 w r\u00f3\u017cnych nieoczekiwanych miejscach. P\u00f3\u017aniej opowiem, co musieli\u015bmy zrobi\u0107. <\/p>\n<p>Zleceniobiorcy maj\u0105 czasami autorskie frameworki. To po prostu czysty PHP z kopiowaniem i wklejaniem z poprzedniego projektu, gdzie mo\u017cna znale\u017a\u0107 r\u00f3\u017cne rzeczy. Du\u017ce obej\u015bcia w skryptach wdro\u017ceniowych, kiedy trzeba zmienia\u0107 kilka linijek w jakim\u015b pliku skomplikowanymi skryptami Bash, kt\u00f3re s\u0105 wywo\u0142ywane przez jaki\u015b trzeci skrypt. W rezultacie zmieniasz system wdro\u017ceniowy, wybierasz co\u015b innego, a nagle tw\u00f3j serwis nie dzia\u0142a. Poniewa\u017c potrzeba jeszcze 8 link\u00f3w mi\u0119dzy r\u00f3\u017cnymi folderami. Czasem jest tak, \u017ce tysi\u0105c rekord\u00f3w dzia\u0142a, a sto tysi\u0119cy ju\u017c nie. <\/p>\n<p>B\u0119d\u0119 kontynuowa\u0107 dowodzenie. Odbi\u00f3r us\u0142ugi z zewn\u0119trznego \u017ar\u00f3d\u0142a to procedura obowi\u0105zkowa. Kt\u00f3ry z was mia\u0142 sytuacj\u0119, \u017ce serwis z outsourcingu przyje\u017cd\u017ca, a jego nikt nie przyjmuje? To nie jest tak popularne jak sierota serwisowa, ale jednak. <\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/92ef67a1bb714cdfb820efe432d0303b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUs\u0142uga musi by\u0107 sprawdzana, us\u0142uga musi by\u0107 oceniana, has\u0142a musz\u0105 by\u0107 zmieniane. Mieli\u015bmy przypadek, gdy wprowadzono nam us\u0142ug\u0119, w kt\u00f3rej administrator mia\u0142 kod \"if login == 'admin' &amp;&amp; password == 'admin'...\", dos\u0142ownie zapisane w kodzie. Siedzimy i my\u015blimy, \u017ce to pisz\u0105 ludzie w 2018 roku?<\/p>\n<p>Testowanie pojemno\u015bci magazynu to tak\u017ce wa\u017cna rzecz. Nale\u017cy sprawdzi\u0107, co si\u0119 stanie przy stu tysi\u0105cach rekord\u00f3w, nawet zanim ten serwis wprowadzisz do produkcji. <\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/3fabdc20049892cee7636c30e595881d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNie powinno by\u0107 wstydem wys\u0142a\u0107 serwis na poprawki. Kiedy m\u00f3wisz: \u201eNie przyjmujemy tego serwisu, mamy 20 zada\u0144, zr\u00f3bcie je, wtedy przyjmiemy\u201d, to jest normalne. Sumienie nie powinno ci\u0119 bole\u0107, \u017ce nara\u017casz mened\u017cera lub \u017ce biznes wyda pieni\u0105dze. Biznes p\u00f3\u017aniej wyda wi\u0119cej.<\/p>\n<p>Mieli\u015bmy sytuacj\u0119, kiedy zdecydowali\u015bmy si\u0119 na zrobienie pilota\u017cowego projektu na zlecenie.<\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/a5b25638e51c4eabe9d6a6971f08fa6b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZosta\u0142 oddany na czas, co by\u0142o jedynym kryterium jako\u015bci. Dlatego zrobiono kolejny projekt pilota\u017cowy, ju\u017c nawet nie do ko\u0144ca pilota\u017cowy. Te us\u0142ugi zosta\u0142y przyj\u0119te, administracyjnie powiedziano, oto wasz kod, oto zesp\u00f3\u0142, oto wasz mened\u017cer. Us\u0142ugi zacz\u0119\u0142y przynosi\u0107 zyski. Jednak w rzeczywisto\u015bci nadal pozosta\u0142y osierocone, nikt nie rozumie, jak dzia\u0142aj\u0105, a mened\u017cerowie wszelkimi sposobami wykr\u0119caj\u0105 si\u0119 od ich zada\u0144. <\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/29ac8ab670df5d2c92dc7940d0a74e24.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJest jeszcze jedno \u015bwietne poj\u0119cie \u2013 partyzancka rozw\u00f3j. Kiedy jaki\u015b dzia\u0142, zazwyczaj marketingowy, chce przetestowa\u0107 hipotez\u0119 i zleca ca\u0142\u0105 us\u0142ug\u0119 na zewn\u0105trz. Zaczyna nap\u0142ywa\u0107 ruch, zamykaj\u0105 dokumenty, podpisuj\u0105 akty z wykonawc\u0105, wchodz\u0105 w eksploatacj\u0119 i m\u00f3wi\u0105: \u201eLudzie, mamy tutaj us\u0142ug\u0119, na kt\u00f3rej ju\u017c jest ruch, przynosi nam pieni\u0105dze, przyjmijmy j\u0105\u201d. My na to: \u201eOho, jak to si\u0119 sta\u0142o\u201d.<\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/1fa0187e5db9bed7af0c97ac8500567f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI jeszcze jeden spos\u00f3b na uzyskanie us\u0142ugi-osieroconej: kiedy jaka\u015b dru\u017cyna nagle okazuje si\u0119 obci\u0105\u017cona, kierownictwo m\u00f3wi: \u201ePrzeka\u017cmy t\u0119 us\u0142ug\u0119 tej dru\u017cynie, kt\u00f3ra ma mniejsze obci\u0105\u017cenie\u201d. Potem przeka\u017cemy trzeciej grupie i zmienimy mened\u017cera. I w efekcie zn\u00f3w mamy osierocone oprogramowanie.<\/p>\n<h3><b>Jaki jest problem z osieroconymi us\u0142ugami?<\/b><\/h3>\n<p>\n<img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/009170e7989a78e8bd9f5b7b364e358c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKto nie wie, to podniesiony w Szwecji okr\u0119t liniowy Wasa, s\u0142yn\u0105cy z tego, \u017ce zaton\u0105\u0142 pi\u0119\u0107 minut po wodowaniu. I kr\u00f3l Szwecji, nawiasem m\u00f3wi\u0105c, nikogo za to nie skaza\u0142. Budowano go przez dwa pokolenia in\u017cynier\u00f3w, kt\u00f3rzy nie umieli budowa\u0107 takich statk\u00f3w. Efekt by\u0142 przewidywalny.<\/p>\n<p>Statek m\u00f3g\u0142 zaton\u0105\u0107, nawiasem m\u00f3wi\u0105c, o wiele gorzej, na przyk\u0142ad gdyby kr\u00f3l jecha\u0142 na nim gdzie\u015b w burzy. A tak, zaton\u0105\u0142 od razu, wed\u0142ug metodyki agile jest to dobrze \u2013 pora\u017cka na wczesnym etapie. <\/p>\n<p>Je\u015bli ponie\u015bli\u015bmy pora\u017ck\u0119 na wczesnym etapie, zazwyczaj nie ma problem\u00f3w. Na przyk\u0142ad podczas odbioru wys\u0142ano do poprawki. A je\u015bli ponie\u015bli\u015bmy pora\u017ck\u0119 ju\u017c na etapie produkcji, kiedy zosta\u0142y zainwestowane pieni\u0105dze, to mog\u0105 pojawi\u0107 si\u0119 problemy. Skutki, jak to si\u0119 nazywa w biznesie.<\/p>\n<p>Czym s\u0105 niebezpieczne us\u0142ugi-osierocone:<\/p>\n<ul>\n<li>Us\u0142uga mo\u017ce nagle si\u0119 zepsu\u0107. <\/li>\n<li>Us\u0142uga d\u0142ugo si\u0119 naprawia lub w og\u00f3le si\u0119 nie naprawia. <\/li>\n<li>Problemy z bezpiecze\u0144stwem. <\/li>\n<li>Problemy z ulepszeniami i aktualizacjami. <\/li>\n<li>Je\u017celi wa\u017cna us\u0142uga si\u0119 psuje, cierpi reputacja firmy. <\/li>\n<\/ul>\n<p><\/p>\n<h3><b>Co robi\u0107 z us\u0142ugami-osieroconymi?<\/b><\/h3>\n<p>\n<img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/094444a042ccf12bf4c9e166c3fffe47.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJeszcze raz przypomn\u0119, co nale\u017cy zrobi\u0107. Po pierwsze, musi by\u0107 dokumentacja. 7 lat w Banki.ru nauczy\u0142o mnie, \u017ce testerzy nie powinni wierzy\u0107 s\u0142owom programist\u00f3w, a dzia\u0142 eksploatacji nie powinien wierzy\u0107 nikomu na s\u0142owo. Nale\u017cy to sprawdza\u0107. <\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/23d652f96e93eb52d9172b103121fe54.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo drugie, nale\u017cy pisa\u0107 schematy interakcji, poniewa\u017c zdarza si\u0119, \u017ce us\u0142ugi, kt\u00f3re s\u0105 akceptowane nie najlepiej, zawieraj\u0105 zale\u017cno\u015bci, o kt\u00f3rych nikt nie powiedzia\u0142. Na przyk\u0142ad, programi\u015bci powi\u0105zali us\u0142ug\u0119 z kluczem do map Yandex lub do Dadata. Kiedy sko\u0144czy\u0142 si\u0119 darmowy limit, wszystko si\u0119 zepsu\u0142o i nie wiesz, co si\u0119 w og\u00f3le sta\u0142o. Wszystkie takie pu\u0142apki powinny by\u0107 opisane: w us\u0142udze u\u017cywa si\u0119 Dadata, Sms i jeszcze czego\u015b.<\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/b2770a07cf265ad8a3890b2cb2f62263.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo trzecie, praca z d\u0142ugiem technicznym. Kiedy robisz jakie\u015b obej\u015bcia lub przyjmujesz us\u0142ug\u0119 i m\u00f3wisz, \u017ce co\u015b nale\u017cy zrobi\u0107, nale\u017cy pilnowa\u0107, \u017ceby to by\u0142o zrobione. Bo potem mo\u017ce si\u0119 okaza\u0107, \u017ce ma\u0142a dziura nie jest taka ma\u0142a i w ni\u0105 wpadniesz.<\/p>\n<p>Z zadaniami architektonicznymi mieli\u015bmy histori\u0119 dotycz\u0105c\u0105 Sphinx. W jednej z us\u0142ug Sphinx by\u0142 u\u017cywany do wprowadzania list. Po prostu lista z paginacj\u0105, ale jednocze\u015bnie by\u0142a reindeksowana ka\u017cdej nocy. Sk\u0142ada\u0142 si\u0119 z dw\u00f3ch indeks\u00f3w: jeden du\u017cy by\u0142 indeksowany ka\u017cdej nocy, a do niego by\u0142 do\u0142\u0105czany ma\u0142y indeks. Ka\u017cdego dnia, z prawdopodobie\u0144stwem 50%, albo wszystko dzia\u0142a\u0142o, albo nie, przy publikacji indeks si\u0119 \u0142ama\u0142 i nasze wiadomo\u015bci przestawa\u0142y by\u0107 aktualizowane na stronie g\u0142\u00f3wnej. Na pocz\u0105tku trwa\u0142o to 5 minut, podczas gdy indeks by\u0142 reindeksowany, potem indeks ur\u00f3s\u0142 i w pewnym momencie zacz\u0105\u0142 reindeksowa\u0107 si\u0119 przez 40 minut. Kiedy to usun\u0119li\u015bmy, odetchn\u0119li\u015bmy z ulg\u0105, bo by\u0142o jasne, \u017ce minie jeszcze troch\u0119 czasu i nasz indeks b\u0119dzie si\u0119 reindeksowa\u0142 przez pe\u0142en dzie\u0144 roboczy. To by\u0142by fail dla naszego portalu, osiem godzin bez wiadomo\u015bci \u2014 wszystko, biznes stan\u0105\u0142.<\/p>\n<h3><b>Plan pracy z us\u0142ug\u0105-sierot\u0105<\/b><\/h3>\n<p>\n<img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/f072ec872d59de058faf1994ac39f161.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW rzeczywisto\u015bci, jest to bardzo trudne do zrobienia, poniewa\u017c devops to komunikacja. Chce si\u0119 by\u0107 w dobrych relacjach ze swoimi kolegami, a kiedy bijesz koleg\u00f3w i mened\u017cer\u00f3w regulacjami po g\u0142owie, mog\u0105 odczuwa\u0107 sprzeczne uczucia wobec tych, kt\u00f3rzy tak robi\u0105. <\/p>\n<p>Opr\u00f3cz wszystkich tych punkt\u00f3w, jest jeszcze jedna wa\u017cna rzecz: za ka\u017cdy konkretny serwis, za ka\u017cdy konkretny fragment procedury wdro\u017cenia, musz\u0105 odpowiada\u0107 konkretne osoby. Kiedy nie ma ludzi i trzeba anga\u017cowa\u0107 innych, aby wszystko to zbada\u0107, robi si\u0119 trudniej.<\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/28e7372012d5089d3ac1be3d7dc97e03.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJe\u015bli to wszystko nie pomog\u0142o, a serwis-sierota wci\u0105\u017c pozosta\u0142 sierot\u0105, nikt nie chce go przej\u0105\u0107, dokumentacja nie powstaje, a zesp\u00f3\u0142, kt\u00f3ry zosta\u0142 do tego serwisu zaproszony, odmawia wykonania jakichkolwiek dzia\u0142a\u0144, istnieje prosty spos\u00f3b \u2014 wszystko przerobi\u0107. <\/p>\n<p>To znaczy, \u017ce bierzemy wymagania dotycz\u0105ce serwisu od nowa i piszemy nowy serwis, lepszy, na lepszej platformie, bez dziwnych rozwi\u0105za\u0144 technologicznych. I migrujemy na niego w trakcie dzia\u0142ania. <\/p>\n<p><img decoding=\"async\" alt=\"Us\u0142ugi-sieroty: druga strona (mikro)architektury us\u0142ugowej\" src=\"\/wp-content\/uploads\/2019\/10\/63d0bf7d9ac1e5c5b00b67b519e228a1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMieli\u015bmy sytuacj\u0119, kiedy wzi\u0119li\u015bmy serwis na Yii 1 i zrozumieli\u015bmy, \u017ce nie mo\u017cemy go dalej rozwija\u0107, poniewa\u017c sko\u0144czyli si\u0119 programi\u015bci, kt\u00f3rzy potrafi\u0105 dobrze pisa\u0107 na Yii 1. Wszyscy programi\u015bci dobrze pisz\u0105 w Symfony 3. Co zrobi\u0107? Przydzielili\u015bmy czas, przydzielili\u015bmy zesp\u00f3\u0142, przydzielili\u015bmy mened\u017cera, przepisali\u015bmy projekt i p\u0142ynnie prze\u0142\u0105czyli\u015bmy na niego ruch. <\/p>\n<p>Po tym stary serwis mo\u017cna usun\u0105\u0107. To moja ulubiona procedura, kiedy z systemu zarz\u0105dzania konfiguracjami trzeba wzi\u0105\u0107 i wyczy\u015bci\u0107 jaki\u015b serwis, a potem sprawdzi\u0107, \u017ceby wszystkie maszyny na produkcji by\u0142y wygaszone, aby programi\u015bci nie pozostawili \u017cadnych \u015blad\u00f3w. Repozytorium w gicie pozostaje.<\/p>\n<p>To wszystko, o czym chcia\u0142em opowiedzie\u0107, ch\u0119tnie podyskutuj\u0119, temat jest kontrowersyjny, wielu w nim p\u0142ywa\u0142o. <\/p>\n<p><b>Na slajdach by\u0142o wspomniane, \u017ce ujednolicili\u015bcie j\u0119zyki. Jako przyk\u0142ad podano zmian\u0119 rozmiaru obrazk\u00f3w. Ale czy naprawd\u0119 trzeba to ujednolica\u0107 do jednego j\u0119zyka? Bo zmiana rozmiaru obrazka w PHP, no, mo\u017cna by\u0142o to zrealizowa\u0107 r\u00f3wnie\u017c w Golang.<\/b><\/p>\n<p>W rzeczywisto\u015bci nie jest to konieczne, podobnie jak wszystkie praktyki. W niekt\u00f3rych przypadkach mo\u017ce to by\u0107 nawet niepo\u017c\u0105dane. Jednak nale\u017cy zrozumie\u0107, \u017ce je\u015bli w Twojej firmie jest 50 os\u00f3b w dziale technicznym, z czego 45 to programi\u015bci PHP, 3 to devopsy, kt\u00f3rzy znaj\u0105 Pythona, Ansible, Puppet i tym podobne, a tylko jeden z nich pisze serwis w j\u0119zyku Go do resize'u obrazk\u00f3w, to kiedy on odchodzi, jego ekspertyza odchodzi razem z nim. W takim przypadku b\u0119dziesz musia\u0142 poszukiwa\u0107 specyficznego dewelopera na rynku, kt\u00f3ry zna ten j\u0119zyk, szczeg\u00f3lnie je\u015bli jest on rzadki. To oznacza, \u017ce z perspektywy organizacyjnej jest to problematyczne. Z punktu widzenia devopsa, musisz nie tylko sklonowa\u0107 gotowy zestaw playbook\u00f3w, kt\u00f3re u\u017cywasz do wdra\u017cania us\u0142ug, ale b\u0119dziesz musia\u0142 je napisa\u0107 od nowa. <\/p>\n<p>Obecnie tworzymy serwis w Node.js, co b\u0119dzie przestrzeni\u0105 dla ka\u017cdego programisty z osobnym j\u0119zykiem. Jednak zastanawiali\u015bmy si\u0119, czy to ma sens. To znaczy, tu chodzi o to, \u017ceby usi\u0105\u015b\u0107 i pomy\u015ble\u0107.<\/p>\n<p><b>Jak monitorujecie swoje us\u0142ugi? Jak zbieracie i \u015bledzicie logi?<\/b><\/p>\n<p>Logi zbieramy w Elasticsearch i umieszczamy je w Kibana, w zale\u017cno\u015bci od tego, czy to \u015brodowisko produkcyjne czy testowe, u\u017cywamy r\u00f3\u017cnych zbieraczy. Gdzie\u015b jest Lumberjack, gdzie\u015b jeszcze co\u015b, ju\u017c nie pami\u0119tam. S\u0105 te\u017c pewne miejsca w niekt\u00f3rych us\u0142ugach, gdzie instalujemy Telegraf i wysy\u0142amy je gdzie indziej oddzielnie. <\/p>\n<p><b>Jak \u017cy\u0107 z Puppet i Ansible w jednym \u015brodowisku?<\/b><\/p>\n<p>W rzeczywisto\u015bci mamy teraz dwa \u015brodowiska, jedno \u2014 Puppet, drugie \u2014 Ansible. Pracujemy nad ich hybrydyzacj\u0105. Ansible to dobre \u015brodowisko do wst\u0119pnej konfiguracji, Puppet to z\u0142a rzecz do wst\u0119pnej konfiguracji, poniewa\u017c wymaga r\u0119cznej pracy bezpo\u015brednio z platform\u0105, a Puppet zapewnia zbie\u017cno\u015b\u0107 konfiguracji. To oznacza, \u017ce platforma sama si\u0119 utrzymuje w aktualnym stanie, a aby maszyna z Ansible by\u0142a utrzymywana w aktualnym stanie, trzeba regularnie uruchamia\u0107 na niej playbooki. Oto taka r\u00f3\u017cnica. <\/p>\n<p><b>Jak utrzymujecie zgodno\u015b\u0107? Macie konfiguracje zar\u00f3wno w Ansible, jak i w Puppet?<\/b><\/p>\n<p>To nasz du\u017cy b\u00f3l, r\u0119cznie wspieramy kompatybilno\u015b\u0107 i zastanawiamy si\u0119, jak przej\u015b\u0107 od tego wszystkiego gdzie indziej. Okazuje si\u0119, \u017ce Puppet instaluje pakiety i wspiera tam jakie\u015b odno\u015bniki, a Ansible, na przyk\u0142ad, instaluje kod i dostosowuje tam \u015bwie\u017ce konfiguracje aplikacji.<\/p>\n<p><b>W prezentacji by\u0142o o r\u00f3\u017cnych wersjach Ruby. Jakie rozwi\u0105zanie?<\/b><\/p>\n<p>Spotkali\u015bmy si\u0119 z tym w jednym miejscu i musimy to ca\u0142y czas mie\u0107 na uwadze. Po prostu wy\u0142\u0105czyli\u015bmy t\u0119 cz\u0119\u015b\u0107, kt\u00f3ra dzia\u0142a\u0142a na tej wersji Ruby, kt\u00f3ra by\u0142a niekompatybilna z aplikacjami, i trzymali\u015bmy j\u0105 osobno. <\/p>\n<blockquote><p> W tym roku konferencja <noindex><a rel=\"nofollow\" href=\"http:\/\/devopsdays.ru\/?utm_source=habr&amp;utm_medium=social&amp;utm_campaign=dod-2019&amp;utm_content=post3\">DevOpsDays Moskwa<\/a><\/noindex> odb\u0119dzie si\u0119 7 grudnia w \u201eTechnopoli\u201d. Zg\u0142oszenia na referaty przyjmujemy do 11 listopada. <noindex><a rel=\"nofollow\" href=\"http:\/\/devopsdays.ru\/?utm_source=habr&amp;utm_medium=social&amp;utm_campaign=dod-2019&amp;utm_content=post3\">Napiszcie<\/a><\/noindex> do nas, je\u015bli chcecie wyst\u0105pi\u0107.<\/p>\n<p>Rejestracja dla uczestnik\u00f3w jest otwarta, do\u0142\u0105czajcie! \n<\/p><\/blockquote>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/scienceman_events\/blog\/471146\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440 \u043f\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043f\u043e\u0440\u0442\u0430\u043b\u0430 Banki.ru \u0410\u043d\u0434\u0440\u0435\u0439 \u041d\u0438\u043a\u043e\u043b\u044c\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043d\u0430 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e\u0434\u043d\u0435\u0439 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 DevOpsDays Moscow \u043f\u0440\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u044b-\u0441\u0438\u0440\u043e\u0442\u044b: \u043a\u0430\u043a \u043e\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0441\u0438\u0440\u043e\u0442\u0443 \u0432 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u0447\u0435\u043c \u043f\u043b\u043e\u0445\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b-\u0441\u0438\u0440\u043e\u0442\u044b, \u0447\u0442\u043e \u0441 \u043d\u0438\u043c\u0438 \u0434\u0435\u043b\u0430\u0442\u044c, \u0438 \u043a\u0430\u043a \u0431\u044b\u0442\u044c, \u0435\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442. \u041f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043e\u043a\u043b\u0430\u0434\u0430. \u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043a\u043e\u043b\u043b\u0435\u0433\u0438! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439, \u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0436\u0443 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0435\u0439 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Banki.ru. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29246,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38981","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=\"\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440 \u043f\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043f\u043e\u0440\u0442\u0430\u043b\u0430 Banki.ru \u0410\u043d\u0434\u0440\u0435\u0439 \u041d\u0438\u043a\u043e\u043b\u044c\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043d\u0430 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e\u0434\u043d\u0435\u0439 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\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\/servisy-siroty-obratnaya-storona-mikro-servisnoj-arhitektury\" \/>\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\u0421\u0435\u0440\u0432\u0438\u0441\u044b-\u0441\u0438\u0440\u043e\u0442\u044b: \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 (\u043c\u0438\u043a\u0440\u043e)\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440 \u043f\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043f\u043e\u0440\u0442\u0430\u043b\u0430 Banki.ru \u0410\u043d\u0434\u0440\u0435\u0439 \u041d\u0438\u043a\u043e\u043b\u044c\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043d\u0430 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e\u0434\u043d\u0435\u0439 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/servisy-siroty-obratnaya-storona-mikro-servisnoj-arhitektury\" \/>\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=\"2019-10-31T19:27:10+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:27:10+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\udd47Serwisy-sieroty: ciemna strona (mikro)architektury serwisowej | ProHoster","description":"Dyrektor ds. eksploatacji portalu Banki.ru, Andriej Nikolski, opowiedzia\u0142 na zesz\u0142orocznej konferencji","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/servisy-siroty-obratnaya-storona-mikro-servisnoj-arhitektury","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\u0421\u0435\u0440\u0432\u0438\u0441\u044b-\u0441\u0438\u0440\u043e\u0442\u044b: \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 (\u043c\u0438\u043a\u0440\u043e)\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b | ProHoster","og:description":"\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440 \u043f\u043e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043f\u043e\u0440\u0442\u0430\u043b\u0430 Banki.ru \u0410\u043d\u0434\u0440\u0435\u0439 \u041d\u0438\u043a\u043e\u043b\u044c\u0441\u043a\u0438\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043d\u0430 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e\u0434\u043d\u0435\u0439 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/servisy-siroty-obratnaya-storona-mikro-servisnoj-arhitektury","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":"2019-10-31T19:27:10+00:00","article:modified_time":"2019-10-31T19:27:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38981","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":"2026-01-24 00:15:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:59:27","updated":"2026-01-24 00:15:21","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\/38981","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=38981"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/38981\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/29246"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=38981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=38981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=38981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}