Мы уже давно используем Memcached и недавно начали тестировать Membase в AWS. Мы тестируем один экземпляр Membase 1.6.0 на большом экземпляре EC2 с 5 ГБ ОЗУ, 750 ГБ на диске (Linux FC8).
Мы заметили, что SQLite, по-видимому, блокируется при ежечасной очистке при пробуждении expiryPagerSleeptime. Хотя это и ожидалось (поскольку SQLite использует блокировку на уровне базы данных), мы не ожидали, что Membase также будет блокировать.
В этом случае кажется, что в то время, как SQLite удаляет старые ключи, Membase «операций в секунду» падает до нуля или почти до нуля в течение нескольких минут. После завершения процесса выселения сервер Membase быстро восстанавливается. Я ожидал, что чтение из ОЗУ Membase будет продолжаться, пока SQLite заблокирован, но, похоже, это не так. Все останавливается; шпионские клиенты генерируют потоки исключений, поскольку они ожидают данных, которые никогда не поступают.
По документам у меня сложилось впечатление, что Membase работает асинхронно и будет продолжать выполнять чтение из ОЗУ. Буду признателен за любую помощь или предложения, чтобы предотвратить блокировку Membase на выселение ключевых. Это серьезная проблема для нас, потому что кажется, что этот процесс выселения занимает около 4 минут, а отставание в очереди на диске очищается. Это означает, что каждый час Membase фактически отключается на 4 минуты.
Я должен также упомянуть, что это происходит, когда объем данных превышает объем ОЗУ (и его размер увеличивается на диске). Мы не заметили каких-либо проблем с удалением ключей, когда данные были только в ОЗУ (предположительно, потому что удаление ключей в ОЗУ происходит слишком быстро, чтобы его можно было заметить).