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

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

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

Анализ данных

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Больше по теме

Анализ данных

Трансферное обучение: почему deep learning стал доступнее

Что помогает стартапам использовать методы глубинного обучения в своих проектах?

Анализ данных, Разработка, Яндекс в вузах

Как развивается онлайн-образование в МФТИ

Андрей Райгородский: «Мне очень хочется, чтобы к нам поступали люди не только из Москвы»

Анализ данных

«Задача начинающего предпринимателя — быстро совершать ошибки»

Автор курса ШАДа «Как запустить MVP» о технической стороне создания стартапов

Анализ данных, Разработка

Как устроена работа голосовых помощников

От распознавания звуков до человечных ответов на вопросы

Анализ данных

Чем занимаются лауреаты премии имени Ильи Сегаловича 2019

Исследования в сфере компьютерного зрения, распознавание эмоций и применение машинного обучения для развития Нижегородской области

Анализ данных

Зачем специалисту по data science нужна экономика?

Разработчик deep learning в Яндекс.Такси о своём переходе из экономики в науки о данных

Анализ данных

Научить Алису предсказывать намерения пользователя и разобраться в инфраструктуре Amazon

Какие проекты реализовали участники интенсива по машинному обучению от Яндекса и Университета «Сириус»