Докато всички отпразнуваха рожденния ми ден, аз поправях кластера до сутринта — а разработчиците ми натрупваха своите грешки.

Докато всички отпразнуваха рожденния ми ден, аз поправях кластера до сутринта — а разработчиците ми натрупваха своите грешки.

Ето история, която завинаги промени подхода ми към работата на девопс. Още в преди COVID-19 времена, много преди тях, когато с момчетата само започвахме да мислим за бизнеса си и фрилансвахме по случайни проекти, получих едно предложение в Телеграм.

Компанията, която се свърза с нас, се занимаваше с анализ на данни. Всеки ден обработваха хиляди заявки. При нас дойдоха с думите: "Хей, имаме ClickHouse и искаме да автоматизираме настройката и инсталацията му. Искаме Ansible, Terraform, Docker и всичко това да бъде съхранявано в Git. Искаме клъстер от четири възела с по две реплики във всеки."

Стандартна молба, каквито десетки, и ни трябваше също добро стандартно решение. Казахме "окей", и след 2-3 седмици всичко беше готово. Работата беше приета и започнаха да се прехвърлят на новия ClickHouse клъстер с помощта на нашия инструмент.

Никой в тях не искаше и не знаеше как да работи с ClickHouse. Тогава мислехме, че това е основният им проблем, затова CTO на компанията просто даде сигнал на моя екип да максимално автоматизира работата, за да не влиза никога повече там.

Ние съпровождахме прехвърлянето, появиха се и други задачи — да настроим бекъпи и мониторинг. В същия момент CTO на тази компания се премести на друг проект, оставяйки ни в ръцете на един от техните — Леонид. Льоня не беше особено надарен момък. Обикновен разработчик, който внезапно стана главен за ClickHouse. Изглежда, че това беше първото му назначение да ръководи нещо, и от внезапния статус му се появи звездната болест.

Започнахме да работим по бекъпите заедно. Аз предложих да бекъпим веднага оригиналните данни. Просто да вземем, да компресираме и елегантно да качим в S3. Оригиналните данни — това е злато. Имаше и друг вариант — да бекъпим самите таблици в ClickHouse, с помощта на замразяване и копиране. Но Льоня измисли своето решение.

Той обяви, че ни трябва втори ClickHouse клъстер. И оттук нататък ще записваме данните на два клъстера — основен и бекъп. Казах му, моля те, Льоня, това няма да е бекъп — а активна реплика. И ако данните започнат да изчезват на продукцията, на твоя бекъп ще е същото.

Но Льоня здраво се вкопчи в штурвала и отказа да чуе моите аргументи. Дълго се карахме в чата, но нямаше какво да направим — Льоня ръководеше проекта, ние бяхме просто наети момчета от улицата.

Ние следяхме състоянието на кластера и таксуваме само за работата на администраторите. Чисто администриране на Clickhouse без намеса в данните. Кластерът беше достъпен, дисковете в нормално състояние, нодовете в ред.

Още не подозирахме, че сме получили тази поръчка заради ужасно недоразумение в техния екип.

Ръководителят беше недоволен от бавната работа на Clickhouse и че понякога се губят данни. Той постави задачата на CTO-то да се разбере каква е ситуацията. То разбра, как можа, и стигна до заключението, че просто трябва да автоматизира Clickhouse — и всичко ще е наред. Но както скоро стана ясно — на тях им беше нужна съвсем различна екипировка.

Всичко това стана много, много болезнено. А най-разочароващото е, че беше на рождения ми ден.

Петък, вечер. Резервирах маса в любимия винарски бар и поканих приятелите си.

Почти преди да излезем, получаваме задачка да направим алтер, изпълняваме я, всичко е наред. Алтерът премина, Clickhouse потвърди. Вече бяхме решили да отидем в бара, а ни пишат, че данните не достигат. Проверихме — изглежда, всичко е наред. И тръгнахме да празнуваме.

В ресторанта беше шумно за петък. Поръчахме напитки, храна и се разположихме на диваните. През това време моят Slack тихо се запълваше с съобщения. Пишеха нещо за липса на данни. ППомислих си — утрото е по-мъдро от вечерта. Особено днешната.

Към единадесет започнаха да звънят. Това беше ръководителят на компанията… „Навярно реши да ме поздрави“, — много неуверено помислих и вдигнах слушалката.

И чух нещо в духа на: „Вие загубихте нашите данни! Плащам ви, но нищо не работи! Отговаряхте за бекъпите и не направихте нищо! Хайде, оправяйте!“ — само в още по-груб вид.

— Знаеш ли какво, иди по дяволите! Днес е рожденият ми ден, и в момента искам да пия, а не да се занимавам с вашите детски самоделки от лайно и пръчки!

Така не го казах. Вместо това извадих лаптопа и се захванах за работа.

Не, аз буквално избухнах, адски избухнах! Писах в чата остри „аз ви казах“ — защото бекъпът, който не беше бекъп, разбира се, не спаси нищо.

Ние с момчетата измислихме как ръчно да спрем записа и да проверим всичко. Наистина се уверихме, че част от данните не се записват.

Спираме записването и броим броя на събитията, които са се натрупали за деня. Добавихме малко данни, от които само една трета не бяха записани. Три шардa с 2 реплики. Поставяш 100,000 реда — 33,000 не се записват.

Ставаше пълна бъркотия. Всички си се изпращаха на к... по ред: първи там отиде Льоня, вследствие на него последвах аз и основателят на компанията. Единствено новият CTO се опитваше да извади нашите съвещания с крясъци и кореспонденция в посока на търсене на решение на проблема.

Какво всъщност се случваше — никой не разбираше.

С приятелите просто онемяхме, когато разбрахме, че една трета от всички данни не просто не се записваше — тя изчезваше! Оказа се, че порядъкът в компанията е такъв: след вставка данните се изтриваха завинаги, събитията губеха пачки. Представих си как Сергей преобразува всичко това в недоучени рубли.

Моят рожден ден също отиваше на боклука. Седяхме в бара и генерирахме идеи, опитвайки се да разгадем подхвърления ребус. Причината за падането на Clickhouse не беше очевидна. Може би беше мрежата, може би настройките на Linux. Всичко, каквото и да е, хипотези звучаха достатъчно.

Не бях давал клетва на разработчика, но да изоставям момчетата на другия край на линията беше нечестно — дори да ни виниха за всичко. Бях на 99% сигурен, че проблемът не е в нашите решения, не на наша страна. 1% шанс, че сме сбъркали ние, ме гореше с тревога. Но на чиято и страна да беше бедата — трябваше да бъде оправена. Да оставяш клиентите, каквито и да са, с такава ужасна теч на данни — това е прекалено жестоко.

До три сутринта работехме на масата в ресторанта. Добавявахме събития, insert select — и започнахме да запълваме пропуските. Когато си изгубил данни, правиш така — вземаш средните данни от предишните дни и ги вставяш в изгубените.

След три сутринта с приятеля си отидохме у дома, поръчахме бира от магазина. Аз седях с лаптопа и проблемите на Clickhouse, а приятелят ми разказваше нещо. В крайна сметка, след час, той се обиди, че работя, а не пия бира с него, и си тръгна. Класика — побъди приятел на девопса.

Към 6 сутринта пресъздадох таблицата отново и данните започнаха да се заливат. Всичко заработи без загуби.

След това стана трудно. Всички се обвиняваха един друг в загубата на данни. Ако се появеше нов бъг, съм сигурен, че щеше да започне перестрелка.

В тези ситуации най-накрая започнахме да разбираме — в компанията мислеха, че ние сме тези, които работят с данни и следят за структурата на таблиците. Те сбъркаха администраторите с DB администраторите. И започнаха да питат за нас, далеч не както за администратори.

Основната им жалба — как така, вие отговаряхте за бекъпите и не ги направихте както трябва, провалихте данните. И всичко това с много нецензурни думи.

Исках справедливост. Намерих кореспонденцията и приложих всички скрийншоти, където Леонид с всичка сила настоява да направим такъв бекъп, какъвто беше направен. Нехиновият CTO застана на наша страна след телефонния ми разговор. След това призна вината си и Лени.

Главата на компанията, напротив, не искаше да обвинява своите. Скрийншотовете и думите не подействаха на него. Той смяташе, че след като ние сме експертите тук, трябваше да убедим всички и да настояваме за решението си. Явно, нашата задача беше да научим Лени и в същото време, като избегнем него, назначен за ръководител на проекта, да достигнем до главния и да му изразим всичките ни съмнения относно концепцията за бекъпи.

Чатът пронизваше от омраза, скрита и открита агресия. Не знаех какво да направя. Всичко беше в задънена улица. И тогава ми предложиха най-простия начин — да пиша на ръководителя и да се уговоря за среща. Васе, хората в живота не са толкова нахални, колкото в чата. На съобщението ми началникът отговори: идвай, няма проблем.

Това беше най-трудната среща в кариерата ми. Моят съюзник от клиента — CTO — не можа да намери време. По пътя отивах към началника и Льоня.

Непрекъснато премислях възможния ни диалог. Успях да пристигна много рано, половин час преди срещата. Започна да ме тресе, изкурих 10 цигари. Осъзнавах, всичко — аз, по дяволите, съм сам. Няма да успея да ги убедя. И влязох в кабинета.

Докато се издигах, така чирках запалката, че я счупих.

В крайна сметка, Льоня не присъства на срещата. И ние отлично обсъдихме всичко с главния! Сергей ми разказа за болката си. Той не искаше да "автоматизира ClickHouse" — той искаше, "запитванията да работят".

Видях не козел, а добър човек, загрижен за бизнеса си, потънал в работа 24/7. Чатът често рисува злодеи, мошенници и глупаци. Но в живота това са същите хора, като теб.

На Сергей не му бяха нужни два девопса на наем. Проблемът, който им се оказа, беше много по-голям.

Казах, че мога да реша проблемите му — просто това е съвсем друга работа и имам познат дибиейщик за нея. А ако бяхме знаели отначало, че това е нещо за тях, щяхме да избегнем много. Късно, но разбрахме, че проблемът е в ужасната работа с данни, а не в инфраструктурата.

Стиснахме си ръцете, заплатата ни се увеличи два и половина пъти, но на условие — вземам абсолютно всичките им проблеми с данните и Кликхаус при мен. В асансьора се свързах с въпросния дибиейщик Макс и го включих в работата. Трябваше да преработим целия кластер.

В проекта имаше толкова много боклук. Започвайки от споменатия "бекъп". Оказа се, че този "бекъп" кластер не е изолиран. На него тестваха всичко, понякога дори пускаха в продукция.

Собствените разработчици създадоха свой кастомизиран "вставлятор" за данни. Работеше така: пакетираше файлове, задействаше скрипт и влели данните в таблица. Но основният проблем беше, че огромно количество данни се приемаха за едно просто запитване. Запитването съединяваше данни по секунда. Всичко заради едно число — сумата за деня.

Собствените разработчици неправилно използваха инструмента за аналитика. Влизаха в графаната, пишеха своя царски запит. Извличаше данни за 2 седмици. Получаваше се красив график. Но всъщност запитването за данни тръгваше на всеки 10 секунди. Всичко това се натрупваше в опашка, защото Кликхаус просто не можеше да обработва. Там се криеше основната причина. В графаната нищо не работеше, запитванията стояха в опашка, постоянно бяха стари неактуални данни.

Пренастроихме клъстера, преработихме вставката. Собствените разработчици пренаписаха своя "вставлятор" и той започна да шардиризира данните коректно.

Макс проведе цялостен одит на инфраструктурата. Направи план за преход към полноценен бекенд. Но това не задоволи компанията. Те очакваха от Макс магическа тайна, която да позволи работа по старинката, но ефективно. Проектът все още бе под контрола на Льоня, който нищо не бе научил. От всичко предложено той отново избра своята алтернатива. Както винаги, това беше най-отборното… смело решение. Льоня смяташе, че компанията му поема особена пътека. Тясна и пълна с айсберги.

Всъщност, на това се разделихме — направихме, каквото можахме.

С натрупан опит, вдъхновени от тази история, ние започнахме бизнеса си и формулирахме няколко принципа за себе си. Сега никога не започваме работа по същия начин, както тогава.

Дебелистът Макс след този проект се присъедини към нас и до днес работим чудесно заедно. Кейсът с ClickHouse ни научи как да проведем изцяло основен одит на инфраструктурата преди началото на работа. Ние се запознаваме с начина, по който всичко работи, и едва след това приемаме задачите. Ако преди сме бързали да обслужваме инфраструктурата, сега първо правим еднократен проект, който помага да разберем как да я приведем в работно състояние.

И да, избягваме проекти с лоша инфраструктура. Дори и за много пари, дори и по приятелство. Планирането на болезнени проекти е невыгодно. Осъзнаването на това ни помогна да израстваме. Или еднократен проект за приведене на инфраструктурата в ред и след това договор за поддръжка, или просто преминаваме покрай нея. Подминаваме поредния айсберг.

P.S. Така че, ако имате въпроси относно вашата инфраструктура, смело оставяйте заявка.

Имаме 2 безплатни одита на месец, може би именно вашият проект ще бъде сред тях.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster