Поки всі святкували мій день народження, я до ранку лагодив кластер, а розробники валили на мене свої помилки.

Поки всі святкували мій день народження, я до ранку лагодив кластер, а розробники валили на мене свої помилки.

Ось історія, яка назавжди перевернула мій підхід до роботи девопсу. Ще в доковидні часи, задовго-задовго до них, коли ми з хлопцями тільки замислювали свою справу і фрілансили на випадкових замовленнях, мені в воза впала одна пропозиція.

Компанія, що написала, займалася аналітикою даних. Щодня вона опрацьовувала тисячі запитів. До нас вони прийшли зі словами: хлопців, у нас є 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

Додати коментар або відгук