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

0wmsoaitdfunm9fz6necxstpfyk.png

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-канале

u9vgio3hxj12h5u7j3un0wx_zpk.png

© Habrahabr.ru