Пакуль усе святкавалі мой дзень нараджэння, я да раніцы правіў кластар - а расрабы валілі на мяне свае памылкі

Пакуль усе святкавалі мой дзень нараджэння, я да раніцы правіў кластар - а расрабы валілі на мяне свае памылкі

Вось гісторыя, якая назаўжды перавярнула мой падыход да працы дэвопсу. Яшчэ ў дакавідныя часы, задоўга-задоўга да іх, калі мы з хлопцамі толькі задумвалі сваю справу і фрылансілі на выпадковых замовах, мне ў калёсы ўпала адна прапанова.

Кампанія, якая напісала, займалася аналітыкай дадзеных. Штодзень яна апрацоўвала тысячы запытаў. Да нас яны прыйшлі са словамі: хлопцаў, у нас ёсць ClickHouse і мы хочам аўтаматызаваць яго наладу і ўстаноўку. Жадаем Ansible, Terraform, Докер і каб гэта ўсё захоўвалася ў гіце. Жадаем кластар з чатырох нод па дзве рэплікі ў кожнай.

Стандартная просьба, якіх дзясяткі, і трэба такое ж добрае стандартнае рашэнне. Мы сказалі "окей", і праз 2-3 тыдні ўсё было гатова. Працу яны прынялі і пачалі пераязджаць на новы кластар Клікхаўса з дапамогай нашай утыліты.

У іх ніхто не хацеў і не ўмеў важдацца з Клікхаўсам. Тады мы думалі, што гэта іх асноўная праблема, і таму СТА кампаніі проста даў адмашку маёй камандзе максімальна аўтаматызаваць працу, каб не лезці туды самому больш ніколі.

Мы суправаджалі пераезд, з'явіліся іншыя задачы - наладзіць бэкапы і маніторынг. У гэты ж момант СТА гэтай кампаніі зліўся на іншы праект, пакінуўшы нам за камандзіра аднаго са сваіх - Леаніда. Лёня быў не надта адораны хлопец. Просты распрацоўшчык, якога раптам паставілі галоўным па Клікхаўсе. Здаецца, гэта было яго першае прызначэнне нечым пакіраваць, і ад наваленага гонару ў яго прайшла зорная хвароба.

Разам мы прыняліся за бэкапы. Я прапанаваў бэкапіць адразу зыходныя дадзеныя. Проста браць, шыпіць і элегантна закідваць у які-небудзь с3. Зыходныя дадзеныя - гэта золата. Быў і іншы варыянт - бэкапіць самі табліцы ў Клікхаусе, з дапамогай фрыза і капіявання. Але Лёня прыдумаў сваё рашэнне.

Ён абвясціў, што нам патрэбен другі кластар Клікхаўса. І з гэтага часу мы будзем пісаць дадзеныя на два кластары – асноўны і бэкапны. Я яму кажу, маўляў, Лёня, выйдзе не бэкап - а актыўная рэпліка. І калі дадзеныя пачнуць губляцца на прадакшэне, на тваім бэкапе будзе тое ж самае.

Але Лёня моцна ўчапіўся ў штурвал і слухаць мае довады адмовіўся. Мы доўга з ім сабачыліся ў чатыцы, але рабіць няма чаго - Лёня руліў на праекце, мы былі проста найманымі пацанамі з вуліцы.

Мы пажывалі за станам кластара і бралі плату толькі за працу адмінаў. Чыстае адміністраванне Клікхауса без залажэння ў дадзеныя. Кластар быў даступны, дыскі ў норме, ноды ў парадку.

Мы яшчэ не падазравалі, што атрымалі гэтую замову з-за страшнага непаразумення ўсярэдзіне іх каманды

Кіраўнік быў незадаволены, што Клікхаўс працуе павольна і часам губляюцца дадзеныя. Ён паставіў свайму СТА задачу разабрацца. Той разабраўся, як змог, і зрабіў выснову, што трэба проста аўтаматызаваць Клікхаўс - і ўсё. Але як неўзабаве высветлілася - ім патрэбна была зусім не каманда дэвапсаў.

Усё гэта высветлілася вельмі-вельмі балюча. А самае крыўднае, гэта было ў мой дзень нараджэння.

Пятніца, вечар. Я забраніраваў столік у каханым вінным бары і паклікаў карэшаў.

Амаль перад выхадам нам прылятае задача зрабіць альтэр, мы выконваем, усё окей. Альтэр прайшоў, клікхаўс пацвердзіў. Мы ўжо сабраліся ў бар, а нам пішуць, што звестак не хапае. Палічылі - быццам усяго хапае. І пайшлі святкаваць.

У рэстаране было па-пятнічнаму шумна. Замовіўшы выпіўкі, ежы, разваліліся на канапах. Увесь гэты час мой слак паціху завальвалі паведамленні. Пісалі нешта пра недахоп звестак. Я падумаў - раніца вечара мудрагелісцей. Асабліва сёньняшняга.

Бліжэй да адзінаццаці пачалі ўжо тэлефанаваць. Гэта быў кіраўнік кампаніі… "Напэўна, вырашыў мяне павіншаваць", – вельмі няўпэўнена падумаў я, зняў трубку.

І пачуў нешта ў духу: «Вы прасралі нашы дадзеныя! Я плачу вам, але нічога не працуе! Вы адказвалі за бэкапы, і не зрабілі ніхрэна! Давайце чыніце!» - толькі яшчэ хмулацей.

- Ведаеш што, ідзі ты нахрен! У мяне сёння дзень нараджэння, і зараз я буду бухаць, а не займацца вашымі джунаўскімі самаробкамі з лайна і палак!

Вось так я не сказаў. Замест гэтага дастаў ноут і прыняўся за працу.

Не, я бамбаваў, я пякельна бамбаваў! Сыпаў у чацік з'едлівыя «я ж казаў» - таму што бэкап, які ніфіга бэкапам не быў, - вядома ж, нічога не выратаваў.

Мы з дзецюкамі прыдумалі, як уручную спыніць запіс і ўсё праверыць. Сапраўды пераканаліся, што частка звестак не пішацца.

Спынілі запіс, палічылі колькасць івэнтаў, якія там ляжаць за дзень. Закінулі яшчэ даныя, ад якіх не запісалася толькі трэць. Тры шарды па 2 рэплікі. Устаўляеш 100.000 радкоў - 33.000 не запісваюцца.

Тварылася поўная блытаніна. Усе слалі адзін аднаго на хер па чарзе: першым туды адправіўся Лёня, за ім пайшлі я сам і заснавальнік кампаніі. Толькі СТА спрабаваў вывесці нашы сазвоны з крыкамі і перапіску ў бок пошуку вырашэння праблемы.

Што адбывалася насамрэч - ніхто не разумеў

Мы з хлопцамі проста охренели, калі зразумелі, што траціна ўсіх дадзеных не проста не запісвалася - яна гублялася! Аказалася, парадак у кампаніі быў такі: пасля ўстаўкі дадзеныя выдаляліся беззваротна, івэнты прасіраліся пачкамі. Я ўявіў, як Сяргей канвертуе ўсё гэта ў недаатрыманыя рублі.

Мой дзень нараджэння таксама адпраўляўся на памыйніцу. Мы сядзелі ў бары і генеравалі ідэі, спрабуючы разгадаць падкінуты рэбус. Чыннік падзення Клікхауса была не відавочная. Можа, гэта сетка, можа, справа ў настройках лінукса. Ды ўсё, што заўгодна, гіпотэз прагучала дастаткова.

Я не даваў клятву распрацоўніка, але кідаць хлопцаў на тым канцы провада было непрыстойна - хай нават яны ва ўсім вінавацілі нас. Я на 99% быў упэўнены, што праблема залегла не ў нашых рашэннях, не на нашым баку. 1% шанцу, што аблажаліся ўсё ж мы, паліў трывогай. Але на чыім бы баку бяда не знаходзілася - гэта трэба было пафіксіць. Пакідаць кліентаў, якімі б яны ні былі, з такой страшнай плынню дадзеных - гэта занадта жорстка.

Да трох раніцы мы працавалі за столікам рэстарана. Дакідалі івэнтаў, insert select і пагналі запаўняць прабелы. Калі ты прасраў дадзеныя, робіцца так - ты бярэш сярэднія дадзеныя за папярэднія дні і ўстаўляеш іх у прашараныя.

Пасля трох раніцы мы з друганам пайшлі да мяне дадому, замовілі з алкамаркета півасік. Я сядзеў з ноутам і праблемамі Клікхаўса, сябар мне нешта расказваў. У выніку праз гадзіну ён пакрыўдзіўся на тое, што я працую, а не з ім піва п'ю, і з'ехаў. Класіка - пабыў сябрам дэвопсу.

Да 6 раніцы я перастварыў табліцу нанова, і дадзеныя пачалі залівацца. Усё зарабіла без страт.

Далей было цяжка. Усе абвінавачвалі адзін аднаго ў страце звестак. Калі б здарыўся новы баг, я ўпэўнены, пачалася б перастрэлка

У гэтых срачах мы нарэшце пачалі разумець - у кампаніі думалі, што мы тыя хлопцы, якія працуюць з дадзенымі і сочаць за структурай табліц. Яны пераблыталі адмінаў з дыбіэйшчыкамі. І прыйшлі пытацца з нас далёка не як з адмінаў.

Іх асноўная прэтэнзія - якога хера, вы адказвалі за бэкапы і не зрабілі іх нармальна, прадаўбалі дадзеныя. І ўсё гэта з мацюкамі-пераматамі.

Мне хацелася справядлівасці. Я адкапаў перапіску і прыклаў усіх скрыншотамі, дзе Леанід з усёй сілы прымушае рабіць такі бэкап, які быў зроблены. Іх СТА ўстаў на наш бок пасля майго тэлефоннага званка. Пасля сваю віну прызнаў і Лёня.

Кіраўнік кампаніі, наадварот, не хацеў вінаваціць сваіх. Скрыны і словы на яго не дзейнічалі. Ён лічыў, што раз мы тут эксперты, то павінны былі ўсіх пераканаць і настаяць на сваім рашэнні. Мабыць, у нашу задачу ўваходзіла навучыць Лёню і да таго ж у абыход яго, прызначанага кіраўніком праекту, дайсці да галоўнага і яму асабіста выліць усе нашы сумневы ў канцэпцыі бэкапаў.

Чацік сачыўся нянавісцю, утоенай і непрыхаванай агрэсіяй. Я не ведаў, што рабіць. Усё зайшло ў тупік. І тут мне параілі самы просты спосаб - напісаць у твары кіраўніку і дамовіцца з ім аб сустрэчы. Вася, людзі ў жыцці не такія харты, як у чаце. На маё паведамленне бос адказаў: прыязджай, не пытанне.

Гэта была самая стромкая сустрэча ў маёй кар'еры. Мой саюзнік ад кліента - СТА - не змог знайсці час. На сустрэчу я ехаў да боса і Лёні.

Штораз я пракручваў у галаве наш магчымы дыялог. Умудрыўся прыехаць моцна загадзя, за паўгадзіны. Пачаўся нервак, я выкурыў цыгарэт 10. Я разумеў, усё - я, нахрен, адзін. Я не змагу іх пераканаць. І ступіў у ліфт.

Пакуль падымаўся, так чыркаў запальнічкай, што зламаў яе.

У выніку Лёні на сустрэчы не аказалася. І мы выдатна аб усім пагаварылі з галоўным! Сяргей расказаў мне пра свой боль. Ён хацеў не "аўтаматызаваць Клікхаўс" - ён хацеў, "каб запыты працавалі".

Я ўбачыў не казла, а добрага хлопца, які хвалюецца за свой бізнэс, пагружанага ў працу 24/7. Чат часцяком малюе нам злыдняў, нягоднікаў і тупіц. Але ў жыцьці гэта такія ж людзі, як і ты.

Сяргею патрэбна была не пара дэвопсаў па найму. Праблема, якая ў іх узнікла, аказалася значна буйнейшай.

Я сказаў, што магу вырашыць ягоныя праблемы — проста гэта зусім іншая праца, і ў мяне для яе ёсць знаёмы дыбіэйшчык. Калі б мы першапачаткова даведаліся, што гэта дзялка для іх, мы б пазбеглі шмат чаго. Позна, але мы зразумелі, што праблема крылася ў хрэновай працы з дадзенымі, а не ў інфраструктуры.

Мы паціснулі рукі, плату нам паднялі ў два з паловай разы, але на ўмове - я забіраю абсалютна ўвесь галоўняк з іх дадзенымі і Клікхаўсам сабе. У ліфце я спісаўся з тым самым дыбіэйшчыкам Максам і падключыў яго да працы. Трэба было пералапаціць увесь кластар.

Трашака ў прынятым праекце было навалам. Пачынаючы са згаданага «бэкапу». Аказалася, што гэты ж «бэкап»-кластар не быў ізаляваным. На ім тэсцілі ўсё запар, часам нават пускалі ў прадакшн.

Штатныя распрацоўнікі склалі свой кастамны "устаўлятар" дадзеных. Ён працаваў так: батчыў файлікі, запускаў скрыпт і зліваў дадзеныя ў таблічку. Але галоўная праблема была ў тым, што велізарная колькасць дадзеных прымалася для аднаго найпростага запыту. Запыт джойніл дадзеныя пасекундна. Усё дзеля адной цыферкі - сумы за дзень.

Штатныя распрацоўшчыкі некарэктна выкарыстоўвалі інструмент для аналітыкі. Яны хадзілі ў графану, пісалі свой царскі запыт. Ён выгружаў дадзеныя за 2 тыдні. Атрымліваўся прыгожы графік. Але на справе запыт звестак ішоў кожныя 10 секунд. Усё гэта збіралася ў чаргу, паколькі Клікхаус проста не вывозіў апрацоўку. Тут і хавалася асноўная прычына. У графане нічога не працавала, запыты стаялі ў чарзе, увесь час прыляталі старыя неактуальныя дадзеныя.

Мы пераналадзілі кластар, перарабілі ўстаўку. Штатныя распрацоўшчыкі перапісалі свой «устаўлятар», і ён пачаў шаляваць дадзеныя карэктна.

Макс правёў поўны аўдыт інфраструктуры. Ён распісаў план пераходу на паўнавартасны бэкенд. Але гэта не задаволіла кампанію. Яны чакалі ад Макса магічнага сакрэту, які дазволіць працаваць па-старому, але толькі эфектыўна. За праект па-ранейшаму адказваў Лёня, які нічаму не навучыўся. З усяго прапанаванага ён зноў абраў сваю альтэрнатыву. Як заўсёды, гэта было самае адборнае… смелае рашэнне. Лёня лічыў, што ў яго кампаніі асаблівы шлях. Цярністы і поўны айсбергаў.

Уласна, на гэтым мы і расталіся - зрабілі, што змаглі.

З набітымі шышкамі, прымудроныя гэтай гісторыяй, мы адкрылі свой бізнэс і сфарміравалі для сябе некалькі прынцыпаў. Цяпер мы ніколі не пачнем працу таксама, як тады.

Дыбіэйшчык Макс пасля гэтага праекта далучыўся да нас, і мы да гэтага часу выдатна працуем разам. Кейс з Клікхаўсам навучыў праводзіць перад пачаткам працы поўны і грунтоўны аўдыт інфраструктуры. Мы ўнікаем, як усё працуе, і толькі потым прымаем задачы. І калі б раней мы адразу рванулі абслугоўваць інфраструктуру, то зараз спачатку робім разавы праект, які і дапамагае зразумець, як прывесці яе ў працоўны стан.

І так, мы абыходзім бокам праекты з хрэновай інфраструктурай. Нават калі за вялікія грошы, нават калі па сяброўстве. Весці хворыя праекты невыгодна. Усведамленне гэтага дапамагло нам вырасці. Або разавы праект па прывядзенні ў парадак інфраструктуры і затым кантракт на абслугоўванне, альбо проста пралятаем міма. Міма чарговага айсберга.

PS Так што, калі ў вас ёсць пытанні па вашай інфраструктуры, смела пакідайце заяўку.

У нас ёсць 2 бясплатных аўдыту у месяц, магчыма, менавіта ваш праект будзе ў іх ліку.

Крыніца: habr.com

Дадаць каментар