Redis — это очень быстрая key-value база данных. Может использоваться как memcached, но отличие от последней в том, что Redis сохраняет свои данные на диск, то есть может быть использован для хранения данных (что мы успешно и делаем). Основные отличии от других собратьев это возможность хранить более сложные структуры данных — списки и «сеты» и атомарные операции с ними.
Для начала, некоторые поразительные показатели проекта Ebay.com:
- Более 89 миллионов активных пользователей - 190 миллионов товаров в 50 тыс. категорий - Более 8 миллиардов URL запросов в день - Большая динамика развития — сотни новых функциональных улучшений каждые 3 месяца - 39 стран, 9 языков, 24 часа в сутки, 7 дней в неделю, круглый год - 70 миллиардов операций чтения/записи в день - Обработка 50 Тб данных в день - Анализ 50 Пб данных каждый день
Вам наверняка приходилось сталкиваться с проблеммой медленной работы сайта.
Причину того мы обычно ищем в PHP и MySQL, но зачастую забываем о том, что из себя представляет страница, которая попадает в браузер пользователя. Помимо HTML есть еще и Javascript, CSS, множество картинок, флеш объекты и прочее.
Время загрузки страницы зачастую занимает лишь несколько процентов от времени загрузки всех компонент этой страницы. Существует ряд практик и подходов, которые помогают оптимизировать загрузку страницы в браузер в разы (все зависит от ситуации, но это может быть и 10 раз).
1. Стоит помещать Javascript файлы в конец HTML и использовать только внешние методы для регистрации событий (не использовать атрибутов, типа «onclick» и т.п.). Это поможет избежать ошибок в тех случаях, когда Javascript еще не загружен, а пользователь уже пытается выполнить какое-то действие
2. Стоит заранее сжимать статику gzip-ом, а в отдающем сервере просто отдавать необходимые заголовки. В этом может помочь этот модуль nginx'a
3. Изолируйте отдачу на разные сервера (например, динамику и статику отдавайте с разных серверов) — поможет изолировать проблемы с нагрузками
Зачем мы используем реляционные СУБД, поддерживающие SQL синтаксис? Хранить данные, инкапсулировать работу с данными, делать хитромудрые выборки, сортировки и т.д. Насколько часто Вы (или Ваши разработчики) анализируете определенную задачу на предмет того, какую технологию хранения данных применять? Угадаю — почти никогда. Выбор обычно делается в начале проекта (MySQL, Postgres и т.д.), а потом этот выбор является условием «по умлочанию» для любого рода технических задач, требующих постоянное хранилище.
Интересное аппаратное решение для memcached, на которое я наткнулся читая highscalability.com.
Как заявляют производители этой железяки, она позволяет вставить в 5...10 раз больше оперативной памяти в обычный юнит (ракспейса), чем стандартный сервер. Что, по их словам, достигается новой гибридной архитектурой устройства подсистемы памяти.
Интрефейс этого аппаратного решения поддерживает протокол memcached, поэтому Вам не придется прилагать дополнительных усилий для интеграции этого решения в Вашу рабочую среду.
Интересно услышать Ваши мнения, т.к. вертикальное масштабирование — это хорошо, но ведь не бесконечно.
Сегодня посчастливилось ознакомиться со статьей Майкла Нолла (Michael Noll) о том, как написать распределённое Hadoop приложение на питоне (Python).
Я всегда был большим поклонником распределённой обработки (MapReduce), но, так как в своей работе использую PHP, я подумал, что неплохо бы было портировать этот пример и показать, как можно создавать распределенные приложения на PHP.
Hadoop - распределенная вычислительная платформа, написанная на Java, которая включает в себя компоненты аналогичные Google File System и MapReduse которые позволяют хранить и обрабатывать петабайты данных.
Ваши пользователи качают гигабайты трафика с вашего ресурса? Как увеличить скорость загрузки файлов пользователями и при этом разгрузить ваш сервер ??? Как сделать зеркалирование вашего ресурса затратив при этом минимум средств.
На основе открытого решения Openx нам предстоит реализовать масштабируемую систему управления рекламой, которая бы выдерживала нагрузку порядка 20М показов баннеров в сутки, что равнозначно более 40М запросов к web-серверу.