Источник — https://undraw.co/

Многие современные приложения необходимо создавать в масштабе предприятия, иногда даже в масштабе Интернета. Каждое приложение должно соответствовать требованиям масштабируемости, доступности, безопасности, надежности и отказоустойчивости.

В этой статье я расскажу о некоторых шаблонах проектирования, которые помогут вам с легкостью достичь вышеупомянутых возможностей. Я расскажу о каждом шаблоне, о том, как использовать этот шаблон в облачной среде и когда его использовать, а когда нет.

Некоторые из этих шаблонов не так уж новы, но очень полезны в современном облачном мире интернет-масштаба.

Вот список шаблонов, которые я буду обсуждать в этой статье:

1. Circuit Breaker
2. Command and Query Responsibility Segregation (CQRS)
3. Event Sourcing
4. Sidecar
5. Backend-for-Frontend
6. Strangler

Итак, давайте начнем.

Когда использовать этот шаблон

Распределенные системы должны проектироваться с учетом сбоев. В наши дни мир принял микросервисы, и эти сервисы в основном зависят от других удаленных сервисов. Эти удаленные службы могут не ответить вовремя из-за различных причин, таких как сеть, загрузка приложений и т. д. В большинстве случаев реализация повторных попыток должна быть в состоянии решить проблемы.

Но иногда могут возникать серьезные проблемы, такие как снижение качества обслуживания или полный отказ обслуживания сам по себе. Повторять попытки в таких случаях бессмысленно. Вот где шаблон прерывателя цепи может быть полезен.

Автоматический выключатель. Изображение автора.

На приведенной выше диаграмме показана реализация шаблона прерывателя цепи, когда служба 1 понимает, что при вызове службы 2 происходят постоянные сбои/тайм-ауты, вместо повторной попытки служба 1 отключает вызовы службы 2 и возвращает резервный ответ.

Существуют популярные библиотеки с открытым исходным кодом, такие как Netflix’s Hystrix или Reselience4J, которые можно очень легко использовать для реализации этого шаблона.

Если вы используете API-шлюзы или боковые прокси, такие как Envoy, то это может быть достигнуто на самом уровне прокси.

Примечание. Очень важно, чтобы при открытии канала было реализовано достаточное количество журналов и предупреждений, чтобы отслеживать запросы, полученные в это время, и чтобы операционная группа знала об этом.

Вы также можете реализовать прерыватель цепи с разомкнутой половиной цепи, чтобы продолжать обслуживать клиентов с ухудшенным обслуживанием.

CQRS — очень полезный шаблон для современных приложений, в которых используются хранилища данных. Он основан на принципе разделения операций чтения (запроса) и записи/обновления (команды) в хранилище данных.

Когда не следует использовать этот шаблон

  • Когда служба имеет очень высокую зависимость (например, службы основных данных)
  • Когда вы имеете дело с локальными зависимостями, автоматический выключатель может создавать дополнительные затраты.

Разделение ответственности команд и запросов (CQRS)

  • Когда вы смотрите на масштабирование приложения, ожидающего огромного количества операций чтения и записи

Когда использовать этот шаблон

Допустим, вы создаете приложение, которое требует, чтобы вы хранили данные в базе данных, такой как MySQL/PostgreSQL и т. д. Как всем известно, при записи данных в хранилище данных операция должна выполнять несколько шагов, таких как проверка, модель и постоянство. и, следовательно, типичные операции записи/обновления занимают больше времени, чем простые операции чтения.

Когда вы используете одно хранилище данных для одновременного выполнения операций чтения и записи в масштабе, вы можете столкнуться с проблемами производительности.

В таких случаях может быть полезен шаблон CQRS. Паттерн CQRS предлагает использовать разные модели данных для операций чтения и записи. Некоторые варианты также предполагают использование отдельных хранилищ данных для этих моделей.

CQRS. Изображение автора.

Примечание.Большинство баз данных PaaS в настоящее время предоставляют возможность создавать реплики чтения(«Google Cloud SQL», «Azure SQL DB», «Amazon RDS» и т. д.) хранилищ данных, которые значительно упрощают репликацию данных.

Многие корпоративные базы данных также предоставляют эту возможность, если вы имеете дело с локальными базами данных.

Примечание. В настоящее время некоторые люди также предпочитают внедрять реплики чтения в качестве быстрых и производительных баз данных NoSQL, таких как MongoDB и Elasticsearch.

Event Sourcing — это интересный шаблон проектирования, в котором последовательность событий предметной области хранится в виде журнала, а агрегированное представление журнала дает текущее состояние приложения.

Когда не следует использовать этот шаблон

  • Когда вы хотите настроить производительность операций чтения и записи отдельно
  • Когда ваши операции чтения в порядке, почти в реальном времени или, в конечном счете, непротиворечивые.
  • Когда вы создаете обычное CRUD-приложение, которое не предполагает большого количества операций чтения и записи за раз

Поиск событий

  • Когда обычные операции CRUD недостаточно хороши для удовлетворения требований

Когда использовать этот шаблон

Этот шаблон обычно используется для систем, которые не могут позволить себе блокировку хранилища данных и которым необходимо поддерживать аудит и историю событий — например, такие приложения, как бронирование отелей/конференций/мест.

Поиск событий. Изображение автора.

Рассмотрим систему бронирования гостиничных номеров, в которой пользователи должны бронировать или отменять бронирование. Здесь вам нужно хранить бронирования и отмены как серию событий. Перед каждым бронированием агрегированное представление показывает доступные комнаты, просматривая журналы событий.

Примечание.Большинство поставщиков облачных услуг поддерживают службы обмена сообщениями, такие как Google Pub/Sub, служебная шина Azure, AWS SQS и т. д. Эти службы в сочетании с надежно согласованными хранилищами данных можно использовать для реализации этого шаблона. .

Шаблон «Sidecar» стал популярным с появлением микросервисов. В этом шаблоне вы развертываете компонент приложения в отдельном процессе или контейнере. Это помогает достичь абстракции и инкапсуляции.

Когда не следует использовать этот шаблон

  • Обычно подходит для систем бронирования мест, таких как автобусы, поезда, конференции, кинозалы и т. д., или систем электронной коммерции, состоящих из таких событий, как операции с тележками, платежи и т. д.
  • Когда требуется тщательный аудит и воспроизведение событий для создания текущего и прошлого состояния приложений.
  • Когда регулярные операции CRUD достаточно хороши для удовлетворения требований пользователя.

Коляска

  • Когда вы имеете дело с несколькими и разнородными микросервисами в рамках продукта

Когда использовать этот шаблон

Envoy Proxy является одним из самых популярных сайдкар-прокси и широко используется. Это помогает вам отделить основные функции приложения, используя sidecar для изоляции общих функций, таких как сеть, наблюдаемость и безопасность.

Коляска. Изображение автора.

Такой тип sidecars может помочь абстрактному типу связи L4/L7. Sidecars, такие как Envoy Proxies, даже помогают повысить безопасность за счет реализации взаимного TLS.

Вы можете использовать это в сочетании с сервисной сеткой для улучшения связи и безопасности между различными микросервисами. Подробнее об этом можно прочитать в моей «предыдущей статье».

В типичном цикле разработки продукта инженеры серверной части отвечают за создание сервисов, которые взаимодействуют с хранилищами данных, а инженеры клиентской части заботятся о создании пользовательских интерфейсов. В наши дни приложения должны создаваться с учетом использования как мобильных, так и настольных компьютеров.

Когда не следует использовать этот шаблон

  • Когда вы имеете дело с устаревшими приложениями, которые обычно не справляются с современными проблемами связи и безопасности
  • Когда вы имеете дело с ограниченным количеством сервисов, которым необходимо взаимодействовать друг с другом

Backend-for-Frontend (BFF)

  • Небольшие приложения, в которых развертывание sidecar может быть неэкономичным или неудобным в эксплуатации.
  • Когда вы хотите предоставить продукт/услугу для разных клиентов, таких как настольные и мобильные клиенты

Когда использовать этот шаблон

Несмотря на то, что разрыв между мобильными и настольными устройствами с точки зрения аппаратного обеспечения сокращается, подключение и использование мобильных устройств по-прежнему сопряжены с трудностями.

В таких сценариях шаблоны BFF становятся весьма удобными. Здесь вы должны создавать/настраивать серверные службы для конкретного внешнего интерфейса.

Бэкенд для фронтенда. Изображение автора.

Чтобы оптимизировать производительность мобильных клиентов, вы можете создать отдельную серверную службу, которая отвечает упрощенными ответами с разбивкой на страницы.

Вы также можете использовать этот шаблон для агрегации различных сервисов, чтобы уменьшить болтовню.

Примечание.В настоящее время, если вы используете шлюз API, шаблон BFF можно легко реализовать в самом шлюзе, и вам не нужно поддерживать отдельные службы.

Если вы работаете в организации, которая находится на пути к модернизации приложений, шаблон проектирования Strangler является обязательным. Шаблон проектирования Strangler выступает за создание фасада поверх вашего наследия и нового приложения, предоставляя потребителям абстрактное представление.

Когда не следует использовать этот шаблон

  • Если вы хотите оптимизировать ответ для определенного типа клиентов
  • Если вы хотите уменьшить болтовню между мобильными клиентами и различными сервисами
  • Когда ожидается, что пользователи приложения будут использовать единый пользовательский интерфейс

Душитель

  • Когда ожидается, что мобильные и настольные приложения будут демонстрировать одинаковую информацию и предоставлять аналогичные функции.
  • Когда вы переносите или модернизируете сложное, сильно зависимое приложение, такое как миграция ERP

Когда использовать этот шаблон

Душитель. Изображение автора.

Этот шаблон отделяет потребителей от действий по миграции.

Примечание. В обычной ИТ-организации при переходе с одной ERP-системы на другую шаблон такого типа чрезвычайно полезен. Если вы используете шлюз API, реализовать это в самом прокси-сервере шлюза становится еще проще.

Вам нужно решить, хотите ли вы сохранить фасад в конце миграции или удалить его.

Следовать

Когда не следует использовать этот шаблон

  • Когда миграция проста и прямая замена является лучшим вариантом

«Лучшее программирование»

  • «https://www.un.org/sites/www.iamladp.org/files/webform/mv-r01.html»
    «https://www.un.org/sites/www.iamladp. org/files/webform/mv-r02.html»
    «https://www.un.org/sites/www.iamladp.org/files/webform/mv-r03.html»
    « https://www.un.org/sites/www.iamladp.org/files/webform/mv-r04.html»
    «https://www.un.org/sites/www.iamladp.org /files/webform/mv-r05.html»
    «https://www.un.org/sites/www.iamladp.org/files/webform/tv-n01.html»
    «https ://www.un.org/sites/www.iamladp.org/files/webform/tv-n02.html»
    «https://www.un.org/sites/www.iamladp.org/ files/webform/tv-n03.html»
    «https://www.un.org/sites/www.iamladp.org/files/webform/tv-n04.html»
    «https: //www.un.org/sites/www.iamladp.org/files/webform/tv-n05.html»
    «https://www.un.org/sites/www.iamladp.org/files /webform/par-v-bor01.html»
    «https://www.un.org/sites/www.iamladp.org/files/webform/par-v-bor02.html»
    «https://www.un.org/sites/www.iamladp.org/files/webform/par-v-bor03.html»
    «https://www.un.org/sites/www.iamladp.org/files/webform/par-v-bor04.html»
    «https://www.un.org/sites/www. iamladp.org/files/webform/par-v-bor05.html»
    «https://www.un.org/sites/www.iamladp.org/files/webform/real-v-alaves01.html »
    «https://www.un.org/sites/www.iamladp.org/files/webform/real-v-alaves02.html»
    «https://www.un.org /sites/www.iamladp.org/files/webform/real-v-alaves03.html»
    «https://www.un.org/sites/www.iamladp.org/files/webform/real- v-alaves04.html»
    «https://santaritasaude.azurewebsites.net/rtc/Av-A05.html»
    «https://santaritasaude.azurewebsites.net/rtc/Cl-v- Pi-va01.html»
    «https://santaritasaude.azurewebsites.net/rtc/Cl-v-Pi-va02.html»
    «https://santaritasaude.azurewebsites.net/rtc/ Cl-v-Pi-va03.html»
    «https://santaritasaude.azurewebsites.net/rtc/Cl-v-Pi-va04.html»
    «https://santaritasaude.azurewebsites. net/rtc/Cl-v-Pi-va05.html»
    «https://santaritasaude.azurewebsites.net/rtc/Nor-v-Mic1.html»
    «https://santa ritasaude.azurewebsites.net/rtc/Nor-v-Mic2.html»
    «https://santaritasaude.azurewebsites.net/rtc/Nor-v-Mic3.html»
    «https:// santaritasaude.azurewebsites.net/rtc/Nor-v-Mic4.html»
    «https://santaritasaude.azurewebsites.net/rtc/Nor-v-Mic5.html»
    «https:// santaritasaude.azurewebsites.net/rtc/Tv-C1.html»
    «https://santaritasaude.azurewebsites.net/rtc/Tv-C2.html»
    «https://santaritasaude.azurewebsites. net/rtc/Tv-C3.html»
    «https://santaritasaude.azurewebsites.net/rtc/Tv-C4.html»
    «https://santaritasaude.azurewebsites.net/rtc/ Tv-C5.html»
    «https://santaritasaude.azurewebsites.net/box/Roy-v-Mike-bo1.html»
    «https://santaritasaude.azurewebsites.net/box/ Roy-v-Mike-bo2.html»
    «https://santaritasaude.azurewebsites.net/box/Roy-v-Mike-bo3.html»
    «https://santaritasaude.azurewebsites. net/box/Roy-v-Mike-bo4.html»
    «https://santaritasaude.azurewebsites.net/box/Roy-v-Mike-bo5.html»
    «https:// santaritasaude.azurewebsites.net/etc/Sh ef-v-West-lt01.html»
    «https://santaritasaude.azurewebsites.net/etc/Shef-v-West-lt02.html»
    «https://santaritasaude.azurewebsites. net/etc/Shef-v-West-lt03.html»
    «https://santaritasaude.azurewebsites.net/etc/Shef-v-West-lt04.html»
    «https:// santaritasaude.azurewebsites.net/etc/Shef-v-West-lt05.html»
    «https://santaritasaude.azurewebsites.net/etc/West-v-Shef-er01.html»
    « https://santaritasaude.azurewebsites.net/etc/West-v-Shef-er02.html»
    «https://santaritasaude.azurewebsites.net/etc/West-v-Shef-er03.html»< br /> «https://santaritasaude.azurewebsites.net/etc/West-v-Shef-er04.html»
    «https://santaritasaude.azurewebsites.net/etc/West-v-Shef-er05 .html»
    «https://santaritasaude.azurewebsites.net/az1/JvM-box-01.html»
    «https://santaritasaude.azurewebsites.net/az1/JvM-box-02 .html»
    «https://santaritasaude.azurewebsites.net/az1/JvM-box-03.html»
    «https://santaritasaude.azurewebsites.net/az1/roy-v-toy4 .html»
    «https://сантари tasaude.azurewebsites.net/az1/roy-v-toy5.html»
    «https://santaritasaude.azurewebsites.net/az1/Au-v-Al-iv13.html»
    «https: //santaritasaude.azurewebsites.net/az1/Au-v-Al-iv14.html»
    «https://santaritasaude.azurewebsites.net/az1/Au-v-Al-iv15.html»
    «https://santaritasaude.azurewebsites.net/az1/cvt-rj1.html»
    «https://santaritasaude.azurewebsites.net/az1/cvt-rj2.html»
    «https: //santaritasaude.azurewebsites.net/az1/cvt-rj3.html»
    «https://santaritasaude.azurewebsites.net/az1/cvt-rj4.html»
    «https://santaritasaude. azurewebsites.net/az1/NvM-nx9.html»
    «https://santaritasaude.azurewebsites.net/az1/NvM-nx10.html»
    «https://santaritasaude.azurewebsites.net/ az1/NvM-nx11.html»
    «https://santaritasaude.azurewebsites.net/az1/PvC-rc5.html»
    «https://santaritasaude.azurewebsites.net/az1/PvC- rc6.html»
    «https://santaritasaude.azurewebsites.net/az1/PvC-rc7.html»
    «https://santaritasaude.azureweb

Совет программистам.

Спасибо Заку Шапиро.

Шаблоны проектирования современной архитектуры для профессионалов в области программного обеспечения

3.6K

6

Когда служба зависит от другой удаленной службы, и в некоторых сценариях возможен сбой.