В этом разделе решил писать о проектах, которыми занимался в свое время.
Начнем пожалуй с http://files.desu.ru
Описание проекта: Портал о аниме, Японской культуре и всем, что с этим связано.
В 2007 году у проекта возникли сложности в работе портала. Раздача аниме через http просто “вешала” сервер, судя по статистике LA уходил в 150-160, и через 20-30 минут после запуска WEB сервера ОС сервера уходила в ступор. Соотвественно появилось желание оптимизировать проект, о чем договорились с его администрацией.
Описание работ над проектом: Начнем пожалуй с сервера, оборудование было предоставлено “домашней сетью” с Юга Москвы. Сервер стоял в ДЦ на М9. Судя по конфигурации под проект выделили desktop в 19” корпусе, сетевая карта интегрированная, HDD SATA без RAID массива. OS Gentoo 2007.1, amd64.
После предоставления shell доступа на сервер сделал буквально следующее:
1) Пересобрал Apache2 с поддержкой prefork, до этого был worker. Оптимизировал конфигурацию WEB сервера.
2) Пересобрал PHP5 без тредов, иначе судя по логам Apache2 часто падал под нагрузкой из-за ошибок связанных с работой php скриптов.
3) Изменил схему работы на frontend (nginx) + backend. Это позволило убрать apache2 с раздачи “большой” статики, а также настроить лимиты по отдаче файлов для 1 IP. В последствии написал обвязку к системе лимитов, которая добавляла IP в iptables, если посетитель сайта не понимал правил раздачи установленные на сервере и пытался все равно обойти систему лимитирования количества одновременных коннектов с 1 ip.
4) Оптимизировал MySQL, а именно – включил кеширование и выделили под него побольше памяти. Также увеличил размеры буферов для обработки запросов. Также как обычно включил slow логи, что позволило оптимизировать некоторые запросы к БД и в итоге сказалось на общей производительности проекта в целом.
5) Настроил систему резервирования конфигурации сервера и реализовал ежедневный backup MySQL DB.
Результат: После оптимизации проекта все заработало как часы. Некоторые параметры подгонялись в соотвествии с показаниями статистики сервера и информации в лог файлах, но это заняло всего несколько дней. Под рабочей нагрузкой сервер успевал отдавать под 160 Mbit/s.
Что не успел сделать: В связи с тем, что у владельца сервера изменились интересы, он забрал его и закрыл доступ для проекта. Соотвественно не успели перейти на софтовый RAID массив и нормальную сетевую карту. RAID массив нужен был из-за того, что просто уперлись в IO, а с интегрированной сетевой картой были проблемы в плане производительности.
На данный момент наши с проектом пути разошлись, но судя по работе сервера, той информации что он отдает в заголовках – администрация проекта переняла мой опыт и проект готов работать под большой нагрузкой.