Apache — это HTTP‑сервер. Основными достоинствами считаются надёжность и гибкость конфигурации.
Ускоряем работу сайта, используя быстрый и надёжный веб‑сервер nginx
nginx — это простой, быстрый и надёжный сервер. Применение nginx очень эффективно для отдачи статического контента и в качестве прокси‑сервера перед динамическими сайтами.
NGINX — это сокращение от «engine x», которое правильно произносится как энжин‑икс, хотя в быту этот веб‑сервер наиболее часто называют «нгинкс». Это очень быстрый веб‑сервер, который замечательно справляется с отдачей статического контента (изображений, стилей, скриптов и прочих скачиваемых файлов), отлично подходит для проксирования запросов динамического контента, позволяя кешировать полученные от бэкенда ответы.
В режиме проксирование nginx даёт существенный прирост производительности, особенно в тех случаях, когда бэкендом является медленный веб‑сервер, требующий много ресурсов (apache, например).
NGINX способен работать и без бэкенд‑сервера — в PHP‑проектах связка nginx + FastCGI (php-fpm) часто более производительна, нежели более классическая nginx + apache.
В ruby -проектах nginx тоже весьма популярен — как правило, именно он выступает в качестве фронтенда для рельсовых веб‑серверов Puma, Thin, Unicorn, Rainbows, Passenger.
Основные функции веб‑сервера:
- обработка запросов статических и индексных файлов
- проксирование запросов с кешированием и без
- простое распределение нагрузки и отказоустойчивость
- поддержка FastCGI, серверов Memcached и хранилищ Redis
- сжатие (gzip)
- byte-ranges (докачка)
- chunked ответы
- HTTP‑аутентификация
- SSI‑фильтры
- поддержка SSL
Тематические статьи
На серверах для размещения сайтов и веб‑приложений устанавливается программное обеспечение, которое требуется для работы программной логики сайта и других служб домена, для обслуживания и мониторинга, а также для защиты от взлома и устойчивости к нагрузкам.
Sphinx и ElasticSearch — это поисковые «движки», которые обеспечивают более быстрый поиск и фильтрацию по сравнению с реляционными базами данных, а также обеспечивают возможность использования многих полезных функций поиска, например, учитывают морфологию языка, осуществляют фасеточный поиск, работают со стоп‑словами, обеспечивают выборочную индексацию и позволяют производить настройку формулы определения релевантности документов.
Memcached — это хранилище «ключ =>значение», использование которого очень эффективно для ускорения работы сайта или веб‑приложения.
СУБД — это очень часто «узкое место» в производительности веб‑приложений. В момент, когда сервер баз данных не может справится с нагрузками, производится масштабирование. В современных высоконагруженных системах эффективное управление данными невозможно без использования методов масштабирования и обеспечения отказоустойчивости. Репликация, партиционирование и шардирование — ключевые подходы, которые позволяют распределять данные, повышать производительность и гарантировать доступность. Разберем каждый из них подробно.
Redis — сетевое журналируемое хранилище данных типа «ключ — значение», которое обрабатывает данные в оперативной памяти и обладает механизмами снимков и журналирования для обеспечения постоянного хранения. Хранилище поддерживает работу с пятью типами данных: со строками, списками, хешами, обычными и сортируемыми множествами.
Кеширование статических ресурсов (картинок, скриптов, стилей) и неизменяющихся страниц на стороне браузера может сэкономить время загрузки страниц, если пользователь посещает сайт многократно или при посещении просматривает несколько страниц, которые используют одинаковые ресурсы.
Увеличить отзывчивость интерфейса и снизить нагрузку на сервер можно при помощи Ajax‑навигации: если не перезагружать страницу целиком, а обновлять только содержание или отдельные фрагменты, то скорость работы сайта или приложения существенно возрастёт.
Бывает так, что некоторое содержание страницы нужно не всем или не всегда, но на генерацию этого материала или для его передачи тратится много ресурсов. В этом случае имеет смысл сделать загрузку «ленивой», то есть не генерировать и не загружать в браузер информацию до тех пор, пока она не понадобится.