Закончился 2009 год, начинается новое десятилетие, с чем я от души поздравляю всех читателей! P2P стал одним из важных явлений прошедшего десятилетия, и его популярность уменьшаться не собирается. Например, в 2009 году у двух сериалов — Heroes и Dexter — число скачиваний превысило число телевизионных просмотров. В России p2p-файлообмен, можно сказать, в минувшем десятилетии и появился. Какие-то тренды проходят мимо нас, что-то становится популярнее чем в мире (ICQ, броузер Opera), появившийся в 1999-м году Napster вобщем-то прошел мимо нас, как и LimeWire, а первым популярным P2P протоколом у нас стал ed2k, официальный клиент которого уже давно закрыт, но остались альтернативы типа eMule.
a5b @a5b
Пользователь
nginx + apache. Кеширование
4 min
20KПривет, %username%
Тут я хочу рассказать о том, как я настраивал кеширование на одном сервере, точнее VDS. Характеристики сервера: 2000MHz, 2GB RAM, 80Gb HDD, технология виртуализации — OpenVZ.
Было решено использовать Nginx версии 0.7.64. На сервере находилось около 200 сайтов. И несколько высоко нагруженных проектов. Вот эти самые проекты и давали ощутимые тормоза и нагрузку на сервер. Мы будем рассматривать DLE в этом примере.
Тут я хочу рассказать о том, как я настраивал кеширование на одном сервере, точнее VDS. Характеристики сервера: 2000MHz, 2GB RAM, 80Gb HDD, технология виртуализации — OpenVZ.
Было решено использовать Nginx версии 0.7.64. На сервере находилось около 200 сайтов. И несколько высоко нагруженных проектов. Вот эти самые проекты и давали ощутимые тормоза и нагрузку на сервер. Мы будем рассматривать DLE в этом примере.
+53
A look at MySQL on ZFS
11 min
7KTranslation

Представляю вниманию общественности перевод достаточно большой статьи об использовании MySQL на ZFS, а так же сравнительное тестирование ZFS и UFS.
+39
Строим кластерную систему защиты от DDoS
3 min
12KДанная статья написана моим другом, который профессионально занимается созданием высоконагруженных сетевых решений, в том числе систем противостояния DDoS аткам.
По его просьбе публикую ее на хабре. Если статья понравиться, он будет рад инвайту на адрес hl.squirrel@yahoo.com.
Попытаюсь вкратце описать схему решения комплексной защиты от разных типов DDoS атак высокой интенсивности. Подобное решение успешно протестировано и функционирует на сервисе stop-ddos.net
Схема основывается на отделении системы защиты (фронтенда) от сервера приложений (бэкенда).
По его просьбе публикую ее на хабре. Если статья понравиться, он будет рад инвайту на адрес hl.squirrel@yahoo.com.
Попытаюсь вкратце описать схему решения комплексной защиты от разных типов DDoS атак высокой интенсивности. Подобное решение успешно протестировано и функционирует на сервисе stop-ddos.net
Схема основывается на отделении системы защиты (фронтенда) от сервера приложений (бэкенда).
Существует 3 основных типа DDoS атак:
- атака, направленная на переполнение ресурсов канала в интернет;
- атака, направленная на превышение максимального количества одновременных соединений сервера (SYN флуд);
- атака, направленная на исчерпание процессорных мощностей сервера (частое запрашивание страниц — HTTP флуд).
Решение должно обеспечивать защиту от каждого типа атаки.
+50
Уязвимость в FreeBSD
1 min
1.1KСегодня было опубликовано сообщение об уязвимости, позволяющей повысить пользовательские привилегии в последних версиях ОС FreeBSD (7.1-8.0). Эксплоит к уязвимости без предупреждения был выпущен вчера. В списках рассылки можно найти описание и патч. Официальное обновление для системы ожидается только завтра.
Уязвимость возникает в использовании LD переменных, принадлежащих файлам с присвоенным UID (ping, ppp, su).
Уязвимость возникает в использовании LD переменных, принадлежащих файлам с присвоенным UID (ping, ppp, su).
+21
Исправляем критическую уязвимость на FreeBSD в 4 шага
1 min
874Наверное многие наслышаны об очень серьёзной уязвимости во FreeBSD (с 7.1 по 8.0), позволяющей получить root-доступ с под обычного пользователя (локально).
Ссылок на эксплоит выкладывать не буду, с целью чтобы было поменьше вредителей, но эксплоит только что собственноручно проверял и убедился в его работоспособности.
Дожидаться пока исправления включат в дерево cvs/svn у меня особого желания нет, да и систему вновь всю пересобирать как-то не очень тянет. Потому, предлагаю вашему вниманию более простой, но такой же эффективный способ исправления проблемы в четыре строчки:
Всех благ!
Ссылок на эксплоит выкладывать не буду, с целью чтобы было поменьше вредителей, но эксплоит только что собственноручно проверял и убедился в его работоспособности.
Дожидаться пока исправления включат в дерево cvs/svn у меня особого желания нет, да и систему вновь всю пересобирать как-то не очень тянет. Потому, предлагаю вашему вниманию более простой, но такой же эффективный способ исправления проблемы в четыре строчки:
% cd /usr/src/libexec/rtld-elf/
% fetch http://people.freebsd.org/~cperciva/rtld.patch
% cat rtld.patch | patch -p1
% make && make install && make clean
Всех благ!
+34
ETag спешит на помощь
2 min
42KНи для кого не секрет, что в протоколе HTTP, а точнее в той его части, что является ответом с сервера, есть такие замечательные заголовки, как Last-Modified и ETag (Подробнее можно прочитать в спецификации протокола). Призваны они ускорить процесс получения контента с сервера, а точнее избавить клиента от загрузки данных, которые не были изменены с момента предыдущего запроса.
Так вот. Для меня факт существования двух, по-сути одинаковых, механизмов сообщить клиенту изменилось ли содержимое страницы или нет немного настораживал. Немного. Точнее я его не понимал для чего нужен ETag, если мне всегда было достаточно одного Last-Modified и юзкейса для другого я даже и представить не мог (хотя меня этот вопрос, признаться честно, не особо и волновал).
Так вот. Для меня факт существования двух, по-сути одинаковых, механизмов сообщить клиенту изменилось ли содержимое страницы или нет немного настораживал. Немного. Точнее я его не понимал для чего нужен ETag, если мне всегда было достаточно одного Last-Modified и юзкейса для другого я даже и представить не мог (хотя меня этот вопрос, признаться честно, не особо и волновал).
+32
Подводные камни при использовании кэширования в nginx
10 min
58KВ web-сервер и reverse-proxy nginx встроены очень мощные возможности по кэшированию HTTP-ответов. Однако в ряде случаев документации и примеров не хватает, в результате не все получается так легко и просто, как хотелось бы. Например, мои конфиги nginx-а местами написаны кровью. Этой статьей я попробую немного улучшить ситуацию.
В этой статье: а) подводные камни при полностраничном кэшировании; б) кэширование с ротацией; в) создание динамического «окна» в закэшированной странице.
Я буду предполагать, что вы используете связку nginx+fastcgi_php. Если вы применяете nginx+apache+mod_php, просто замените имена директив с fastcgi_cache* на proxy_cache*
Если выбирать, кэшировать ли страницу на стороне PHP или на стороне nginx, я выбираю nginx. Во-первых, это позволяет отдавать 5-10 тыс. запросов в секунду без каких-либо сложностей и без умных разговоров о «высокой нагрузке». Во-вторых, nginx самостоятельно следит за размером кэша и чистит его как при устаревании, так и при вытеснении нечасто используемых данных.
Если на вашем сайте главная страница хоть и генерируется динамически, но меняется достаточно редко, можно сильно снизить нагрузку на сервер, закэшировав ее в nginx. При высокой посещаемости даже кэширование на короткий срок (5 минут и меньше) уже дает огромный прирост в производительности, ведь кэш работает очень быстро. Даже закэшировав страницу всего на 30 секунд, вы все равно добьетесь значительной разгрузки сервера, сохранив при этом динамичность обновления данных (во многих случаях обновления раз в 30 секунд вполне достаточно).
В этой статье: а) подводные камни при полностраничном кэшировании; б) кэширование с ротацией; в) создание динамического «окна» в закэшированной странице.
Я буду предполагать, что вы используете связку nginx+fastcgi_php. Если вы применяете nginx+apache+mod_php, просто замените имена директив с fastcgi_cache* на proxy_cache*
Если выбирать, кэшировать ли страницу на стороне PHP или на стороне nginx, я выбираю nginx. Во-первых, это позволяет отдавать 5-10 тыс. запросов в секунду без каких-либо сложностей и без умных разговоров о «высокой нагрузке». Во-вторых, nginx самостоятельно следит за размером кэша и чистит его как при устаревании, так и при вытеснении нечасто используемых данных.
Кэширование всей страницы целиком
Если на вашем сайте главная страница хоть и генерируется динамически, но меняется достаточно редко, можно сильно снизить нагрузку на сервер, закэшировав ее в nginx. При высокой посещаемости даже кэширование на короткий срок (5 минут и меньше) уже дает огромный прирост в производительности, ведь кэш работает очень быстро. Даже закэшировав страницу всего на 30 секунд, вы все равно добьетесь значительной разгрузки сервера, сохранив при этом динамичность обновления данных (во многих случаях обновления раз в 30 секунд вполне достаточно).
+83
Отдаём статику nginx'ом
2 min
5KНачиная с версии 0.8.11 в nginx появилась новая возможность для раздачи статики — использование AIO (Asyncronous Input-Output — неблокирующий ввод-вывод) для Linux и FreeBSD.
Чем это событие знаменательно? До этого момента nginx использовал неблокирующий режим только при работе с сетью — любая работа с файлами блокировала рабочий процесс. К чему это приводило? Если у вас есть много разного контента, который не весь находится в кэше ОС (фотохостинг, etc) — то рано или поздно все 50, 150, 200 процессов будут ждать дисковые операции и не смогут обслужить нового клиента — даже если нужный ему контент можно отдать из файлового кэша или запросить с бэкенда.
Чем это событие знаменательно? До этого момента nginx использовал неблокирующий режим только при работе с сетью — любая работа с файлами блокировала рабочий процесс. К чему это приводило? Если у вас есть много разного контента, который не весь находится в кэше ОС (фотохостинг, etc) — то рано или поздно все 50, 150, 200 процессов будут ждать дисковые операции и не смогут обслужить нового клиента — даже если нужный ему контент можно отдать из файлового кэша или запросить с бэкенда.
+34
Сервер на стероидах: FreeBSD, nginx, MySQL, PostgreSQL, PHP и многое другое
16 min
40K
Введение
С момента написания мной предыдущей статьи по оптимизации этой связки прошло довольно много времени. Тот многострадальный Pentium 4 c 512Мб памяти, обслуживающий одновременно до тысячи человек на форуме и до 150,000 пиров на трекере уже давно покоится на какой-нить немецкой, свалке, а клуб сменил уже не один сервер. Всё сказанное в ней всё ещё остаётся актуальным, однако есть вещи которые стоит добавить.
Статья большая, так что будет поделена на логические блоки:
0. Зачем вообще что-то оптимизировать? 1. Оптимизация ОС (FreeBSD) 1.1 Переход на 7.х 1.2 Переход на 7.2 1.3 Переход на amd64 1.4 Разгрузка сетевой подсистемы 1.5 FreeBSD и большое кол-во файлов 1.6 Softupdates, gjournal и mount options 2. Оптимизация фронтенда (nginx) 2.1 Accept Filters 2.2 Кеширование 2.3 AIO 3. Оптимизация бэкенда 3.1 APC 3.1.1 APC locking 3.1.2 APC hints 3.1.3 APC fragmentation 3.2 PHP 5.3 4. Оптимизация базы данных 4.1 MySQL 4.1.1 Переход на 5.1 4.1.2 Переход на InnoDB 4.1.3 Встроеный кеш MySQL - Query Cache 4.1.4 Индексы 4.2 PostgreSQL 4.2.1 Индексы 4.2.2 pgBouncer и другие. 4.2.3 pgFouine 4.3 Разгрузка базы данных 4.3.1 SphinxQL 4.3.2 Не-RDBMS хранилище 4.4 Кодировки 4.5 Асинхронность Приложение. Мелочи. 1. SSHGuard или альтернатива. 2. xtrabackup 3. Перенос почты на другой хост 4. Интеграция со сторонним ПО 5. Мониторинг 6. Минусы оптимизации
+361
Недорогой способ защиты от HTTP-флуда
3 min
16KСлучилась на днях, как всегда, не в самый подходящий момент, DDoS-атака на один из сайтов, размещенных на моем сервере. DDoS-атаки бывают разные, в этот раз злоумышленники запустили HTTP флуд.
Флуд был не столько тяжелый по трафику, сколько интенсивный по количеству запросов. Причем, как назло, запросов не однотипных, а постоянно меняющихся. Все, что у меня на тот момент было из софтовых средств защиты, не могло эффективно справиться с таким флудом, поэтому пришлось использовать железные решения.
Железные решения я считаю правильным выбором, но доступны они не всем и не всегда, а многие атаки, как показала моя практика, успешно отбиваются правильным использованием доступных программных средств. К тому же, захотелось немного поэкспериментировать.
Флуд был не столько тяжелый по трафику, сколько интенсивный по количеству запросов. Причем, как назло, запросов не однотипных, а постоянно меняющихся. Все, что у меня на тот момент было из софтовых средств защиты, не могло эффективно справиться с таким флудом, поэтому пришлось использовать железные решения.
Железные решения я считаю правильным выбором, но доступны они не всем и не всегда, а многие атаки, как показала моя практика, успешно отбиваются правильным использованием доступных программных средств. К тому же, захотелось немного поэкспериментировать.
+47
Full Hierarchy — иерархические структуры в базах данных
5 min
16K
+56
Установка для «чайников»: nginx + php-cgi + mysql + eaccelerator + memcache на Debian 5.0 «lenny»
7 min
79KДанная заметка является шпаргалкой для новичков в установке нормально работающего комплекса, описанного в заголовке. Все пункты установки протестированы несколько раз на разных vds, поэтому проблем с нехваткой чего-то быть не должно, как это обычно бывает, когда ставишь что-то по мануалам, надерганных из разных источников. Подробно описания настроек и «тюнинга» в заметке нет, т.к. это всё очень индивидуально и требует понимания что, как и зачем делается, а это невозможно охватить в одной даже очень большой шпоре.
+36
Установка nginx + php-fpm + memcache + eaccelerator на FreeBSD
3 min
49KЗачем всё это? — спросите вы. Да просто захотелось поделиться с общественностью некоторым опытом, полученным в процессе оптимизации vds под нужды одного общеизвестного блого-социального движка, который на обычном хостинге чувствует себя, мягко скажем, некомфортно.
Началось всё с того, что я ушёл от firstvds, где уже ничто не спасёт от тормозов. Ушел на ганди.нет, взял одну шару (1 share), которую дали на месяц бесплатно. Кстати, акция эта (This summer, your server is free!) вроде еще не закончилась. ;) И начал на этой шаре проводить зверские эксперименты с установкой разного ПО. Тестировал результаты с помощью siege.
В итоге конфигурация из сабжа оказалась самая быстрая. Опытом её установки и настройки я и хотел бы с вами поделиться.
Началось всё с того, что я ушёл от firstvds, где уже ничто не спасёт от тормозов. Ушел на ганди.нет, взял одну шару (1 share), которую дали на месяц бесплатно. Кстати, акция эта (This summer, your server is free!) вроде еще не закончилась. ;) И начал на этой шаре проводить зверские эксперименты с установкой разного ПО. Тестировал результаты с помощью siege.
В итоге конфигурация из сабжа оказалась самая быстрая. Опытом её установки и настройки я и хотел бы с вами поделиться.
+58
Настройка nginx
5 min
300KТема правильной настройки nginx очень велика, и, боюсь, в рамки одной статьи на хабре никак не помещается. В этом тексте я постарался рассказать про общую структуру конфига, более интересные мелочи и частности, возможно, будут позже. :)
Неплохой начальной точкой для настройки nginx является конфиг, который идёт в комплекте с дистрибутивом, но очень многие возможности этого сервера в нём даже не упоминаются. Значительно более подробный пример есть на сайте Игоря Сысоева: sysoev.ru/nginx/docs/example.html. Однако, давайте лучше попробуем собрать с нуля свой конфиг, с бриджем и поэтессами. :)
Неплохой начальной точкой для настройки nginx является конфиг, который идёт в комплекте с дистрибутивом, но очень многие возможности этого сервера в нём даже не упоминаются. Значительно более подробный пример есть на сайте Игоря Сысоева: sysoev.ru/nginx/docs/example.html. Однако, давайте лучше попробуем собрать с нуля свой конфиг, с бриджем и поэтессами. :)
+68
Что нужно настроить в mySQL сразу после установки?
5 min
150KTranslation
Вольный перевод довольно старой статьи с MySQL Performance Blog о том, что лучше сразу же настроить после установки базовой версии mySQL.
+81
Information
- Rating
- Does not participate
- Registered
- Activity
Specialization
Backend Developer, System Software Engineer