我正在使用具有以下服务的微服务架构构建 Jira 克隆:
我正在努力解决跨微服务的模型分离和数据访问问题。例如,当用户创建任务时,我需要更新用户的信息或获取用户详细信息。在这些情况下,我应该直接从 User Service 访问 User model 吗?如何遵循生产环境的最佳实践,高效且可扩展地处理一个微服务需要另一个微服务的数据或功能的情况?
我的技术堆栈包括: Nginx、MongoDB、SQL、Kafka、Docker、Redis、Node.js、Express 和 JWT。
请随时建议任何其他技术或技术以进行优化
因此,一般来说,微服务既昂贵又复杂,尤其是在处理这些领域分离问题时。 在走这条路之前,请确保您需要它们。 您可以使用域抽象层,而无需强分离服务的开销。
话虽这么说,在使用微服务时,您需要保持这些服务的内部强分离,这样您就不会意外地引入耦合。 它们的全部要点是,强大的解耦允许每个服务独立于系统的其他部分而增长、更改和扩展。 在这种情况下,如果任务服务需要用户详细信息或者需要更新用户,则可以让任务服务成为用户服务的客户端。 尝试最小化服务之间的绑定,以便它们不在有效负载层耦合。
您会发现自己以这种方式编写了大量客户端代码,并下降到传输层以在服务之间进行调用。 再次仔细思考您是否需要服务之间的这种可扩展性,因为这会带来许多其他开销: