План проектирования системы (System Design Outline)
Перевод и адаптация этого репозитория https://github.com/jguamie/system-design/blob/master/notes/system-design-outline.md
Это рекомендуемый подход к решению задач проектирования систем. Не все эти темы будут актуальны для конкретной задачи.
- Функциональные требования / Уточнения / Предположения (Functional Requirements / Clarifications / Assumptions)
- Нефункциональные требования (Non-Functional Requirements)
- Согласованность vs Доступность (Consistency vs Availability)
- Задержка (Latency)
- Насколько быстрой должна быть эта система?
- Задержка, воспринимаемая пользователем (User-perceived latency)
- Задержка обработки данных (Data processing latency)
- Безопасность (Security)
- Потенциальные атаки? Как их следует смягчать?
- Конфиденциальность (Privacy)
- PII (Personally Identifiable Information — Персональные данные, позволяющие идентифицировать личность), PCI (Payment Card Industry — Индустрия платежных карт) или другие пользовательские данные
- Целостность данных (Data Integrity)
- Как восстановиться после повреждения или потери данных?
- Соотношение чтения:записи (Read:Write Ratio)
- API (Application Programming Interface — Интерфейс программирования приложений)
- Публичные и/или внутренние API?
- Просты ли API для понимания?
- Как идентифицируются сущности?
- Схемы хранения (Storage Schemas)
- SQL (Structured Query Language — Язык структурированных запросов) vs NoSQL (Not Only SQL — Не только SQL, обозначает нереляционные базы данных)
- Очереди сообщений (Message Queues)
- Проектирование системы (System Design)
- Масштабируемость (Scalability)
- Как масштабируется система? Учитывайте увеличение как объема данных, так и трафика.
- Каковы узкие места? Как их следует устранять?
- Каковы граничные случаи? Что может пойти не так? Предполагая, что они произойдут, как их следует решать?
- Как мы будем проводить стресс-тестирование этой системы?
- Балансировка нагрузки (Load Balancing)
- Автомасштабирование / Репликация (Auto-scaling / Replication)
- Кэширование (Caching)
- Партиционирование (Partitioning)
- Репликация (Replication)
- Непрерывность бизнеса и аварийное восстановление (BCDR — Business Continuity and Disaster Recovery)
- Интернационализация / Локализация (Internationalization / Localization)
- Как масштабироваться на несколько стран и языков? Не предполагайте, что в США используется только английский язык.