
Наши веб-серверы (IIS 10) используют общую базу данных (SQL Server 2016). Они опрашивают некоторые данные из базы данных с регулярным интервалом. Когда один из веб-серверов обрабатывает запрос, приводящий к изменению этих данных, он обновляет базу данных и свои собственные данные. Но другие экземпляры веб-серверов не знают об этом изменении данных, поэтому имеют старые данные до следующего опроса.
Как нам следует дать указание другим экземплярам веб-сервера мгновенно обновлять свои данные?
Пример:
- Таблица базы данных tblUserRoles хранит все роли для всех пользователей.
- Веб-серверы опрашивают этот список один раз в день.
- Когда администратор отзывает права пользователя, веб-сервер, обрабатывающий запрос, немедленно обновляет базу данных и свой собственный UserRoleList.
- Но как другие веб-серверы узнают о необходимости обновить свой UserRoleList?
Возможное решение:
- Внутренняя служба ведет список всех активных экземпляров веб-сервера.
- Когда веб-сервер [A] обрабатывает запрос, который изменяет данные, он обновляет базу данных, обновляет свой собственный список данных и запрашивает список активных серверов [BZ].
- Веб-сервер A вызывает обновление списка данных для серверов BZ, вызывая каждый из них с помощью внутреннего URL-адреса (например, /internal/update-user-roles)
- Серверы BZ теперь обновляют свои данные, опрашивая данные из базы данных.