|
|
|||||
1 клиент + несколько серверов
Я никогда не делал больших проектов нуждающихся в нескольких серверах, но чувствую близится момент.
Как это делается? Например когда 1 флеш клиент+ 1 сервер то Делается запрос по определенному ip сервера для обмена данными А если например у нас приложение по конверированию видео, или прило в котором 100000 пользователей в день То как распределить нагрузку получаемую от клиентов на 2 сервера поровну? При том надо чтобы если на обеих серверах будут mysql базы с полями user , count , time то надо чтобы как то данные на обоих серверах синхронизировались?????? Или возможно допустим такой вариант: есть основной сервер и он переправляет запрос второму серверу если он(первый) слишком нагружен??? Как это делается???????? Много раз слышу что говорят: у меня 10 серверов на этом приложении
__________________
------------------------------- FLASH FLASH FLASH FLASH FLASH |
|
|||||
Балансировка делается не на клиенте. Клиентское приложение вообще не должно быть в курсе, как обрабатываются его запросы, одним сервером или 10-ю. Эти вопросы лучше задать на форумах по серверному программированию и администрированию сетей.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
Мне проблема нескольких серверов видится следующим образом. Есть один сервер "распределитель", его IP знают клиенты, к нему и подключаются. Задача этого сервера состоит в том, чтобы говорить подключающимся к нему клиентам на какой адрес им следует переподключиться, чтобы начать работу уже с основным сервером. Соответственно "распределитель" должен знать о текущей загруженности каждой копии основного сервера, чтобы принимать решение, какой IP выдать очередному клиенту.
|
|
|||||
Да, это так мне тоже видиться, но как синхронизируются данные.!? Все кажется таким геморойным. А вдруг решение где то на поверхности
__________________
------------------------------- FLASH FLASH FLASH FLASH FLASH |
|
|||||
Есть данные двух типов:
1) оперативные 2) архивные Оперативные хранятся в том же распределенном memcached. Можно поднять memcached на каждом из ваших серверов. При этом каждый ваш сервер будет являться клиентом распределенного memcached хранилища. Архивные данные хранятся в БД. Для БД отводится отдельный сервер видимый только изнутри вашей сети. |
|
|||||
А если нужно 2 бд??? То select * from делать из 2 х серверов?
__________________
------------------------------- FLASH FLASH FLASH FLASH FLASH |
|
|||||
Если один БД сервер не справляется то надо делать кластер БД серверов.
К примеру погуглите "кластеризация MySQL" |
|
|||||
понятно спасибо..
__________________
------------------------------- FLASH FLASH FLASH FLASH FLASH |
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Кластер с общей базой данных
Мы можем запустить несколько серверов в параллели, НО разделив игровой мир на Регионы, в каждом регионе будут свои пользователи, не пересекающиеся с другими регионами. Этим подходом мы распределяем пользователей по регионам (серверам), за это может отвечать некий балансировщик нагрузки. Решение старое но проверенное временем. Каждому запущенному экземпляру сервера нужен доступ до базы данных (данные о мире, данные о игровой логике, таблицах рекордов и пр.), для этого служит выделенный сервер базы данных. Мы можем запустить несколько серверов в параллели, поддерживая целостность приложения через базу данных (целостность списка пользователей, доставлять принимать сообщения и пр). Решение накладывает очень большие запросы на производительность сервера базы данных и необходимость кластеризации оного с применением кэширования запросов (memcached http://www.danga.com/memcached/) Минусы: - Слабое место по нагрузкам и устойчивости — сервер базы данных - Слабое место стоимости — сервер базы данных Кластерное решение от Terracotta Отказаться от БД в пользу общего разделяемого пространства данных для JVM разных серверов. Подключив серверы мы можем делится различными данными, рассылать/получать события из любого места. Мы не тратим время сериализацию объектов — обычные Java objects. Можно назвать это сетевой оперативной памятью. Дополнительно: http://www.smartfoxserver.com/downlo...Clustering.pdf http://en.wikipedia.org/wiki/Terracotta_Cluster http://www.infoq.com/articles/open-terracotta-intro
__________________
Отряд Котовскага |
|
|||||
В качестве "сетевой оперативной памяти" я бы сначала начал смотреть в сторону memcached - попроще будет.
Если нужно что-то по-сложнее можно еще использовать hazelcast. |
Часовой пояс GMT +4, время: 09:44. |
|
« Предыдущая тема | Следующая тема » |
|
|