Как исправить проблему с задержкой S3/memcache?

ИНОГДА на нашем сервере возникают СЕРЬЕЗНЫЕ проблемы с задержкой.

Мы храним 3 интересующие вещи в S3 и также запихиваем их в memcache.

  • В среднем около 25 000 аватаров пользователей
  • текст ~1.5k
  • xml ~ 1,5 КБ

на данный момент мы выделили 128 мегабайт оперативной памяти для memcached... на данный момент он использует 74 мегабайта

проделав некоторые базовые математические вычисления, мы легко сможем иметь около 30 000 текстовых документов (с их представлением в формате xml) и 1000 пользовательских аватаров, и при этом у нас будет меньше 128 мегабайт, выделенных для memcache.

прямо сейчас у нас есть ~ 100 пользовательских аватаров, которые можно открыть в любой момент времени, которые у нас есть в сотнях тысяч текстовых / xml-документов, но они не просматриваются, как это делают аватары ... это один здесь, там тип вещи

иногда в течение дня аватары пользователей загружаются очень медленно (что указывает на то, что они должны быть загружены из s3), а иногда (конечно, после загрузки) вы можете сказать, что они обслуживаются из memcached; то же самое с текстовыми документами

мы запускаем merb под apache phusion с REE. мы используем драгоценный камень memcached Эвана Уивера, построенный на libmemcached-0.25.14 (который, как я полностью понимаю, не является самой современной библиотекой; этот драгоценный камень требует этого)

Из того, что я вижу, наши проблемы с задержкой связаны с S3, у которого есть серьезные проблемы с задержкой (иногда 500 мс для одного аватара). Тем не менее, кажется, что это не должно быть проблемой, учитывая, что он должен кэшироваться все время. Срок действия кэша по умолчанию установлен на 1 неделю.

Соответствующий код:

@cache = MMCACHE.clone
begin
  picture = @cache.get("/avatars/#{user.avatar}")
rescue
  picture = user.picture
  @cache.set("/avatars/#{user.avatar}", picture)
end
@cache.quit

клонирование/выход важно, так как при apache/phusion будут проблемы с совместным использованием соединений, когда он разветвляется, и если мы не закроем наши соединения, они будут продолжать создаваться, пока у нас не закончатся файловые дескрипторы.

Я начинаю гораздо более внимательно следить за memcache, чтобы увидеть, смогу ли я отследить свои проблемы, но есть предложения ?? Должны ли мы просто избавиться от S3??


person eyberg    schedule 18.09.2009    source источник
comment
Ожидаете ли вы значительно увеличить количество аватаров и использование приложения по сравнению с тем, что есть сейчас? Я спрашиваю, потому что на вашем нынешнем уровне memcached кажется ненужным.   -  person Mike Buckbee    schedule 18.09.2009
comment
да, мы - и да, я полностью согласен с тем, что на данном этапе memcache совершенно не нужен.   -  person eyberg    schedule 19.09.2009


Ответы (2)


Если я правильно понимаю, вы храните файлы изображений в memcached, поддерживаемом S3.

Почему бы просто не ссылаться на изображения непосредственно из S3, а установить для них HTTP-заголовки Expires, чтобы они не вытягивались каждый раз клиентами, это имело бы два преимущества:

  1. Страницы будут загружаться быстрее, поскольку браузеры будут извлекать компоненты страниц из нескольких доменов.

  2. Упрощение вашей архитектуры.

person Mike Buckbee    schedule 18.09.2009

Вы можете использовать Amazon CloudFront для статических ресурсов, которые будут извлекаться клиентским браузером (например, изображения, статический HTML, CSS, JavaScript). Услуги CDN (Content Delivery Network) устраняют проблемы с задержкой для этого типа данных; ниже описание сервиса:

Amazon CloudFront – это веб-служба для доставки контента. Он интегрируется с другими веб-сервисами Amazon, чтобы предоставить разработчикам и предприятиям простой способ распространения контента среди конечных пользователей с малой задержкой, высокой скоростью передачи данных и без обязательств. Amazon CloudFront доставляет ваш контент, используя глобальную сеть периферийных местоположений. Запросы на ваши объекты автоматически перенаправляются в ближайшее периферийное местоположение, поэтому контент доставляется с максимально возможной производительностью. Amazon CloudFront без проблем работает с сервисом Amazon Simple Storage Service (Amazon S3), который надежно хранит исходные, окончательные версии ваших файлов. Как и в случае с другими веб-сервисами Amazon, для использования Amazon CloudFront не существует договоров или ежемесячных обязательств — вы платите только за столько контента, сколько фактически доставляете с помощью сервиса.

С уважением, Сирмак.

person sirmak    schedule 19.09.2009