#c_sharp #net #msmq
Возьмем как пример простое сетевое приложение-клиент, которое подключается к нескольким компьютерам (серверам с определенной версией VNC-сервера на борту, т.е. нету возможности изменить серверную часть) через TcpClient\SslStream, отправляет и получает какие либо данные, закрывает соединение. Соответственно приложение многопоточное или асинхронное. Предназначена ли технология MSMQ (пространство имен System.Messaging) для замены TcpClient\SslStream и увеличения производительности в данном контексте? И если да - за счет чего происходит увеличение производительности? p.s. если возможно - напишите простой пример реализации.
Ответы
Ответ 1
Если посмотреть на список сетевых протоколов в соответствии с OSI, можно заметить, что проткол TCP находится на 4-м уровне OSI, транспортном, в то время как протоколы MQ — на 7-м, уровне приложений. Это значит, что никакой протокол MQ (а они бывают разными: WebSphereMQ, AMQP и т.д.) не может заменить TCP. Он будет работать поверх него, пользуясь его возможностями и дополняя их своими. Похожая ситуация возникает между HTTP и TCP, поскольку HTTP также находится на 7-м уровне. Отвечая на вторую часть вопроса: производительность будет гарантированно ниже, поскольку протоколы верхнего уровня добавляют свои накладные расходы. Для чего же используются очереди сообщений и конкретно MSMQ? Они обеспечивают несколько возможностей, в частности, упорядочивание сообщений из разных мест, надёжность хранения недоставленных сообщений, маршрутизацию и т.д. Их удобно использовать для реализации паттернов CQRS и Event sourcing (https://habrahabr.ru/post/146429/, https://habrahabr.ru/post/149464/), да и в принципе обмен информацией проще производить при помощи очереди сообщений. Относительно недавно межбанковская система SWIFT переходила, и, может быть уже перешла на WebSphere MQ. Если вы имеете представление об этой системе, то сразу сможете представить, для решения каких задач очереди сообщений подходят хорошо.Ответ 2
У MSMQ есть свой протокол. В условиях "нету возможности изменить серверную часть" использование MSMQ невозможно. По поводу скорости работы. Основная задача MSMQ - не ускорение, а повышение надежности. Ускорение может достигаться за счет использования постоянного соединения вместо постоянных переподключений, но это качество не является уникальным для MSMQ. Вы можете с легкостью сделать то же самое на сокетах. Также ускорение может достигаться за счет использования более разумного числа потоков. Актуально если вы раньше создавали по потоку на соединение. Также ускорение может достигаться за счет кластеризации, если архитектура приложения позволит, в таком случае MSMQ возьмет на себя функции балансировщика нагрузки.
Комментариев нет:
Отправить комментарий