
В данной статье оценивается применение SQLite для PHP-проектов, рассматриваются особенности многопоточной работы и способы ускорения работы. «На десерт» — небольшое сравнение с другими СУБД (MySQL, PosgreSQL, MS SQL, MongoDB).
DevOps
var d = new Date(),
fd = d.getDate() + '.' + (d.getMonth()+1) + '.' + d.getFullYear();
db13 ~ # cat /etc/fstab | grep md
/dev/md0 / ext3 noatime 0 1
/dev/md1 /mnt/db reiser4 noatime 0 0
title Gentoo Linux 3.10.7 md0
root (hd0,0)
kernel /boot/kernel-3.10.7 root=/dev/md0
[ 0.000000] Command line: root=/dev/md0 raid=/dev/md0 [ 0.000000] Kernel command line: root=/dev/md0 raid=/dev/md0 [ 1.063603] md: raid1 personality registered for level 1 [ 1.266420] md: Waiting for all devices to be available before autodetect [ 1.266494] md: If you don't use raid, use raid=noautodetect [ 1.266781] md: Autodetecting RAID arrays. [ 1.293670] md: invalid raid superblock magic on sdc1
[ 1.294210] md: sdc1 does not have a valid v0.90 superblock, not importing! [ 1.312482] md: invalid raid superblock magic on sdd1 [ 1.312556] md: sdd1 does not have a valid v0.90 superblock, not importing!
[ 1.312579] md: Scanned 4 and added 2 devices. [ 1.312595] md: autorun ... [ 1.312610] md: considering sdb3 ... [ 1.312626] md: adding sdb3 ... [ 1.312641] md: adding sda3 ... [ 1.312657] md: created md0 [ 1.312665] md: bind<sda3> [ 1.312754] md: bind<sdb3> [ 1.312770] md: running: <sdb3><sda3> [ 1.313064] md/raid1:md0: active with 2 out of 2 mirrors [ 1.313166] md0: detected capacity change from 0 to 7984840704 [ 1.313262] md: ... autorun DONE. [ 1.320413] md0: unknown partition table [ 1.338528] EXT3-fs (md0): mounted filesystem with ordered data mode [ 2.581420] systemd-udevd[861]: starting version 208 [ 3.122748] md: bind<sdc1> [ 4.896331] EXT3-fs (md0): using internal journal
mdadm --manage /dev/md1 --run. Конечно, можно было бы прописать эту строчку куда-нибудь в rc-скрипты, но, согласитесь, это как-то не спортивно.
[ 0.000000] Command line: root=/dev/md0 raid=/dev/md0 [ 0.000000] Kernel command line: root=/dev/md0 raid=/dev/md0 [ 1.063924] md: raid1 personality registered for level 1 [ 1.248078] md: Waiting for all devices to be available before autodetect [ 1.248201] md: If you don't use raid, use raid=noautodetect [ 1.248504] md: Autodetecting RAID arrays. [ 1.265058] md: Scanned 2 and added 2 devices. [ 1.265243] md: autorun ... [ 1.265258] md: considering sda3 ... [ 1.265274] md: adding sda3 ... [ 1.265290] md: adding sdb3 ... [ 1.265305] md: created md0 [ 1.265321] md: bind<sdb3> [ 1.265331] md: bind<sda3> [ 1.265428] md: running: <sda3><sdb3> [ 1.265865] md/raid1:md0: active with 2 out of 2 mirrors [ 1.265891] md0: detected capacity change from 0 to 7984840704 [ 1.266068] md: ... autorun DONE. [ 1.276627] md0: unknown partition table [ 1.294892] EXT3-fs (md0): mounted filesystem with ordered data mode
[ 2.713383] systemd-udevd[860]: starting version 208 [ 3.128295] md: bind<sdc1> [ 3.159107] md: bind<sdd1> [ 3.170320] md/raid1:md1: active with 2 out of 2 mirrors [ 3.170333] md1: detected capacity change from 0 to 17170300928 [ 3.178113] md1: unknown partition table [ 4.911712] EXT3-fs (md0): using internal journal [ 5.027077] reiser4: md1: found disk format 4.0.0.
Зачем заниматься этой ерундой! — говорят опытные пользователи — OS лучше вас знает как кешировать файлы! С кешем и префетчем в современных OS, точнее FS, проблем нет! Зачем плодить свои кеши и списки популярных материалов и все такое?...
$foo = isset($array['foo']) ? $array['foo'] : null;
$bar = isset($array['bar']) ? $array['bar'] : null;
$foo = $array['foo'] ? : null;
$bar = $array['bar'] ? : null;
error_reporting = E_ALL
. И именно в подобных случаях на помощь приходит ArrayObject — класс, к объектам которого можно обращаться используя синтаксис массивов и позволяющий изменять поведение используя механизм наследования.keepalived — реализации протокола VRRP (Virtual Router Redundancy Protocol) для Linux. Демон keepalived следит за работоспособностью машин и в случае обнаружения сбоя — исключает сбойный сервер из списка активных серверов, делегируя его адреса другому серверу.
Другими словами, у нас 2 сервера на которых прописано по одному публичному адресу. Если любой из этих серверов падает, то адрес упавшего подхватывается вторым.
Демоны keepalived общаются по протоколу VRRP, посылая друг другу сообщения на адрес 224.0.0.18.
Если сосед не прислал свое сообщение, то по истечению периода он считается умершим и оба адреса обслуживает оставшаяся нода. Как только упавший сервер начинает слать свои сообщения в сеть, все возвращается на свои места
nginx [engine x] — это HTTP-сервер и обратный прокси-сервер, а также почтовый прокси-сервер, написанный Игорем Сысоевым. Уже длительное время он обслуживает серверы многих высоконагруженных российских сайтов, таких как Яндекс, Mail.Ru, ВКонтакте и Рамблер. Согласно статистике Netcraft nginx обслуживал или проксировал 15.08% самых нагруженных сайтов в октябре 2013 года.
Основная функциональность HTTP-сервера
- Обслуживание статических запросов, индексных файлов, автоматическое создание списка файлов, кэш дескрипторов открытых файлов;
- Акселерированное обратное проксирование с кэшированием, простое распределение нагрузки и отказоустойчивость;
- Акселерированная поддержка FastCGI, uwsgi, SCGI и memcached серверов с кэшированием, простое распределение нагрузки и отказоустойчивость;
- Модульность, фильтры, в том числе сжатие (gzip), byte-ranges (докачка), chunked ответы, XSLT-фильтр, SSI-фильтр, преобразование изображений; несколько подзапросов на одной странице, обрабатываемые в SSI-фильтре через прокси или FastCGI, выполняются параллельно;
- Поддержка SSL и расширения TLS SNI.
Другие возможности HTTP-сервера
- Виртуальные серверы, определяемые по IP-адресу и имени;
- Поддержка keep-alive и pipelined соединений;
- Гибкость конфигурации;
- Изменение настроек и обновление исполняемого файла без перерыва в обслуживании клиентов;
- Настройка форматов логов, буферизованная запись в лог, быстрая ротация логов;
- Специальные страницы для ошибок 3xx-5xx;
- rewrite-модуль: изменение URI с помощью регулярных выражений;
- Выполнение разных функций в зависимости от адреса клиента;
- Ограничение доступа в зависимости от адреса клиента, по паролю (HTTP Basic аутентификация) и по результату подзапроса;
- Проверка HTTP referer;
- Методы PUT, DELETE, MKCOL, COPY и MOVE;
- FLV и MP4 стриминг;
- Ограничение скорости отдачи ответов;
- Ограничение числа одновременных соединений и запросов с одного адреса;
- Встроенный Perl.