Но в той статье есть недочет — в тестировании обращение идет к одному файлу, а при этом файл кешируется на уровне nginx либо файловой системы что дает отрыв по сравнению с GridFS. Да и неплохо проверить свежий GridFS, 3 года прошло как никак.
Поэтому я решил провести собственное тестирование, с обращением по разным именам файлов.
Есть 52 тыс файлов — постеры к фильмам, общий объем 2Гб, средняя картинка весит 40кб. Копия файлов на ext4, копия в GridFS.
Виртуалка 512Мб с 1 ядром. Ubuntu server 12.04 LTS 64bit, настройки Nginx/1.4.1 стандартные.
Тест рассчитан на low-cost сервер, для мощных серверов результаты будут другие.
Способы отдачи файлов:
1) Nginx — статика
2) Gevent через nginx
3) 2 x Gevent через nginx (балансировка)
4) Gevent напрямую
5) Gevent через nginx (unix socket)
для пунктов 2-5 использовался http сервер на Python + Gevent который отдавал файлы из GridFS
Способы нагрузки:
1) ol, t2 — Обращение к одному url, 2 потока
2) ol, t10 — Обращение к одному url, 10 потоков
3) t2 — Обращение к разным url, 2 потока
4) t10 — Обращение к разным url, 10 потоков
Детали:
* Все тесты запускались 3 раза, в таблице среднее значение.
* Обращение к разным url для всех тестов происходит по одному списку ссылок, ссылки содержат идентификатор файлов (в GridFS поиск идет по идентификатору)
* В тестах где обращение идет к одному url, размер файла составляет 13.5 kb.
* При отдаче через gevent, происходит кеширование последнего файла, поэтому в тестах где идет обращение на один url, обращение к GridFS не происходит и по сути замеряется скорость отдачи данных из Python.
* Тест «one link» сделан в основном для определения пределов клиента.
Клиент написан на Python, судя по результатам, его мощности хватает минимум на 1450 запрсов в секунду. Увеличение потоков, либо запуск как несколько процессов не дают большую производительность. Отсюда можно судить что сервер был «узким местом», что необходимо для тестирования.
В результате мы получили информацию о том, что производительность GridFS не такая низкая как считалось ранее, по крайней мере на маленьких серверах.
Ещё идеи:
* Попробовать nginx-gridfs
* uwsgi-gridfs
* Отдача файлов через yield
* Попробовать другие proxy сервера
* Попробовать другие ФС (ZFS?)
Так же планирую протестировать на мощном сервере.
Исходники скриптов
ссылка на оригинал статьи http://habrahabr.ru/post/192390/
Добавить комментарий