Междинният софтуер за съобщения е междинна технология, съставена от механизъм за предаване на съобщения или режим на опашка за съобщения, който използва ефективен и надежден механизъм за обмен на данни независимо от платформата и интегрира разпределени системи, базирани на комуникация на данни. В момента в индустрията има много MQ продукти, като RabbitMQ, ActiveMQ, ZeroMQ и др., които са отличен междинен софтуер за съобщения, но кой от тях да изберем в проекта? Тази статия оценява и сравнява следните продукти на опашка за съобщения: RabbitMQ, ZeroMQ, ActiveMQ, MSMQ, Redis и memcacheQ
Отклонение: Тук първо можем да помислим върху един малък въпрос: "Защо ни трябват услуги за опашка на съобщения в уеб приложения?" ” Например, голям брой заявки за вмъкване, обновяване и други пристигат едновременно в MySQL, което директно води до безброй заключвания на редове и заключвания на таблици, а в крайна сметка дори твърде много заявки, което предизвиква твърде много грешки при връзките. Чрез използване на опашки за съобщения можем да обработваме заявките асинхронно, облекчавайки напрежението върху системата.
RabbitMQ Това е опашка с отворен код, написана на Erlang, която поддържа много протоколи: AMQP, XMPP, SMTP, STOMP, което я прави много тежка и по-подходяща за корпоративна разработка. Това е водеща реализация на AMQP протокола, който реализира брокерска архитектура, което означава, че съобщенията могат да бъдат поставени на опашка на централен възел, преди да бъдат изпратени на клиента. Има добра поддръжка за маршрутизиране, балансиране на натоварването или запазване на данните. Тази функция прави RabbitMQ лесен за използване и внедряване, подходящ за много сценарии като маршрутизиране, балансиране на натоварването или запазване на съобщенията, и може да се реализира само с няколко реда код с опашки за съобщения. Въпреки това, това го прави по-малко мащабируем и по-бавен, защото централният възел увеличава латентността и става по-голям след капсулиране на съобщението. За да конфигурирате RabbitMQ, трябва да инсталирате Erlang средата на целевата машина. Кликнете, за да видите това изображение в нов прозорец
? MQ(ZeroMQ) Тя е известна като най-бързата система за опашка за съобщения, особено при сценарии с голямо търсене на пропускателна способност. Това е много лека система за съобщения, разработена специално за сценарии с висока пропускателна способност и ниска латентност и често може да се намери в приложения във финансовия свят. В сравнение с RabbitMQ, ZeroMQ поддържа много усъвършенствани сценарии за съобщения, но трябва да се реализират отделни блокове в ZeroMQ фреймуърка (като сокети или устройства и др.).
? MQ (ZeroMQ) може да реализира напреднали/сложни опашки, в които RabbitMQ не е добър, но разработчиците трябва сами да комбинират множество технически рамки, а техническата сложност е предизвикателство за успешното приложение на този MQ. ZeroMQ има уникален модел без междинен софтуер, при който не е необходимо да инсталирате и стартирате сървър за съобщения или междинен софтуер, защото вашето приложение ще изпълнява тази роля. Всичко, което трябва да направите, е просто да се позовете на библиотеката ZeroMQ, която може да се инсталира чрез NuGet, и можете спокойно да изпращате съобщения между приложенията. Въпреки това, ZeroMQ предоставя само непостоянни опашки, което означава, че ако машината спре, данните ще бъдат загубени. Сред тях, Twitter Storm използва ZeroMQ като предаване на потоци от данни. ZeroMQ е много гъвкав, но трябва да научиш 80-страничното му ръководство (ако пишеш за разпределена система, непременно го прочети).
ZeroMQ няма междинна архитектура и не изисква никакви сервизни процеси и се изпълнява. Всъщност, крайната точка на вашето приложение изпълнява тази роля на обслужване. Това го прави много лесен за внедряване, но проблемът е, че няма къде да наблюдаваш, ако нещо се обърка. Колкото знаем, ZeroMQ предлага само непостоянни опашки. Можете да приложите собствени възможности за одит и възстановяване на данни, където ви трябват. Кликнете, за да видите това изображение в нов прозорец
MSMQ Това е единственото нещо в продукта на Microsoft, което се счита за ценно. Ако MSMQ може да докаже, че може да се справи с този вид задача, те ще изберат да я използват. Същността е, че това нещо не е сложно, нищо друго освен получаване и изпращане; Има някои твърди ограничения, като максималния размер на съобщението от 4MB. Въпреки това, той може да реши тези проблеми чрез свързване с някакъв софтуер като MassTransit или NServiceBus. Кликнете, за да видите това изображение в нов прозорец
Яфка/Кафка Kafka (която разпространява съобщения между различни възли) е разпределена MQ система, разработена и с отворен код от LinkedIn през декември 2010 г., и сега е инкубационен проект на Apache, високопроизводителна многоезична разпределена система за опашка за съобщения Publish/Subscribe, а Jafka се инкубира върху Kafka, която е подобрена версия. Той има следните характеристики: бърза персистентност, която може да запазва съобщения под системния overhead на O(1); Висока пропускателна способност, която може да достигне пропускателна способност от 10W/s на обикновен сървър; Напълно разпределена система, брокер, производител и потребител всички нативно поддържат разпределено и автоматично постигат сложно равновесие. Поддържа паралелно зареждане на Hadoop данни, което е жизнеспособно решение за лог данни и офлайн системи за анализ като Hadoop, но с ограниченията на обработката в реално време. Kafka обединява онлайн и офлайн обработката на съобщения чрез паралелния механизъм за зареждане на Hadoop, което също е важно за системата, изследвана в тази тема. Apache Kafka е много лека система за съобщения спрямо ActiveMQ и освен много добрата си производителност, тя е и разпределена система, която работи добре. Кликнете, за да видите това изображение в нов прозорец
Apache ActiveMQ ActiveMQ се намира някъде между двете (RabbitMQ и ZeroMQ), подобно на ZemoMQ, и може да се внедрява както в прокси, така и в P2P режим. Подобно на RabbitMQ, лесно се реализират сложни сценарии и изисква ниска консумация. ActiveMQ е известен като гръбнакът на света на Java. Тя има дълга история и е широко използвана. Тя е и кросплатформена, предоставяйки естествена точка за достъп до интеграция за продукти, които не са на платформата на Microsoft. Въпреки това, това е възможно да бъде разгледано само ако е преминало MSMQ. За да конфигурирате ActiveMQ, трябва да инсталирате Java средата на целевата машина. Кликнете, за да видите това изображение в нов прозорец Важно е да се отбележи, че следващото поколение продукт на ActiveMQ е Apollo, който е базиран на прототипа на ActiveMQ и е по-бърз, по-надежден и по-лесен за поддръжка инструмент за обмен на съобщения. Apache нарича Apollo най-бързия и най-стабилен STOMP (Streaming Text Oriented Message Protocol) сървър. Характеристиките на Аполон са следните: Поддържат се протоколи Stomp 1.0 и Stomp 1.1 Теми и опашки Queue Browser Тематични постоянни абонаменти Огледална опашка Надеждни съобщения Изтичане и обмен на съобщения Избор на съобщения JAAS потвърден Авторизация, базирана на ACL, Поддръжка на SSL/TLS и валидиране на сертификати REST Management API Кликнете, за да видите това изображение в нов прозорец
Редис Това е база данни Key-Value NoSQL, която се разработва и поддържа, въпреки че е система за съхранение на база данни Key-Value, но поддържа MQ функции, така че може да се използва като лека услуга за опашка. За операциите по въвеждане и излизане на опашка на RabbitMQ и Redis, по 1 милион пъти всяка, а времето за изпълнение се записва на всеки 100 000 пъти. Тестовите данни са разделени на четири различни размера: 128Bytes, 512Bytes, 1K и 10K. Експериментите показват, че при присъединяване към екипа производителността на Redis е по-висока от тази на RabbitMQ, когато сравнението на данните е малко, а ако размерът на данните надвишава 10K, Redis е непоносимо бавен. Когато излизахме от екипа, Redis показа много добри резултати, независимо от размера на данните, докато представянето на RabbitMQ беше значително по-ниско от това на Redis.
MemcacheQ Постоянна опашка за съобщения Memcacheq (накратко MCQ) е лека опашка за съобщения, като MemcacheQ има функции: 1 Лесен и лесен за използване 2 Бърза обработка 3 Множество опашки 4 Добра конкурентност 5 Съвместим с протокола Memcache. Това означава, че просто инсталирайте разширението memcache, без допълнителни плъгини. 6 Също така е удобно да се използва в zend framework.
В крайна сметка следните продукти: 1. И двете имат собствени клиентски API или поддържат множество програмни езици; 2. Има много документация; 3. Беше предоставена положителна подкрепа. 4. ActiveMQ, RabbitMQ, MSMQ, Redis трябва да стартират сервизни процеси, които могат да се наблюдават и конфигурират, а останалите са проблемни 5. Всички те осигуряват сравнително добра надеждност (последователност), мащабируемост и балансиране на натоварването, и разбира се, производителност
Няма да говоря глупости, по-долу е приложен набор от резултати от тестове, прихванати от интернет. Показва се броят на изпратените и получените съобщения в секунда. Целият процес генерира общо 1 милион 1K съобщения. Тестът беше проведен на самостоятелна машина с Windows Vista.
Както виждате, ZeroMQ не е ниво като всичко останало. Представянето му е изненадващо високо. Въпреки това, този продукт не осигурява запазване на съобщенията, не може лесно да съхранява и наблюдава междинни процеси и изисква самоодит и възстановяване на данни, затова не е задоволителен по отношение на лесната употреба и HA. Заключението е ясно: ако искате приложение да изпраща съобщения възможно най-бързо, избирате ZeroMQ. По-ценно е, когато не ви пука твърде много да загубите определени съобщения случайно.
Блогърът в тази статия се надява (и не се надява много) да използва Rabbit, Rabbitmq има вграден ха, ако формирате клъстер, няма нужда да се притеснявате за проблеми като балансиране на натоварването и можете да настроите огледало на опашките. Но този тип неща означават, че трябва да има повече тестове и накрая получаваш любим вариант, а всичко, което съм чувал и чел за Rabbit, ме кара да мисля, че трябва да е най-добрият избор.
|