Daily Archives: July 14, 2010
PHP for Android
Анонсирован проект “PHP for Android” в рамках которого представлена система для выполнения на платформе Android приложений, написанных на языке PHP. В настоящий момент для телефонов на базе платформы Android подготовлен установочный APK-файл, интегрирующий поддержку PHP 5.3 в созданную разработчиками Google подсистему Android Scripting Environment (ASE). Исходные тексты разработки распространяются в рамках лицензии Apache.
PHP-скрипты могут выполняться в окружении Android из командной строки, функционировать как фоновые процессы или выступать в роли обычных GUI приложений.
Работа с MySQL кластером в Doctrine
В этой статье я хочу рассказать, как настроить Doctrine таким образом, чтобы использовать master-сервера для записи, а slave-сервера для чтения данных. Эта стратегия позволит добиться распределения нагрузки между серверами БД. Речь идет именно о нескольких серверах, на которых реплицируются базы, а не о ndbcluster, как некоторые могли бы подумать.
Итак, сначала мы должны сконфигурировать все дсотупные соединения в Doctrine.
|
1 2 3 4 5 6 7 8 9 10 11 |
$connections = array( 'master' => 'mysql://root:@master/dbname', 'slave_1' => 'mysql://root:@slave1/dbname', 'slave_2' => 'mysql://root:@slave2/dbname', 'slave_3' => 'mysql://root:@slave3/dbname', 'slave_4' => 'mysql://root:@slave4/dbname' ); foreach ($connections as $name => $dsn) { Doctrine_Manager::connection($dsn, $name); } |
Теперь, когда у нас есть один master-сервер, и 4 slave-сервера мы можем переписать классы Doctrine_Record и Doctrine_Query для добавления логики по разделению запросов для чтения и для записи.
Тормоза при коннектах к MySQL на другом сервере
У сайта вдруг начали появляться тормоза. Скрипт отарбатывал больше 10 секунд. Начали с коллегами копать и выяснили, что очень большое время занимает коннект к серверу БД. По 5 секунд на коннект, два коннекта = 10 секунд.
Оказывается, это виноват резолв имен. Чтобы решить проблему прописали хосты с которых идут коннекты в /etc/hosts сервера БД, и стали запускать mysqld с параметром –skip-name-resolve
После этого время работы сократилось на порядок.
Подробнее о резолве в MySQL можно прочитать здесь: