Задать вопрос
@ttnik

Странные задержки в работе сокет-сервера (Python3+Twisted), причина?

Суть проекта – телематический сервер для взаимодействия с автомобилями, функции которого сводятся к 2 вещам:
1) Сбор и обработка телематических пакетов, которые отправляет автомобиль
2) Передача автомобилю команд, полученных извне (закрыть двери, открыть двери и тому подобное)

Серверная часть написана на Python с использованием Twisted. Взаимодействие с автомобилем осуществляется через обычный TCP-сокет, API для приёма команд – процесс, который висит на внешнем порту.

С твистедом работают две сущности:
- Демон, который рулит соединениями с автомобилями, соединения постоянные.
- Вспомогательный хелпер, который выполняет функцию посредника между API и демоном

Инициализация протоколов происходит через фабрику. Большая часть клиентских подключений происходит к демону, обработчик dataReceived, передает полученные данные в Deferred, и освобождается для следующего вызова (ну а дальше включаются обработчики производящие манипуляции с данными).

def dataReceived(self, data):
    recv_def = defer.Deferred()
    recv_def.addCallback(self.parse_data)
    recv_def.addErrback(self.log)
    recv_def.callback(data)


Все данные, необходимые для работы сервиса, хранятся в MongoDB, которая живет на отдельной машине (тормозов, связанных с ней, вообще нет).

Собственно, проблема:
При тестах на 50 автомобилях и 10 одновременных подключенях к хелперу всё работало идеально, задержек не наблюдалось вообще. Как только автомобилей стало 70, начались мистические задержки в выстреливании событий твистеда.

Пример:
- API получило команду «Закрой автомобиль»
- Через TCP вызвало посредника-хелпера и сказало «передай дальше»
- Спустя минуту происходит инициализация протокола хелпера и вызов connectionMade, еще спустя минуту он получает данные
- Хеллер через фабрику передает команду протоколу телематического устройства
- Спустя почти минуту демон получает событие твистеда connectionMade

Нагрузка на сервер не растет вообще, 1,5 ГГц ядро загружается на 1 - 1,2 %, расходования ресурсов оперативной памяти тоже не наблюдается.

Подскажите, с чем это может быть связано?
  • Вопрос задан
  • 221 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы