Какие технологии использоватль для клиент-серверного приложения .NET?
Добрый день,
подскажите какие технологии использовать для создания сервера, рассчитанного на большое количество клиентов с помощью .NET. Интересует построение масштабируемого, распределенного серверного приложения. Очень желательно, чтобы поддерживались Mono. До этого использовал только голые сокеты, но, думаю, они не подойдут. Подскажите книги/статьи, вообще, в какую сторону смотреть.
Голые сокеты это самый гибкий вариант — напишите именно то, что вам нужно! Задача довольно сложная, но вполне решаемая, особенно если сначала подумать, а потом писать код.
WCF очень неплохой вариант — всё написано за вас, но максимума производительности не получить, да и с взаимодействием с не .Net могут быть проблемы, если об этом не задумываться. Я бы посоветовал на начальном этапе использовать именно его.
Посмотрите также в сторону google protocol buffers в качестве подспорья по оптимизации сетевого обмена. Его можно использовать как с WCF, так и на голых сокетах. Снимает головняк по вопросам подготовки данных перед отправкой в канал.
Вопрос масштабируемости очень сложный. Решать его не зная особенностей проекта невозможно. Если у вас будет staless приложение, то вопрос запуска нескольких серверов решается очень просто — запускаете несколько серверов с подключением к одной БД и каким либо образом распределяете клиентов между ними (самый простой способ DNS).
Если приложение statefull, то уже нужно сильно думать, а если БД станет узким место, то думать нужно будет ещё больше.
Как один из вариантов — 1 управляющий сервер, который перекидывает клиента на наименее загруженный сервер из доступных. Можете сказать чем хорош/плох подобный вариант?