h0rn3t
Янв. 7, 2012 09:42:01
Вообщем так есть фронтенд nginx -> балансирощик haproxy -> бекенд tornado (3 сервера). Сайт очень легкий (пару строк текста без всяких джаваскриптов и прочего на Django, автообновление страницы каждые 10 сек), соединений в среднем 2500-3000. Если отключить 2 сервера у клиентов начинают возникать 504 ошибки. Вопрос в следуйщем сервер Core i7 нагружено только 1 ядро из 8, даст ли увеличение процессов tornado на сервере каких то результатов?
o7412369815963
Янв. 7, 2012 11:40:32
> соединений в среднем 2500-3000
3000 в секунду (нагрузка)? сколько соединений держит 1 процесс (Х)? делим нагрузку на Х + 1 = оптимальное кол-во процессов.
> даст ли увеличение процессов tornado на сервере каких то результатов?
В большинстве случаев да. (т.к. 1 процесс выдает не более 3к “hello world” на среднем сервере)
пофоркать процессы можно с пом. модуля tornado.process
h0rn3t
Янв. 10, 2012 08:04:40
В том то и дело что на одном сервере запущено 8 процессов, а на остальных двух по 4, если отрубить их то будут ошибки 504. Если добавить на первый сервер еще 8 процессов это поможет делу?
o7412369815963
Янв. 10, 2012 17:12:35
504 вываливается сразу или через какое-то время?
> одном сервере запущено 8 процессов
т.е. все ядра загружены, добавление процессов даст производительности только в том случае если сервер криво написан, например использует блокирующие (синхронные) методы. Но ещё не факт что проблема в этом, много фактов не известно, возможно криво настроен nginx / haproxy.
> Если добавить на первый сервер еще 8 процессов это поможет делу?
Добавьте - протестируйте.
h0rn3t
Янв. 10, 2012 21:20:31
запуск джанго проекта производится этим скриптом
import os
import sys
DJANGO_ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DJANGO_APPS_DIR = os.path.join(DJANGO_ROOT_DIR, 'app')
def daemon(iport):
import tornado.wsgi
import tornado.ioloop
import tornado.httpserver
sys.path.insert(0, DJANGO_APPS_DIR)
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
container = tornado.wsgi.WSGIContainer(application)
http_server = tornado.httpserver.HTTPServer(container)
http_server.listen(iport)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
daemon(int(sys.argv[1]))