2012-03-05 23 views
7

Szukam pomysłów, jak przyspieszyć przekazywanie wiadomości za pośrednictwem RabbitMQ.Szybkość transferu RabbitMQ przyspiesza?

Zainstalowałem najnowszą wersję na 64-bitowym systemie Windows, uruchamiając serwer na moim komputerze lokalnym, na którym również publikuję i pobieraję do/z aplikacji C#. Początkowo przekraczałem 40 000 wiadomości na sekundę, co jest imponujące, ale nie odpowiada moim potrzebom (rywalizuję z niestandardowym czytnikiem binarnym, który może obsłużyć 24 miliony niezarealizowanych 16-bajtowych tablic bajtowych na sekundę, oczywiście nie spodziewam się zbliżyć do tego, ale Próbuję przynajmniej poprawić). Muszę jak najszybciej wysłać około 115 000 000 wiadomości. Nie chcę utrwalać danych, a połączenie będzie bezpośrednie dla pojedynczego klienta. Następnie zbudowałem fragmenty 16-bitowych tablic i opublikowałem na magistrali bez żadnej poprawy. Szybkość transferu max. 45mb/s. Uważam, że jest to bardzo powolne, biorąc pod uwagę fakt, że w końcu powinien po prostu sprowadzać się do nieprzetworzonej prędkości transmisji, ponieważ mógłbym tworzyć tablice bajtowe o wielkości kilku megabajtów, gdzie współczynnik wydajności routingu przez centralę staje się nieistotny w porównaniu do nieprzetworzonej prędkości transmisji. Dlaczego moja magistrala komunikatów ma maksymalną prędkość transferu 45 Mb/s?

+0

jeśli jest tylko 1 konsument, dlaczego nie wysłać bezpośrednio przez TCP? naprawdę nie potrzebujesz autobusu z wiadomościami. –

+0

Jak wygląda twój IO (sieć, dysk) i procesor podczas tych testów? – Xailor

+0

prawdopodobnie powinieneś spojrzeć na zeromq zamiast rabbitmq. Twoje zadanie wydaje się być odpowiednie dla 0mq. Przynajmniej mają około 3 000 000 wiadomości na sekundę dla tego rozmiaru wiadomości (16 bajtów). http://www.zeromq.org/results:0mq-tests-v03 –

Odpowiedz

1

Bump ... and Update: Nie widziałem żadnej odpowiedzi na to pytanie w dłuższym czasie. Jestem nieco zaskoczony, że nie zagrał jeden programista RabbitMQ. Grałem intensywnie z RabbitMQ i ZeroMQ. Postanowiłem, że RabbitMQ nie sprosta zadaniu, gdy przyjrzymy się wysokowydajnym procesom przesyłania komunikatów. Wdrożenie brokera, a zwłaszcza logiki przetwarzania, jest głównym wąskim gardłem w celu zwiększenia przepustowości. Zrzuciłem RabbitMQ z mojej listy możliwych opcji.

W białej księdze opisano, w jaki sposób dostarczyły rozwiązanie do zarządzania strumieniami danych finansowych o niskich opóźnieniach i wysokiej przepustowości, ale wydaje mi się, że wszystko, co robili, polegało na wyrzucaniu sprzętu, zamiast oferować rozwiązanie ukierunkowane na małe opóźnienia, wymagania wysokiej przepustowości.

ZeroMQ wykonał znakomitą pracę po dokładniejszym przestudiowaniu dokumentacji. Mogę uruchomić komunikację w procesie, zapewnia ona wystarczająco stabilne modele push/pull, pub/sub, req/rep oraz pary/pary, których potrzebuję. Szukałem blokowania logiki w obrębie wzorca pub/sub, którego nie zapewnia ZeroMQ (zamiast tego generuje komunikaty po przekroczeniu wysokiego znaku wodnego), ale schemat push/pull zapewnia blokowanie. Tak, prawie wszystko, co potrzebne jest przewidziane. Jedyny problem, jaki mam, to zrozumienie przetwarzania zdarzeń; implementacja struktury zdarzeń przez sondę/multipleks jest niezadowalająca.