2013-05-30 13 views

Odpowiedz

7

Obecnie nie ma limitu pamięci procesowej - jest on omawiany na liście mailingowej itp. Możesz przeglądać te wątki.

Po stronie odwrotnej, gdy używasz implementacji wzorców OTP, takich jak gen_server, masz dużą swobodę w pobieraniu wiadomości z kolejki procesów i mierzeniu długości kolejki.

gen_server2 używany w rabbitmq używany do optymalizacji poprzez przenoszenie wiadomości do wewnętrznej struktury danych. Po tym można odrzucić każdą nową wiadomość przychodzącą, gdy wewnętrzna kolejka jest zbyt długa. Możesz to zrobić po cichu lub powiadomić nadawcę, że wiadomość została odrzucona.

Wszystko to jest na bardzo niskim poziomie.

RabbitMQ zapewni tę funkcjonalność na poziomie AMQP.

+0

gen_server2 wygląda ładnie –

+0

Czy gen_server2 implementuje okienkowanie? –

+0

Nie jestem pewien, jaki jest obecny stan implementacji gen_server2. Może być w jakiś sposób połączony z głównym, po wprowadzeniu nieliniowego dopasowywania komunikatów w kolejkach komunikatów w OTP serwer_grupy. – user425720

6

Powszechnym i dość dobrym sposobem wymuszania kontroli przepływu jest wybranie dobrze wybranych wiadomości w połączenia, które ograniczają obciążenie każdego klienta, który może załadować serwer do jednego, skutecznie dostarczając siłę w niezwykle prosty sposób. Sztuką jest oczywiście wybór, które komunikaty używają wywołań synchronicznych :-)

+0

To też byłoby moje rozwiązanie. Zasadniczo zbuduj kontrolę przepływu na linii. Są również bardziej zaawansowane rozwiązania. –

+1

Nie jestem pewien, czy rozumiem. Proponujesz synchronizację połączeń za pomocą asynchronizacji, która gwarantuje, że wiadomości są umieszczane w kolejce po stronie klienta? Myślę, że to zależy od przypadku użycia. Jeśli klient jest przejściowy, nie możemy sobie pozwolić na takie rozwiązanie. – user425720

+0

Trzon problemu polega na tym, że aby mieć jakąkolwiek formę kontroli przepływu, w końcu będziesz miał jakąś formę synchronizacji. Jeśli klient dostarczający przepływ po prostu przesunie wiadomość, nie możemy jej w żaden sposób ograniczyć. Odpowiedź na to pytanie często polega na ograniczeniu liczby klientów, ale wymaga to scentralizowanej wiedzy o liczbie klientów wymagających synchronizacji. Ostatecznie sprowadza się to do miejsca, w którym dokonujemy synchronizacji. Powszechne rozwiązanie w aplikacjach telcom jest zbyt proste w interfejsie, ale trzeba wiedzieć, kiedy rzucić :-) –