- PVSM.RU - https://www.pvsm.ru -

50 терминов системного дизайна, которые должен знать каждый разработчик

50 терминов системного дизайна, которые должен знать каждый разработчик - 1

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