Как подготовить свой код для балансировки нагрузки - PullRequest
5 голосов
/ 03 марта 2009

Поскольку мы делали это в прошлом, я хотел бы собрать полезную информацию для всех, кто переходит на балансировку нагрузки, поскольку - это проблем, о которых должен знать ваш код.

Мы перешли с одного сервера Apache на Squid в качестве обратного прокси / loadbalancer с тремя серверами Apache позади.

Мы используем PHP / MySQL, поэтому проблемы могут отличаться.

Вещи, которые мы должны были решить:

Сессии

Мы перешли от php-сессий (файлов) по умолчанию к распределенным memcached-сессиям. Простое решение, должно быть сделано. Таким образом, вам также не нужны «липкие сессии» на вашем loadbalancer.

Кэширование

В наш нераспределенный apc-кеш для каждого веб-сервера мы добавили anoter memcached-layer для кеширования распределенных объектов и заменили им все старые / устаревшие системы кеширования файлов.

Загрузка

Загрузки идут в общую (nfs) папку.

Вещи, которые мы оптимизировали для скорости:

Статические файлы

Наша основная NFS запускает lighttpd, обслуживающий (также загруженные пользователем) изображения. Squid знает об этом и никогда не запрашивает у наших apache-узлов изображения, что дало хороший прирост производительности. Squid также настроен для кэширования этих файлов в оперативной памяти.

Что вы делали, чтобы подготовить свой код / ​​проект к балансировке нагрузки, какие-либо другие проблемы для людей, думающих об этом шаге, и какую платформу / язык вы используете?

1 Ответ

1 голос
/ 03 марта 2009

При этом:

Для узлов http я настаиваю на одном образе системы (для этого хорошо подходит ocfs2) и использую фунты или перекрестки в качестве балансировщика нагрузки, в зависимости от сценария. Узлы должны иметь небольшой локальный диск для подкачки и во избежание большинства (но не всех) головных болей CDSL.

Затем я привожу Ксена в микс. Если вы поместите небольшое временное количество информации на Xenbus (то есть, сколько виртуальной памяти Linux фактически обещало обрабатывать для каждой виртуальной машины, также известной как Committed_AS), вы можете быстро обнаружить балансировщик нагрузки мозга и настроить его. Oracle тоже это поняла ... и сейчас работает над улучшением драйвера воздушного шара в Linux.

После этого я смотрю на стоимость разделения использования базы данных для любого данного приложения по sqlite3 и любой базы данных, которую приложение хочет изначально, осознавая, что мне нужно разделить базу данных, чтобы posix_fadvise () могла выполнять свою работу и не загрязнять ядро буферы без необходимости. Поскольку большинство служб СУБД хотят выполнять свою собственную буферизацию, вы также должны позволить им выполнять свою собственную кластеризацию. Это действительно диктует тип кластера БД, который я использую, и то, что я делаю с драйвером шаров.

Серверы Memcache затем загружаются из тощего initrd, в то время как привилегированный домен следит за тем, как их память и загрузка процессора используются, чтобы он знал, когда загружаться больше.

Выбор тактового импульса / поглощения действительно зависит от конкретной сети и ожидаемого использования кластера. Трудно обобщить это.

Конечным результатом обычно является 5 или 6 физических узлов с небольшим объемом памяти, загружающей монитор виртуальной машины + гости при подключении к зеркальному хранилищу.

Хранилище также сложно описать в общих чертах .. иногда я использую кластер LVM, иногда нет. Значение not не изменится, когда LVM2 наконец отойдет от своего текущего строкового API.

Наконец, все это приводит к тому, что Augeas обновляет конфигурации на лету, основываясь на событиях, передаваемых через Xenbus. Это включает в себя сам ocfs2 или любой другой сервис, где конфигурации просто не могут находиться в одном образе системы.

Это действительно вопрос, относящийся к конкретному приложению. Можете привести пример? Я люблю memcache, но не каждый может извлечь выгоду из его использования, например. Мы пересматриваем вашу конфигурацию или говорим о лучших практиках в целом?

Изменить:

Извините за то, что я так ориентирован на Linux ... это обычно то, что я использую при разработке кластера.

...