Каналы: Как обрабатывать большое количество одновременно работающих пользователей, используя канальный слой Redis в качестве бэкэнда на сервере windows? - PullRequest
2 голосов
/ 31 января 2020

У меня есть потребительский метод, который запускается каждые 15 секунд с использованием планировщика (библиотека apscheduler). Целью этого метода является отправка JSON данных всем пользователям в группе каналов.

def auto_update():
    group_name = 'auto_update'
    channel_layer = get_channel_layer()
    async_to_sync(channel_layer.group_send)(
        group_name,
        {
            'type': 'auto_update',  # this is the name of my consumer method which return json data
        }
    )

Я развернул Django -каналы на сервере daphne (в качестве сервера API) и * Сервер 1060 * должен обслуживать запросы HTTP / HTTPS.

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

Получение ошибки рукопожатия 403.

Какова наилучшая практика для этого сценария? Здесь мне нужно только отправить данные в большую группу (более 350-460 одновременно работающих пользователей могут go до 1000).

ОС: Windows Server 2008 R2

RAM: 32GB

Edit-1:

На этом сервере запущены два экземпляра daphne. Один для этого приложения, а другой - для приложений того же типа, который также имеет 350 одновременных пользователей.

Команда Дафны: (как windows service)

daphne.exe -e ssl:8081:privateKey=cert\\development.key:certKey=cert\\development.crt --ws-protocol "graphql-ws" --proxy-headers real_time_data.asgi:application

Слой канала:

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [('localhost', 6379)],
        },
    },
}

В чем может быть проблема? Я читал, что Дафна может легко справиться с тысячами пользователей. Может ли кто-нибудь помочь мне в отладке, чтобы найти причину маршрута?

Edit-2:

Из do c общего доступа @MatthausWoolard ,

A.3.1 Недостатки Redis на Windows

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

Существует ли какая-либо другая альтернатива для сервера windows, кроме Redis что подходит для вариантов использования на уровне производства? Или какие-нибудь обходные пути?

...