Добавить в корзинуПозвонить
Найти в Дзене

Сказка о том, как сделать так, чтобы всё заработало

Дорогой дружок - читатель!
Отвлекись от кода,
Почитай пару минут,
Поешь бутерброда.
Сделай, милый, перерыв,
Отдохни немного,
Сказку лайком одари,
Репостни всем из бэклога.
Если с кодом ты на “вы”,
Да про СИ не слышал,
Сказку срочно ты прочти,
Узнай, чем программисты дышат. В тридевятом царстве, в тридесятом государстве, где бинарный код лился рекой, а серверы гудели, словно пчелиные ульи, жили-были программисты. Жили дружно, код писали ладно, да баги находили быстро. Каждое утро, как солнышко встанет, собирались на дейлик-совещание – кто с кружкой кофе, кто с хрустящим печеньем. Обсуждали задачи, делились идеями, и всё у них ладилось, да спорилось. Система работала как часы, дедлайны – почти не кусались. И вот, однажды, в самый разгар спринта, пришла беда, откуда не ждали. В темных глубинах кода, в забытом уголке базы данных появился дракон-захватчик! Выглядел дракон устрашающе: глаза жадные горящие, лапы загребущие, длинный и вьющийся, голубая неоновая чешуя искрилась в сети. Он выро
Оглавление


Дорогой дружок - читатель!
Отвлекись от кода,
Почитай пару минут,
Поешь бутерброда.
Сделай, милый, перерыв,
Отдохни немного,
Сказку лайком одари,
Репостни всем из бэклога.
Если с кодом ты на “вы”,
Да про СИ не слышал,
Сказку срочно ты прочти,
Узнай, чем программисты дышат.

Создать карусель
Создать карусель

В тридевятом царстве, в тридесятом государстве, где бинарный код лился рекой, а серверы гудели, словно пчелиные ульи, жили-были программисты. Жили дружно, код писали ладно, да баги находили быстро. Каждое утро, как солнышко встанет, собирались на дейлик-совещание – кто с кружкой кофе, кто с хрустящим печеньем. Обсуждали задачи, делились идеями, и всё у них ладилось, да спорилось. Система работала как часы, дедлайны – почти не кусались.

И вот, однажды, в самый разгар спринта, пришла беда, откуда не ждали. В темных глубинах кода, в забытом уголке базы данных появился дракон-захватчик!

Выглядел дракон устрашающе: глаза жадные горящие, лапы загребущие, длинный и вьющийся, голубая неоновая чешуя искрилась в сети. Он вырос и направился из темных глубин в базу данных, да давай захватывать документы в мощные лапы, не давая другим процессам до них добраться. С одной таблицей играет, вторую блокирует, на третью посматривает.

И тут началось! Во всех чатах, во всех мессенджерах, на каждом телефонном звонке пользователи кричат: "Конфликт блокировок!", "Конфликт блокировок!", "Не могу оплатить!", "Не могу заказать!", "Не могу провести!". Процессы затормозились, руководители стали звать на помощь программистов.

😱 Дракон БЛОКИРОВОК бесчинствует! Пользователи в ярости! Кто спасет систему?

Программисты чесали затылки, не зная, что делать. Главный программист Архип, дядька суровый, с бородой, как у волшебника, собрал совет.

— Что делать будем, братья-программисты? — пробасил он, — Дракон Блокировок бесчинствует! База данных стонет! Нужен план!"

Программисты зашумели, начали предлагать очевидные решения:

— Нужно откатить последние релизы! Наверняка, кто-то криво код написал! — сказал Евдоким, тестировщик с острым взглядом.

— Нужно проанализировать логи, оптимизировать запросы! — предложила Пакетова, аналитик баз данных.

— А может, просто перезагрузим сервер? Вдруг поможет? — робко сказал стажер Васген.

— Решение должно быть мудрым и взвешенным — сказал Архип, почесывая бороду, — нужно не временный шлёп-вариант, а безапелляционная победа над злом!"

И тут, из толпы программистов вышел маленький, но умный программист Паша Муровцев.

— Давайте сходим к деду Обработкину — он много знает, кажется, он решал такую проблему — сказал Муровцев, — Говорят, он знает тайные пути кода и шепотом разговаривает с самим ядром системы!

Архип задумался, борода его шевелилась.

— Дедушка Обработкин... — протянул Архип. — Давно о нём не слыхали. Но выбора у нас нет. Собирайтесь, братья, идем к старцу!

Долго ли, коротко ли шли программисты через лабиринты серверных стоек, мимо жужжащих роутеров и мерцающих кластеров хранения. Наконец, пришли они к старенькому, но надежному серверному шкафу, покрытому пылью времен и наклейками с конференций прошлых лет. Возле шкафа, на древнем офисном кресле со сломанным колесом, сидел сам дед Обработкин, одетый в вязаный засаленный свитер с оленями, а на носу – очки с толстенными линзами, в которых зелеными бликами отражались бесконечные строки селекты.

📜 Перезагрузка не поможет: Программисты взывают к древней мудрости

— Дедушка Обработкин, беда приключилась! – громко начал Архип, —Что-то провоцирует конфликт Блокировок в базе! Таблицы недоступны, процессы тормозят, пользователи в не могут ни создать документ, ни сохранить! Что делать? Помоги, старец мудрокодивший!

Дед Обработкин медленно поднял голову. Взгляд скользнул по каждому программисту, пальцы дернулись, словно набирают "SELECT * FROM". Он неспешно снял очки, протер их краем свитера и прищурился и вздохнул. – Мммм... Дракон... – протянул он голосом, похожим на шуршание жесткого диска. – Знаю я этого голубчика, на одном обучении в 2010 нам рассказывали... Говорят, что дракон может несколько часов спать на таблице и она недоступна ни для кого. Сам дракон неоновый, сливается с данными. Просто так его не изловить. Тут творчество надо. Архип налил себе кофе в грязную кружку и отхлебнул. – Слушайте же, птенцы кодерные! Дракон сей питается хаосом. Где запросы мечутся без порядка, где транзакции хватают данные кучей и долго не выпускают — там дракон и вырастает. Вы ему стол накрыли своими запросами-неудачными!

Программисты потупились. Пакетова вспомнила несколько тяжелых отчетов, Архип – пару мест, где UPDATE мог бы быть поаккуратнее, а Васген просто покраснел. – Что же делать, дедушка? – спросил тихо Паша. – А делать надо вот что, – сказал старец, и глаза его загорелись мудрым светом, как два светодиода – Не мечем единым, дракона побеждают. Пусть ваши транзакции станут катапультами меткими, а не жирными бревнами! Правят только то, что нужно, и сразу отпускают! Никаких долгих раздумий внутри транзакции! BEGIN TRAN –> сделал дело -> COMMIT TRAN -> отпускай смело! — Обработкин сделал глоток кофе и продолжил — очередь строя Мать: Запретить всем лезть в одну таблицу разом! Вводите очередь! Пусть запросы стоят в ряд, и ждут обработку. Асинхронность вам в помощь! Дальше больше уровень Изоляции — Щит Невидимый: Загляните в свои настройки! Может, ваш READ COMMITTED слишком слаб? Или SERIALIZABLE слишком тяжел и сам провоцирует схватки? — брови его нахмурились и старик посмотрел на каждого и погрозил пальцем — Подберите правильный уровень изоляции для каждой задачи. И добьет дракона "Таймаут": Не давайте запросам висеть вечно! Поставьте разумный LOCK_TIMEOUT. Если запрос не может получить блокировку быстро – пусть отступит, сообщит об ошибке, а не ждет, пока дракон наиграется.

Архип слушал, широко раскрыв глаза. Пакетова быстро записывала в блокнот. Евдоким кивал, прикидывая тесты. Васген что-то бормотал и гуглил не знакомые слова. — Вот и все премудрости, — закончил дед Обработкин и допил кофе. — Идите с миром. И помните: лучшая война с драконом Конфликта — это война, которой не было. Пишите аккуратный код, проектируйте логически схему, учитесь и дракон обойдет ваши владения стороной.

Программисты поклонились до пола и поспешили назад, в свое царство-государство.

🔥 Программисты VS Дракон Блокировок: Битва за данные началась!

Воодушевленные советами мудреца, они взялись за дело:

Архип переписал самые жадные транзакции, сделав короткими и целенаправленными. Голубой дракон Блокировок сразу почувствовал что с ним вышли на бой. Это лишь позабавило его — мест для игр оставалось предостаточно.

Пакетова проанализировала логи, нашла самые "горячие" таблицы и ввела очередь запросов на изменение. Дракону стало сложнее находить места для игр. Он метался от запроса к запросу, и играл с большим остервенением. Таблицы блокировались на несколько часов.

Муровцев настроил уровни изоляции для критичных операций, да так, что сам Обработкин дивился изобретательности Паши.

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

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

И случилось чудо! Процессы потекли плавно. Пользователи обрели спокойствие. Однажды утром программисты обнаружили легкий неоновый след в логах и тишину...

А Васген... Васген написал прекрасный скрипт мониторинга долгих блокировок, который сразу же оповещал команду, если начинало пахнуть подозрительно.

С тех пор в том тридевятом царстве, в тридесятом государстве, программисты не только помнили заветы деда Обработкина, но и повесили над своей скрам-доской. А дракон Конфликт Блокировок, хоть и не исчез насовсем, но стал редким и неопасным гостем, которого быстро прогоняли острым кодом и быстрыми транзакциями. И кодили программисты с этой поры, если не совсем без багов, то уж точно без таких страшных драконов!

Больше интересного на канале в Подписаться telegramПодписаться youtube