Многоядерные серверы или зачем напиваются алкоголики. С точки зрения IT специалиста

Данная статья является продолжением цикла моих статей объясняющего природу действия человеческого мозга на аналогии с работой компьютерных систем. Весь цикл можно почитать здесь. Наиболее важные для понимания логики первые две статьи, “Почему бабы дуры или о природе бесов” и “Компьютеры, бесы и революции, религиозная проблема с точки зрения IT специалиста“. 

Целью данной статьи является понимание причин побуждающих людей употреблять алкоголь в объемах нарушающих их социальные функции. Зачем люди пьют? Варианты “потому что быдло пьяное” логичны, но они не описывают природу явления. Если явление массовое, если оно широко распространено, стало быть, есть причины. Если оно напрямую влияет на мозг, стало быть, есть какой-то рациональный смысл с точки зрения компьютерных систем. Если у человека есть какая-то уязвимость, надо понимать ее природу- это поможет решить проблему алкоголизма, решить проблему на вполне рациональном, техническом уровне. 

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

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

И так, многоядерные серверы. Этот раздел может быть неинтересен и непонятен гуманитариям и профессиональным медикам. Я постараюсь изложить максимально просто, но понять надо, без этого никак. 

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

Я работаю администратором баз данных. На нынешнюю работу меня взял Александр Михайлович К с совершенно конкретной задачей- между администраторами баз данных и разработчиками программного обеспечения часто возникали взаимные претензии. Администраторы баз данных со своей стороны видят работающий сервер- все хорошо, есть нагрузка. Программисты и эксплуатанты видят- программа работает плохо. Нужно было найти способ понять, как именно в текущий момент работает MS SQL Server. Понять каких именно ресурсов ему не хватает, где “бутылочное горлышко”. Научиться выделять технические проблемы сервера и проблемы программного обеспечения. 
Работает сервер- мы не знаем что там внутри. По косвенным признакам можно судить о проблемах, об этом же говорят и конечные пользователя. Чего не хватает серверу, что с ним происходит? 

Пользователи звонят в техническую поддержку, жалуются руководству. Руководители зачастую люди умные и культурные, но и они теребят как могут- звонят, спрашивают, заходят в рабочее помещение, связываются по внутренним электронным каналам связи.

В этот момент остро становится вопрос квалификации администратора баз данных. Самый простой способ- перезапустить сервис, рестарт MS SQL Server. MS SQL Server штука умная, так просто ее не завалить. Но каждый администратор баз данных знает “о четырех запросах способных завалить сервер”. 

Если квалификация администратора баз данных ограничена- он останавливает и запускает сервис MS SQL Server. Иногда перезагружает физический сервер или виртуальную машину целиком, чтобы и операционная система перезагрузилась. 

Процесс это долгий, зачастую болезненный. Для мощных серверов он занимает полчаса и более. При этом пользователи не имеют возможности работать с сервером, прямое негативное влияние на бизнес-процесс. Когда пользователями являются сотни людей, десятки единиц техники- это простой, это потери оплаченного рабочего времени, это потери для бизнеса, очень серьезные деньги. 

Администраторы баз данных с высокой квалификацией перезагружают сервер в самых крайних случаях. В умелых руках сервер работает месяцами а то и годами, перегрузка выполняется в связи с проведением технических работ (новые версии программного обеспечение, переход на новое оборудование). Такие изменения носят плановый характер, заранее согласуются с бизнесом и не приводят к каким-либо финансовым потерям. 

До алкоголиков еще не дошли но уже скоро 🙂 Опытный администратор баз данных использует средства мониторинга, он видит проблемы заранее, он понимает причину проблем и может эту причину устранить в кратчайшее время. Иногда достаточно остановить один ресурсоемкий процесс чтобы восстановить нормальную работу. У хорошего администратора баз данных ни пользователи ни начальство о проблемах не догадываются, если они и возникают то устраняются в течение нескольких минут. Здесь можно рекомендовать мой материал “Оптимизация MS SQL Server“.

Мозг человека состоит из нейронов. Они могут быть прямыми аналогами процессоров сервера. Сколько процессоров у сервера?

Последние поколения процессоров имеют совершенно невероятные характеристики. В частности, процессор Intel® Xeon® E7-8894 v4 имеет 24 ядра. В одном корпусе 24 процессора. Таких процессоров в сервер можно поставить до 8 штук, то есть, суммарное число ядер может быть 24х8= 192. С учетом технологии Intel® Hyper-Threading каждое ядро может представляться как 2 ядра, то есть, при включении этой опции сервер видит 384 ядра. Это еще не головной мозг, но это уже очень большая структура, которой сложно управлять. Ядра и память собраны в НОДЫ, группы ядер и памяти. Без понимания физического смысла просто запомним это. 

По логике, если у нас есть 192 ядра, две сотни одновременно работающих процессов сервер сможет поддерживать с большим запасом, одно ядро на процесс. При этом на одном ядре может работать несколько процессов одновременно, да и не все процессы постоянно работают- речь может идти о тысячах пользователей вполне комфортно обслуживаемых сервером. 

И да и нет. Если сервер выполняет простые короткие запросы- все так и есть, работает отлично, даже если запросов много. Ситуация резко меняется когда попадается сложный и тяжелый запрос.
Тяжелый запрос должен работать очень продолжительное время, это нелогично. Потому MS SQL Server использует механизм распараллеливания. То есть, получив некую большую задачу он делит ее на части. На сколько частей и с какого уровня сложности происходит деление задается особыми параметрами конфигурации. Если у нас есть сложная работа мы не будем поручать ее одному человеку- мы попросим ее сделать несколько человек, допустим, 8. Один запрос задействовал одно ядро CPU- и вдруг их уже 8. 

MS SQL Server машина умная. Когда оказывается, что разделенный на части запрос достаточно сложный- он пытается делить и его. 8 потоков умножаем еще на 8! И если эти части все еще сложные- он может попытаться поделить и их, при наличии технической возможности.

У нас две сотни физических ядер- уж точно хватит на все! Но один запрос уже сожрал 64 ядра и не факт что он на этом угомонится. А если таких запросов несколько? А почему это у нас сервер глючить начал? Почему пользователи заволновались, почему начальство звонит? При чем, эти кусочки запросов обращаются к одним и тем же данным, накладывают блокировки, мешают друг другу работать, используют иные ресурсы- систему хранения данных, память. Нормальный механизм повешения производительности приводит к обвальному ее падению вплоть до полной неработоспособности сервиса. 

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

И еще очень важный момент- у MS SQL Server ранее помянутые ноды (группы процессоров и памяти) загружены НЕРАВНОМЕРНО. При стабильной работе новые задачи поступают наименее нагруженным нодам. При ненормальном режиме образуется процесс схожий с образованием “локальных котлов” в ядерном реакторе. В аварийном режиме, фактически, сервер рассыпается на ноды, которые воюют каждая сама за себя. Ты думаешь, что у сервера пусть 1 Тб оперативной памяти, две сотни ядер- а у него в 8 раз меньше, на пятаки порубило. Эта ситуация нечастая, но случается. При разумном подходе и достаточной квалификации администратора баз данных пользователи всего этого просто не видят, не успевают увидеть.

 

Ну вот теперь наконец дошли до алкоголиков. В социальном плане когда люди пьют? В моменты сильных душевных потрясений. Случилась трагедия, несправедливость, событие которое сложно осознать- человек пьет. Иногда даже напивается. В мемуарах упоминается, что во вторую мировую войну пилоты после боев не могли заснуть без небольшой дозы алкоголя. ЗАЧЕМ?

Когда у человека случается сильное душевное потрясение- это и есть та самая тяжелая транзакция, сожравшая все ресурсы сервера. Человек думает об этом, его тревожит, он утрачивает контроль над своей вычислительной системой. Почти наверняка мозг рассыпается на ноды точно так же, как сервер- локальные зоны нейронов пытаются обработать поток информации, над этими локальными зонами утрачивается контроль. Система пошла вразнос. 

Что в такой ситуации делает нерадивый администратор? Перегружает сервер! Остановить все процессы! Привести систему в неработоспособное состояние! Это очень ПРОСТОЙ выход. 

Привычка перезагружать сервер вместо выявления и решения проблем пагубна. Перегрузить ПРОСТО, не надо высокой квалификации, не надо сидеть и разбираться. Со временем поводы для перезагрузки сервера у алкоголиков все проще, комар укусил- повод напиться, повод перезагрузить сервер! 

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

И тут проявляется ключевой момент уязвимости человеческого мозга как вычислительной системы- человек испытывает стресс. Как ранее отмечалось в моих прошлых статьях, в состоянии стресса человек становится крайне деятельным, аморальным и глупым. В состоянии стресса человек переходит на максимально ПРОСТЫЕ алгоритмы, у него резко падают вычислительные ресурсы. У мозга есть несколько отделов (мозг рептилии), между ними нарушается взаимодействие.

Вдумайтесь- сложная транзакция (переживания) приводит к дефициту вычислительных ресурсов и ВСЛЕДСТВИЕ человек испытывает стресс, ВСЛЕДСТВИЕ которого вычислительные ресурсы резко снижаются, обвально падают. Техническим аналогом может быть перегрев процессора вследствие которого падает тактовая частота. Чуть сложная транзакция- процессор нагрелся и стал работать совсем медленно. И ранее вычислительная система была неуправляемая, после совсем вышла из-под контроля.

Алкоголь- попытка вернуть систему в управляемое состояние. Беда в том, что порог применения этой порочной практики постоянно снижается. Если ранее эта проблема возникала и помогла перезагрузка сервера- надо опять перезагрузить! Администратора баз данных за такие проделки сначала долго ругают, потом и уволить могут. Здесь же человек сам себе хозяин, навернул стакан- жизнь налаживается.

В такой ситуации крики домочадцев только ухудшают ситуацию. Они усиливают стресс! 

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

Что делать? Понимание проблемы- это половина ее решения. 

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

Уже после публикации статьи решил ее дополнить одним важным моментом- почему помогает, допустим, йога? Аналогия здесь может быть достаточно проста- представим себе построение воинской части на плацу. Солдаты стоят коробочками по ротам или подразделениям, офицеры тихонько сквозь зубы одних вдохновляют, других пугают, командир части произности пламенную речь. Далее следует команда вроде “К торжественному маршу.. по подразделениям.. первое подразделения прямо, остальные напра-во!”. В этот момент командир части глядит орлом, перед ним чеканя шаг проходят подразделения, топот и грохот- а такт задает барабан или даже целый оркестр. Ну как оркестр.. свои же солдаты, кто может хоть как-то в дудку дудеть. 
Так вот, если барабан оглушительно гремит и дудят неистово- все выглядит очень мощно и сокрушительно. Но что если командир части пришел каким-то похмельным, сонным и разбитым? Что если в дудки дудят плохо и вразнобой? Что если за спиной командира части кто-то курит или нагло лыбится глядя на плац опираясь на метлу?
Маршируют уже без былого рвения. Ну, ходят вроде, топают. По привычке стараются ритм удержать, идти в ногу. Но при этом каждая рота уже свой ритм держит. Тут командир отвернулся, закурил. Офицеры особо личный состав тоже не дергают. Солдаты идут вразвалочку. Вроде как службу тянут а вроде как и не напрягаются особо. Если ситуация затягивается- по плацу бродят толпы странных людей в форменной одежде. Кто-то выпал из строя, пошел курить. Кто-то рассказал анекдот, кто-то засмеялся. Это уже не воинская часть а стадо какое-то. Вот это- типичный вариант состояния организации мозга человека склонного к алкоголизму. Выгнать это стадо с плаца и заново построить- вполне логично. Выгнать для него- это напиться водки. 
Так вот, йога- и тут за забором соседняя воинская часть занимается теми же игрищами. Солдатик со всей дури лупит в барабан, дудки дудят неистово. В микрофон веселый матерок задорного командира ЧУЖОЙ части. И в этот момент стадо преображается. Даже помимо своей воли солдаты начинают идти в ногу- но они идут под ЧУЖОЙ барабан. Тут и оркестр слегка очухался, и командир своей части приосанился- они получили тактовый сигнал ИЗВНЕ. С одной стороны, чужой барабан это плохо. С другой- он позволяет привести в порядок свой. Нужно не забывать этого, ходить надо под СВОЙ барабан. 

Самой быстрой рекомендацией может быть быстрая диагностика состояния. Не тогда бороться когда уже в стакан наливаешь- когда ощутил начало психоза, когда в голове началась нездоровая активность. Администратор баз данных видит по счетчикам проблему, выявляет процесс- и удаляет его. KILL номер процесса- и никто серверу работать не мешает. То же самое человек, чувствуешь что начало колбасить, что муж козел/жена дура, что ремонт давно не делали и денег мало- выбросить именно эту мысль из головы. “I’ll think about it tomorrow”- я подумаю об этом завтра. 

Традиционный кадр из американского фильма- психотерапевт с блокнотом и карандашиком, пациент на кушетке говорит о своих горестях- что они делают? Пациент имеет тяжелые проблемы, у него в голове транзакция которую не может обработать сервер. Психотерапевт помогает эту транзакцию либо упростить либо откатить (rollback). Снять ту рабочую нагрузку которая может привести сервер к нарушению работоспособности. 

Помогают ли успокоительные? И да и нет. Да- помогают. Нет- это та же порочная практика перезагрузкой сервера пытаться взять его под контроль, те же химические средства но иного рода. 

Учитесь управлять своим сервером, повышайте квалификацию администратора баз данных!

20200612 Дмитрий Горчилин

 

linkedin.com

facebook.com

Viber

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *