Блог Архитектура и шаблоны проектирования → Полезные материалы по архитектуре ПО | OTUS
Выбор MQ для HighLoad-проекта

Highload_970x90-1801-fc90a0.png

Чтобы управлять потоком запросов в микросервисной архитектуре, применяют очереди сообщений MQ (message queues). Но какую MQ лучше выбрать, если речь идет о высоконагруженном проекте?

Sharding в построении отказоустойчивого сервиса

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

Откуда берется высокая нагрузка?

Highload – это не болезнь, а условия, при которых приходится функционировать той либо иной системе. И насколько эта система будет справляться со своей нагрузкой, зависит работа многих видов бизнеса.

Архитектурные паттерны: Event Sourcing

Arch_headline_970x70-1801-410a68.png

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

Архитектурные паттерны: горизонтальное масштабирование и CQRS

Arch_headline_970x70-1801-410a68.png

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

Шаблон проектирования Prototype

Arch_headline_970x70-1801-410a68.png

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

Массив как способ структурирования данных

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

Динамическая маршрутизация запроса в микросервисах

Под динамической маршрутизацией запроса понимается ситуация, когда API Gateway (Zuul) получает возможность выбора среди нескольких инстансов одного и того же сервиса, необходимого именно нам. Как правило, данную задачу можно решить, если добавить некий предикат, позволяющий на этапе обработки запроса выбрать нужный сервис из общего списка сервисов с таким же именем.

Транзакции в highload-проектах

Highload_970x90-1801-fc90a0.png

Все мы прекрасно знаем 4 главных требования к транзакциям: атомарность, изолированность, согласованность и долговечность (ACID — Atomicity, Consistency, Isolation, Durability). Давайте поговорим о транзакциях в контексте высоконагруженных проектов.

Разбиваем монолит на микросервисы

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