Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Служба\демон под кластер на C#\C++

9.7K
11 января 2012 года
Vitamant
228 / / 07.02.2011
Доброго времени суток!

Стоит такая задача (самостоятельно поставленная): написать серверную часть MMO-игры. По приблизительным прикидкам, она окажется чрезвычайно ресурсоемкой, ввиду чего планируется развертывание на кластере.

Однако, никогда ничем подобным не занимался, в связи с чем вопросы: как и на чем. Последнее интересует в первую очередь.

Писать сие чудо я планирую на C#. Но это накладывает ограничения на ОС - нужна платформа с поддержкой .NET Frmaework.

Альтернативой является С++ (вероятнее всего QT).

Хочется выслушать ваше мнение:
- Возможно ли такое в принципе с использованием C#?
- Какую ОС разворачивать на кластере?
- Нужны ли какие-нибудь дополнительные ухищрения, или достаточно будет использования родных компонентов фреймворка?
277
11 января 2012 года
arrjj
1.7K / / 26.01.2011
IMHO Сервер пиши на чистом C++. Резделение на потоки и работу с сетью для каждой платформы сделать отдельно - не большая проблема. С точки зрения программы кластер будет единым компом ,если кластер с разделением ресурсов.

Или добавить в программу возможность распараллеливания (например MPICH)
9.7K
11 января 2012 года
Vitamant
228 / / 07.02.2011
Цитата: arrjj
IMHO Сервер пиши на чистом C++. Резделение на потоки и работу с сетью для каждой платформы сделать отдельно - не большая проблема. С точки зрения программы кластер будет единым компом ,если кластер с разделением ресурсов.

Или добавить в программу возможность распараллеливания (например MPICH)


Ммм... это даст какой-то выигрыш в сравнении с C#?
В принципе, кросс-платформенность меня в С++ очень прельщает, также как гибкость и близость (в сравнении с C#, Java) к машинному языку, но неприятно мне на нем писать. Вот на том же ассемблере - приятно, а С++ вызывает отвращение... =\

Хм... а что делает MPICH? Статья на вики какая-то странная... с середины, без начала и конца. Библиотека для создания параллельных тредов? А что - родных средств в С++ для этого нет?

То есть кластер по сути ничем не отличается от многоядерного процессора? Все то же параллельное программирование без каких-либо изменений?

7
11 января 2012 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: Vitamant
Ммм... это даст какой-то выигрыш в сравнении с C#?

Как минимум(!!!) скорость больше и размеры меньше.Это как минимум

277
11 января 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: Vitamant
Ммм... это даст какой-то выигрыш в сравнении с C#?
...


Любой язык компилирующийся в машинные коды даст преимущество по скорости перед байт-кодом

Цитата: Vitamant

...
В принципе, кросс-платформенность меня в С++ очень прельщает
...


c# в линухе под моно можно крутить. java вообще очень кросс-платформенная. pascal - компилеры есть кросс-платформенные.

Цитата: Vitamant

...
но неприятно мне на нем писать.
...


C# по синтаксису от него не далеко ушел. Только за памятью надо самому следить.

Цитата: Vitamant

...
Хм... а что делает MPICH? Статья на вики какая-то странная... с середины, без начала и конца. Библиотека для создания параллельных тредов?
...


Нармальная статья, с ссылками, всё как положено :)
Библиотека не для создания параллельных потоков а для создания параллельных процессов. Используется для параллельных вычислений.
Т.е. у тебя будет запущен не один монолитный сервер на весь кластер, а много процессов сервера, выполняемых на разных узлах.
Отличие MPI от MOSIX прочитай.

Цитата: Vitamant

...
А что - родных средств в С++ для этого нет?
...


а) Реализация потоков платформозависима и не входит в стандарт c++.
б) Параллельные вычисления != многопоточности

Цитата: Vitamant

...
То есть кластер по сути ничем не отличается от многоядерного процессора? Все то же параллельное программирование без каких-либо изменений?



В зависимости от реализации кластера.

9.7K
11 января 2012 года
Vitamant
228 / / 07.02.2011
Ну, насчет преимущества компиляции в машинный язык перед компиляцией в байт-код я собственно сам и написал. Да - согласен, быстрее. Но при этом я еще нигде, к сожалению, не видел реальных сравнительных тестов. Что вот такой-то проект, написанный на С++ работает на 20% быстрее, чем полностью идентичный на C#/Java. Так что хочется как раз осознать масштабы. Если это 10% - совершенно не критично. Если это 40% - в корне меняет дело.

Java рассматривается в качестве языка для написания клиента (опять же наравне с С++), но о том чтобы писать серверную часть на ней даже и не думал - бессмысленно. Он вобрал в себя все худшее из C#, имеет массу бессмысленных ограничений и не дает даже помыслить о том чтобы навести на юзверя незаряженное ружье (но при этом сохраняя возможность застрелиться, не имея ружья).

С Mono не сталкивался. Погляжу. Но если окажется, что это чудо аля Java, то опять же лучше уж С++. Погуглю, посмпотрю!

Касательно MPICH все еще не до конца понятно. Когда у меня один процесс и тысяча потоков, которые считают каждый свой кусочек данных - это понятно. Посчитали, сложили в кучку, синхронизировали, если надо. А как общаются между собой разные процессы? Не прямым же доступом к физической памяти. Про отличия почитаю.

Большое спасибо за развернутый ответ! Буду гуглить, буду викить. Но вопрос по производительности байт-кода остается открытым. Интересно не только в рамках текущего проекта, но и вообще. И конечно же на реальных проектах, а не тестовом цикле в пару миллионов итераций. :)
277
11 января 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: Vitamant
Ну, насчет преимущества компиляции в машинный язык перед компиляцией в байт-код я собственно сам и написал. Да - согласен, быстрее. Но при этом я еще нигде, к сожалению, не видел реальных сравнительных тестов. Что вот такой-то проект, написанный на С++ работает на 20% быстрее, чем полностью идентичный на C#/Java. Так что хочется как раз осознать масштабы. Если это 10% - совершенно не критично. Если это 40% - в корне меняет дело.
...


Если 10% не критично, то кластер ни к чему.

Цитата: Vitamant

...
Java рассматривается в качестве языка для написания клиента (опять же наравне с С++), но о том чтобы писать серверную часть на ней даже и не думал - бессмысленно. Он вобрал в себя все худшее из C#, имеет массу бессмысленных ограничений и не дает даже помыслить о том чтобы навести на юзверя незаряженное ружье (но при этом сохраняя возможность застрелиться, не имея ружья).
...


Java лет так на 5 раньше c# появилась, такчто кто с кого что собрал - тут вполне понятно.
На java есть например l2j, который вполне шустро работает.

Цитата: Vitamant

...
С Mono не сталкивался. Погляжу. Но если окажется, что это чудо аля Java, то опять же лучше уж С++. Погуглю, посмпотрю!
...


Это интерпретатор c# для linux. Т.е. сборка c# exe или dll выполняется по средством .net framework под виндой и mono под linux. Накладывает некоторые ограничения на написание кода.

240
11 января 2012 года
aks
2.5K / / 14.07.2006
Цитата: Vitamant

Он вобрал в себя все худшее из C#


При всем своем желании не мог так сделать. =)

Цитата: Vitamant

и не дает даже помыслить о том чтобы навести на юзверя незаряженное ружье (но при этом сохраняя возможность застрелиться, не имея ружья).


Можно поподробней что вы имеете ввиду. Я понимаю, что вы скорее всего просто поклонник .Net и вражеская програмная платформа вам заведомо представляется в негативнойм свете. Но все же не понятно на чем вы совсем уж такие доводы мрачные строите. )

Цитата: Vitamant

С Mono не сталкивался.


Да и не стоит - хотите писать под .Net - пишите под винду. Mono довольно кастрированный .Net и практического смысла ориентироваться на него для разработки с нуля нет.

9.7K
11 января 2012 года
Vitamant
228 / / 07.02.2011
Цитата:
Если 10% не критично, то кластер ни к чему.


10% действительно не критично. Будет некий глобальный цикл (только не понимай буквально) обсчитываться за 100мс или за 110мс - значения не имеет совершенно. А вот то, что обсчитывать нужно будет порядка 3-4 миллионов объектов и эта цифра будет расти вплоть до 30 миллионов в пике - критично и ресурсов одного компьютера тут явно не хватит.

Цитата:
Java лет так на 5 раньше c# появилась, такчто кто с кого что собрал - тут вполне понятно.
На java есть например l2j, который вполне шустро работает.

При всем своем желании не мог так сделать. =)


Да, господа, вы совершенно правы. Но тут я говорю просто по мере знакомства с языками. Вначале был С++, затем C#, затем ява. Так что для меня она как раз "вобрала". Тем не менее, за те же пять лет после ничто не мешало ей посмотреть на C# и скомуниздить из него все лучшее (равно как из С++ и других языков, благо они не патентуются). А то что это нужно, наглядно подтверждают различные ее вариации и надстройки:
http://blog.jetbrains.com/kotlin/2012/01/kotlin-web-demo-is-out/

Цитата:
Это интерпретатор c# для linux. Т.е. сборка c# exe или dll выполняется по средством .net framework под виндой и mono под linux. Накладывает некоторые ограничения на написание кода.
Да и не стоит - хотите писать под .Net - пишите под винду. Mono довольно кастрированный .Net и практического смысла ориентироваться на него для разработки с нуля нет.


Спасибо, понял. :)

Цитата:
Можно поподробней что вы имеете ввиду. Я понимаю, что вы скорее всего просто поклонник .Net и вражеская програмная платформа вам заведомо представляется в негативнойм свете. Но все же не понятно на чем вы совсем уж такие доводы мрачные строите. )


Можно. Да, я поклонник .NET. И так уж получилось, что я оказываюсь поклонником всякого продукта мелкомягких (кроме Vista, Win8 и IE :D ), продолжая при этом их материть на чем свет стоит. С учетом всех негативных моментов, их продукты оказываются донельзя приятны в использовании, хотя функциональностью нередко вызывают желание придушить разработчиков.
Вместе с тем, на яве я сейчас пишу (приходится писать по работе) и мрачные доводы возникают по мере освоения.
Во-первых, такое ощущение, что на тебе подарили конструктор "собери сам". При этом не красивую коробочку Lego, а три мешка деталей из разных наборов. И делай с ними что хочешь.
Во-вторых у C# есть одно преимущество - ты не видишь его исходников, пока не залезешь рефлектором. А значит перлы разработчиков остаются за кадром. В Java весь тот ужас, что творится в базовых классах обрушивается, как снег на голову. И вместо того чтобы сесть и спокойно написать программу, я писал свою реализацию обертки потока вывода (аля Console в C#). Писал Linq, и много чего еще.
В процессе выяснилось, что Ява не дает сделать вообще ничего, общаясь с программистом как с клиническим идиотом. И помимо бесконечных throw\catch. Ладно, в процессе выяснилось, что вся ее напускная забота о безопасности - пшик. Чего стоит, например, изменение final static полей? Ну это же бред - запрещать это делать в одной версии. Строго запрещать (в том плане, что один из обходных путей через отражение не работает) в другой. И при этом оставлять возможность через тоже отражение, но с еще большим извратом, таки сделать изменить значение поля! Это нормально?!

Ну и в дополнение откровенный идиотизм, вроде отсутствия беззнаковых чисел, предопределенных параметров в методах и т.д. на фоне бесконечных getProperty / setProperty (неужто сложно было слямзить свойства с .NET? или реализовать скрыто, в том же Eclipse? >_>).

Так что, если бы я придирался только к непривычному мне именованию методов с маленькой буквы и выпирающими забором буквами последующих слов - это одно. Но Java мне представляется кошмарным сном, одинаково страшным и для .NET'овца и для C++'овца. :)

Но эт к теме относится только в той мере, что пока есть альтернативы, я скорее буду писать на плюсах, чем на Яве. :)

277
11 января 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: Vitamant

...
Во-первых, такое ощущение, что на тебе подарили конструктор "собери сам". При этом не красивую коробочку Lego, а три мешка деталей из разных наборов. И делай с ними что хочешь.
...


Это и есть программирование. Добро пожаловать в наш скромный уголок.

Цитата: Vitamant

...
И вместо того чтобы сесть и спокойно написать программу, я писал свою реализацию обертки потока вывода (аля Console в C#).
...


Вобще не понял чем стандартные методы не устроили оО

Цитата: Vitamant

...
В процессе выяснилось, что Ява не дает сделать вообще ничего, общаясь с программистом как с клиническим идиотом.
...


А c# просто уже уверен что прогер идиот, поэтому пристально следит за ним втихаря.

Цитата: Vitamant

...
И помимо бесконечных throw\catch.
...


А в c# их какбудто нет. Причем их тоже желательно обрабатывать.

Цитата: Vitamant

...
Чего стоит, например, изменение final static полей?
...


С каждой версией они усиливают защиту от тех идиотов, которые хотят менять такие поля. Да и в C# я уверен тоже есть методы модификации const.

Цитата: Vitamant

...
Ну и в дополнение откровенный идиотизм, вроде отсутствия беззнаковых чисел, предопределенных параметров в методах и т.д. на фоне бесконечных getProperty / setProperty (неужто сложно было слямзить свойства с .NET? или реализовать скрыто, в том же Eclipse? >_>).
...


В C++ тоже нет свойств как таковых. BCB,MSVC++,Qt на уровне компилятора(препроцессора?) поддерживает. Но тем неменее в vc++ и qt восновном используются getX и setX

Цитата: Vitamant

...
Но Java мне представляется кошмарным сном, одинаково страшным и для .NET'овца и для C++'овца. :)
...


Несогласен.

9.7K
11 января 2012 года
Vitamant
228 / / 07.02.2011
Цитата:
Вобще не понял чем стандартные методы не устроили оО


Началось все с того, что NetBreans мне сказал, что System.out.print используется для вывода отладочных данных и его использование может являться ошибкой забывчивого программиста. Ну и пошло-поехало. В итоге я пришел к выводу, что родной
Console.WriteLine("Var = {0}", var);
С настраиваемым буффером и кодировкой мне нравится больше, чем
System.out.printf("Var = %s", var);
ну а в конце сделал два варианта вывода - Print выводит в виде текста, Write - байтами. В общем, мне моя реализация нравится больше, чем родная. А учитывая, мои кривые руки и то, что Java я вижу впервые, это значит, что родная реализация до ужаса дурацкая.

Кстати, еще один камень в огород Java: это ж надо было додуматься все сравнивать по ссылкам с невозможностью перегрузки (как и прочих операторов)! В общем, ужас! :)

Цитата:
А c# просто уже уверен что прогер идиот, поэтому пристально следит за ним втихаря.


За что я ему благодарен. :)

Цитата:
А в c# их какбудто нет. Причем их тоже желательно обрабатывать.


Есть. Но они не обязательны. Я могу в шапке программы обрабатывать все поступающие исключения, а откуда они идут (в большинстве случаев) не важно. В Java это бесконечные строки throws в описании методов. Одно дело - отключаемые вонинги. Другое - обязательные к реализации. Ужас.

Цитата:
С каждой версией они усиливают защиту от тех идиотов, которые хотят менять такие поля. Да и в C# я уверен тоже есть методы модификации const.


И при этом сами используют аналогичные варианты для установки тех же System.out/in/err ;)

Цитата:
В C++ тоже нет свойств как таковых. BCB,MSVC++,Qt на уровне компилятора(препроцессора? ) поддерживает. Но тем неменее в vc++ и qt восновном используются getX и setX


Это очень печально.
Тем не менее С++ не навязывает инкапсуляцию, в отличии от Java (если верить IDE, которые сильно ругаются, когда используешь поля вместо свойств).

Цитата:
Несогласен.


Возможно даже справедливо. У тебя явно опыта больше, и в С++ и в Java, чем у меня. Пожуем - увидим.

P.S. Но мы отклонились от темы. ^_-

240
12 января 2012 года
aks
2.5K / / 14.07.2006
Цитата: Vitamant
неужто сложно было слямзить свойства с .NET? или реализовать скрыто, в том же Eclipse? >_>).


Свойста не делают целенаправленно ибо считаетются они вредными и ненаглядными в той идеологии. И это очень хорошо что их нет. И скорее всего никогда не будет.

Цитата: Vitamant

Но Java мне представляется кошмарным сном, одинаково страшным и для .NET'овца и для C++'овца. :)


Самое смешное, что C# представляется тем же для Java программиста. А все С-подобные языки кошмаром для постигших просветления. =))
Однако не будем разводить тут холиваров - все же ваши доводы это дело привычки, а не объективные факты. )

9.7K
12 января 2012 года
Vitamant
228 / / 07.02.2011
Да, наверное. :)

Тема, похоже, также себя исчерпала, так как по приблизительным прикидкам, для поставленной задачи вполне должно хватить 8-процессорного сервера на базе AMD Opteron. В дальнейшем, если проект приобретет популярность, то для связи серверов таки будет использован кластер из подобных машин. Однако на данный момент это бессмысленно.

Однако, спасибо всем отписавшимся. Я приобрел некое понимание о том, что есть кластер и с чем его едят. В будущем буду знать - в какую сторону копать. :)
240
12 января 2012 года
aks
2.5K / / 14.07.2006
Попробуйте эралнг кстати. Ну чтоб отойти от идеологии С подобных языков вобще и узреть качественную среду для легкого распаралелливания и распределения. )
5
12 января 2012 года
hardcase
4.5K / / 09.08.2005
Такое ощущение что отписавшиеся в теме (за исключением камрада aks-а) никогда не сталкивались с серверным софтом.
1) если софт серверный то речи о кроссплатформенности как правило (а для игрушек в особенности) нету - платформа фиксируется той, на которой лучше всего работает этот софт
2) производительность распределенного приложения - линейная функция от количества серверов: работает медленно? - добавляем еще памяти и процессоров
3) без опыта игростроения начинать разрабатывать можно на чем угодно - почти наверняка первую версию придется выбросить и начать заново :)
4) .NET для разработки 24/7 софта вполне подходит (Erlang, Java и т.п. тоже, но видимо автору ближе .NET) - критичные к производительности участки кода всегда можно вынести в нативный код (это справедливо для любых платформ), но сперва нужно а) получить проблемы с производительностью, а это значит что нужно сначала создать рабочий прототип системы б) выявить проблемные места и понять что они не устраняются алгоритмическими оптимизациями

P.S. Спор о языках особнно доставил :))
240
12 января 2012 года
aks
2.5K / / 14.07.2006
Ждал кстати хардкейса в этой теме.
9.7K
15 января 2012 года
Vitamant
228 / / 07.02.2011
Как обычно, доходчиво и понятно! Спасибо. :)

P.S. На Erlang гляну - впервые слышу, посмотрю что за зверь.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог