![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
И ещё не исправляю ошибок, которые мне накидали, тоже достойно сеппуку.
Меня просто услали
Вот, исправляюсь. Пожалуй, самая техническая глава во всём тексте, но я старался всё объяснять.
Глава 5.
– Ну что, ты победила свою статистику?
Они снова сумели выкроить обед вдвоём, и в кои-то веки на кухне больше никого не было.
– Почти. Я никак не могу закончить, постоянно что-то случается. Эти проверки перед выдачей заказчику сводят меня с ума. И все достаются мне. Видимо, как самой младшей. Дедовщина какая-то, честное слово.
– А что Краснов говорит? — скривив губы словно от раскушенной в борще гвоздики, спросил Кифа.
– Краснов… Ему последнее время не до того. Он всё свалил на Алексея.
– А он что?
– А что он? — Ольга вздохнула. — У него свои задачи есть. В дизайне моём он не разбирается и разбираться не хочет, так мне кажется.
Её голос приобрёл разочарованное, даже несколько отчаянное выражение.
– Я толкусь в этом тупике уже месяц, Кифа, и никто мне не скажет, как поправить дело. Только задачами тестирования грузят. Устала я так работать.
После этого разговора Кифа про себя решил выкачать репозиторий Олиного модуля и разобраться в нём. Как бы Ольга не отговаривала его, но одна голова хорошо, а две — кластер. Однако его благим побуждениям не суждено было обрести плоть. Едва он вернулся на своё место, как его отыскал его собственный мастер.
– Кифа, проблемы. Серёги нет, у заказчика critical. Я подключусь, но сто лет кода не видел.
Мастер выглядел обеспокоенным. Может, кто другой и не заметил бы ничего, но Кифа сам был не из клоунов, поэтому чувствовал малейшие изменения в мимике и голосе. Сейчас чёрные брови мастера были чуть ближе друг к другу, чем обычно, смуглый лоб едва заметно делила пополам вертикальная складка. Впрочем, он был по обыкновению лаконичен до телеграфичности. Кифа представил себе, как о подобной проблеме сообщал бы Краснов и содрогнулся: “Иакинф, с прискорбием сообщаю вам весьма волнительное известие касательно вашего модуля. В отсутствие старшего товарища вашего, Сергея, наши заказчики столкнулись с чрезвычайными затруднениями. Как вам должно быть известно, Сергей изволит отдыхать и отсутствует в городе…” — Кифа оборвал свою мысль, чтобы не зевнуть в лицо своему мастеру.
– Я понял, Юджин, — отозвался Кифа. Мастера звали Евгением, но с лёгкой руки кого-то из менеджеров к нему привязалось английское произношение его имени, да настолько сильно, что периодически попадало в официальную переписку.
– ОК. Через полчаса митинг — customer support, мы и от них кто-то. Посмотри пока, что там. Я тебе всё скинул.
Кифа открыл письмо от Юджина. Проблемы были в самом деле серьёзные. Где-то в недрах сервера что-то случалось, и процесс, призванный реплицировать данные пользователей между серверами в различных датацентрах по всему миру — облачная производительность, так её! — выходил из-под контроля, потребляя всё больше и больше памяти и ресурсов процессора. То есть, не так. Кифа припомнил, что этих процессов должно быть несколько, для параллельной обработки данных. И проблема заключалась в том, что они не “умирали” и не заканчивали свою работу, а система порождала всё новые и новые экземпляры этих обработчиков. Получалось что-то вроде злокачественной опухоли. Вот только почему?..
“Митинг” — телефонная конференция — был быстрым и по теме, что, с одной стороны, было логично, а с другой — непривычно. Представитель заказчика — какой-то индус с труднопроизносимым именем — смешно говорил громкие и страшные слова. Выходило, что IT-инженеры заказчика в данный момент несут круглосуточную вахту, “отстреливая” вредоносные процессы. Это, однако, означает, что у сервиса падает производительность, увеличивая время обработки каждого запроса, сокращая количество обрабатываемых в минуту запросов — эта цепочка упиралась в конечных бенефициаров — заказчиков рекламной компании, выступающей заказчиками конторы Кифы — и “fifty gran a day”, цитируя индуса. Кифа всё понимал, но сформулировать что-то внятное так и не смог. Впрочем, Юджин выручил, заверив всех присутствующих in no uncertain terms, что, мол, “уи а воркинг он ит. Уи икспект фёрст ризалтс, — здесь он взглянул через кабинет на Кифу и продолжил чуть менее решительно — си-оу-би тудэй”. Кифа кивнул. COB, Close Of Business — к концу дня ему нужно что-то придумать. Это нормально. Никто не ждёт от него окончательного решения проблемы, нужно просто найти причину, залатать наскоро дырку и сделать прогнозы.
Люди привыкли видеть проявления характера исключительно в физических взаимодействиях. Целеустремлённым и героическим может быть боксёр, футболист, фигурист, наконец. Словосочетание “несгибаемый программист” или “сильный духом инженер” звучат почти что оксюмороном. А всё почему? Потому что физическое взаимодействие отлично видно всем желающим, тогда как виртуозное скольжение чужого разума по паутинкам логических связей в чужом черепе никому не видно, а домашних соревнований в этом виде спорта у большинства людей никогда не происходит. Лишь иногда, когда поле действия разума предельно формализуется и низводится до очевидного — например, до совершенно бесполезных олимпиад по программированию — обыватели нисходят до хоть какого-то внимания к чистой деятельности разума.
В реальности же каждая задача возникает всего лишь один раз — уже решённую задачу нет смысла решать, и процесс её решения непредсказуем — и потому невместим в рамки какого бы то ни было формального соревнования, ни с чем не сравним, и для мастеров дела столь же полон наслаждения, как хороший прокат фигуриста.
– Идеи? — спросил мастер, снимая наушники с микрофоном.
Кифа пожал плечами:
– Всё, что угодно. У нас такое не воспроизводилось, разумеется, а то бы мы из тестирования не вышли.
– Почему нет? – продолжил он “сократизировать” проблему. Не “почему не вышли бы?” — мастер не был идиотом, а “почему не воспроизводилось?”, “что в условиях отличалось?”. Логический переход был не вполне очевиден, но Кифа привык к стилю своего мастера и такие сальто выполнял с лёгкостью.
Кифа задумался. Это снаружи процесс выглядит как остановка: тело застывает в одной позе, глаза неподвижно смотрят в одну точку. Внутри же условные конструкции возникают и сменяют друг друга, как текст на механическом табло вокзала: перебирая по цепочке каждый подвижный аргумент, выискивая слабости в каждом построении, быстро щёлкая карточками. Железо? Бред, pre-production проводился на аналогичном железе, проблем не возникло. Забыли кейс? Не обработали какой-то случай? Вряд ли, тестирование было хорошим. Что отличается? Синергия с другой нагрузкой? Блокировка на уровне базы? Блокировка на уровне базы, примем как версию. Но тогда не было бы постоянно нарождающихся процессов, единственный процесс ждал бы… Ждал бы. Значит, не ждёт? Что ещё? Uptime. Могла накопиться ошибка: утечка памяти, например. Непохоже, сервер бы свалился с недостатком памяти. Много процессов. Много. Процессов. Данные. Большие данные? Функциональное тестирование проводилось на небольшом массиве данных — чтобы можно было вручную всё проверить, отсмотреть глазами. Объёмы стресс-тестирования…
– Юджин, а протокол стресс-тестирования где?
Юджин коротко кивнул и, отвернувшись, застучал по клавиатуре. Кифа откинулся в своём кресле. Представил себе ещё раз процесс. Планировщик делит данные на секции и порождает для каждой сообщение по числу активных потоков в пуле. Каждый поток пула берёт сообщение, и… К письму были приложены логи происходящего на сервере: отладочный вывод в скрытые от пользователей файлы, этакие чёрные ящики серверных самолётов. И они были совершенно обычными.
Кифа зажал кнопку PgDown. Мимо понеслись строчки, и он едва успевал схватить глазами верхнюю, как страница уже менялась. Рисунок текста был один и тот же: нормальный. Со временем учишься распознавать информацию на лету, отличать нормальные логи от битых по рисунку размытых строчек, взлетающих вверх по экрану.
Нет результата. Ctrl+End. PgUp, PgUp, PgUp… Что это? Таймаут. Обработка сообщения отваливается по таймауту: кончилось время работы репликации. На экране всплыло сообщение — мастер прислал протоколы стресс-тестов. И они говорят, что объёмы стресс-тестирования на порядок меньше нагрузки, которую дают сервера заказчика. А это значит… Непонятный шум сзади отвлек Кифу, и он оглянулся.
В дверях комнаты стояла женщина средних лет и что-то взволнованно говорила мастеру. Невысокого роста, она не была особенно стройна, и хотя её внешний вид не позволял сомневаться в половой принадлежности, её фигуре очень недоставало хоть какой-нибудь выраженности. Мелкие кудряшки русых волос, едва закрывающих уши, чуть подкрашенные глаза — и никакой косметики больше, мешковатые джинсы — но длинная голубая рубашка навыпуск: она была когда-то женщиной, но потом ей это надоело, и она стала почти бесполым существом. Почти, но не вполне. Небольшие серые глаза беспокойно бегали, словно ища на стенах комнаты не то “мене, текел, фарес”, не то ответ на свои проблемы — той же гарнитурой.
– …Серёги-то нет, я вообще не знаю, что делать, Женя! — Голос её не был истеричным, но лишь едва. — Они там все как с ума посходили, звонят каждый час. Дурдом настоящий! У вас что-нибудь есть? Что мне вообще им говорить?
Мастер, видимо, утратив всякую надежду заполучить слово, обратился к молчащему Кифе прямо поверх её тирады.
– Мария, из customer support-а, — проронил он и тут же замолк. Впрочем, Кифе этого было достаточно. Марии — тоже.
Она радостно накинулась на него:
– А ты Иакинф, да? Ну что, какие прогнозы? Когда всё заработает? Что мы делаем сейчас?
Кифа подумал ещё раз хорошенько. Основная проблема заключалась даже не в репликации — Торвальдс с ней, с репликацией, упадёт производительность немного, не проблема. Гораздо важнее прекратить разрушительные последствия плодящихся потоков.
– Я думаю, прежде всего нужно отключить этот функционал до выяснения обстоятельств. Технически это несложно.
– А инструкция есть? — быстро спросила Мария.
– Я напишу.
– Пиши-пиши. А когда оно заработает? Заказчики очень хотели этот функционал, они будут недовольны, что мы его вырубили.
– Сегодня к вечеру я дам предварительный анализ и оценки. Это тебя устроит?
Она пожевала тонкими губами.
– Лучше через два часа хотя бы что-то, потом уточнения.
– ОК.
– Окей! — чуть капризно передразнила она. — Никакой это не “окей”. У вас всё “окей”, а народ там деньги теряет, и по этому случаю выедает нам весь мозг!
Кифа лишь повёл открытой ладонью в воздухе. “Что с меня ещё взять?”
– Ладно, — снизошла она наконец, — смотри, через два часа!
И направилась к выходу. Юджин вышел следом — видимо, восполнить острый недостаток чая в организме — и Кифа услышал, как Мария ворчливо выговаривает ему: “Мороженый он какой-то. У нас там все жареными тараканами бегают, ему хоть бы хны. Он справится? А то ему как будто всё равно.” Юджин что-то ответил, но так как его тембр голоса был намного ниже, а фразы — гораздо короче, Кифа разобрал только общий успокаивающий тон. Он усмехнулся сам себе. Призрачно, разумеется.
Итогом этого дня стало то, что он не сумел даже взглянуть, что там творится у Ольги. До самого позднего вечера он жил в каком-то адском угаре, между звонками ему ранее совершенно незнакомых людей и звонками, которые он совершал самостоятельно — незнакомым людям, выполняющим ранее совершенно неизвестные функции. Времени на решение проблемы он потратил ровно столько же, сколько на объяснение, какой именно анализ проведён, какие именно результаты этого анализа (сообщения обрабатывались в двух вложенных транзакциях, как в двух вложенных парах скобок — (()) — и правая внутренняя по времени вылетала за границы, очерченные внешними, но пока было неизвестно, почему именно), что делается для окончательного решения проблемы (заказан стенд-копия сервера, будет проводиться дополнительное стресс-тестирование, на нормальном объёме данных) и когда, наконец, эта проблема будет решена — через неделю (кто бы знал, но это самый дальний срок, за который всех коллективно не поджарят).
Напоминало это всё электрический стул — с той однако, разницей, что в половине девятого поток желающих выкрутить реостат на короткий конец иссяк, и Кифа, выдохнув, заблокировал экран и откинулся на спинку кресла, собираясь с силами встать на затёкшие от неподвижности ноги и заставить последние нести его домой.
Он встал и обнаружил за спиной отсутствие Ольги. Моргнув и порывшись за эту долю секунды в памяти, он вспомнил, что она ушла час назад — странно! — попрощавшись и извинившись, что не сможет составить ему сегодня компанию. Вряд ли его ответ был особенно членораздельным — у него звонил IP-телефон, а в корпоративный чат к нему ломились по меньшей мере трое.
Тем не менее, главное, что он чувствовал после своего долгого дня — удовлетворение. Приятно, чёрт возьми, осознавать, что твоя работа кому-то нужна, да ещё так сильно!