50 терминов системного дизайна, которые должен знать каждый разработчик
1. Масштабируемость / Scalability
- Масштабируемость — это способность системы поддерживать возросшую нагрузку путем добавления дополнительных ресурсов
- Примером является добавление дополнительных серверов для обработки увеличившегося веб-траффика
- Что такое масштабируемость и как ее достичь? [1]
2. Балансировка нагрузки / Load Balancing
- Балансировка нагрузки — это разделение входящего сетевого траффика между несколькими серверами для снижения нагрузки на каждый из них (во избежание того, чтобы на один сервер приходилось слишком много траффика)
- Примером является распределение веб-траффика между несколькими экземплярами EC2 с помощью сервиса AWS Elastic Load Balancer (ELB)
- Понимание балансировки нагрузки [2]
3. Микросервисы / Microservices
- Микросервисы — это архитектурный паттерн, предполагающий разделение приложения на коллекцию слабосвязанных сервисов
- Примером является разделение монолитного приложения на независимые сервисы, отвечающие за управление пользователями, обработку платежей и отправку уведомлений
- Что такое микросервисы? [3]
4. Теорема CAP / CAP Theorem
- Теорема CAP (теорема Брюера) — это эвристическое утверждение о том, что в любой реализации распределенных вычислений возможно обеспечить не более двух из трех следующих свойств: согласованность данных (consistency), доступность (availability) и устойчивость к фрагментации (partition tolerance)
- Примерами использования теоремы CAP являются случаи, когда мы вынуждены жертвовать согласованностью ради доступности, и наоборот, при проектировании распределенных баз данных (БД)
- Понимание теоремы CAP [4]
5. Шардинг / Sharding
- Шардинг — это процесс разделения большой БД на маленькие части, которые называются шардами (shards), для лучшей поддержки и управления
- Примером является разделение БД пользователей по географическому региону
- Объяснение шардинга БД [5]
6. Задержка / Latency
- Задержка — это время, за которое данные проходят путь из точки А в точку Б
- Примером является время доставки сообщения в приложении чата
- Объяснение задержки [6]
7. Пропускная способность / Throughput
- Пропускная способность — это мера количества данных, которые система обрабатывает (способна обработать) за определенное время
- Примером является количество запросов, обрабатываемых сервером за одну секунду
- Пропускная способность компьютерных сетей [7]
8. Кэш / Cache
- Кэш — это любой аппаратный или программный компонент для хранения часто запрашиваемых данных, позволяющий снизить нагрузку на сервер и БД
- Примером использование кэша является запись и извлечение часто запрашиваемых данных в/из Redis
- Объяснение кэширования [8]
9. Сеть доставки контента / Content Delivery Network (CDN)
- CDN — это система географически распределенных серверов, суть которой состоит в том, что пользователь получает веб-контент из ближайшего к нему сервера
- Примером использования CDN является хранение данных в Cloudflare для более быстрой загрузки страниц приложения
- Что такое CDN? [9]
10. REST API
- REST API (REpresentational State Transfer — передача репрезентативного состояния) — это архитектурный стиль создания веб-сервисов, в которых работа с данными осуществляется с помощью запросов HTTP
- Примером является проектирование API (Application Programming Interface — интерфейс программирования приложения) социальной сети на основе принципов REST, когда работа с данными выполняется с помощью GET, POST, PUT, DELETE и др. запросов HTTP
- Туториал по REST API [10]
11. GraphQL
- GraphQL — это язык запросов и манипулирования данными для построения веб ориентированных программных интерфейсов, являющийся альтернативой REST API
- Примером является запрос всех данных пользователя с помощью единственного запроса (в REST API таких запросов чаще всего будет несколько)
- Введение в GraphQL [11]
12. ACID
- ACID — это набор требований к транзакционной системе, обеспечивающий ее надежность и предсказуемость: атомарность (atomicity), согласованность (consistency), изоляцию (isolation) и устойчивость (durability)
- Примером является обеспечение соответствия принципам ACID банковских транзакций во избежание повреждения данных
- Свойства ACID в БД [12]
13. BASE
- BASE — это набор требований к транзакционной системе, обеспечивающий ее базовую доступность (basically available), мягкое состояние (soft state) и окончательную согласованность (eventually consistent), являющийся альтернативой ACID
- Примером является проектирование высокодоступных, окончательно согласованных NoSQL БД
- BASE и ACID [13]
14. NoSQL
- NoSQL — это тип БД, предназначенный для хранения и извлечения данных, смоделированных способами, отличными от табличных отношений, используемых в реляционных БД
- Примером такой БД является MongoDB, в которой данные хранятся в виде документов
- Что такое NoSQL БД? [14]
15. SQL
- SQL (Structured Query Language — язык структурированных запросов) — это декларативный язык программирования, применяемый для создания, модификации и управления данными в реляционной БД, управляемой соответствующей системой управления БД
- Примером является SQL-запрос на выборку данных из реляционной БД
- Туториал по SQL [15]
16. Индексация БД / DB Indexing
- Индексация БД — это техника структурирования данных, позволяющая быстрее искать и извлекать данные из БД (соответствующие структуры данных называются индексами (indexes))
- Примером является создания индекса идентификаторов пользователей для ускорения поиска их данных
- Индексация БД [16]
17. Репликация / Replication
- Репликация — это процесс копирования и хранения объектов БД в нескольких БД, составляющих распределенную систему БД
- Примером является хранение копий данных на разных серверах CDN для обеспечения высокой доступность и скорости доступа к данным
- Репликация БД [17]
18. Аварийное переключение / Failover
- Аварийное переключение — это резервный режим работы, при котором функции компонентов системы передаются другим компонентам в случае выхода из строя основного компонента
- Примерами являются всевозможные встроенные механизмы автоматического переключения на резервные серверы в случае сбоя основного
- Аварийное переключение и аварийное восстановление [18]
19. Шлюз API / API Gateway
- Шлюз API — это сервер, принимающий запросы от клиента, применяющий к ним задержку (throttling), разные политики (например, политики безопасности) и передающий их соответствующим серверным сервисам
- Примером является использование шлюза AWS API для управления различными API
- Что такое шлюз API? [19]
20. Сервисная сетка / Service Mesh
- Сервисная сетка — это выделенный уровень инфраструктуры, предназначенный для облегчения взаимодействия между микросервисами
- Примером является интеграция Istio в качестве сервисной сетки для управления взаимодействием микросервисов
- Введение в сервисную сетку [20]
21. Бессерверные вычисления / Serverless Computing
- Бессерверные вычисления — это реализация облачных вычислений, позволяющая провайдеру облака динамически распределять аппаратные ресурсы
- Примером является использование AWS Lambda для запуска серверного кода приложения
- Что такое бессерверные вычисления? [21]
22. Событийно-ориентированная архитектура / Event-Driven Architecture
- Событийно-ориентированная архитектура — это парадигма архитектуры программного обеспечения (ПО), поощряющая генерацию, обнаружение и потребление событий (events), а также их обработку — реагирование на них тем или иным образом
- Примером является проектирование системы с передачей событий между микросервисами с помощью Apache Kafka
- Событийно-ориентированная архитектура [22]
23. Монолитная архитектура / Monolithic Architecture
- Монолитная архитектура — это архитектура ПО, когда все элементы являются частями одного приложения и функционируют как один сервис
- Примерами являются старые-добрые корпоративные приложения, построенные как одна большая единица
- Монолитная и микросервисная архитектуры [23]
24. Распределенная система / Distributed System
- Распределенная система — это модель, компоненты которой расположены на разных компьютерах в одной сети, которые взаимодействуют между собой путем передачи сообщений
- Примером является проектирование распределенной файловой системы, такой как Hadoop
- Введение в распределенные системы [24]
25. Очередь сообщений / Message Queue
- Очередь сообщений — это метод, обеспечивающий асинхронную связь между службами как в бессерверной, так и в микросервисной архитектуре
- Примером является использование RabbitMQ в качестве брокера сообщений
- Объяснение очереди сообщений [25]
26. Модель "Издатель/подписчик" / Pub/Sub Model
- Издатель/подписчик — это шаблон обмена сообщениями, в котором отправитель (издатель) публикует сообщения в канале, к которому имеют доступ получатели (подписчики). При этом, издателю не нужно ничего знать о подписчиках
- Примером является система уведомлений, реализованная с помощью Google Cloud Pub/Sub
- Обмен сообщениями по принципу "Издатель/подписчик" [26]
27. Разделение данных / Data Partitioning
- Разделение данных — это деление БД на небольшие, легко поддерживаемые и управляемые части
- Примером является разделение таблицы БД по дате для быстрого выполнения запросов
- Разделение БД [27]
28. Горизонтальное масштабирование / Horizontal Scaling
- Горизонтальное масштабирование — это увеличение мощности системы за счет добавления в нее дополнительных машин или узлов
- Примером является добавление дополнительных серверов для обработки возросшего веб-траффика
- Горизонтальное и вертикальное масштабирование [28]
28. Вертикальное масштабирование / Vertical Scaling
- Вертикальное масштабирование — это увеличение мощности системы за счет обновления существующего оборудования (обновление центральных процессоров (CPU) или оперативной памяти (RAM))
- Примером является обновление RAM сервера, позволяющее ему обрабатывать большее количество запросов одновременно
- Горизонтальное и вертикальное масштабирование [28]
30. Ограничение скорости / Rate Limiting
- Ограничение скорости — это метод контроля скорости траффика, который отправляет или получает контроллер сетевого интерфейса
- Примером является троттлинг (throttling) API для предотвращения вредоносного поведения
- Понимание ограничения скорости [29]
31. Схема автоматического выключателя / Circuit Breaker Pattern
- Схема автоматического выключателя — современный шаблон проектирования ПО, применяемый для обнаружения сбоев и инкапсуляции логики предотвращения их постоянного повторения
- Примером является обработка неудачных обращений к удаленной службе с помощью автоматического выключателя в микросервисной архитектуре
- Схема автоматического выключателя [30]
32. Согласованность данных / Data Consistency
- Согласованность данных — это состояние, когда данные являются одинаковыми в нескольких экземплярах и не повреждены
- Примером является поддержка согласованности данных пользователей с помощью нескольких реплик БД
- Модели согласованности данных [31]
33. Окончательная согласованность / Eventual Consistency
- Окончательная согласованность — это модель согласованности данных, используемая в распределенных вычислениях для достижения высокой доступности данных. Ее суть в том, что она допускает временную несогласованность данных при условии, что в конечном счете обновления системы распространятся и отразятся на всех узлах
- Примером является Amazon DynamoDB, предоставляющая окончательно согласованную модель для чтения данных
- Окончательная согласованность [32]
34. Строгая согласованность / Strong Consistency
- Строгая согласованность — это модель согласованности данных, гарантирующая, что каждое чтение получает актуальную (самую последнюю) запись конкретной единицы данных
- Такая модель согласованности используется в системах финансовых транзакций
- Строгая согласованность [33]
35. Контейнеризация / Containerization
- Контейнеризация — это процесс инкапсуляции (упаковки) приложения и всех его зависимостей в контейнер для запуска в любой вычислительной среде
- Примером является использование Docker для контейнеризации приложения для развертывания (деплоя) в рабочей, тестовой и производственной средах
- Что такое контейнеризация? [34]
36. Kubernetes
- Kubernetes — это платформа с открытым исходным кодом для автоматического развертывания, масштабирования и эксплуатации контейнеризованных приложений
- Примером является запуск и развертывание упакованного приложения с помощью Kubernetes
- Документация Kubernetes [35]
37. Автомасштабирование / Autoscaling
- Автомасштабирование — это автоматическая корректировка количества используемых вычислительных ресурсов в зависимости от пользовательской нагрузки
- Примером является использование AWS EC2 Auto Scaling для динамической корректировки количества экземпляров
- Объяснение автомасштабирования [36]
38. Мультиарендность / Multi-Tanency
- Мультиарендность — это архитектура, в которой один экземпляр ПО обслуживает несколько потребителей/покупателей
- Приложения SaaS (Software as a Service — ПО как услуга), такие как Salesforce, используют мультиарендность при предоставлении услуг различным категориям клиентов
- Одноарендность и мультиарендность [37]
39. Сброс нагрузки / Load Shedding
- Сброс нагрузки — это отказ от некоторых требований или ухудшение качества услуг для поддержания работоспособности системы в условиях высокой нагрузки
- Примером является отключение второстепенных услуг в периоды пиковой нагрузки
- Сброс нагрузки [38]
40. Идемпотентность / Idempotence
- Идемпотентность — это свойство объекта или операции при повторном применении операции к объекту давать тот же результат, что и при первом
- DELETE-запрос HTTP является идемпотентным
- Идемпотентность в API [39]
41. Кворум / Quorum
- Кворум — это минимальное количество голосов, необходимых для фиксации (commit) распределенной транзакции
- Репликация на основе кворума обеспечивает согласованность в распределенной БД
- Системы кворума [40]
42. Оркестрация / Orchestration
- Оркестрация — это архитектурный паттерн, при котором центральный координатор управляет взаимодействием сервисов между собой
- Примером является использование механизма рабочего процесса для управления многоэтапным бизнес-процессом
- Оркестрация [41]
43. Хореография / Choreography
- Хореография — это архитектурный паттерн, при котором сервисы являются независимыми и взаимодействуют друг с другом через события. В такой архитектуре отсутствует координатор или оркестратор
- Примером являются микросервисы, взаимодействующие между собой через шину событий (event bus)
- Хореография и оркестрация [42]
44. Реестр сервисов / Service Registry
- Реестр сервисов — это БД, которая следит за экземплярами микросервисов
- Примером является использование Eureka в качестве реестра сервисов в микросервисной архитектуре
- Реестр служб [43]
45. Ограничение API / API Rate Limiting
- Ограничение API — это управление тем, сколько запросов может отправить клиент за определенное время
- Примером является установка максимального количества запросов в 100 для предотвращения злого умысла
- Ограничение API [44]
46. Склад данных / Data Warehouse
- Склад данных — это система, помогающая анализировать бизнес-данные и создавать отчеты, центр бизнес-аналитики
- В качестве склада данных может использоваться Amazon Redshift
- Понимание склада данных [45]
47. Озеро данных / Data Lake
- Озеро данных — это система или репозиторий, в котором данные хранятся в собственном/необработанном формате, обычно в виде блобов (blobs) или файлов
- Для хранения и управления структурированными и неструктурированными данными в озере данных может использоваться Petabyte scale
- Озеро данных [46]
48. OLAP
- OLAP (Online Analytical Processing — обработка онлайн-аналитики) — это категория ПО, позволяющая анализировать данные, хранящиеся в БД
- Примером является использование кубов (cubes) OLAP для точечных аналитических и произвольных запросов
- Объяснение OLAP [47]
49. OLTP
- OLTP (Online Transaction Processing — обработка онлайн-транзакций) — это класс систем, которые управляют транзакционно-ориентированными приложениями
- Примером является использование OLTP-систем для управления данными транзакций, например, в банковских системах
- Объяснение OLTP [48]
50. Большие данные / Big Data
- Большие данные — это большие и сложные наборы данных, которыми невозможно эффективно управлять с помощью обычного ПО для обработки данных
- Примером является анализ взаимодействия пользователей социальных сетей для предсказания модных трендов
- Введение в большие данные [49]
Парочка статей по теме:
Парочка ресурсов для изучения системного дизайна:
Автор: aio350
Источник [55]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/devops/398345
Ссылки в тексте:
[1] Что такое масштабируемость и как ее достичь?: https://www.geeksforgeeks.org/what-is-scalability-and-how-to-achieve-it-learn-system-design/
[2] Понимание балансировки нагрузки: https://www.f5.com/glossary/load-balancer
[3] Что такое микросервисы?: https://aws.amazon.com/microservices/
[4] Понимание теоремы CAP: https://www.scylladb.com/glossary/cap-theorem/
[5] Объяснение шардинга БД: https://aws.amazon.com/what-is/database-sharding/
[6] Объяснение задержки: https://www.cloudflare.com/learning/performance/glossary/what-is-latency/
[7] Пропускная способность компьютерных сетей: https://www.techtarget.com/searchnetworking/definition/throughput
[8] Объяснение кэширования: https://aws.amazon.com/caching/
[9] Что такое CDN?: https://www.cloudflare.com/learning/cdn/what-is-a-cdn/
[10] Туториал по REST API: https://restfulapi.net/
[11] Введение в GraphQL: https://www.digitalocean.com/community/tutorials/an-introduction-to-graphql
[12] Свойства ACID в БД: https://www.geeksforgeeks.org/acid-properties-in-dbms/
[13] BASE и ACID: https://aws.amazon.com/compare/the-difference-between-acid-and-base-database/
[14] Что такое NoSQL БД?: https://www.mongodb.com/resources/basics/databases/nosql-explained
[15] Туториал по SQL: https://www.geeksforgeeks.org/sql-tutorial/
[16] Индексация БД: https://www.codecademy.com/article/sql-indexes
[17] Репликация БД: https://www.geeksforgeeks.org/data-replication-in-dbms/
[18] Аварийное переключение и аварийное восстановление: https://macquariecloudservices.com/blog/failover-vs-disaster-recovery/
[19] Что такое шлюз API?: https://www.f5.com/glossary/api-gateway
[20] Введение в сервисную сетку: https://aws.amazon.com/what-is/service-mesh/
[21] Что такое бессерверные вычисления?: https://www.cloudflare.com/learning/serverless/what-is-serverless/
[22] Событийно-ориентированная архитектура: https://aws.amazon.com/event-driven-architecture/
[23] Монолитная и микросервисная архитектуры: https://www.atlassian.com/microservices/microservices-architecture/microservices-vs-monolith
[24] Введение в распределенные системы: https://www.geeksforgeeks.org/what-is-a-distributed-system/
[25] Объяснение очереди сообщений: https://aws.amazon.com/message-queue/
[26] Обмен сообщениями по принципу "Издатель/подписчик": https://aws.amazon.com/what-is/pub-sub-messaging/
[27] Разделение БД: https://www.cockroachlabs.com/blog/what-is-data-partitioning-and-how-to-do-it-right/
[28] Горизонтальное и вертикальное масштабирование: https://www.digitalocean.com/resources/article/horizontal-scaling-vs-vertical-scaling
[29] Понимание ограничения скорости: https://www.solo.io/topics/rate-limiting/
[30] Схема автоматического выключателя: https://www.geeksforgeeks.org/what-is-circuit-breaker-pattern-in-microservices/
[31] Модели согласованности данных: https://www.geeksforgeeks.org/consistency-model-in-distributed-system/
[32] Окончательная согласованность: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html
[33] Строгая согласованность: https://www.geeksforgeeks.org/eventual-vs-strong-consistency-in-distributed-databases/
[34] Что такое контейнеризация?: https://aws.amazon.com/what-is/containerization/
[35] Документация Kubernetes: https://kubernetes.io/docs/home/
[36] Объяснение автомасштабирования: https://aws.amazon.com/autoscaling/
[37] Одноарендность и мультиарендность: https://www.digitalguardian.com/blog/saas-single-tenant-vs-multi-tenant-whats-difference
[38] Сброс нагрузки: https://www.techtarget.com/searchdatacenter/definition/load-shedding
[39] Идемпотентность в API: https://restfulapi.net/idempotent-rest-apis/
[40] Системы кворума: https://en.wikipedia.org/wiki/Quorum_(distributed_computing)
[41] Оркестрация: https://www.redhat.com/en/topics/automation/what-is-orchestration
[42] Хореография и оркестрация: https://www.wallarm.com/what/orchestration-vs-choreography
[43] Реестр служб: https://docs.spring.io/spring-cloud-netflix/docs/current/reference/html/#spring-cloud-eureka-server
[44] Ограничение API: https://datadome.co/bot-management-protection/what-is-api-rate-limiting
[45] Понимание склада данных: https://aws.amazon.com/data-warehouse/
[46] Озеро данных: https://azure.microsoft.com/en-us/solutions/data-lake/
[47] Объяснение OLAP: https://aws.amazon.com/what-is/olap/
[48] Объяснение OLTP: https://aws.amazon.com/rds/oltp/
[49] Введение в большие данные: https://www.geeksforgeeks.org/what-is-big-data/
[50] System Design 101: https://habr.com/ru/articles/770564/
[51] Вопросы по DevOps. Часть 1: https://habr.com/ru/articles/775560/
[52] Data Warehouse, Data Lake, Data Lakehouse, Data Fabric, Data Mesh – что это такое, и в чем разница между концепциями: https://habr.com/ru/articles/846296/
[53] ByteByteGo: https://blog.bytebytego.com/
[54] Devops Exercises: https://github.com/bregman-arie/devops-exercises
[55] Источник: https://habr.com/ru/companies/timeweb/articles/846420/?utm_source=habrahabr&utm_medium=rss&utm_campaign=846420
Нажмите здесь для печати.