Университет WEB-мастеров "MTI"
Создание больших web-проектов

У любого успешного web-проекта рано или поздно возникает проблема роста. Существующие программно-аппаратные ресурсы перестают справляться с растущей нагрузкой. Универсальных рецептов, к сожалению не существует. В каждом проекте хороший программист будет программировать по-разному. Тем не менее, в этой статье я попробую дать несколько типичных рекомендаций по созданию больших web-проектов. Такие проекты в процессе создания и развития сталкиваются, как правило, с двумя почти противоположными по способам решения проблемами - большими скоростями и большими объемами данных.
Большие скорости

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

Смысл этого приема - вкомпилировать наиболее важные функции в сервер. Идея очень проста. Если мы посмотрим на соотношение времени, которое тратится на различные стадии выполнения запроса, то увидим интересную картину. Например, при выполнении простейшего perl-скрипта последовательно происходит следующее:

1) сервер Apache определяет perl-скрипт для запуска, подготавливает и запускает его;
2) запуск скрипта фактически начинается с запуска perl-интерпретатора (это файл, размером около полумегабайта). Perl-интерпретатор, запустившись, размещается на 2-х мегабайтах в памяти машины, и только после этого приступает к работе с пользовательским скриптом;
3) эта работа начинается с компиляции программы. Компиляция программы - это, как правило, один из самых длительных этапов обработки программы;
4) только после предварительной компиляции (в байткод) скрипт начнет выполняться.

Статистика удручает: время, которое тратится на запуск perl-интерпретатора и компиляцию скрипта, как правило, на порядок больше времени, за которое он выполняется.
На каждом сайте существуют узкие места - программы, которые вызываются очень часто. Например, баннерный движок. Как правило, на один просмотр страницы приходится два-три баннера, а значит и вызова программы. Понятно, что если избавиться от накладных расходов (пункты 2 и 3), работа сервера значительно ускорится. Это можно сделать двумя похожими способами.
Первый - написать модуль к Apache и вкомпилировать его в сервер. Именно так в баннерной сети Фламинго-2 (http://www.f2.ru), в создании которой я принимал участие, была реализована часть системы, которая раздавала баннеры пользователям. Это был модуль, написанный на языке C, который функционировал как часть сервера Apache и поэтому работал очень быстро.

Базы данных

Используйте хорошую базу данных. Какую выбрать? Единого рецепта нет. Все зависит от решаемой задачи. Если она достаточно простая и вам не требуется выполнять сложные SQL-запросы (например, вложенные), то наилучшим решением будет, пожалуй, база данных MySQL.
MySQL - один из самых простых серверов БД. Но даже в этой простой базе есть свои способы оптимизации для ускорения запросов. Например, не секрет, что INSERT - одна из самых длительных операций (вычисление физического адреса для вставки, вставка, решение проблемы фрагментации, изменение индексов и служебных таблиц). Хороший прием для ускорения работы скрипта, который вставляет данные в БД - замена операции INSERT операцией INSERT DELAYED (отложенная вставка). Обновление данных будет выполнено только тогда, когда это не приведет к замедлению работы сервера.
Другой пример: если внимательно почитать документацию MySQL, можно найти упоминание о таблицах, расположенных в памяти (HEAP tables). Очевидно, что операции с такими таблицами совершаются значительно быстрее. Heap-таблицы можно использовать для решения некоторых задач.
Существует большое количество параметров запуска сервера БД, оптимизирующих буферы сортировки, вычислений, количество детей и другие параметры. Как правило, вам заранее известно, что вы будете делать с базой, и для повышения быстродействия можно задать соответствующие параметры. Например, возьмем вполне реальную задачу: построение какого-нибудь каталога. Ясно, что это будет одна большая таблица с большим количеством индексов. Вы знаете, что будете использовать представления. Работа с этой таблицей будет заключаться в запросах по индексу без использования сортировки. Посмотрим, как можно настроить сервер БД на выполнение такой задачи (пример из MySQL 3.23.25):

*join_buffer_size - буфер для создания представлений, по умолчанию равен 131072 байта;
*key_buffer_size - буфер для работы с ключами и индексами. Размер по умолчанию - 1048540;
*sort_buffer - буфер для сортировки. По умолчанию - 2097116 байт.

Скорее всего, при увеличении какого-то буфера, скорость выполнения связанной с ним задачи увеличится. Исходя из нашей задачи, мы увеличим буфер для работы с ключами (скорость выборки значений из таблицы увеличится), уменьшим буфер сортировки (уменьшится скорость сортировки) и буфер представлений (уменьшится скорость работы с представлениями).
Строка запуска демона MySQL будет выглядеть примерно так (конкретные значения зависят от количества памяти в системе):

shell>safe_mysqld -O key_buffer=8M -O sort_buffer=1M -O join_buffer=16K

Резюмируем. При использовании базы данных работу скрипта можно значительно ускорить правильной настройкой сервера БД. В руководстве базы данных MySQL есть специальный раздел, посвященный оптимизации.

За более подробной информацией можно обратиться на сайты:
Разработчики MySQL - http://www.mysql.com

 
Почему Университет “MTI” является ведущим в подготовке Web-мастеров?
Современный учебный процесс.
Учебный процесс проходит в специальных оборудованных компьютерных классах, оснащенных самыми современными компьютерами, объединенными в локальную сеть и имеющими выход в мировой Интернет. В наших специальных классах имеется все необходимое оборудование для проведения качественного учебного процесса. Все занятия в центре – только практические. В университете WEB-мастеров каждому слушателю предоставляется специальный электронный конспект со всеми методическими материалами, это значительно повышает эффективность обучения.
Наши преподаватели – практики
Все преподаватели нашего Университета – ведущие специалисты студии Web-дизайна, которые занимаются фундаментальной разработкой различных современных Интернет-проектов. Это дает возможность проводить комплексное обучение на самых реальных примерах и быстро обновлять практически всю учебную программу при появлении самых новых Интернет – технологий.
Учеба-стажировка-работа.
Занятия в Университете WEB-мастеров проходят на базе студии Web-дизайна “Clear 1000”. Лучшиенаши выпускники проходят стажировку в данной студии с возможностью последующего трудоустройства
MTI Phone: 0110 1234567, Fax: 0123 1234567
E-mail: info@mti.net | 2007(c) | MTI