Розетки Zmq_Push и Zmq_Pull - PullRequest
0 голосов
/ 01 июля 2019

Я работаю над проектом, в котором я использую один сокет zmq_push в нескольких потоках, где каждый поток непрерывно отправляет пакеты.С другой стороны, у меня есть один сокет Zmq_Pull, который продолжает получать .... Я хочу, чтобы этот процесс был быстрее, мое приложение, которое отправляет пакеты через zmq, работает быстро, но я сомневаюсь, что мой прием быстрее или нет ..... И еще одна вещь, каждый поток, отправляющий данные, уникален, основываясь на данных каждого потока, я обрабатываю в другом потоке на стороне получателя .... как сделать этот процесс быстрее.Я считаю, что вместо того, чтобы зацикливаться на каждом пакете на recv end, мне нужно это сделать отдельно для каждого потока ... Есть ответы на вопрос, как это сделать?

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Q: как сделать этот процесс быстрее?
A: Нам нужны обе КОММУНИКАЦИИ и ОБРАБАТЫВАТЬ быстрее

Если вы чувствуете ZeroMQКонцепция является новой для вас и может быть немного сложно освоить для вашей будущей работы, вы можете рассмотреть ключевые функции концепции в этом [Принципы иерархии ZeroMQ менее чем за пять секунд ]

a) всегда можно улучшить возможности обработки, связанные со связью, с помощью экземпляра ядра системы Context( nIoTHREADs ), имеющего nIoTHREADs >> 1

b) при технически проверенной необходимости можно выгрузить каждый поток обработки с помощью достаточно эффективно спроектированной локальной инфраструктуры обмена сообщениями между процессами (чтобы разгрузить коммуникации отспецифичная для потока обработка) с использованием протокола inproc:// без стекового протокола от каждого потока обработки до "центрального" коммуникатора перекачки данных (Context -экземпляр (ы) может совместно использоваться потоками, в то время как Socket -инстанции не могут - это ZeroMQ Zen-of-Zero, по замыслу).Таким образом, каждый поток обработки не блокирует и не изолирует ценные ресурсы, предоставляемые таким образом для более высоких мощностей коммуникатора с «центральной» перекачкой данных, и может «делегировать» части рабочей нагрузки, связанные с передачей данных, «центральной» перекачке данных,используя самую легкую философию «забывай и забывай» в потоках обработки, одновременно позволяя Коммуникатору обрабатывать и управлять всеми потенциальными интеллектуальными функциями, такими как сигнализация ACK / NACK на уровне приложения для отброшенных сообщений, масштабирование пропускной способности услуги на лету имногие аналогичные функции, которые каждый инженер по настройке производительности будет любить иметь.

c) Можно, при технически обозначенной необходимости, повысить производительность принимающей стороны (сторона PULL) наиспользуя пул PULL -приемников и сделайте сторону PUSH -er равной .connect() каждому из них.Внутренняя механика экземпляра PUSH -side Context будет нуждаться в хорошо смазанной (хорошо параметризованной) конфигурации для нескольких исходящих каналов ввода-вывода, однако, если производительность обработки PULL -ers на удаленной стороне была блокирующей,это увеличенная и масштабируемая емкость пула - путь, конечно, не в том случае, когда ресурсы на стороне PULL уже размещены на одном аппаратном узле с отправителями, причем оба находятся уже на пределе доступной обработкивозможности (образ мышления ZeroMQ всегда скорее распределен, чем расположение агентов обработки на одном локальном оборудовании / ОС - это свобода евангелизации Zen-of-Zero и основа для почти линейной производительностимасштабируемость).

0 голосов
/ 01 июля 2019

Чтобы увеличить пропускную способность приемной стороны, добавьте несколько гнезд PULL, каждый со своим собственным потоком или собственным процессом

Затем создайте процесс zmq_proxy с гнездами PULL и PUSH.Это очень просто, и всего несколько строк кода http://api.zeromq.org/4-3:zmq-proxy

  • Отправители подключатся к разъему PULL прокси
  • Получатель подключится к разъему PUSH прокси
  • Нагрузка будет сбалансирована по очень простой схеме циклического перебора.
+----------+     +----------+        +----------+      +----------+
|          |     |          |        |          |      |          |
| PUSH     |     | PUSH     |        | PUSH     |      | PUSH     |
|          |     |          |        |          |      |          |
+------+---+     +---------++        +-+--------+      +--+-------+
       |                   |           |                  |
       |                   |           |                  |
       |                   |           |                  |
       |                   |           |                  |
       |                   |           |                  |
       |                   |           |                  |
       |                   v           v                  |
       |                                                  |
       |                   +------------+                 |
       |                   |            |                 |
       +-----------------> |   PULL     | <---------------+
                           |            |
                           +------------+
                           |   zmq_proxy|
                           +------------+
                           |     PUSH   |
      +--------------------+            +----------------+
      |                    +-----+------+                |
      |                          |                       |
      |                          |                       |
      |                          |                       |
      |                          |                       |
      |                          |                       |
+-----v----+               +-----v----+              +---v------+
|          |               |          |              |          |
|  PULL    |               |  PULL    |              |  PULL    |
|          |               |          |              |          |
+----------+               +----------+              +----------+


ПРИМЕЧАНИЕ: Если вы хотите более интеллектуальную балансировку нагрузки, вам нужно будет использоватьрозетки, обеспечивающие обратную связь, такие как ROUTER / DEALER.http://zguide.zeromq.org/page:all#The-Load-Balancing-Pattern

...