Я собираюсь начать разработку архитектуры личного проекта, который имеет следующие характеристики:
- По сути, «игра», в которой участвуют несколько одновременно работающих пользователей на основе вида спорта.
- Матчи в этом виде спорта регулярно моделируются, а их результаты сохраняются в базе данных.
- Пользователи могут просматривать детали имитируемого матча в режиме реального времени, когда он происходит, а также видеть результаты после того, как они произошли.
Я разработал аналогичное веб-приложение с гораздо меньшей областью применения, как и предыдущая итерация этого проекта. В этом случае, однако, я выбрал SQLite в качестве поставщика БД, поскольку у меня также было распространяемое настольное приложение, которое можно было использовать для ручного моделирования совпадений (и фактически оно работало как автономный симулятор вне веб-приложения). Мои ограничения теперь превратились только в веб-приложение, поэтому мне не нужно беспокоиться об этом дополнительном уровне сложности.
Моя основная проблема с моей предыдущей реализацией заключалась в обработке одновременных запросов. Я сделал ошибку, использовав одну базу данных (которая была представлена одним файлом на диске) для обеспечения симуляции (которая выполнялась в отдельном процессе на сервере) и веб-приложения. Следовательно, когда пользователи обращались к веб-сайту одновременно с имитацией в реальном времени, возникали всевозможные проблемы с доступом к базе данных, поскольку она блокировалась одним процессом. Я исправил это, применив межпроцессный мьютекс в операциях с базами данных, но это резко замедлило производительность веб-сайта.
Инструменты, которые я буду использовать:
- ASP.NET для веб-приложения.
- SQL Server 2008 R2 для базы данных ... возможно, со слоем NHibernate для реляционного сопоставления объектов.
Мой вопрос: как мне спроектировать это так, чтобы я достиг оптимальной эффективности и одновременного доступа? Очевидно, что переход к реальному серверу БД из файла будет иметь свои плюсы, но нужно ли мне иметь два резервных сервера - один для процесса моделирования и один для процесса веб-сервера?
Будем благодарны за любые предложения!
Спасибо.