Семафор(1) - это временный костыль, не архитектурное решение.
Задача была: перестать долбить Groq 3 параллельными запросами и вылетать на платный DeepSeek. Semaphore(1) решил это за одну строку кода.
Да, при semaphore(1) asyncio теряет смысл внутри одного дайджеста - запросы идут последовательно, как в синхронном коде. Технически правильное решение - адаптивный rate limiter: считать токены в скользящем окне 60 секунд и притормаживать только когда подходим к лимиту, а не всегда. Тогда asyncio работает на полную когда лимит не давит, и замедляется только при необходимости.
Но для текущей нагрузки (80 пользователей, бесплатные провайдеры с мягкими лимитами) semaphore(1) + 10 сек между пользователями решает задачу и не создаёт сложности. Когда пользователей станет в 10 раз больше - перепишу на нормальный rate limiter.
Прошу прощения, немного ошибся с названием - активный форк называется Marzneshin: https://github.com/marzneshin/marzneshin
Развивается сообществом, есть улучшения в части масштабируемости и мультинодовости.
Да, основная ветка Marzban действительно давно не обновлялась. Но есть активный-форк Marzban-ng, который продолжает развиваться сообществом. Плюс для моих задач текущий функционал полностью достаточен: создание пользователей, управление подписками, мультинодовость. Критических уязвимостей не обнаружено, в продакшене работает стабильно. Если знаете лучшую альтернативу - с удовольствием рассмотрю, всегда интересно услышать мнение практиков.
Семафор(1) - это временный костыль, не архитектурное решение.
Задача была: перестать долбить Groq 3 параллельными запросами и вылетать на платный DeepSeek. Semaphore(1) решил это за одну строку кода.
Да, при semaphore(1) asyncio теряет смысл внутри одного дайджеста - запросы идут последовательно, как в синхронном коде. Технически правильное решение - адаптивный rate limiter: считать токены в скользящем окне 60 секунд и притормаживать только когда подходим к лимиту, а не всегда. Тогда asyncio работает на полную когда лимит не давит, и замедляется только при необходимости.
Но для текущей нагрузки (80 пользователей, бесплатные провайдеры с мягкими лимитами) semaphore(1) + 10 сек между пользователями решает задачу и не создаёт сложности. Когда пользователей станет в 10 раз больше - перепишу на нормальный rate limiter.
Прошу прощения, немного ошибся с названием - активный форк называется Marzneshin: https://github.com/marzneshin/marzneshin Развивается сообществом, есть улучшения в части масштабируемости и мультинодовости.
Да, основная ветка Marzban действительно давно не обновлялась. Но есть активный-форк Marzban-ng, который продолжает развиваться сообществом. Плюс для моих задач текущий функционал полностью достаточен: создание пользователей, управление подписками, мультинодовость. Критических уязвимостей не обнаружено, в продакшене работает стабильно. Если знаете лучшую альтернативу - с удовольствием рассмотрю, всегда интересно услышать мнение практиков.