Tibco Rendezvous — ограничения по размеру

Я пытаюсь поместить потенциально большую строку в сообщение рандеву, и мне было любопытно узнать об ограничениях размера. Я понимаю, что существует физический предел (64 МБ?) для сообщения в целом, но мне любопытно, как некоторые другие переменные могут повлиять на это. Конкретно:

  • Насколько велики ключи?
  • Как хранится строка (в одном поле или в нескольких полях)

Будем очень признательны за любые советы по любой из вышеперечисленных тем или чему-либо еще, что может иметь отношение к делу.

Примечание. Я хотел бы сохранить сообщение в виде необработанной строки (в отличие от байт-кода и т. д.).


person tinkertime    schedule 06.11.2009    source источник


Ответы (2)


Из документов Tibco об очень больших сообщениях:

Программное обеспечение Rendezvous может передавать очень большие сообщения; он делит их на небольшие пакеты и размещает в сети так быстро, как только сеть может их принять. В некоторых ситуациях такое поведение может привести к перегрузке пропускной способности сети; приложения могут достигать более высокой пропускной способности, разделяя большие сообщения на более мелкие фрагменты и регулируя скорость, с которой они отправляют эти фрагменты. Вы можете использовать инструмент производительности для оценки размеров фрагментов и скорости отправки для оптимальной пропускной способности.

В этом примере отправляется одно сообщение, состоящее из десяти миллионов байтов. Программное обеспечение Rendezvous автоматически делит сообщение на пакеты и отправляет их. Однако этот пакет пакетов может превысить пропускную способность сети, что приведет к снижению пропускной способности:

sender> rvperfm -size 10000000 -messages 1   

Во втором примере приложение делит десять миллионов байтов на одну тысячу меньших сообщений по десять тысяч байт каждое и автоматически определяет размер пакета и интервал, чтобы регулировать поток для достижения оптимальной пропускной способности:

sender> rvperfm -size 10000 -messages 1000 -auto   

Изменяя параметры -messages и -size, вы можете определить оптимальный размер сообщения для ваших приложений в конкретной сети. Разработчики приложений могут использовать эту информацию для регулирования скорости отправки для повышения производительности.

Что касается фактических ограничений, функция Add string принимает строку ansi в стиле C, поэтому теоретически она не ограничена, но, учитывая сигнатуру AddOpaque

tibrv_status tibrvMsg_AddOpaque( 
   tibrvMsg       message, 
   const char*    fieldName, 
   const void*    value, 
   tibrv_u32      size); 

который использует u32, было бы разумно указать, что ограничение, вероятно, будет 4 ГБ, а не 64 МБ.

Тем не менее, использование Tib для передачи таких больших пакетов, вероятно, будет серьезным узким местом в производительности, поскольку ему, возможно, придется буферизовать значительные объемы трафика, поскольку он пытается доставить такие сообщения всем потребителям. По умолчанию буфер rvd составляет всего 60 секунд, поэтому вы можете столкнуться с потерей сообщений, если это значительный объем вашего трафика.

Накладные расходы сообщений в tibco в основном так же просты, как:

  1. фиксированная стоимость, связанная с каждым сообщением (заголовок)
  2. Все поля (информация о типе и идентификатор поля)
  3. Plus the cost of all variable length aspects including:
    1. the send and receive subjects (effectively limited to 256 bytes each)
    2. имена полей. Я не могу найти ограничения на длину имен полей в документах, но чем они меньше, тем лучше, а лучше вообще не использовать их и использовать числовые идентификаторы.
    3. массив/строка/непрозрачные/определяемые пользователем поля переменной длины в сообщении

Примечание. Если вы используете вложенные сообщения, просто повторите приведенное выше.

В вашем случае накладные расходы на полезную нагрузку будут настолько огромными по сравнению с именами (если они разумны и просты), что нет смысла вообще пытаться их оптимизировать.

Вы можете обнаружить, что можете значительно повысить эффективность проводной/буферизованной передачи, если будете передавать строки в сжатой форме, либо за счет использования rvrd с включенным сжатием, либо путем изменения вашего производителя/потребителя на использование чего-то быстрого, но эффективного, например, deflate (или, если вы чувствуете эзотерические вещи, такие как QuickLZ, FastLZ, LZO и т. Д. Особенно с фиксированным объемом памяти, сжимающим / распаковывающим механизмы)

Вы не говорите, на какую платформу API вы ориентируетесь (например, .net/java/C++/C), и это немного окрасит ситуацию. В сети все строковые данные будут в 1 байте на символ, независимо от java/.net, использующего UTF-16 по умолчанию, однако вы понесете значительные затраты на перевод, помещая их в/считывая их из сообщения, потому что базовый буфер не может быть повторно использован в этих случаях необходимо выполнить копирование (и соответственно сжатие/расширение). Если вы придерживаетесь непрозрачных последовательностей байтов, у вас все еще будут накладные расходы на копирование в наивных реализациях, возможных через API-интерфейс управляемой оболочки, но это, по крайней мере, будет меньше накладных расходов, если вам не нужно работать с данными как с собственной строкой.

person ShuggyCoUk    schedule 07.12.2009
comment
В документах TIBCO говорится, что максимальная длина имени поля определяется константой TIBRVMSG_FIELDNAME_MAX, которая (в настоящее время) установлена ​​на 127. См. раздел Длина имени поля: docs.tibco.com/pub/rendezvous/8.3.1_january_2011/html/ - person Jack P.; 20.09.2014

Общий максимальный размер сообщения составляет 64 МБ, как предполагалось в OP. Из документа "Tibco Rendezvous Concepts":

Хотя возможность обмена большими буферами данных является функцией программного обеспечения Rendezvous, лучше не делать сообщения слишком большими. Например, для обмена данными размером до 10 000 байт достаточно одного сообщения. Но для отправки файлов, длина которых может составлять несколько мегабайт, мы рекомендуем использовать несколько вызовов отправки, возможно, по одному для каждой записи, блока или дорожки. Опытным путем определите наиболее эффективный размер для преобладающих сетевых условий. (Фактический предел размера составляет 64 МБ, что редко является подходящим размером.)

person Richard Shepherd    schedule 20.03.2018
comment
(Я опубликовал этот ответ, когда пришел к вопросу после поиска максимального размера сообщения RV. Поэтому, хотя он не касается конкретно строковых полей, как было задано, я надеюсь, что он будет полезен.) - person Richard Shepherd; 20.03.2018