Источник — 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
Совет программистам.
Спасибо Заку Шапиро.
Шаблоны проектирования современной архитектуры для профессионалов в области программного обеспечения