LINUX.ORG.RU

Пососветуйте архитектуру Демона!!


0

0

Так задача следующая ...написать стабильный сервер количество клиентов порядка 20000(поралельных канектов) ... понятно что 1 комп с такой нагрузкой не справится ... в принципе 20000 это потолок ... реально думаю от 500-5000, но чтобы архитектура позволяла расширить систему до такого уровня .... Какую систему посоветуете: -)Каким образом посоветуете организовать взаимодействие между процессами ... между серверами...

anonymous

RHAS, SLES, Solaris, AIX или HP-UX. На крайняк можно фряху.

gr_buza ★★★★
()

по одной нити на процессор для ввода-вывода, желательно с affinity, одна для приема соединений. внутри нити обрабатывать ввод-вывод через переключение на select...

Murr ★★
()

Лучше всего многопроцессорную машину. + используй нити; лучше всего конечно кластер иметь, чтобы нагрузку равномерно распределять.

anonymous
()

Хм а что дадут в данном случае нити?

для себя давно выяснил что в 2.4 нити мягко говоря не очень хорошего качества. Уж лучше использовать fork() + shared memory.

быстрый старт? Так можно было бы использовать адаптивный алгоритм сервера.

Dead ★★★★
()

>для себя давно выяснил что в 2.4 нити мягко говоря не очень хорошего качества.
Это как? Можети ты про библиотеку LinuxThreads? ;) Так если изначально пишется для Linux, то лучше native попользовать. :)

Если использовать нити, то кроме тех, что обрабатывают запросы, переключение на connection thread будет очень "дешевым", IMHO.

Murr ★★
()

Я имел ввиду Pthreads, то есть LinuxThreads я так понимаю.
Какая-то странная реализация... Не то нити, не то процессы.
Объясните, где-то читал но уже забыл, переключение между этими нитями
идет как переключение контекста процесса или как-то облегченно?
Создание ведь, как я понимаю, все равно через clone() идет, то есть манипулируя параметрами clone() можно создать либо трэд либо форк.

Dead ★★★★
()

В общем-то писал я на pthreads не мало и вот что заметил.
Когда постоянно поднимаешь новые трэды (то есть треды стартятся и умирают после выполнения задачи), то где-то после 400 одновременно запущенных нитей начинали твориться непонятные вещи. На разблокировке мьютекса часто давало SIGSEGV.
select() на пайпах в треде как-то странно работал, иногда засыпал на несколько секунд, хотя данные давно пришли.
И потом, почему нельзя обрабатывать SIGCHD в треде, то есть я застартил чилда форком, затем поднял тред и вызываю в нем waitpid на pid чилда - не работает.
В общем посмотрел я на все это дело и сделал выше приведенные выводы.
Может в 2.6 все в норме будет?

Dead ★★★★
()

А чем плоха система??? .. короче форкаю пачку дочерних процессов каждый слушает к примеру по 1 клеинту ... ну с помощью семафоров, очередей сообщений, разделяемой памяти(ещё не знаю что лучше применить) настраиваю межпроцесорное взаимодей... спомощью сокетов связываю несколько серверов ...

anonymous
()

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

Dead ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.