user-service和auth-service在微服务架构中的通信
Communication between user-service and auth-service in microservice architecture
场景:
这是我的微服务应用程序的登录场景:
- 用户输入他的phone号码
- 将发送验证码
- 用户必须发送收到的代码进行验证
- 用户必须输入密码
- 将收到一个 JWT 令牌
REST 实现
为了实现给定的场景,我创建了三个服务:auth、sms 和 user。从我的角度来看,我认为从 user-service 处理发送验证码和生成 JWT 令牌的请求更好。以下是我的实施细节:
用户呼叫 POST /user/sms
将他的 phone 号码发送到 user-service。其中,将向sms-service请求发送验证码。
然后用户调用POST /user/verify
验证代码,这个请求将再次在user-service中处理。如果代码有效,user-service 将生成一个临时令牌并将其传递给 header 响应(假设用户已经注册到系统中)
现在用户通过 POST /user/password
传递他的密码和临时令牌。如果凭据有效,user-service 将调用 auth-service 以获取 JWT 令牌并将其附加到响应 header POST /user/password
.
问题
user<->auth 和 user<->sms 服务之间是否有正确的通信?
我认为您在服务之间划定界限的方式在任何情况下都不是问题。
我可以在这里看到一些优点和缺点
拥有单独的 SMS 服务,即使在其他情况下也可以使用它,例如向用户发送其他类型的通知,如果您想更改 SMS 提供商,它会很容易,但该服务应该是独立的(使用消息代理进行通信)。
用户服务完全没问题,但你应该知道每次对另一个服务的新 HTTP 调用都会创建 "Latency"(你应该考虑到这一点),就像在这种情况下,当一个新的 http 调用是用于发布令牌。
当您有一个服务调用另一个服务而不是引入耦合时。在我看来,如果你不使用任何第三方工具来处理令牌,而不是我认为你应该在同一个微服务中同时拥有令牌处理和用户,我认为这样你就有了更好的限界上下文,它是更容易 运行 加入,因为这些数据将在同一个数据库中。
如果您使用第三方工具来处理令牌,则可以将其放在不同的服务中,因为这样您将创建抽象并且将来可以轻松更改工具。
注意事项
确保每个微服务都有自己的数据库,并且您不会在该服务所属的上下文之外直接访问任何其他数据库。
场景:
这是我的微服务应用程序的登录场景:
- 用户输入他的phone号码
- 将发送验证码
- 用户必须发送收到的代码进行验证
- 用户必须输入密码
- 将收到一个 JWT 令牌
REST 实现
为了实现给定的场景,我创建了三个服务:auth、sms 和 user。从我的角度来看,我认为从 user-service 处理发送验证码和生成 JWT 令牌的请求更好。以下是我的实施细节:
用户呼叫
POST /user/sms
将他的 phone 号码发送到 user-service。其中,将向sms-service请求发送验证码。然后用户调用
POST /user/verify
验证代码,这个请求将再次在user-service中处理。如果代码有效,user-service 将生成一个临时令牌并将其传递给 header 响应(假设用户已经注册到系统中)现在用户通过
POST /user/password
传递他的密码和临时令牌。如果凭据有效,user-service 将调用 auth-service 以获取 JWT 令牌并将其附加到响应 headerPOST /user/password
.
问题
user<->auth 和 user<->sms 服务之间是否有正确的通信?
我认为您在服务之间划定界限的方式在任何情况下都不是问题。 我可以在这里看到一些优点和缺点
拥有单独的 SMS 服务,即使在其他情况下也可以使用它,例如向用户发送其他类型的通知,如果您想更改 SMS 提供商,它会很容易,但该服务应该是独立的(使用消息代理进行通信)。
用户服务完全没问题,但你应该知道每次对另一个服务的新 HTTP 调用都会创建 "Latency"(你应该考虑到这一点),就像在这种情况下,当一个新的 http 调用是用于发布令牌。
当您有一个服务调用另一个服务而不是引入耦合时。在我看来,如果你不使用任何第三方工具来处理令牌,而不是我认为你应该在同一个微服务中同时拥有令牌处理和用户,我认为这样你就有了更好的限界上下文,它是更容易 运行 加入,因为这些数据将在同一个数据库中。
如果您使用第三方工具来处理令牌,则可以将其放在不同的服务中,因为这样您将创建抽象并且将来可以轻松更改工具。
注意事项
确保每个微服务都有自己的数据库,并且您不会在该服务所属的上下文之外直接访问任何其他数据库。