Ответ 1
Примечание: это не было написано мной, но Snorkel из новостей YC
Вот короткий список:
- Кэш вывода по краям: используйте
Varnish
или другой обратный прокси-кеш. - Байт-код кэша. Используйте кеш-код opcode
APC
илиXCache
PHP. - Кэш и минимизация ввода/вывода базы данных: уменьшает количество штрихов базы данных с помощью
memcached
,redis
, кэшей файлов и кэшей уровня приложений (т.е. глобальных варов) - Выполнять ведение журнала событий в локальных файлах, а не в базе данных: делать все операции записи максимально простыми и быстрыми, любые данные, которые не нужны в реальном времени, могут быть записаны в простой старый файл и обрабатывается позже.
- Использовать CDN, особенно для доставки статических активов
- Настройка сервера:
Apache
,MySQL
иLinux
имеет множество настроек, влияющих на производительность, особенно для настроек тайм-аута, которые необходимо отклонить. - Определите узкие места. На системном уровне используйте такие инструменты, как
strace
,top
,iostat
,vmstat
и ведение журнала запросов, чтобы узнать, какой уровень использует наибольшее время и ресурсы - Загрузка: DoS самостоятельно. Стресс проверить ваш стек, чтобы найти узкие места и настроить их
- Удалить неиспользуемые модули. Для каждого компонента стека выгружайте все модули по умолчанию, которые не нужны для доставки вашей службы.
- Не используйте ORM и другие фиктивные абстракции: снимите тренировочные колеса и напишите свои собственные запросы.
- Сделать страницы входа быстрыми, простыми и кэшируемыми. Никто не читает этот глупый канал новостей в нижнем углу вашей первой страницы и убивает вашу базу данных, поэтому вытащите его.
В большинстве случаев PHP замедляется, потому что каждый процесс PHP блокируется, ожидая ввода-вывода с другого уровня, либо медленного диска, либо перегруженной базы данных, либо зависающего процесса memcached, либо медленного вызова API REST третьему лицу услуга... часто просто привязка к текущему процессу PHP покажет вам, что ждет... короче говоря, блокирование ввода-вывода замедляет все. Ключ к ускорению: