Открыть сервис

Middleware

Middleware (промежуточное программное обеспечение, ППО) — это класс программного обеспечения, предназначенный для обеспечения взаимодействия между различными компонентами, приложениями или сервисами в распределённых вычислительных системах. Middleware выступает в роли связующего слоя, скрывающего сложность гетерогенной инфраструктуры (разные операционные системы, языки программирования, сетевые протоколы) и предоставляющего унифицированный интерфейс для обмена данными, вызова удалённых процедур и управления транзакциями. Термин получил широкое распространение в 1990-х годах с развитием корпоративных информационных систем и клиент-серверной архитектуры.

История

Предпосылки возникновения

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

Развитие в 1990-х годах

В 1990-х годах компании, такие как IBM, Oracle и Microsoft, начали выпускать коммерческие продукты, реализующие концепцию middleware. Ключевыми вехами стали:

  • 1991 год: выпуск спецификации CORBA (Common Object Request Broker Architecture) консорциумом OMG (Object Management Group), которая позволяла вызывать методы объектов, расположенных на удалённых серверах, независимо от языка программирования и операционной системы.
  • 1995 год: появление технологии RMI (Remote Method Invocation) в языке Java, упростившей создание распределённых приложений.
  • 1996 год: выпуск Microsoft DCOM (Distributed Component Object Model), расширяющего COM для работы в сети.
  • 1998 год: появление технологии J2EE (Java 2 Platform, Enterprise Edition), которая включала в себя сервлеты, JSP (JavaServer Pages) и EJB (Enterprise JavaBeans), ставшие основой для корпоративных приложений.

Эволюция в 2000-х годах

С развитием веб-технологий и появлением SOAP (Simple Object Access Protocol) и XML-RPC middleware эволюционировало в сторону сервис-ориентированной архитектуры (SOA). В 2000-х годах активно использовались ESB (Enterprise Service Bus) — шины корпоративных сервисов, такие как IBM WebSphere ESB и Mule ESB. Параллельно развивались технологии очередей сообщений (Message Queue), например, IBM MQ (ранее MQSeries) и RabbitMQ.

Современный этап

С 2010-х годов с ростом популярности микросервисной архитектуры, контейнеризации (Docker, Kubernetes) и облачных вычислений middleware трансформировалось. Возникли лёгкие и высокопроизводительные решения, такие как API-шлюзы (Kong, NGINX Plus), сервисные сетки (Service Mesh) — Istio, Linkerd, и брокеры сообщений нового поколения (Apache Kafka, NATS). Современный middleware часто реализуется как набор микросервисов, управляемых оркестраторами.

Классификация

Middleware можно классифицировать по функциональному назначению и способу взаимодействия.

По типу взаимодействия

  1. Удалённый вызов процедур (RPC — Remote Procedure Call):
  • Позволяет вызывать функции на удалённом сервере так, как если бы они были локальными.
  • Примеры: gRPC, Apache Thrift, XML-RPC.
  1. Объектное middleware (Object Middleware):
  • Обеспечивает вызов методов удалённых объектов.
  • Примеры: CORBA, Java RMI, Microsoft .NET Remoting.
  1. Ориентированное на сообщения (MOM — Message-Oriented Middleware):
  • Использует асинхронную передачу сообщений через очереди или топики.
  • Примеры: RabbitMQ, Apache ActiveMQ, IBM MQ, NATS.
  1. Ориентированное на базы данных (Database Middleware):
  • Предоставляет унифицированный доступ к различным СУБД через драйверы (ODBC, JDBC, ADO.NET).
  1. Транзакционное middleware (Transaction Processing Monitors):
  • Управляет распределёнными транзакциями, обеспечивая их атомарность, согласованность, изолированность и долговечность (ACID).
  • Примеры: Tuxedo (Oracle), CICS (IBM).
  1. Интеграционное middleware (Integration Middleware):

По среде исполнения

  • Серверное middleware: выполняется на серверах приложений (например, JBoss/WildFly, Apache Tomcat, WebLogic).
  • Встраиваемое middleware: встраивается в конечные устройства (IoT, промышленные контроллеры).
  • Облачное middleware: предоставляется как сервис (PaaS) — например, Amazon SQS, Google Cloud Pub/Sub, Azure Service Bus.

Устройство и архитектура

Основные компоненты

Типичная архитектура middleware включает:

  • Транспортный уровень: обеспечивает передачу данных по сети (TCP/IP, HTTP/2, AMQP, MQTT).
  • Протокольный уровень: определяет формат сообщений и правила их обработки (SOAP, REST, gRPC, собственные бинарные протоколы).
  • Уровень маршрутизации: направляет запросы к нужным сервисам на основе правил (например, в ESB или API-шлюзе).
  • Уровень безопасности: аутентификация, авторизация, шифрование (TLS/SSL, OAuth 2.0, JWT).
  • Уровень управления транзакциями: координация распределённых транзакций (протокол двухфазной фиксации — 2PC).
  • Уровень мониторинга и логирования: сбор метрик, трассировка запросов (OpenTelemetry, Prometheus).

Принципы работы

  1. Прямое взаимодействие (RPC): клиент отправляет запрос, middleware сериализует его (например, в JSON или Protobuf), передаёт по сети, сервер десериализует и выполняет. Ответ возвращается синхронно.
  2. Асинхронное взаимодействие (MOM): отправитель помещает сообщение в очередь (queue) или публикует в топик (topic). Получатель подписывается на топик или извлекает сообщение из очереди. Middleware гарантирует доставку (at-least-once, exactly-once) и сохраняет сообщения при сбоях.
  3. Потоковая обработка (Stream Processing): используется в Apache Kafka и аналогичных системах. Данные обрабатываются как непрерывный поток событий, что позволяет строить системы реального времени.

Применение

Middleware применяется практически во всех современных распределённых системах.

Корпоративные информационные системы (ERP, CRM, SCM)

  • Обеспечивает интеграцию модулей SAP, Oracle E-Business Suite, 1С:Предприятие.
  • Используется для обмена данными между бухгалтерией, складом и отделом продаж.

Финансовый сектор

  • Платёжные системы (SWIFT, Visa, Mastercard) используют middleware для обработки транзакций в реальном времени.
  • Биржевые торговые системы (например, CME Globex) применяют высокопроизводительное middleware (с задержками в микросекундах).

Телекоммуникации

  • Системы биллинга, управления абонентами (OSS/BSS) используют ESB и MOM.
  • Протоколы SIGTRAN, Diameter реализуют middleware для передачи сигнализации в сетях 3G/4G/5G.

Веб-сервисы и облачные платформы

  • API-шлюзы (Kong, Amazon API Gateway) управляют трафиком к микросервисам.
  • Сервисные сетки (Istio, Linkerd) обеспечивают безопасное и наблюдаемое взаимодействие между контейнерами в Kubernetes.

Промышленность и IoT

  • Промышленные шины (OPC UA, MQTT) выступают в роли middleware для сбора данных с датчиков и управления оборудованием.
  • Платформы промышленного интернета вещей (IIoT) используют Apache Kafka для сбора и анализа телеметрии.

Государственные информационные системы

  • В России middleware используется в системах межведомственного электронного взаимодействия (СМЭВ), портале «Госуслуги», системах ЕГАИС и маркировки товаров.

Примеры популярных решений

КатегорияПродуктРазработчикПримечание
Брокеры сообщенийApache KafkaApache Software FoundationВысокопроизводительная потоковая платформа, де-факто стандарт для событийно-ориентированных архитектур.
RabbitMQVMware (Pivotal)Популярный брокер, поддерживающий AMQP, MQTT, STOMP.
NATSCNCFЛёгкий, высокопроизводительный брокер для облачных и IoT-систем.
API-шлюзыKongKong Inc.Открытый API-шлюз на базе OpenResty (Nginx + Lua).
NGINX PlusF5 Inc.Коммерческая версия веб-сервера с функциями API-шлюза.
Сервисные сеткиIstioGoogle, IBM, LyftОдна из наиболее популярных сервисных сеток для Kubernetes.
LinkerdCNCFЛёгкая сервисная сетка, написанная на Rust.
RPC-фреймворкиgRPCGoogleВысокопроизводительный RPC-фреймворк на основе HTTP/2 и Protobuf.
ESB / ИнтеграцияMuleSoft Anypoint PlatformSalesforceКоммерческая платформа для интеграции приложений и API.
Apache CamelApache Software FoundationОткрытый фреймворк для интеграции, использующий шаблоны Enterprise Integration Patterns.

Критика и ограничения

  1. Сложность и стоимость: внедрение и поддержка middleware (особенно коммерческого, например, IBM WebSphere или Oracle Tuxedo) требует высокой квалификации персонала и значительных финансовых затрат.
  2. Узкое место (bottleneck): в архитектурах с централизованным middleware (например, ESB) он может стать точкой отказа и снижать производительность при высоких нагрузках.
  3. Привязка к вендору (vendor lock-in): проприетарные решения (IBM MQ, Microsoft BizTalk) затрудняют миграцию на другие платформы.
  4. Избыточность для простых задач: для небольших приложений или монолитов использование полноценного middleware может быть излишним и усложнять архитектуру.
  5. Проблемы совместимости: разные реализации одного стандарта (например, CORBA) часто не полностью совместимы друг с другом.

См. также

  • Распределённые вычисления
  • Микросервисная архитектура
  • Сервис-ориентированная архитектура (SOA)
  • Очередь сообщений
  • Транзакция (информатика)

Источники

  • Э. Таненбаум, М. ван Стеен. «Распределённые системы. Принципы и парадигмы» (2003).
  • Г. Хоп, Б. Вульф. «Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions» (2004).
  • Документация Apache Kafka, RabbitMQ, gRPC, Istio.
  • Стандарты OMG CORBA (1991–2012).
  • Материалы конференций QCon, Devoxx, JPoint (2015–2023).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →