понедельник, 1 апреля 2019 г.

Factorio - пособие для начинающих автоматизаторов

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

Речь идет об одном приложении, а точнее - видеоигре, под названием Factorio. Если описать игру двумя словами - это "симулятор инженера". Factorio сложно отнести к какому-то определенному игровому жанру, в ней присутствуют геймплейные элементы стратегии в реальном времени, survival, экономического симулятора, экшена, помноженного на процесс сборки конструкторов Lego. Если проводить аналогии, то Factorio чем-то похожа на такие игры, как Minecraft, Subnautica, Terraria, но имеет множество своих уникальных черт.

Вы играете за персонажа, который оказался на далекой и крайне враждебной планете. Цель игры - построить ракету, которая доставит спутник на орбиту. Вот только есть одна "небольшая" загвоздка - из подручных инструментов у вас только пистолет для самообороны от агрессивной фауны и кирка для добычи полезных ископаемых (уже на этом этапе игры возникают некоторые параллели с ИТ в малом бизнесе, когда руководство дает шанс проявить себя, поставив задачу "собрать звездолет из камней и палок"). Как и в реальной жизни, взять и построить ракету с нуля вы не можете - не хватит ни ресурсов, ни знаний/опыта. Благо планета богата всевозможными полезными ископаемыми (железной и медной рудой), а также древесиной, камнем, а на более поздних стадиях игры вы сможете добывать нефть и уран.
Начало игры. При первом прохождении постройка космической ракеты может занять более 40 часов.

Поначалу вам предстоит много работать руками - тут камни собрал, там дерево срубил и железной руды накопал. Из камня вы можете построить печь для переплавки руды в железные или медные слитки, которые затем можете использовать, чтобы сделать новую кирку взамен сломанной, или буровую установку, чтобы не вкалывать на шахтах. Собрав трубу и насос, вы сможете качать воду из ближайшего водоема для подачи в котельную, полученный в результате пар вы можете подвести по трубам к электрогенератору для производства электричества. Электричество необходимо для работы разнообразных устройств и конструкций, от тех же электробуровых и электропечей (которые еще предстоит изобрести), до научных станций, которые используются для открытия новых технологий. Одной из первых технологий, которую можно исследовать, является автоматизация, позволяющая вам создавать сборочные цеха - строения, которые можно запрограммировать на создание определенных предметов из имеющихся ресурсов. Однако, нельзя просто так закинуть в сборочный цех тонну железа, меди и пару бочек нефти и на выходе получить танк. Для сбора танка вам потребуется уже готовые компоненты: сталь, шестеренки, двигатели и микросхемы, которые в свою очередь можно собрать в других сборочных цехах из других ресурсов и компонентов. Для доставки ресурсов и компонентов между постройками используются конвейерные ленты и автоматические погрузчики. Соединив сетью конвейеров буровые установки, плавильные печи и сборочные цеха, вы можете полностью автоматизировать процесс добычи ресурсов, доставки и создания компонентов и готовых изделий, избавив себя от необходимости постоянно бегать по разным частям карты и выполнять роль разнорабочего. Напрашивается прямая аналогия с разнообразными Workflow и скриптами, позволяющими упростить жизнь ИТ-администраторов.

Кстати, по поводу враждебной планеты, где-то через час после начала игры (в зависимости от настроек сложности), местные представители агрессивной фауны впервые покажутся и начнут в буквальном смысле жрать вашу базу и вас. Чем не аллюзия на современные угрозы кибер-безопасности? Конечно, вы можете самостоятельно отбить несколько первых атак, используя имеющийся в наличии пистолет, но со временем по мере разрастания вашей базы, атаки станут более частыми, а атакующие вас со всех сторон инопланетяне все более смертоносными. У вас не останется выбора, кроме как выстроить надежный защищенный периметр, отгородившись толстыми стенами с кучей разнообразных автоматических турелей (от обычных пулеметов, до лазерных и огнеметных установок на поздних стадиях игры). Но не думайте, что, построив стены и заминировав все подходы, вы сможете полностью защититься от инопланетной угрозы. Лишь вооружившись дробовиком, гранатами, а лучше - танком, вы сможете на корню выжечь поселения инопланетян в непосредственной близости от базы. Я не нашел прямой аналогии с реальной жизнью, но будет считать это поведение аллегорией на то, как современный бизнес полагается на ИТ, чтобы повысить экономическую эффективность, снизать издержки и риски, и, в конечном счете, победить конкурентов.
Режим карты. Здесь можно увидеть основные производственные линии, а также защитный периметр нашего мега-завода. Красные точки, окружающие базу - это враги.

Кое-как обезопасившись от незваных гостей, вы продолжаете развитие своей базы. И в какой-то момент вы столкнетесь с проблемой оптимизации, о которой в свое время писал Э. Голдратт в книге "Цель": "Увеличение мощностей завода достигается за счет увеличения мощностей исключительно бутылочных горлышек."

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

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

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

Помочь с дизайном вам могут типовые конструктивные блоки (blueprint), которые будучи спроектированными один раз, затем могут тиражироваться для масштабирования и распараллеливания производственной нагрузки. Можно пойти еще дальше и не изобретать "велосипед", а воспользоваться опытом других игроков, взяв их наработки, и реализовать в своей "инфраструктуре". В Интернете, на тематических ресурсах и на каналах Reddit, посвященных игре, можно найти кучу разнообразных шаблонов, нередко с многостраничным обоснованием и математическими расчетами, показывающими эффективность того или иного решения.
За счет стандартизации и использования типовых конструктивных блоков можно, фактически, достигнуть неограниченного параллелизма в производстве. Были бы ресурсы.

Ресурсы в игре не безграничны (по крайней мере при использовании стандартных настроек карты) и практически всегда весьма остро стоит вопрос "планирования бюджета". На что потрать свое время - построить еще пару заводов по сбору продвинутых двигателей, либо побыстрее исследовать вон ту технологию, которая откроет доступ к более быстрым конвейерам и позволит ускорить доставку ресурсов на критичных участках производства, либо заняться укреплением обороны, чтобы не приходилось постоянно чинить погрызенное инопланетянами дорогостоящее оборудование.

Но рано или поздно вы истощите имеющиеся в округе запасы полезных ископаемых и вам придется расширять базу, захватывая все большие территории, буквально метр за метром отбивая землю у инопланетян. Поскольку местность и ресурсы генерируются случайным образом, то может так оказаться, что необходимый вам уран находится в нескольких игровых километрах от вашей основной базы. Что делать? - строить удаленные ЦОД аванпосты. Вот только тянуть конвейерные ленты (читай - LAN и оптику) до аванпоста - это весьма дорогостоящий и трудозатратный проект, который также потребуется включить в защищаемый периметр. Выход - использовать WAN (железную дорогу). Проложив рельсы, и подцепив к поезду несколько составов, вы можете загрузить в них необходимые ресурсы на аванпосту и доставить их к заводам на основной базе. Вообще, строительство железной дороги - это своеобразная игра в игре (этакий аналог Railroad Tycoon), вы должны правильно спроектировать сеть железных дорог, станций, семафоров и переходов, а также запрограммировать движение поездов таким образом, чтобы они не сталкивались друг с другом и максимально быстро осуществляли доставку ресурсов, и не сбивали вас, пока вы перебегаете пути в положенном месте.

Приближаясь к концу технологического дерева, вам станут доступны боты - миниатюрные летающие дроны, которые выполняют за вас работу по ремонту, постройке зданий и доставке ресурсов, достаточно лишь указать им что и где построить, используя те самые шаблоны blueprint. Именно в этот момент вы, фактически, прощаетесь с работой field инженера, переходя на позицию архитектора. Правда ваши миниатюрные сподручные туповаты и "недальновидны", у ботов есть определенный радиус действия, ограниченный сетью зарядных станций. Они самостоятельно выбирают приоритетное для них задание, совершенно игнорируя ваши желания (в реальной жизни инженерам можно хотя бы мотивационный подзатыльник дать).
Боты снуют туда-сюда, выполняя ваши бесконечные поручения.

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

Описанный мной free to play - не единственный режим, доступный в Factorio. Помимо него есть несколько сценариев - специально сгенерированных карт, призванных познакомить игроков с определенной игровой концепцией. Хотите лучше разобраться в механизме работы конвейеров и их ограничениях или прочувствовать на себе всю тяжесть работы в стесненных обстоятельствах с минимальными ресурсами, будучи окруженным толпами врагом - пожалуйста. Кроме того, Factorio поддерживает multiplayer режим, с теоретически, неограниченным количеством игроков. Если вы в одиночку не справились с постройкой базы, то можете попробовать взять на себя роль менеджера проекта, управляющего кучкой самоуверенных инженеров, а в случае чего, свалить на них ответственность за проигрыш. Наконец, для творческих личностей, существует режим sandbox, убирающий survival составляющую игры, и позволяющий построить мега-завод своей мечты.

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

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

Комментариев нет:

Отправить комментарий