Я работаю над приложением с микросервисной архитектурой. Каждый микросервис может жить сам по себе, не имеет прямых зависимостей от других микросервисов в системе. В каждом микросервисе мы используем CQRS и источники событий для информирования об изменении состояния службы. Другие службы информируются об этих событиях, если они заинтересованы и могут обновить свои данные.Является ли служба безопасности единственной точкой отказа в архитектуре микросервиса?
Пока система работает очень хорошо. Если один микросервис не работает, другие все еще работают. После того, как прерванная услуга начнется снова, она получит все события, произошедшие в ее отсутствие, и обновит свое собственное состояние в зависимости от этих событий.
Теперь нам нужно обеспечить наши услуги, и для этого мы используем IdentityServer. У нас есть еще одна служба, наша служба безопасности, которая будет вызываться другими микросервисами, чтобы получить токен. Это первый случай, когда микросервис должен напрямую разговаривать с другим микросервисом.
Моя проблема с этим подходом заключается в том, что если сервер безопасности выключен, вся система не работает.
Я имею в виду следующее решение:
Каждый microservice должны сохраняться пользовательские данные в своей базе данных. Если пользователь обращается к микросервису, пользователь аутентифицируется внутри службы без удаленного вызова службы безопасности. У меня все равно должна быть служба безопасности для управления пользователями. Изменения в пользователях снова повысят события, а другие микросервисы могут обновлять свои пользовательские данные. Конечно, все с https. И, возможно, чтобы уменьшить избыточный код для обеспечения безопасности, я мог бы использовать пакет nuget.
Как вы думаете, это разумный подход?
Спасибо за ваши советы
Я вижу вашу точку зрения. Это полезно знать по соображениям производительности. Но моя первоначальная проблема в том, что вся система зависит от одной службы, до сих пор не решена. Значит, вы говорите мне, что использование этой архитектуры должно быть связано с этим риском? Даже netflix? – kaz
Видимо @IlliakaillI победил меня, но он прав (upvoted! :)), вы все равно можете распределить провайдера идентификаторов на столько узлов, сколько хотите, и создать надлежащую высокую доступность, как в любом другом случае. Поэтому, говоря о «одной конкретной» службе безопасности, это ее логический уровень, он может (и должен) по-прежнему быть несколькими физическими компьютерами в HA. –
Согласен, но не должны ли эти службы обмениваться базой данных (поскольку они являются экземплярами одной и той же службы безопасности)? Разве это еще не одна точка неудачи? – kaz