Лучший механизм быстрой аутентификации для встроенных устройств с Nginx и Apache - PullRequest
4 голосов
/ 18 февраля 2010

У нас есть проект, развернутый с Nginx, Apache, Django и Postgres.

В проекте имеется большое количество встроенных устройств, которые подключаются к серверу (https) с интервалом в 5 минут и отправляют файл на сервер. Кроме того, на веб-интерфейсе проекта есть обычные пользователи, которые входят в систему и выполняют различные функции.

В настоящее время система не проводит различий между встроенным устройством и обычным пользователем. Когда количество устройств было низким, этот механизм работал нормально с необходимой скоростью. Но со временем с увеличением количества устройств нагрузка на базу данных сильно возросла. Мы наблюдали около 60000 записей django_session в день. Скрипт импорта, который мы запускаем для обработки файлов, отправленных с устройств, почти не поспевает за поступающими данными, а база данных сильно загружена.

Я хочу реализовать минимальный механизм аутентификации, который может просто очень быстро аутентифицировать устройство и позволяет ему отправлять текстовый файл. Я хочу избежать аутентификации Django но вы хотите продолжать использовать таблицу auth_user для имени пользователя и пароля для устройств. Учитывая требования к производительности, мне нужен какой-то способ, который использует nginx и на самом деле не вводит apache в картинку и принимает файл.

Какой, по вашему мнению, лучший способ достичь этого? Кроме того, что проекты, связанные с этими крупными встроенными устройствами, используют для такого типа механизма?

Ответы [ 2 ]

2 голосов
/ 18 февраля 2010

Итак, насколько я понимаю, каждое встроенное устройство имеет настройку учетной записи пользователя в django, и вы хотите избежать этих издержек.

Итак, сначала вопрос: как бэкэнд узнает, когда он общается со встроенным устройством или пользователем? Я бы предположил, что эта информация встроена в систему Django.

Если это так, то вам нужно перехватить имя пользователя и пароль, прежде чем они будут переданы в django, проверьте тип учетной записи в базе данных и, если это встроенное устройство, передайте ее в приложение обработки, которое ничего не делает, кроме файлы и обрабатывать их. Как вы перехватываете это на ваше усмотрение, вы можете сделать это практически на любом «веб-» языке, который пожелаете, и просто использовать перенаправления, когда решите, как обрабатывать трафик.

Если вы получаете возможность переписать это дальше, зачем даже иметь пароль для имени пользователя для встроенного устройства? если предположить, что это встроенное устройство (универсальный минимальный интерфейс), то не достаточно ли проверить его сертификат SSL по списку известных сертификатов для его идентификации? Это может полностью исключить любое взаимодействие с системой django, так как все, что вам нужно сделать, - это проверить сертификат по отношению к банку известных сертификатов ok.

1 голос
/ 19 февраля 2010

Можете ли вы написать скомпилированный скрипт cgi (на C или C ++?), Который аутентифицирует встроенные устройства непосредственно в базе данных Postgres и сохраняет файл соответствующим образом? Очевидно, вам не нужны сеансы, поскольку встроенное устройство выполняет разовое соединение каждые 5 минут.

Я не знаю много о Django (взял это из встроенного тега), поэтому я не знаю, что отвечает за его издержки.

На самом деле не так уж сложно написать CGI-скрипт на C (при условии, что вы или кто-то из вашей команды знает C) для этой простой задачи.

...