1. Google user

    14.10.2011

    0 ↑
    1 ↓
    Добрый день!

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

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

    Используемая платформа:
    Tornado Web + MongoDB
    В качестве библиотеки используется наиболее оттестированная python-openid с добавленным mongo-storage
    К счастью, реализации такой титанической задачи, как переписывание python-openid в неблокирующем стиле под отдельный сервер потребовалось, как и вынесение работы с ней в отдельные thread-ы, что вызывает

    Цикл работы:
    Сервер использует как неблокирующие обращения к БД для входа и получение информации о пользователя, что позволяет реализовать на нем конструкции вроде openid proxy, так и блокирующие для хранения стейта python-openid.server. Стейт полностью сохраняется в БД, что делает падения отдельных воркеров безболезненным.

    Производительность:
    В тестовом режиме схожим с предельными рабочими условиями при 5.000.000 пользователей в базе средняя скорость отработки запросов (ротировались различные запросы на вход/выход/подтверждение) составила около 1,5ms с разбросом 0-5ms, роста не замечено.
    Тестирование проводилось jmeter с запросами по интервалу 1ms от 3 серверов. На openid сервере (процессор Q9400) работали 2 воркера, ротирующихся под nginx, что оказалось избыточным.

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

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.