Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Архитектура Многопоточного сервера 
:(
    Опции темы
DominiK
Дата 13.10.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.3.2007
Где: Россия, Омск

Репутация: нет
Всего: нет



Есть задача написать многопоточный сервер, который будет работать с базой mysql, и держать одновременно нагрузки до 1-2к клиентов, (клиент спросил - сервер глянул в базу, вытянул данные - клиент получил), объемы данных не большие, реализацию данной задачи нужно делать под windows 2003 сервер. Суть темы - для примера хотел бы перелопатить пару исходников с одновременно не сложной и стабильной архитектурой подобного сервера, исходники\названия приложений, хочу спросить у гуру, те кто писал подобные вещи, откликнетесь. Своя реализация в голове рождается, но всё таки хочу опираться на какую то базу, чтобы не допускать ошибок лишних, вообщем хочу пример, может литературу посоветуйте почитать какую то, спасибо    smile 

Это сообщение отредактировал(а) DominiK - 13.10.2008, 10:50
PM MAIL   Вверх
Lazin
Дата 13.10.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 5
Всего: 154



ИМХО, нужно создать пулл потоков, количество потоков должно зависеть от железа, а не от количества подключенных клиентов, например количество ядер*2, работать с клиентами асинхронно, перо БД ничего не скажу...
можно использовать boost::asio
PM MAIL Skype GTalk   Вверх
DominiK
Дата 14.10.2008, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.3.2007
Где: Россия, Омск

Репутация: нет
Всего: нет



upload.wikimedia.org/wikipedia/commons/thumb/0/0c/Thread_pool.svg/400px-Thread_pool.svg.png

Рассмотрел бы вот такую вот реализацию
PM MAIL   Вверх
MAKCim
Дата 15.10.2008, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 6
Всего: 207



DominiK, 
один поток - accept-ор
остальные N (как сказал Lazin, зависящие от параметров системы) - рабочие
есть матрица дескрипторов потоков N * M
accept-ор устанавливает соединения и связывает их с дескрипторами
у каждого рабочего потока свои M дескрипторов
резонно использовать пул соединений с БД для каждого такого потока, чтобы избежать синхронизации и макисмально распараллелить операции
работа потоков с дескрипторами будет зависеть от модели используемого I/O (самые производительные: неблокируемый и асинхронный)
я бы использовал модель асинхронного I/O



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Lazin
Дата 15.10.2008, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 5
Всего: 154



Цитата(MAKCim @  15.10.2008,  09:02 Найти цитируемый пост)
есть матрица дескрипторов потоков N * M

Цитата(MAKCim @  15.10.2008,  09:02 Найти цитируемый пост)
у каждого рабочего потока свои M дескрипторов

это для того, что-бы данные от каждого соединения обрабатывались всегда одним и тем-же потоком, для того что-бы оптимально использовался кэш процессора, я правильно понял?
PM MAIL Skype GTalk   Вверх
DominiK
Дата 16.10.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.3.2007
Где: Россия, Омск

Репутация: нет
Всего: нет



Посоветуйте исходник где есть подобная реализация или нечто приближенное к этому, надо живой пример
PM MAIL   Вверх
MAKCim
Дата 17.10.2008, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 6
Всего: 207



Цитата(Lazin @  15.10.2008,  09:15 Найти цитируемый пост)
это для того, что-бы данные от каждого соединения обрабатывались всегда одним и тем-же потоком

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


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
DominiK
Дата 18.10.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.3.2007
Где: Россия, Омск

Репутация: нет
Всего: нет



Цитата(MAKCim @ 17.10.2008,  09:13)
Цитата(Lazin @  15.10.2008,  09:15 Найти цитируемый пост)
это для того, что-бы данные от каждого соединения обрабатывались всегда одним и тем-же потоком

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

Макс, у тебя есть личные наработки по этой теме, которыми можешь поделиться? Мне надо 1 раз увидеть реальный пример, возможно выполняющий простые задачи, и на базе его уже можно отталкиваться в нужную сторону! smile 
PM MAIL   Вверх
Lazin
Дата 18.10.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 5
Всего: 154



Тебе нужно использовать IO Completion Ports, в MSDN наверняка есть примеры использования, так-же можно использовать библиотеки, лично я использую для этого boost::asio, в документации хватает примеров, но это не единственный вариант smile

Добавлено через 3 минуты и 57 секунд
Boost.Asio.Exemples
PM MAIL Skype GTalk   Вверх
DominiK
Дата 18.10.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.3.2007
Где: Россия, Омск

Репутация: нет
Всего: нет



Цитата(Lazin @ 18.10.2008,  12:32)
Тебе нужно использовать IO Completion Ports, в MSDN наверняка есть примеры использования, так-же можно использовать библиотеки, лично я использую для этого boost::asio, в документации хватает примеров, но это не единственный вариант smile

Добавлено @ 12:36
Boost.Asio.Exemples

Дружище я бутс не осбо использовал, хотя это будет в повод в нём разобраться, но на это надо время, которого у меня не многоsmile
PM MAIL   Вверх
Олег2005
Дата 18.10.2008, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



Кое что здесь есть

Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  Completion_port_full.zip 51,89 Kb
PM MAIL WWW MSN   Вверх
J0ker
Дата 20.10.2008, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 1
Всего: 14



Цитата(DominiK @  18.10.2008,  14:51 Найти цитируемый пост)
Дружище я бутс не осбо использовал, хотя это будет в повод в нём разобраться, но на это надо время, которого у меня не много

там не надо много времени
по дефолту под винду он юзает комплишен портс - что тебе и надо


--------------------
user posted image
PM MAIL   Вверх
Lazin
Дата 20.10.2008, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 5
Всего: 154



Цитата(DominiK @  18.10.2008,  14:51 Найти цитируемый пост)
Дружище я бутс не осбо использовал, хотя это будет в повод в нём разобраться, но на это надо время, которого у меня не много

как уже сказали, boost использует completion ports, и из буста, для использования asio нужно знать boost::date_time(если будешь использовать таймеры), boost::shared_ptr, boost::enable_shared_from_this, boost::bind и boost::function вот пожалуй и все smile 
причем boost::shared_ptr, boost::enable_shared_from_this можешь и не использовать, но они используются в exemple-ах
PM MAIL Skype GTalk   Вверх
DominiK
Дата 20.10.2008, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.3.2007
Где: Россия, Омск

Репутация: нет
Всего: нет



Цитата(Lazin @ 20.10.2008,  08:14)
Цитата(DominiK @  18.10.2008,  14:51 Найти цитируемый пост)
Дружище я бутс не осбо использовал, хотя это будет в повод в нём разобраться, но на это надо время, которого у меня не много

как уже сказали, boost использует completion ports, и из буста, для использования asio нужно знать boost::date_time(если будешь использовать таймеры), boost::shared_ptr, boost::enable_shared_from_this, boost::bind и boost::function вот пожалуй и все smile 
причем boost::shared_ptr, boost::enable_shared_from_this можешь и не использовать, но они используются в exemple-ах

Как сговорились прям smile  Мне  2 моих знакомых тоже самое сказали, касательно бутса. Ок, начну с ним разбираться более детально smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.