[Перевод] 50 терминов системного дизайна, которые должен знать каждый разработчик
1. Масштабируемость / Scalability
- Масштабируемость — это способность системы поддерживать возросшую нагрузку путем добавления дополнительных ресурсов
- Примером является добавление дополнительных серверов для обработки увеличившегося веб-траффика
- Что такое масштабируемость и как ее достичь?
2. Балансировка нагрузки / Load Balancing
- Балансировка нагрузки — это разделение входящего сетевого траффика между несколькими серверами для снижения нагрузки на каждый из них (во избежание того, чтобы на один сервер приходилось слишком много траффика)
- Примером является распределение веб-траффика между несколькими экземплярами EC2 с помощью сервиса AWS Elastic Load Balancer (ELB)
- Понимание балансировки нагрузки
3. Микросервисы / Microservices
- Микросервисы — это архитектурный паттерн, предполагающий разделение приложения на коллекцию слабосвязанных сервисов
- Примером является разделение монолитного приложения на независимые сервисы, отвечающие за управление пользователями, обработку платежей и отправку уведомлений
- Что такое микросервисы?
4. Теорема CAP / CAP Theorem
- Теорема CAP (теорема Брюера) — это эвристическое утверждение о том, что в любой реализации распределенных вычислений возможно обеспечить не более двух из трех следующих свойств: согласованность данных (consistency), доступность (availability) и устойчивость к фрагментации (partition tolerance)
- Примерами использования теоремы CAP являются случаи, когда мы вынуждены жертвовать согласованностью ради доступности, и наоборот, при проектировании распределенных баз данных (БД)
- Понимание теоремы CAP
5. Шардинг / Sharding
- Шардинг — это процесс разделения большой БД на маленькие части, которые называются шардами (shards), для лучшей поддержки и управления
- Примером является разделение БД пользователей по географическому региону
- Объяснение шардинга БД
6. Задержка / Latency
- Задержка — это время, за которое данные проходят путь из точки А в точку Б
- Примером является время доставки сообщения в приложении чата
- Объяснение задержки
7. Пропускная способность / Throughput
- Пропускная способность — это мера количества данных, которые система обрабатывает (способна обработать) за определенное время
- Примером является количество запросов, обрабатываемых сервером за одну секунду
- Пропускная способность компьютерных сетей
8. Кэш / Cache
- Кэш — это любой аппаратный или программный компонент для хранения часто запрашиваемых данных, позволяющий снизить нагрузку на сервер и БД
- Примером использование кэша является запись и извлечение часто запрашиваемых данных в/из Redis
- Объяснение кэширования
9. Сеть доставки контента / Content Delivery Network (CDN)
- CDN — это система географически распределенных серверов, суть которой состоит в том, что пользователь получает веб-контент из ближайшего к нему сервера
- Примером использования CDN является хранение данных в Cloudflare для более быстрой загрузки страниц приложения
- Что такое CDN?
10. REST API
- REST API (REpresentational State Transfer — передача репрезентативного состояния) — это архитектурный стиль создания веб-сервисов, в которых работа с данными осуществляется с помощью запросов HTTP
- Примером является проектирование API (Application Programming Interface — интерфейс программирования приложения) социальной сети на основе принципов REST, когда работа с данными выполняется с помощью GET, POST, PUT, DELETE и др. запросов HTTP
- Туториал по REST API
11. GraphQL
- GraphQL — это язык запросов и манипулирования данными для построения веб ориентированных программных интерфейсов, являющийся альтернативой REST API
- Примером является запрос всех данных пользователя с помощью единственного запроса (в REST API таких запросов чаще всего будет несколько)
- Введение в GraphQL
12. ACID
- ACID — это набор требований к транзакционной системе, обеспечивающий ее надежность и предсказуемость: атомарность (atomicity), согласованность (consistency), изоляцию (isolation) и устойчивость (durability)
- Примером является обеспечение соответствия принципам ACID банковских транзакций во избежание повреждения данных
- Свойства ACID в БД
13. BASE
- BASE — это набор требований к транзакционной системе, обеспечивающий ее базовую доступность (basically available), мягкое состояние (soft state) и окончательную согласованность (eventually consistent), являющийся альтернативой ACID
- Примером является проектирование высокодоступных, окончательно согласованных NoSQL БД
- BASE и ACID
14. NoSQL
- NoSQL — это тип БД, предназначенный для хранения и извлечения данных, смоделированных способами, отличными от табличных отношений, используемых в реляционных БД
- Примером такой БД является MongoDB, в которой данные хранятся в виде документов
- Что такое NoSQL БД?
15. SQL
- SQL (Structured Query Language — язык структурированных запросов) — это декларативный язык программирования, применяемый для создания, модификации и управления данными в реляционной БД, управляемой соответствующей системой управления БД
- Примером является SQL-запрос на выборку данных из реляционной БД
- Туториал по SQL
16. Индексация БД / DB Indexing
- Индексация БД — это техника структурирования данных, позволяющая быстрее искать и извлекать данные из БД (соответствующие структуры данных называются индексами (indexes))
- Примером является создания индекса идентификаторов пользователей для ускорения поиска их данных
- Индексация БД
17. Репликация / Replication
- Репликация — это процесс копирования и хранения объектов БД в нескольких БД, составляющих распределенную систему БД
- Примером является хранение копий данных на разных серверах CDN для обеспечения высокой доступность и скорости доступа к данным
- Репликация БД
18. Аварийное переключение / Failover
- Аварийное переключение — это резервный режим работы, при котором функции компонентов системы передаются другим компонентам в случае выхода из строя основного компонента
- Примерами являются всевозможные встроенные механизмы автоматического переключения на резервные серверы в случае сбоя основного
- Аварийное переключение и аварийное восстановление
19. Шлюз API / API Gateway
- Шлюз API — это сервер, принимающий запросы от клиента, применяющий к ним задержку (throttling), разные политики (например, политики безопасности) и передающий их соответствующим серверным сервисам
- Примером является использование шлюза AWS API для управления различными API
- Что такое шлюз API?
20. Сервисная сетка / Service Mesh
- Сервисная сетка — это выделенный уровень инфраструктуры, предназначенный для облегчения взаимодействия между микросервисами
- Примером является интеграция Istio в качестве сервисной сетки для управления взаимодействием микросервисов
- Введение в сервисную сетку
21. Бессерверные вычисления / Serverless Computing
- Бессерверные вычисления — это реализация облачных вычислений, позволяющая провайдеру облака динамически распределять аппаратные ресурсы
- Примером является использование AWS Lambda для запуска серверного кода приложения
- Что такое бессерверные вычисления?
22. Событийно-ориентированная архитектура / Event-Driven Architecture
- Событийно-ориентированная архитектура — это парадигма архитектуры программного обеспечения (ПО), поощряющая генерацию, обнаружение и потребление событий (events), а также их обработку — реагирование на них тем или иным образом
- Примером является проектирование системы с передачей событий между микросервисами с помощью Apache Kafka
- Событийно-ориентированная архитектура
23. Монолитная архитектура / Monolithic Architecture
- Монолитная архитектура — это архитектура ПО, когда все элементы являются частями одного приложения и функционируют как один сервис
- Примерами являются старые-добрые корпоративные приложения, построенные как одна большая единица
- Монолитная и микросервисная архитектуры
24. Распределенная система / Distributed System
- Распределенная система — это модель, компоненты которой расположены на разных компьютерах в одной сети, которые взаимодействуют между собой путем передачи сообщений
- Примером является проектирование распределенной файловой системы, такой как Hadoop
- Введение в распределенные системы
25. Очередь сообщений / Message Queue
- Очередь сообщений — это метод, обеспечивающий асинхронную связь между службами как в бессерверной, так и в микросервисной архитектуре
- Примером является использование RabbitMQ в качестве брокера сообщений
- Объяснение очереди сообщений
26. Модель «Издатель/подписчик» / Pub/Sub Model
- Издатель/подписчик — это шаблон обмена сообщениями, в котором отправитель (издатель) публикует сообщения в канале, к которому имеют доступ получатели (подписчики). При этом, издателю не нужно ничего знать о подписчикам
- Примером является система уведомлений, реализованная с помощью Google Cloud Pub/Sub
- Обмен сообщениями по принципу «Издатель/подписчик»
27. Разделение данных / Data Partitioning
- Разделение данных — это деление БД на небольшие, легко поддерживаемые и управляемые части
- Примером является разделение таблицы БД по дате для быстрого выполнения запросов
- Разделение БД
28. Горизонтальное масштабирование / Horizontal Scaling
- Горизонтальное масштабирование — это увеличение мощности системы за счет добавления в нее дополнительных машин или узлов
- Примером является добавление дополнительных серверов для обработки возросшего веб-траффика
- Горизонтальное и вертикальное масштабирование
28. Вертикальное масштабирование / Vertical Scaling
- Вертикальное масштабирование — это увеличение мощности системы за счет обновления существующего оборудования (обновление центральных процессоров (CPU) или оперативной памяти (RAM))
- Примером является обновление RAM сервера, позволяющее ему обрабатывать большее количество запросов одновременно
- Горизонтальное и вертикальное масштабирование
30. Ограничение скорости / Rate Limiting
- Ограничение скорости — это метод контроля скорости траффика, который отправляет или получает контроллер сетевого интерфейса
- Примером является троттлинг (throttling) API для предотвращения вредоносного поведения
- Понимание ограничения скорости
31. Схема автоматического выключателя / Circuit Breaker Pattern
- Схема автоматического выключателя — современный шаблон проектирования ПО, применяемый для обнаружения сбоев и инкапсуляции логики предотвращения их постоянного повторения
- Примером является обработка неудачных обращений к удаленной службе с помощью автоматического выключателя в микросервисной архитектуре
- Схема автоматического выключателя
32. Согласованность данных / Data Consistency
- Согласованность данных — это состояние, когда данные являются одинаковыми в нескольких экземплярах и не повреждены
- Примером является поддержка согласованности данных пользователей с помощью нескольких реплик БД
- Модели согласованности данных
33. Окончательная согласованность / Eventual Consistency
- Окончательная согласованность — это модель согласованности данных, используемая в распределенных вычислениях для достижения высокой доступности данных. Ее суть в том, что она допускает временную несогласованность данных при условии, что в конечном счете обновления системы распространятся и отразятся на всех узлах
- Примером является Amazon DynamoDB, предоставляющая окончательно согласованную модель для чтения данных
- Окончательная согласованность
34. Строгая согласованность / Strong Consistency
- Строгая согласованность — это модель согласованности данных, гарантирующая, что каждое чтение получает актуальную (самую последнюю) запись конкретной единицы данных
- Такая модель согласованности используется в системах финансовых транзакций
- Строгая согласованность
35. Контейнеризация / Containerization
- Контейнеризация — это процесс инкапсуляции (упаковки) приложения и всех его зависимостей в контейнер для запуска в любой вычислительной среде
- Примером является использование Docker для контейнеризации приложения для развертывания (деплоя) в рабочей, тестовой и производственной средах
- Что такое контейнеризация?
36. Kubernetes
- Kubernetes — это платформа с открытым исходным кодом для автоматического развертывания, масштабирования и эксплуатации контейнеризованных приложений
- Примером является запуск и развертывание упакованного приложения с помощью Kubernetes
- Документация Kubernetes
37. Автомасштабирование / Autoscaling
- Автомасштабирование — это автоматическая корректировка количества используемых вычислительных ресурсов в зависимости от пользовательской нагрузки
- Примером является использование AWS EC2 Auto Scaling для динамической корректировки количества экземпляров
- Объяснение автомасштабирования
38. Мультиарендность / Multi-Tanency
- Мультиарендность — это архитектура, в которой один экземпляр ПО обслуживает несколько потребителей/покупателей
- Приложения SaaS (Software as a Service — ПО как услуга), такие как Salesforce, используют мультиарендность при предоставлении услуг различным категориям клиентов
- Одноарендность и мультиарендность
39. Сброс нагрузки / Load Shedding
- Сброс нагрузки — это отказ от некоторых требований или ухудшение качества услуг для поддержания работоспособности системы в условиях высокой нагрузки
- Примером является отключение второстепенных услуг в периоды пиковой нагрузки
- Сброс нагрузки
40. Идемпотентность / Idempotence
- Идемпотентность — это свойство объекта или операции при повторном применении операции к объекту давать тот же результат, что и при первом
- DELETE-запрос HTTP является идемпотентным
- Идемпотентность в API
41. Кворум / Quorum
- Кворум — это минимальное количество голосов, необходимых для фиксации (commit) распределенной транзакции
- Репликация на основе кворума обеспечивает согласованность в распределенной БД
- Системы кворума
42. Оркестрация / Orchestration
- Оркестрация — это архитектурный паттерн, при котором центральный координатор управляет взаимодействием сервисов между собой
- Примером является использование механизма рабочего процесса для управления многоэтапным бизнес-процессом
- Оркестрация
43. Хореография / Choreography
- Хореография — это архитектурный паттерн, при котором сервисы являются независимыми и взаимодействуют друг с другом через события. В такой архитектуре отсутствует координатор или оркестратор
- Примером являются микросервисы, взаимодействующие между собой через шину событий (event bus)
- Хореография и оркестрация
44. Реестр сервисов / Service Registry
- Реестр сервисов — это БД, которая следит за экземплярами микросервисов
- Примером является использование Eureka в качестве реестра сервисов в микросервисной архитектуре
- Реестр служб
45. Ограничение API / API Rate Limiting
- Ограничение API — это управление тем, сколько запросов может отправить клиент за определенное время
- Примером является установка максимального количества запросов в 100 для предотвращения злого умысла
- Ограничение API
46. Склад данных / Data Warehouse
- Склад данных — это система, помогающая анализировать бизнес-данные и создавать отчеты, центр бизнес-аналитики
- В качестве склада данных может использоваться Amazon Redshift
- Понимание склада данных
47. Озеро данных / Data Lake
- Озеро данных — это система или репозиторий, в котором данные хранятся в собственном/необработанном формате, обычно в виде блобов (blobs) или файлов
- Для хранения и управления структурированными и неструктурированными данными в озере данных может использоваться Petabyte scale
- Озеро данных
48. OLAP
- OLAP (Online Analytical Processing — обработка онлайн-аналитики) — это категория ПО, позволяющая анализировать данные, хранящиеся в БД
- Примером является использование кубов (cubes) OLAP для точечных аналитических и произвольных запросов
- Объяснение OLAP
49. OLTP
- OLTP (Online Transaction Processing — обработка онлайн-транзакций) — это класс систем, которые управляют транзакционно-ориентированными приложениями
- Примером является использование OLTP-систем для управления данными транзакций, например, в банковских системах
- Объяснение OLTP
50. Большие данные / Big Data
- Большие данные — это большие и сложные наборы данных, которыми невозможно эффективно управлять с помощью обычного ПО для обработки данных
- Примером является анализ взаимодействия пользователей социальных сетей для предсказания модных трендов
- Введение в большие данные
Парочка статей по теме:
Парочка ресурсов для изучения системного дизайна:
Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале ↩