Мне нужно запустить приложение Linux-Apache-PHP-MySQL (платформа электронного обучения Moodle) для большого количества одновременно работающих пользователей - я планирую 5000 пользователей. Под одновременной работой я подразумеваю, что 5000 человек должны иметь возможность работать с приложением одновременно. «Работа» означает не только чтение из базы данных, но и запись.
Приложение не очень типичное, так как оно выполняет много вставок / обновлений в базе данных, поэтому методы кеширования не очень помогают. Мы используем механизм хранения InnoDB. Кроме того, приложение написано не с расчетом на производительность. Например, один поток Apache обычно занимает около 30-50 МБ ОЗУ.
Я хотел бы получить информацию о том, какое оборудование необходимо для создания масштабируемой конфигурации, способной справиться с такой нагрузкой.
Сейчас мы используем два HP DLG 380 с двумя 4-ядерными процессорами, которые способны справляться с гораздо меньшей нагрузкой (обычно 300-500 одновременных пользователей). Разумно ли вкладывать средства в такие устройства и строить кластер, используя их, или лучше использовать более мощное оборудование?
Мне особенно любопытно
Другое дело, как все собрать, это самая оптимальная архитектура. Кластеризация с MySQL довольно сложна (люди жалуются на MySQL Cluster, даже здесь, в Stackoverflow).
Диски. МНОГО БЫСТРЫХ дисков за правильным RAID-контроллером. Я лично использую стойку SuperMicro 2, в которой можно разместить 24 2,5-дюймовых диска, вместе с дисками WD Velociraptor со скоростью вращения 10 тыс. Об / мин - для меня этого достаточно. Вы можете легко сложить эти коробки для размещения большего количества дисков - контроллер Raid, который я использую (Adaptec 5805 ) можно адресовать примерно к 190 дискам. Когда речь идет о базе данных высокого класса, без вставок и обновлений, диски БУДУТ вашей проблемой.
Получите X из них (x> 1) для избыточности и управляйте / подчиняйте их базой данных (здесь нет эксперта mySQL).
сеть: возможно 1 Гбит внутри кластера. Прежде чем перейти на 10 Гбит - посмотрите Infiniband (12 Гбит). С правильными платами это дешевле, чем использование 10-гигабитного Ethernet, и имеет лучшую задержку.
Затем используйте меньшие / другие коробки для передней части. И supermicro, и Tyan имеют многоузловые корзины - вы можете получить систему с двумя стойками, которая представляет собой 4 отдельных компьютера, каждый с 2 процессорами. Кластеризация интерфейса;) Современные процессоры, слава богу, могут адресовать значительный объем оперативной памяти, так что процесс 50 МБ / apache с этой стороны не так уж и плох. Привыкайте к машинам с 32 или 64 гигабайтами оперативной памяти;)
В качестве альтернативы, вы можете посмотреть нито-лопасти для передней части, но я никогда не мог найти в них финансового смысла (Слишком дорого, ПЛЮС клетка - привет?).
Забудьте о кластеризации - она может плохо работать, когда всем нужно писать в базу данных.
Возможно, вы сможете разделить свои данные - используя несколько баз данных. Например, пользователи, которые substring(md5sum(username) for 1)="0"
подключиться к базе данных databasename_0
на сервере databaseserver_0
, substring(md5sum(username) for 1)="2"
подключиться к базе данных databasename_2
на сервере databaseserver_2
.
Вы можете масштабировать этот способ от 1 сервера до 16. Например, для 2 серверов - DNS-имена databaseserver_0
к databaseserver_7
указал бы на server1
и databaseserver_8
к databaseserver_f
указал бы на server2
. Если один сервер более мощный, чем другой, вы можете заставить его работать с большим количеством баз данных.
Таким образом, вы можете легко и недорого масштабировать.