Блог - Linux, программирование, Я!

PythonРаздача больших файлов через сервер TornadoWEB

TornadoWeb - это легковесный веб-сервер, написанный на Python и использующий неблокирующие сокеты и epool/kqueue для работы с сетью.Сам по себе сервер неплохой, довольно популярный. Привлекает своим крайне простым API (по сравнению с тем-же Twisted) и высокой производительностью.

Первый вопрос, который может возникнуть - "зачем раздавать большие файлы через Tornado?" Ведь даже официальная документация рекомендует использовать для этого Nginx. Что-ж, в большинстве случаев так и есть. Но ситуации могут быть разные. В моём случае через Tornado успешно раздавалось большое количество мелких страничек, хранящихся в SQLite и один большой файл на 200МБ со списком всех доступных URL. Поднимать ради одного этого файла Nginx совершенно не хотелось.

Второй вопрос - "ну так в чем проблема - раздавай на здоровье!". Вот тут мы и сталкиваемся с неприятной особенностью этого сервера - стандартный StaticFileHandlerзагружает весь файл целиком в память перед тем как отдать его клиенту ( пруфлинк). Помимо этого, занятая память не освобождается, если клиент разорвал подключение не скачав весь файл целиком.

Вот эти 2 проблемы и будем решать. (далее...)

linux на сервереNginx + PHP-fcgi на Ubuntu

Если быть точным, опишу переход с режима работы Nginx <-> Apache backend на Nginx <-> php-fcgi backend.

Т.е. об отказе от промежуточного, в общем-то бесполезного слоя в виде апача между Nginx (http сервер) и PHP (application сервер)

Отдельно хочу заметить, что в этом руководстве мы обойдемся без компиляции чего-бы то ни было

(далее...)

phpТюнинг PHP — установка XCache на Ubuntu

Каждый раз, когда вы открываете страничку динамического веб-приложения, веб-сервер обращается к PHP, который загружает запрошенный .php файл и все include и require, затем парсит их, компилирует в промежуточный байт-код ( opcode) и исполняет. Причем в больших проектах процесс включения всех include файлов может занимать весьма продолжительное время.
Поэтому были разработаны многочисленные PHP-кешеры. Наиболее популярные из них - APC (Alternative PHP Cache), XCache и eAcelerator. Все они позволяют сохранять и повторно использовать скомпилированный байт-код PHP, что позволяет экономить время на сборку всех включений и их компиляцию, экономит процессорное время и оперативную память (причем весьма значительно). Помимо этого, они позволяют хранить в кеше переменные PHP и обращаться к ним при следующем вызове скрипта. Какой из этих кешеров использовать - не особо принципиально, по производительности они не сильно отличаются. Я выбрал XCache т.к. на него никто не ругается как на eAcelerator и я уже работал с APC и было интересно попробовать что-то новое (далее...)