Если в работе вы не проектируете сервис в раз неделю, ваш стек сильно ограничен, то навык рисовать и проектировать архитектуру будет западать. Что бы быть в тонусе — нужно его тренировать, либо готовиться. Я собрал небольшую заметку — как быстро привести себя в тонус, понять структуру и вспомнить базу.

Сервисы

Полезные видео

Книги

  • Алекс Сью — System Design. Подготовка к сложному интервью
  • Высоконагруженные приложения. Программирование, масштабирование, поддержка — Мартин Клеппман (книга кабанчик)

Тайминги

  • Сбор + нормализация требований — 10 мин
    • Проверка гипотезы, а точно уже работает, провели ли АБ-тест
    • Задача — собрать FR + NFR
      • Возможные метрики
        • Порядок нагрузки
          • DAU/MAU — кол-во пользователей в день/месяц
          • Кол-во действий в системе
          • Трафик
      • Read/Write пути юзеров
        • Считаем соотношение
      • Таймауты и допустимость для действий
        • Use-case
      • Даунтаймы; Availability — 99.9
      • Требования по ГЕО
      • Доступность старых данных
      • Подсветить возможные проблемы или особенности! 
  • Приблизительная оценка нагрузки — 5 мин
    • RPS — запросы в сек. R/W
      • 86400 (сек в дне)
      • Пик на x2 / x3
    • Трафик — в байтах Gb/s
      • Api — 200 мс в среднем
      • Объем данных
    • Кол-во данных в год/месяц
  • Проектирование API — 5 мин
    • Расписать API / crud
  • Проектирование архитектуры + модели — 25 мин
    • Начинаем с кубиков верхнеуровневых
    • Прорабатываем слоями от общего к частному
    • Happy path / Corner case / graceful degradation
    • Кидаем сервисы кубики
    • Расписываем внутри модели сущностей (в простой форме)
  • Варианты диградации, отказоустойчивость + масштабируемость — 5 мин
  • Расчет ресурсов для системы — 5 мин

Основные правила

  • Нужно вести интервью. Действовать проактивно
  • Делать свои гипотезы в спорных моментах
  • Делать выбор
  • Давать рассуждение
  • Проговаривать детали и ограничения

Ошибки

  1. Неточный или медленный расчет на входе
  2. Нет самостоятельности
  3. Попытка делать все и сразу
  4. Проективовать слишком много всего, а не главное
  5. Не объяснять выбор
  6. Не конспектировать требования
  7. Не попадать в тайминг
  8. Зубрить решения
  9. Не реагировать на наводящие вопросы
  10. Варить давать, а не решение
  11. Страх спросить помощь, делать вид, что все знаешь
  12. Не уточнять
  13. Идеализировать
  14. Проектировать сразу, без подготовки
  15. Не размышлять вслух

База и основы

  • Кеширование
  • Балансировка и нагрузка
  • Базы данных и очереди сообщений
  • Репликация партиционирование шардирование
  • Микросервисы
  • Паттерны и подходы