TGTGInsightаналитика telegramLIVE / telegram public index
← Системный сдвиг
Системный сдвиг avatar

TGINSIGHT POST

Post #480

@systemswing

Системный сдвиг

Просмотры4,110Количество просмотров
Опубликован21 сент.21.09.2024, 10:14
Содержимое поста

Содержимое

На тренинге возник вопрос: вот я аналитик/менеджер/заказчик. Разработчики или архитекторы приносят проект архитектуры. Как мне понять — он хороший или нет? Соответствует ли он требованиям бизнеса? Подойдет ли? Не будет ли с такой архитектурой проблем в дальнейшем, а если будут — то в каком месте они могут возникнуть? И как вообще разработчики и архитекторы придумывают эту архитектуру? Что бы почитать или какой курс пройти на эту тему? Мне, в первую очередь, приходит в голову книга Алекса Сюя про прохождение System Design Interview. Но для совсем начинающих там очень хороша первая глава ("Масштабирование от 0 до миллионов пользователей"), а дальше начинаются частности — примеры рассуждений при проектировании конкретных систем, причем зачастую низкоуровневых: ограничителя трафика, хранилища ключ-значение, генератора уникальных идентификаторов и т.п. Нет, там есть, конечно, проектирование новостной ленты, мессенджера, youtube и google drive, что можно соотнести с прикладными задачами, но половина примеров — чисто инфраструктурные, и тут, мне кажется, разрыв с первой вводной главой слишком велик — нужно предварительное понимание, например, как работает кэш, а это и не каждый программист понимает. Первая глава последовательно вводит некоторые базовые идеи, рассказывающие о начальных принципах архитектуры: * система с одним сервером (имеется в виду веб или мобильное приложение с бэкендом); * выделение базы данных (и короткий обзор реляционных и NoSQL); * вертикальное и горизонтальное масштабирование; * балансировщики нагрузки; * репликация; * кэширование; * системы с сохранением состояния и без сохранения состояния; * очереди сообщений и т.д. А вот более сложные концепции, типа CAP-теоремы, технологий опроса (polling, long polling, WebSocket...), стратегии гарантированной доставки или примеры решений по обработке ошибок — "зарыты" в описании конкретных примеров. Причем заранее не угадаешь — где будет про проектирование API (тема подходит для технического менеджера или аналитика), а где про префиксные деревья (тема чисто программистская). Кроме того, почти во всех решениях у Сюя акцент ставится на масштабируемости, миллионах и миллиардах пользователей, а в наших задачах ведущей характеристикой может быть совсем другое — стоимость решения или его надежность. К сожалению, я не знаю хорошей книги или курса, где были бы одновременно описаны основные концепции, важные для архитектурного проектирования, и на таком уровне, чтобы не приходилось впиливаться в глубины алгоритмов. Если встречали такое — дайте мне знать.