Memcached Tomcat MySQL на 1 ГБ оперативной памяти - PullRequest
1 голос
/ 07 февраля 2011

Я новичок в memcached и кешировании в целом.У меня есть веб-приложение java, работающее на Ubuntu + Tomcat + MySQL на VPS-сервере с 1 ГБ памяти.

Имеет ли смысл добавить слой memcached объемом около 256 МБ для кэширования?Будет ли это слишком большой нагрузкой на сервер?Что является более подходящим для кэширования визуализированных html-страниц или объектов базы данных?

Пожалуйста, сообщите.

Ответы [ 3 ]

3 голосов
/ 08 февраля 2011

Если вы собираетесь кэшировать страницы, не используйте memcached, используйте Varnish .Тем не менее, есть хороший шанс, что использование памяти не очень удачное.Кэширование страниц торгует памятью для вычислений и работы с базой данных, но это стоит довольно много памяти на страницу, поэтому лучше всего в тех случаях, когда работа с вычислениями и базами данных, необходимая для создания одной страницы, составляет много (или страницы очень маленькие!).Кроме того, учтите, что кэширование страниц не будет эффективным или даже невозможным, если вы хотите использовать индивидуальную настройку на своих страницах (например, отображение количества товаров в корзине).По крайней мере, не вдаваясь в некоторые по-настоящему волосатые махинации (включая крайние стороны?)memcached или похожий.Смысл серверов кеша в том, чтобы заставить память на одной машине работать как кеш для другой - как файловый сервер разделяет диск, по сути, они являются серверами памяти.На одной машине вы могли бы также отдать всю память Java и кэшировать объекты в куче.

Используете ли вы объектно-реляционный маппер?Если так, посмотрите, есть ли у него какая-либо поддержка кеша второго уровня.Все три большие реализации (Hibernate, OpenJPA и EclipseLink) поддерживают кэш-память в памяти.Скорее всего, они справятся с задачей лучше, чем вы, если бы вы сделали кеширование самостоятельно.

Но если вы не используете маппер, у вас нет выбора, кроме как выполнить кеширование самостоятельно.В LinkedHashMap есть точки расширения для построения LRU-кешей, и, конечно же, есть любимая программа SoftReference в сочетании с HashMap.Кроме того, вероятно, есть реализации кеша, которые вы можете загрузить и использовать - я был бы шокирован, если бы в библиотеках Apache Commons ничего не было.

0 голосов
/ 07 февраля 2011

Возможно, имеет смысл сделать это, почему бы не попробовать меньший размер, например 64 МБ, и посмотреть, как это происходит. Когда вы используете больше ресурсов для memcache, меньше для всего остального. Вы должны попробовать и посмотреть, что даст вам лучшую производительность.

0 голосов
/ 07 февраля 2011

memcached не добавит заметной нагрузки на ваш сервер, но это будет память, которую ваше приложение не сможет использовать.Если вы планируете использовать только один сервер приложений какое-то время, лучше использовать кеш в JVM.

Что касается того, что кешировать, ответ падает где-то всередина вышеперечисленного.Вы не хотите кэшировать именно то, что находится в вашей базе данных, и вы, конечно, не хотите кэшировать конечный результат.У вас есть представление модели данных в вашем приложении, которое не совсем то, что в БД (например, объект User может состоять из нескольких запросов из нескольких разных таблиц).Кэшируйте подобные вещи, так как они наиболее пригодны для повторного использования.

На memcached сайте есть много информации, которая должна помочь вам разобраться с кэшированием в целом и memcached конкретно.

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