Доброго времени суток.
Начал делать простую сетевую игру. Сделал основу сервера на ASP.NET WebApi и SignalR и клиент на node-webkit. Пока пушился последний коммит я понял, что делаю все совершенно не так, как оно должно быть и надо все в корне переделывать. Отсюда появилось несколько вопросов:
- Полагаю, что жизнь очень упростит отдельный сервер авторизации. Как его нынче принято делать? Смотреть он должен только в локальную сеть, вероятно, а приложения (сайт, игровые сервера) проверяют у него правильность логина/пароля, получают роли? Нормально ли, если он будет предоставлять некий REST-интерфейс, а к нему будут делаться HTTP-запросы?
- Серверная среда выполнения. Терзают меня смутные сомнения, что ASP.NET является правильным выбором, но аргументировать не могу. Единственные альтернативы, что приходят в голову - это Node.js (или же IO.js) и Erlang. Перестроить мышление и поменять привычки под второй довольно затратно, хотелось бы в этом году уже демо получить какое-никакое, учитывая, что свободного времени заниматься этим проектом у меня крайне мало. А насчет ноды у меня смешанные чувства - видел кучу статей, где ее обливают как только могут (и память течет, что только "перезапуск раз в минуту поможет", и адовая отладка и вообще все ужасно), но при этом она вся такая асинхронная, быстрая и вообще надо писать только на ней. Так все же, как сейчас дела с ней обстоят? Можно ли ее, например, развернуть в кластере без диких танцев с бубнами? Чтобы был некий мастер сервер, который распределял бы задачи между slave-серверами. Либо организовать какой-нибудь простой прозрачный обмен сообщениями между нодами, а-ля эрланг. Стоит ли это вообще того или есть какие-нибудь бест-практис по части архитектуры масштабируемых игровых серверов на ноде? Игра будет реал-тайм, сокеты точно будут нужны, в этом плане пхп для игровых серверов не очень подойдет, наверное.
- В итоге картина мне видится как-то так: сервер авторизации, сервер с сайтом, логин сервер для подключения клиентов и выплевывания в них состояния игрового мира, обновлений, новостей и может быть списка шардов, если запустить большой сервер в кластере будет проблематично и, собственно, сами игровые сервера. Все это добро дергает сервер авторизации при доступе к ним. Адекватная ли это схема?
Конкретным технологиям предпочтения не отдаю, но изначально есть опыт с JS, PHP, а C# в процессе изучения. В плане БД NoSql решения использовать особо не хочется, может быть это будет постгрес из-за сего гибкости. И да, я понимаю, что если говорить о таких масштабах и архитектурах, то я уже должен быть в состоянии сам с ней определиться, но сталкиваясь в жизни с ситуациями, когда проекты начинались лишь бы как, а потом такими и оставались, либо был долгий, мучительный и дорогой рефакторинг, то хотелось бы с самого начала пути пойти в правильную сторону.
Извиняюсь за возможную сумбурность, завтра днем может подредактирую ворос.