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 можно классифицировать по функциональному назначению и способу взаимодействия.
По типу взаимодействия
- Удалённый вызов процедур (RPC — Remote Procedure Call):
- Позволяет вызывать функции на удалённом сервере так, как если бы они были локальными.
- Примеры: gRPC, Apache Thrift, XML-RPC.
- Объектное middleware (Object Middleware):
- Обеспечивает вызов методов удалённых объектов.
- Примеры: CORBA, Java RMI, Microsoft .NET Remoting.
- Ориентированное на сообщения (MOM — Message-Oriented Middleware):
- Использует асинхронную передачу сообщений через очереди или топики.
- Примеры: RabbitMQ, Apache ActiveMQ, IBM MQ, NATS.
- Ориентированное на базы данных (Database Middleware):
- Транзакционное middleware (Transaction Processing Monitors):
- Управляет распределёнными транзакциями, обеспечивая их атомарность, согласованность, изолированность и долговечность (ACID).
- Примеры: Tuxedo (Oracle), CICS (IBM).
- Интеграционное middleware (Integration Middleware):
- Предназначено для связывания разнородных систем, часто использует ESB (Enterprise Service Bus).
- Примеры: MuleSoft Anypoint Platform, Apache Camel, WSO2.
По среде исполнения
- Серверное 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).
Принципы работы
- Прямое взаимодействие (RPC): клиент отправляет запрос, middleware сериализует его (например, в JSON или Protobuf), передаёт по сети, сервер десериализует и выполняет. Ответ возвращается синхронно.
- Асинхронное взаимодействие (MOM): отправитель помещает сообщение в очередь (queue) или публикует в топик (topic). Получатель подписывается на топик или извлекает сообщение из очереди. Middleware гарантирует доставку (at-least-once, exactly-once) и сохраняет сообщения при сбоях.
- Потоковая обработка (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 Kafka | Apache Software Foundation | Высокопроизводительная потоковая платформа, де-факто стандарт для событийно-ориентированных архитектур. |
| RabbitMQ | VMware (Pivotal) | Популярный брокер, поддерживающий AMQP, MQTT, STOMP. | |
| NATS | CNCF | Лёгкий, высокопроизводительный брокер для облачных и IoT-систем. | |
| API-шлюзы | Kong | Kong Inc. | Открытый API-шлюз на базе OpenResty (Nginx + Lua). |
| NGINX Plus | F5 Inc. | Коммерческая версия веб-сервера с функциями API-шлюза. | |
| Сервисные сетки | Istio | Google, IBM, Lyft | Одна из наиболее популярных сервисных сеток для Kubernetes. |
| Linkerd | CNCF | Лёгкая сервисная сетка, написанная на Rust. | |
| RPC-фреймворки | gRPC | Высокопроизводительный RPC-фреймворк на основе HTTP/2 и Protobuf. | |
| ESB / Интеграция | MuleSoft Anypoint Platform | Salesforce | Коммерческая платформа для интеграции приложений и API. |
| Apache Camel | Apache Software Foundation | Открытый фреймворк для интеграции, использующий шаблоны Enterprise Integration Patterns. |
Критика и ограничения
- Сложность и стоимость: внедрение и поддержка middleware (особенно коммерческого, например, IBM WebSphere или Oracle Tuxedo) требует высокой квалификации персонала и значительных финансовых затрат.
- Узкое место (bottleneck): в архитектурах с централизованным middleware (например, ESB) он может стать точкой отказа и снижать производительность при высоких нагрузках.
- Привязка к вендору (vendor lock-in): проприетарные решения (IBM MQ, Microsoft BizTalk) затрудняют миграцию на другие платформы.
- Избыточность для простых задач: для небольших приложений или монолитов использование полноценного middleware может быть излишним и усложнять архитектуру.
- Проблемы совместимости: разные реализации одного стандарта (например, 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 →