Как исправить проблему с задержкой S3 / memcache? - PullRequest
2 голосов
/ 18 сентября 2009

У нас СЕРЬЕЗНЫЕ ПРОБЛЕМЫ С ИТОГАМИ на нашем сервере.

Мы храним 3 интересных вещи в S3 и помещаем их в memcache.

  • Аватары пользователей в среднем ~ 25k
  • текст ~ 1.5k
  • xml ~ 1.5k

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

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

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

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

мы запускаем merb под Apache Phusion с REE. мы используем memcached гем evan weaver, построенный на libmemcached-0.25.14 (который, как я полностью понимаю, не самый современный lib; этот гем требует этого)

Из того, что я вижу, наши проблемы с задержкой связаны с тем, что у 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 ??

Ответы [ 2 ]

6 голосов
/ 18 сентября 2009

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

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

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

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

1 голос
/ 19 сентября 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 нет контрактов или ежемесячных обязательств - вы платите только за столько или меньше контента, сколько фактически доставляете через сервис.

С уважением, Sirmak

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...