[1/3] Acing the System Design Interview (System Design: пережить интервью) (Рубрика Architecture)
Последний месяц я потихоньку читаю книгу Zhiyong Tan, что посвящена system design interview и в виде перевода выпущена издательством Питер. Книгу я решил прочесть из интереса, чтобы сравнить с тем подходом, который близок мне и про который я рассказывал и долгое время развивал у нас внутри компании. TLDR; книга мне показалась полезной и понравилась, причем больше, чем книга Alex Xu, про которую я тоже рассказывал.
Начнем с того, что автор, Zhiyong Tan, сейчас engineering manager в Paypal, а до этого был senior fullstack инженером в Uber, data инженером в небольших стартапах, а также инженером в Teradata. В общем, этот опыт позволил ему посмотреть на вопросы проектирования решений и найма сотрудников в компаниях разного масштаба и уровня зрелости. Сама книга поделена на три части:
- Первая часть состоит из 6 глав и содержит стрктурированное введение в system design interview - про эту часть мы поговорим ниже подробнее
- Вторая часть содержит 11 примеров system design задачек
- В приложениях есть сравнения монолитов и микросервисов, базовыый разбор OAuth 2.0 и OpenID Connect, рассказ про C4 Model, а также разбор того, как устроен двух-фазный коммит. В принципе, все эти темы так или иначе могут быть затронуты на собеседовании
Дальше я расскажу про первые шесть глав, которые показались довольно здравыми
1. A walkthrough of system design concepts В первой главе автор вводит базовые понятия system design, знакомит с ключевой терминологией и объясняет, что system design - это про дискуссию вокруг компромиссов, на которые надо пойти при проектировании решения:) Дальше автор быстро и по верхам рассазывает про масштабирование различных сервисов, начиная с маленькой инсталляции приложения и накручивая сверху GeoDNS, кеширование, CDN, горизонтальное и вертикальное масштабирование, управление кластерами, разделение на функционально-независимые части. Интересно, что автор разбирает историю про работу с аналитическими данными (ETL), выделение общих сервисов, а также размещение рабочих нагрузок на bare metall, cloud или вообще внутри FaaS:) В общем, большая часть этих блоков может быть раскрыта в отдельную главу, если не книгу, но автор дает неплохое общее представление о самих концепциях
2. A typical system design interview flow Здесь автор описывает типичный процесс system design interview, акцентируя внимание на важности уточнения требований до начала проектирования. Особое внимание уделяется разделению functional и non-functional requirements. Интересно, что я как-то с ребятами из клуба {между скобок} разбирал flow собеседования, предложенный в книге Alex Xu, а также сравнивал с тем, что принято в Т. Если говорить подробнее про содержание главы, то тут идет речь про
- Уточнение требований
- Создание драфта спек API
- Связь пользователей и данных
- Моделирование моделей данных
- Обсуждение логгирования, мониторинга и алертинга (я часто это оставляю на финал собеседования)
Продолжение обзора первой части книги в следующем посте.
#Software #Architecture #DistributedSystems #SystemDesign #Engineering