Назад | Перейти на главную страницу

Memcached - один большой сервер против нескольких меньших

Я обдумываю, стоит ли нам приобретать один большой (48 ГБ ОЗУ) сервер или 4 меньших (12 ГБ ОЗУ) сервера для работы службы memcached. В любом случае у меня также были бы резервные запасные части для резервирования, и я смогу добавить больше серверов, если это необходимо позже, поэтому этот вопрос чисто о производительности, а не отказоустойчивость или масштабируемость.

Я склоняюсь к тому, чтобы иметь один большой сервер только потому, что им проще управлять, он «экологичнее» и занимает меньше места, но я не знаю, может ли он работать наравне с набором меньших серверов.

Благодарим за любую идею!

Андрей,

Чтобы ответить на ваш вопрос, я хотел бы сослаться на приведенный ниже фрагмент. Клиентская библиотека memcache с точки зрения производительности по-прежнему будет выполнять два внутренних поиска независимо от того, есть ли у вас 1 или более экземпляров.

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

http://www.linuxjournal.com/article/7451?page=0,1 Запрос на получение / установку ключа со значением требует, чтобы ключ был обработан хеш-функцией. Хеш-функция - это односторонняя функция, сопоставляющая ключ (числовой или строковый) с некоторым числом, которое будет номером корзины. После вычисления номера сегмента выполняется поиск в списке узлов для этого сегмента в поисках узла с заданным ключом. Если он не найден, в список можно добавить новый.

Так как же это связано с Memcached? Memcached представляет пользователю интерфейс словаря (ключ -> значение), но внутри он реализован в виде двухуровневого хеша. Первый уровень реализован в клиентской библиотеке; он решает, на какой сервер Memcached отправить запрос, хешируя ключ в список виртуальных сегментов, каждый из которых представляет сервер Memcached. Оказавшись там, выбранный сервер Memcached использует типичную хеш-таблицу.

Помните, что чем больше у вас клиентов memcached, тем больше соединений у вас должно быть открыто. Если это веб-служба, работающая под предварительным форком Apache, и вы хотите иметь возможность обрабатывать 10 000 одновременных подключений, разница между одним сервером и 4 составляет 30 000 TCP-подключений.

Что касается производительности, она действительно зависит от вашего приложения. Но наличие 4 серверов может дать вам в 4 раза больше процессоров и в 4 раза больше сетевых интерфейсов, если вы действительно не увеличите этот центральный сервер. Выше определенного уровня стоимость такого рода обновлений становится нелинейной (например, 32-ядерная система будет стоить более чем в 4 раза дороже, чем четырехъядерный процессор с двумя сокетами). Но я не видел, чтобы memcached был обычно ограничен ЦП, поэтому определенно правдоподобно, что отдельный сервер не обязательно должен быть таким высокопроизводительным сервером.

Но, как и во многих других случаях, вам, вероятно, придется проверить это на себе с помощью конкретных приложений. Мне кажется вероятным, что один сервер на 48 ГБ может справиться с нагрузкой, поэтому попробуйте получить скромный сервер с 48 ГБ ОЗУ, поставить на него munin и запустить стресс-тестирование. Если вы обнаружите узкие места, у вас будет дополнительная информация о том, нужно ли вам получить еще 3 сервера и распределить оперативную память вокруг них или, возможно, предпринять какие-то другие действия.

Ну ты уверен, что он зеленее? Я бы предпочел несколько, просто для надежности и для того, чтобы держать масштаб в голове.