Подписывайтесь также на мой Телеграм!
С темой System Design я познакомился, к своему же удивлению, не так давно (меньше года назад). При этом архитектурой корпоративных приложений я интересуюсь (и не просто интересуюсь) уже много лет, читаю книги, смотрю много материалов с конференций, проектирую, пробую, реализую. Но мне всегда чего-то не хватало в архитектурных материалах — наверное какого-то практического применения.
Вот рассказывают все про микросервисы, когда их применять, как распилили свой монолит. Или в книгах по архитектуре пишут про архитектурные стили, подходы к проектированию, характеристики архитектуры и т.д. И вот бы кто-то написал или рассказал про что-то осязаемое. Например, про конкретное воплощение архитектурных подходов в большой реальной системе, про компоненты, которые использовали (редисы, кафки, монги и т.д.), про варианты инструментов, из которых выбирали, как считали сайзинг, нагрузки, и так далее.
Возможно мне не попадалось просто или я искал не по тем ключевым словам, да и в целом архитектура штука весьма абстрактная.
И вот в один прекрасный день я узнаю о System Design и наконец-то всё встает на свои места. Оказывается, есть книги, статьи, видосы (в общем материалы), в которых пишут про то — как реализовать конкретную систему, какую СУБД лучше выбрать и почему, какой брокер сообщений, где вставить Redis или балансировщик, и в целом — как масштабировать свою систему на миллионы пользователей.
Мало того, во всех топовых компаниях один из этапов интервью — System Design.
Здесь нужно уточнить: я не противопоставляю архитектуру системному дизайну. Это взаимодополняемые темы для изучения.
В общем с большим увлечением теперь изучаю всё, что попадается по системному дизайну и готов поделиться ресурсами и материалами, на которые стоит обратить внимание как минимум для начала.
1. Книга Сюй А. - System Design. Подготовка к сложному интервью (Библиотека программиста) – 2022. Первая глава называется «Масштабирования от нуля до миллионов пользователей». В остальных главах можно почитать о проектировании конкретных систем (проектирование хранилища типа «ключ-значение», проектирование системы уведомлений, проектирование Youtube и так далее).
или в оригинале
2. Канал на Youtube @ByteByteGo — очень крутые короткие ролики на практические темы, например: 7 стратегий для масштабирования базы данных, 7 заметок о проектировании API, разница между горизонтальным и вертикальным масштабированием, как работает GIT, как бигтехи доставляют код в продакшн и так далее. Видео в виде крутой понятно инфографики. Кстати у них на сайте можно подписаться на рассылку и получать интересные статьи на почту.
3. Книга Клеппман Мартин - Высоконагруженные приложения. Программирование, масштабирование, поддержка (Бестселлеры O’Reilly) – 2018. Или книга с кабанчиком. Книга не простая, сейчас ее читаю. В ней в деталях описываются такие вещи, как репликация, секционирование (sharding), как устроены транзакции, проблемы распределенных систем, и т.д.
4. В сети можно найти множество показательных интервью по системному дизайну на разные темы, курсов, других книг.
Думаю, для начала материалов вполне достаточно. Тема крайне интересная и увлекательная, так что рекомендую не только разработчикам, которые хотят продвинуться дальше в проектирование, но и системным аналитикам и другим интересующимся.