Наш текущий рабочий проект - это новый веб-сайт MVC, который будет использовать службу WCF главным образом для доступа к сторонней биллинговой системе через веб-службу, а также небольшую базу данных SQL для персонализации пользователей. Служба WCF использует nHibernate для базы данных SQL.
Мы хотели бы реализовать какую-то веб-ферму для балансировки нагрузки, а также для восстановления после отказа и обслуживания. Я пытаюсь выбрать наилучший способ обработки кэширования и параллелизма базы данных nHibernate, если запущено несколько служб WCF.
Некоторые сценарии, о которых я думал ...
1) Несколько серверов IIS, один сервер WCF. При такой настройке сервер WCF будет единственной точкой отказа, но не будет проблем с кэшированием nHibernate или параллелизмом базы данных.
2) Несколько серверов IIS, каждый со своим сервисом WCF. Это устраняет единственную точку отказа, но теперь nHibernate на одном компьютере не будет знать об изменениях базы данных, сделанных на другом компьютере.
Некоторые решения для номера 2 заключаются в использовании IStatelessSession, поэтому мы не делаем никакого кэширования, а nHibernate всегда выбирает непосредственно из базы данных. Это может быть наиболее осуществимым, поскольку в нашей базе данных персонализации очень мало объектов. Я также рассматриваю кэш 2-го уровня, такой как memcached или Velocity, но он может быть излишним для этой системы.
Я выкладываю это, чтобы посмотреть, есть ли у кого-нибудь опыт создания подобного рода архитектуры и получить некоторые идеи для решения. Спасибо!