Изменения

SockPQd - диспетчер очередей с приоритетами

15 байтов добавлено, 19:33, 29 августа 2009
Описание
== Описание ==
'''sockPQd очень гибок — гибок''' — вы поймёте это и сами после прочтения документации. По сути sockPQd является высокопроизводительным и надёжным диспетчером заданий. С помощью sockPQd вы превращаете свой сервер в клиента — доставку запросов (заданий) обеспечивает sockPQd. В основе распределения заданий лежит модель, представляющая из себя множество очередей с приоритетами.
'''sockPQd может служить «балансировщиком нагрузки» между очередями'''. sockPQd управляет множеством очередей с приоритетами. Каждая очередь имеет название, которое передаётся в запросах добавления и извлечения элементов из очереди вместе с приоритетом и данными задания. В случае выбора задания из произвольного очереди sockPQd выступает именно в роли «балансировщика нагрузки» между очередями, так как все очереди рассматриваются как равноправные, и задание выбирается из произвольной. Если же вы хотите реализовать целочисленные «приоритеты» очередей, чтобы средние количества выбранных из очередей заданий были им пропорциональны, просто используйте N очередей вместо одной, где N — приоритет очереди, и помещайте свои задания случайно в одну из них.
'''sockPQd не является ни многопоточным, ни многопроцессным демоном'''. Обслуживание всех клиентов осуществляется одним потоком, мультиплексирующим запросы
с помощью libevent и её Perl-биндингов {{CPAN|Event::Lib}}. Это ликвидирует необходимость в межпроцессном взаимодействии и синхронизации и позволяет sockPQd быть простым, а следовательно, надёжным. Кроме того, это же позволяет легко блокировать клиентов, просто откладывая на время ответ и предоставляя клиентской библиотеке осуществление блокировки вызывающего процесса или потока с помощью использования блокирующего ожидания входящих данных на сокете. Хотя, мультиплексирование имеет и недостаток: добавление и извлечение крупных заданий будут задерживать всех остальных клиентов. Следовательно, применяя sockPQd, нужно стараться использовать задания небольшого размера (до ~1450 байт, если помнить о том, что стандартное значение MTU (Maximum Transmission Unit — максимальный размер одного пакета) для протокола TCP/IP равно 1500 байтам). Но в любом случае, использование мелких заданий — хорошо, а больших — плохо, поэтому недостаток несущественный.