Чем занимается разработчик инфраструктуры и как им стать

«Для нас все остальные разработчики Яндекса — пользователи».

Работа над инфраструктурой со стороны кажется невидимой, но она критически важна для любой IT-компании. Разработчики инфраструктуры создают системы, благодаря которым другие разработчики могут писать код и не задумываться о его масштабировании, хранении данных и управлении серверами. Игнат Колесниченко из сервиса распределенных вычислений и хранения данных Яндекса рассказал о том, как разработчики строят IT-инфраструктуру, какие навыки им для этого нужны и чему можно научиться на курсах ШАДа.

Что такое IT-инфраструктура

IT-инфраструктура — это набор различных инструментов компании (например, систем хранения, сред исполнения задач и инструментов сборки кода и деплоя), поверх которых строятся приложения, реализующие бизнес-логику. В небольших фирмах инфраструктурные задачи обычно решаются при помощи облачных служб, например, Google Cloud или Amazon Web Services. При этом компании не нужно покупать серверы в дата-центре: она сразу получает работающие виртуальные машины, а провайдер решает за неё задачи сбора логов (записей о событиях), построения метрик и так далее.

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

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

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

Основные требования к инфраструктуре — это масштабируемость, бесперебойная работа и надёжность хранения и обработки данных. Для того, чтобы поддерживать инфраструктуру, разработчикам нужно подходить к работе с точки зрения компьютерных наук: доказывать корректность алгоритмов и исследовать, как система будет вести себя в «крайних» случаях.

Пример создания инфраструктуры

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

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

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

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

Чем занимаются разработчики инфраструктуры

Разработчики инфраструктуры не только пишут код, но и взаимодействуют с другими разработчиками.

Для нас все остальные разработчики Яндекса — пользователи.

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

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

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

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

При создании инфраструктуры нужно не просто рассуждать в терминах кода (функций и классов), нужно придумывать математические абстракции.

Разработчикам инфраструктуры не всегда приходится придумывать что-то новое: иногда полезно не изобретать велосипед, а изучить, что про вашу задачу думает теоретическая наука и как её решали инженеры в компаниях вроде Google и Amazon. У Google опубликовано множество статей, которые описывают их общие архитектурные решения.

Также важны низкоуровневые знания: например, если вы пишете систему сервисов, то стоит разобраться, как устроена операционная система Linux, какие у неё есть возможности. Нужно понимать, какими свойствами обладает сеть, чем отличается работа с TCP- и UDP-протоколами. Если говорить в общем, то хороший разработчик инфраструктуры старается досконально разбираться в том, как работают разные сущности, с которыми взаимодействует его код.

Как сделать первые шаги в разработке инфраструктуры

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

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

В прошлом году в Школе анализа данных запустили инфраструктурный трек. Отчасти он появился потому, что людям, которые приходят заниматься созданием инфраструктуры из других сфер, часто не хватает предметных знаний и навыков.

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

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

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

В ШАДе всегда было много курсов, которые пригодились бы разработчику инфраструктуры: продвинутый курс по С++, алгоритмы во внешней памяти и так далее. Хорошему разработчику инфраструктуры нужны глубокие знания, а ШАД — это то место, где их можно получить.

Краткий пересказ от Yandex GPT