У меня есть относительно новый проект, в котором используется микросервисная архитектура. Я чувствую себя довольно хорошо относительно размера и детализации отдельных услуг, за исключением или нашей службы безопасности.Архитектура Microservice - междоменная chattiness
У меня есть три основных вида услуг, скажем foo-service
, bar-service
и baz-service
. Эти службы никогда не нуждаются в общении, но все три службы регулярно разговаривают по HTTP-запросам до security-service
. Я хочу, чтобы это прекратилось по целому ряду причин: самым большим является то, что каждый запрос к моим индивидуальным службам вызывает запрос в службу безопасности, который может превратиться в несколько дополнительных перелетов, когда вы учитываете балансировку нагрузки и т. Д. Я читал «Шаблоны архитектуры программного обеспечения» Марка Ричардса, и он рекомендует в этих случаях обмениваться базами данных и нарушать DRY: скопировать необходимые функции в каждую службу. Тем не менее, он использует этот пример с меньшими классами «полезности», которые могут не применяться в этом случае.
Служба безопасности не такая большая, поэтому я определенно могу ее скопировать в каждую другую службу. Тем не менее, это достаточно просто, что я не очень люблю копировать и вставлять его в соответствующие строки кода в соответствии с комбинезонами (java, поэтому есть намного более актуальный код ;-). Я мог бы легко превратить его в модуль, который приносит каждая услуга, но тогда у моих служб есть общая зависимость, и это укусило меня в прошлом. Конечно, код безопасности будет расти со временем, когда мы добавим методы проверки подлинности, но мы не изобретаем колесо, когда дело доходит до auth, поэтому оно в основном интегрируется с другими библиотеками и службами проверки подлинности. То есть, я не думаю, что эта конкретная база кода становится огромной.
Итак, мой вопрос, следует ли мне скопировать и вставить код или создать модуль, который приносит каждый сервис? Благодаря!
Это похоже на сквозную проблему, с которой родился Siteminder. Это должен быть фильтр или базовый аут на сервисах, а не дополнительные сетевые перелеты. – duffymo
Мы фильтруем запросы на обслуживание. Просто используя базовые на данный момент (это новый), но у вас есть требования для использования конкретных поставщиков oauth позже. Главное, что сейчас делает служба безопасности - это управлять авторизацией через группы безопасности. Это действительно функциональность, которая, как мне кажется, мне нужно будет перемещать в каждую службу (так что все не проверяются с помощью службы безопасности для авторизации) – eric
Что конкретно делает служба безопасности, аутентификация или авторизация? – miraculixx