Какой будет моя точка отказа, если я получаю данные UDP быстрее, чем может обработать моя программа? - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть простой скрипт на Python для получения данных из сокета UDP, объединения 500 данных UDP (~ 4 КБ каждый) и отправки этих данных в конечную точку Curl. В небольшом масштабе около 100 UDP / сек моя программа работает.

import socket
UDP_IP = "127.0.0.1"
UDP_PORT = 5005
mylist = []
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))

while True:
   data, addr = sock.recvfrom(4096) 
   mylist.add(data)

   if len(mylist) == 500:
       # change mylist to json logic
       curl XPOST 'Endpoint' --mylist 'application/json' # Basically Curl Xpost the data to endpoint.
       del mylist[:]

Мой вопрос здесь

  1. Если я получу данные UDP, поступающие с более высокой скоростью ~ 3k-4k UDP / сек, у меня закончится ОЗУ? Дисковое пространство? ETH? Потеряю ли я UDP, пока отбираю данные в конечную точку?
  2. Как мне решить эти проблемы? Получить больше оперативной памяти, диска, эт? Любые указатели будут полезны.

1 Ответ

0 голосов
/ 08 сентября 2018

Вы не исчерпаете ОЗУ, поскольку одновременно в памяти хранится не более 500 пакетов. Дисковое пространство совершенно не имеет значения. Если ваше приложение обрабатывает данные медленнее, чем поступают пакеты, операционная система их буферизирует. Однако в какой-то момент буфер заполнен и пакеты будут отброшены. Вы можете настроить размер буфера, но это не поможет, если они постоянно поступают с большей скоростью, чем вы их обрабатываете. Единственный способ не потерять UDP-пакеты - это сделать ваше приложение достаточно быстрым.

...