РИТ: высокие нагрузки | HighLoad.

10 комментариев

highload

На днях в Москве пройдёт конференция веб-разработчиков высоконагрузочных систем РИТ: Высокие нагрузки (HighLoad).

Время проведения: 22-23 сентября.
Место: ИВЦ “Инфопространство”, м. Кропоткинская или Парк Культуры, 1-й Зачатьевский переулок, 4.
Стоимость участия: 12000руб.

Для 150 студентов, которые пройдут специальный тест, вход будет бесплатным. Ищите тест и  подробности на сайте конференции.

Главная цель конференции “РИТ: Высокие нагрузки” — распространение знаний о высокотехнологичной и закрытой области разработки крупных проектов, функционирующих под высокими нагрузками. В программе конференции — такие проблемы, как выбор и проектирование их архитектуры, масштабирование вычислений, масштабирование баз данных; технологии, тестирование, администрирование.

В двухдневной программе конференции наблюдаются такие докладчики, как Яндекс, РБК, Рамблер, Netprint, Инфоскан, Mail.ru, Spylog, Майкрософт, SUP, Мастерхост, Netstream, Sphinx, ARBOR Networks, Z-Support, Parallels и не только. Так что скучать явно не придётся.

Особый ажиотаж ожидается на докладах об архитектуре проектов Яндекс.Деньги, Смотри.ком, HeadHunter, Мейл-агент и Мейл.Почта, на выступлениях, посвященных нагрузочному тестированию (от специалистов Яндекса), а также о видеотрансляциях для десятков тысяч пользователей и системах мониторинга и администрирования.

Жилинский Владимир.



Устанавливаем русский Movable Type 4.21.

18 комментариев

Movable type 4.21 RUЯ не приверженец Movable Type (я использую WordPress), да и вообще веб-приложений, написанных на языках, которые я плохо знаю. Но читатели в комментариях к статье про тюнинг WordPress-блогов убеждали меня, что это — «замечательная платформа, которая всегда впереди WP по многим пунктам.» Я решил всё-таки проверить это, тем более на днях вышла новая официальная русская версия.

Идём на русский сайт MT и качаем архив с последней версией движка. Распаковываем в какой-нибудь каталог, в который есть доступ у веб-сервера. В моём случае это Apache 2.2.8 (httpd) и каталог /home/www/mtblog. Можно попробовать после этого открыть в браузере этот каталог (адрес зависит от настроек веб-сервера), в моём случае – http://localhost/mtblog/. Страница приветствия уже работает, но это пока всё.

Обязательный к прочтению файл readme(_or_i_will_kill_you).html, лежащий в каталоге с программой говорит нам на эту тему о том, что для работы потребуются:

  • Perl 5.6.1 или выше с модулями: DBI, Image::Size, CGI::Cookie.
  • Apache или Windows IIS.
  • Доступ к базе данных MySQL, SQLite или Postgres.

Устанавливаем Perl и модули, Apache и MySQL уже есть. Мне (Mandriva 2008.1) для этого пришлось поставить несколько галочек напротив нужных пакетов и нажать ОК. Впрочем, после этого тоже ничего не заработало — из разумных соображений безопасности Apache не выполняет CGI-программы вне специально отведённых для этого каталогов. Лезем в /etc/httpd/conf/httpd.conf и для директории с MT добавляем обработку CGI добавлением в Options параметра +ExecCGI. После этого MT наконец запустился и смог выругаться по поводу ещё каких-то модулей Perl, которых ему не хватает. В общей сложности я скачал и установил около 20 пакетов и один раз перезагрузил машину.

После этого, наконец, я смог приступить к установке Movable Type. Первое, что пришлось сделать — настроить соединение с базой данных.

Наблюдение: MT не признаёт возможности существования пустого пароля у пользователя MySQL. Пришлось установить пароль.

Потом идёт настройка системы отправки почты. Не знаю, почему MT задаёт этот вопрос, а WordPress нет. С одной стороны это хорошо — гибкость настройки ещё в момент установки. С другой — в 99% случаев sendmail на месте, а настройке этой место в глубине админки. Открывем консоль, ищем почтовик: whereis sendmail.

Далее создаётся пользователь-администратор, всё как обычно, кроме “фразы для восстановления пароля“. Для чего она можно догадаться, но более точная информация об этом отсутствует.

Movable type 4.21 RU

Следующий шаг — создание первого блога (MT — система скорее для целой платформы блог-хостинга). В настройках опять же видна гибкость, но она даже по умолчанию не всегда совпадёт с мнением веб-сервера.

Например, если сам MT и новый блог окажутся в разных подкаталогах одного уровня, а адрес блога будет отличаться от имени каталога (что здесь легко можно сделать), то блог работать не будет, а админка — будет.

Ещё момент: MT при установке записывает в свой каталог конфигурационный файл, пугаясь, если на запись нет прав. При дальнейшей работе ему так же нужны права на создание каталогов в корневом и запись в них (при создании блогов и работе с ними). В инструкции говорится, что для этого нужно выставить на каталоги права 755, но это не всегда так: если интерпретатор в системе не является владельцем файлов (как у меня), то прав нужно намного больше.

Итого: при установке Movable Type кнопку “Далее” придётся нажать как минимум 10 раз (при установке WordPress — только 3 раза). При установке есть лишние вопросы и вопросы, требующие дополнительных навыков от пользователя, для которого она скорее всего покажется слишком сложной.

Movable type 4.21 RU

Админка действительно очень похожа на админку WordPress. Судя по спискам плагинов – даже задачи они решают схожие – я легко нашёл большинство плагинов, которые реализуют тем 15 пунктов удобства, о которых я писал. Продолжу изучение установленного движка позже.

Реклама: Банкирша.ком - все о банках, кредитах, ипотеке.

Жилинский Владимир.



goDB — библиотека для работы с MySQL из PHP.

28 комментариев

GoDB - MySQLi-интерфейс PHPКогда мои логические цепочки запросов заводят меня в MySQL-тупик, я сначала ищу в сети информацию, потом лезу в толстую книжку, потом обращаюсь к коллегам. Поскольку мы сейчас работаем с командой PHP.RU, то последний способ оказывается практически 100%-эффективным.

Именно эти люди убедили меня разобраться в интерфейсе GoBD – надстройки над MySQLi, делающей код работы с базой данных быстрее и короче, а модель плейсхолдеров – безопаснее.

Надстройки для работы с БД – любимое занятие PHP-программистов, но GoDB – не тот случай. Эта библиотека успешно прошла бенчмарки на надёжность и скорость и разработана действительно опытным человеком не без участия сообщества.

  • Разработчик GoDB: Григорьев Олег (aka vasa_c).
  • Требования для работы GoDB: PHP5 с расширением MySQLi.
  • Сайт GoDB.
  • Сайт MySQLi.

Жилинский Владимир.



PHP: фильтр от XSS и SQL-инъекций.

49 комментариев

Защита от XSS-атак и SQL-инъекцийПредлагаю небольшое исследование на тему безопасности веб-приложений и фильтрации вводимых данных. Скорее всего, я ещё вернусь к этой теме, но сейчас больше хочется не писать трехтомник, а сохранить и упорядочить собранное и проверенное. В частности, речь пойдёт о фильтрационной защите от XSS-атак и SQL-инъекций.

В PHP есть ряд специальных функций для работы со строками, применимых для этой цели. Вот они:

strip_tags() – вырезает теги HTML и PHP из строки.

htmlspecialchars() — конвертирует только специальные символы (‘&’, ‘”‘, ”’, ‘<‘ и ‘>’) в HTML сущности (‘&amp;’, ‘&quot;’…). Используется для фильтрации вводимых пользователем данных для защиты от XSS-атак.

htmlentities() – конвертирует все символы в строке (кроме букв) в мнемоники HTML. Используется для защиты от XSS, являясь более гибким аналогом htmlspecialchars.

stripslashes() – удаляет заэкранированные символы (после преобразования в сущности предыдущими функциями их незачем экранировать). Обычно используется в связке с проверочной функцией get_magic_quotes_gpc(), показывающей текущую установку конфигурации magic_quotes_gpc.

Эта конфигурация влияет на то, как будут обрабатываться специальные символы, содержащиеся в данных, передаваемых пользователем (массивы $_GET, $_POST, $_COOKIE). При magic_quotes_gpc = 1 эти спецсимволы (одиночные и двойные кавычки, обратный слэш, байт NULL) автоматически экранируются. При magic_quotes_gpc = 0 все данные передаются в таком виде, в каком их ввел пользователь. В последнем случае в целях безопасности требуется обрабатывать передаваемые данные.

mysql_real_escape_string – мнемонизирует специальные символы в строке для использования в операторе SQL с учётом текущего набора символов в кодировке соединения. Иными словами, функция превращает любую строку в правильную и безопасную для MySQL-запроса. Используется для очистки всех данных, передающихся в MySQL-запрос для защиты от SQL-инъекций.

На основе этих данных, можно собрать функцию для однозначной очистки непроверенных данных. Эта функция получает две переменные – строку с введёнными символами и булево значение для определения – требуется ли приведение к MySQL-запросу. Возвращает функция очищенную строку. Конечно, это не панацея, но функцию легко изменить под собственные нужды.

скачать PHP скриптInputClear.phps - фильтрация введённых пользователями данных.

Если кто-то обнаружит ошибки, или знает способ лучше – добро пожаловать в комментарии, мне очень интересно.

Жилинский Владимир.



Резервирование и бэкап – зачем и как.

34 комментария

Бэкап, резервирование и восстановление данныхВсе данные, хранящиеся на жестких дисках, флешках, и прочих носителях, всегда находятся под некоторой угрозой. Диск может сломаться, флешка исчезнуть, а владелец файлов (чаще всего) может их случайно удалить или испортить. Поэтому предлагаю немного поразмыслить о резервировании критически важных данных.

Начнём с сайта. Среднестатистический сайт – это набор файлов на диске и база данных, как правило – MySQL.

С базой данных особых проблем не вижу:

  • для WordPress есть плагин WordPress Database Backup WordPress Database Backup, который сохраняет базу по расписанию и отправляет её на e-mail
  • для других систем можно воспользоваться скриптом Sypex Dumper Sypex Dumper, или настроить дамп и отправку по почте самостоятельно (несколько строк кода).

С сохранением файлов сайта чуть сложнее. Можно просто периодически сохранять их вручную, но можно и автоматизировать.

Сначала заархивируем все файлы сайта в один архив с помощью библиотеки PclZip PclZip:

<?php require_once('pclzip.lib.php');
$date = date('Y-m-d');
$archive = new PclZip("$date.zip");
$v_list = $archive->add('../');
if ($v_list == 0) { die("Error : ".$archive->errorInfo(true)); }

В этом примере $v_list – это относительный путь к архивируемому каталогу или список каталогов и фалов через запятую. Выбирайте сами, что именно нужно резервировать.

После этого можно сделать дамп MySQL базы и добавить его в этот архив, а потом, например, отправить полученный архив по почте с помощью класса PhpMailer PhpMailer и удалить его чтобы не занимал место. Запускать этот процесс можно с помощью планировщика у хостинг-провайдера (у Majordomo бесплатный) или (если это WordPress) с помощью WP-Cron WP-Cron.

Законченного решения я не выложил, но конструктор укомплектован – собирайте кому что нужно, все части надёжны и проверены.

Следующий эпизод – локальный компьютер. Тут стоит сразу определиться – что именно резервировать. Для больших и редко используемых файлов (фото, видео, архивы) я поставил себе под стол старенький компьютер под Ubuntu, настроил NFS и забыл о нём – приходя домой я получаю доступ к этим файлам, а в крайнем случае – можно и удалённо залезть.

А для регулярного бэкапа текущих проектов вполне подойдёт Gmail. Бесплатный почтовый ящик вмещает до 10Gb данных, а самый интересный фокус в том, что его можно подключить как обычный диск – как в Linux GmailFS, так и под Windows GMail Drive. А сохранять туда нужные файлы тоже можно кроном, или его Windows-аналогом – nnCron + nnBackup nnCron.

А заодно посмотрим, что об этом думают другие участники конкурса на лучший способ бэкапа личных данных.

Жилинский Владимир.




© 2007-2010 Блог интернет-разработчика, автор — Zhilinsky.ru.
При использовании информации ссылка на источник обязательна.