Масштабирование в Web - опыт Ebay

Ebay - один из самых больших интернет проектов сегодня во всех смыслах, в том числе и по техническим показателям. Рэнди Шуп, архитектор проекта, делится опытом в вопросах масштабирования. Он подготовил отличную презентацию, в которой касается не только практических вопросов, но и общих принципов “того, как нужно думать при построении крупных масштабируемых систем”.
Статистика Ebay
Для начала, некоторые поразительные показатели проекта:
- Более 89 миллионов активных пользователей
- 190 миллионов товаров в 50 тыс. категорий
- Более 8 миллиардов URL запросов в день
- Большая динамика развития - сотни новых функциональных улучшений каждые 3 месяца
- 39 стран, 9 языков, 24 часа в сутки, 7 дней в неделю, круглый год
- 70 миллиардов операций чтения/записи в день
- Обработка 50 Тб данных в день
- Анализ 50 Пб данных каждый день
10 главных уроков из опыта Ebay
- Партиционируйте все, что только можно. Если Вы не сможете что-то делить, Вы не сможете это масштабировать. Делите все на управляемые функциональный и информационные сектора.
- Асинхронность везде. Пользуйтесь очередями для отработки асинхронных задач.
- Автоматизируйте все. Все компоненты системы должны самообучаться и подстраиваться под нужды.
- Следите за провалами и узкими местами. Нужно мониторить все.
- Думайте о том, как обеспечить доступность, даже если некоторые компоненты системы не работают
- Эволюция (и даже революция) не обратима. Изменения - это постоянный процесс, планируйте расширение и последовательное внедрение изменений
- Зависимости важны. Минимизируйте и контролируйте их, используйте абстракцию и виртуализацию.
- Определяйте важность компонент и данных. Зная это, устанавливайте приоритеты задач.
- Сохраняйте как можно больше данных, это важно для анализа и прогнозирования.
- Максимизируйте утилизацию всех ресурсов системы, не давайте простаивать ресурсам.
Презентация
Самое интересное - это презентация, которая содержит в себе все выше перечисленные моменты с детальными комментариями. Скачать презентацию:



вот бы понять, что пункт 7 значит
@Stas
Это значит, что зависимостей нужно избегать, а компоненты нужно делать максимально автономными. Например, если Главная страница сайта подтягивает RSS, то ее работа не должна быть прервана, когда не будет доступен RSS источник.
Существуют также зависимости в коде, которые также нужно минимизировать. Пример, когда один программный модуль зависит от пяти других, и для внесения изменений в этот модуль, необходимо вносить изменения в остальные пять и наоборот.
Пример более глубокой зависимости - работа с хранилищем. Если у Вас есть прямая зависимость от типа хранилища, Вы не сможете принимать гибких решений, быстро переехать на другое хранилище, либо изменить его структуру. В таких случаях и нужна абстракция либо виртуализация.