System design.

Для многих эта фраза может показаться страшной. Собеседование, где нужно за ограниченный период времени, обычно за час, спроектировать большую высоконагруженную систему, рассчитать нагрузки, выбрать технологии и объяснить как это будет работать.    Такие собеседования проводят все бигтехи на роли от Senior и выше. Да, линейные менеджеры, вроде тимлидов, обычно тоже проходят эту секцию. Но и некоторые компании поменьше тоже берут на вооружение этот очень крутой этап отбора.    Типичные задачи на системный дизайн: спроектируйте messenger который работает с миллиардом пользователей в месяц аналогичный WhatsApp или Telegram, спроектируйте ленту Twitter или TicTok, спроектируйте аналог YouTube. И всегда предполагается что мы проектируем высоконагруженное высокодоступное приложение.    Казалось бы такие сервисы проектируются и улучшаются сотнями инженеров высшего класса в течение нескольких лет, а тут просят за час, в нервной обстановке собеседования. Невозможно!    Но это не так. Здесь от нас не требуется идеальное решение. Здесь требуется показать, что вы знаете основы проектирования и работы высоконагруженных приложений, умеете собирать функциональные и нефункциональные требования и умеете рассуждать. Здесь нужно показать из каких основных больших блоков состоит проектируемая система, и как они взаимодействуют друг с другом.    Ах да, и это один из видов собеседования, где ведёт не интервьюер, а кандидат. Нужно задавать вопросы, уточнять, рассуждать.    Да, это тип интервью требует подготовки, знания примерного плана проведения и следования ему. Если просто прийти на system design никогда не читая о таком типе собеседований или не просматривая примеры в интернете, то шанс завалить его равен практически 100%.    План интервью обычно следующий:

  • Собираем функциональные требования у интервьюера и очерчиваем границы системы. Обычно это маленький кусок, который реально спроектировать за час. Не следует проектировать что-то дополнительное что не указано в задании, потеряете время.
  • Собираем нефункциональные требования, например планируемую нагрузку на систему, количество пользователей, количество оставляемых ими постов, загружаемых видео или другого контента. На основе полученных интерьера данных рассчитываем нагрузку в RPS (запросы в секунду), рассчитываем потребление жёсткого диска для хранения контента в течение многих лет, иногда рассчитываем требуемый сетевой канал. Чистая математика.
  • Начинаем верхнеуровнево проектировать. Здесь желательно расписать основные запросы взаимодействия клиента с нашей системой, исходя из этих запросов расставить различные блоки, требуемые для прохождения запроса: ноды сервисов, балансировщики нагрузки, шлюзы, базы данных, кэши и очереди сообщений
  • Углубляемся. Рассматриваем верхнеуровневые квадратики и пытаемся объяснить какие готовые решения можно использовать для того или иного кэша, очереди, базы данных. Это показывает ваши знания основных технологий. На этом этапе стоит поговорить об отказах оборудования, падениях сети и прочих ЧП. Посмотреть как ваша система будет работать во внештатных ситуациях.
  • Подводим итоги, проверяем что все функциональные требования спроектированы, есть соответствие не функциональным требованиям, если нужно отвечаем на последние вопросы интервьюера.
  • В последние 5 минут такого интервью обычно можно позадавать свои вопросы о работе в компании о технологиях и прочем    Я дважды в жизни проходил в system design, оба раза успешно. Впервые два года назад, собеседуясь в Ozon. Во второй раз вчера - проектировал функциональность плейлистов для музыкального сервиса типа Spotify. Результат этого интервью на скриншоте.    Конечно же каждый раз я несколько дней готовлюсь, повторяю, освежаю в памяти план собеседования, освежаю в памяти некоторые технологии которыми давно не работал и так далее.    Я очень люблю такой тип собеседований. Он даёт шанс показать технический кругозор, умение думать и рассуждать.  Никогда не проводил его как интервьюер, надеюсь в будущем представится шанс.    Как вы относитесь к system design, был ли у вас успеш
System design. | Сетка — социальная сеть от hh.ru