【发布时间】:2020-07-25 06:47:11
【问题描述】:
我有一个当前使用 PostgreSQL 数据库的单体应用程序,并且按照您对大多数关系数据库的期望设置了架构,其中各种表数据通过 user_id 上的 FK 链接回用户。
我正在尝试了解有关微服务的更多信息,我正在尝试将我的 python API 迁移到微服务架构。我对如何将较大的应用程序分解为较小的部分有合理的理解,但是,我并不完全清楚应该如何处理数据方面的事情。
我知道单个大型数据库违反微服务的一般设计原则,但我不清楚替代方案是什么。
我最大的担忧是在保存微服务数据的各个数据库之间进行级联。在一个简单的 rdb 中,我可以级联删除,数据库将处理各种表的工作。在微服务的情况下,这将如何工作?我是否需要一个单独的服务来处理跨其他服务数据库删除用户数据?
我真的不明白如何将具有关系数据库的传统应用程序迁移到微服务架构?
编辑:
澄清一下——我面临的一个具体的架构/设计问题如下:
我已将我的应用程序拆分为几个微服务。在我看来仍然相关的是:
地理定位 - 检查几何数据、PostGIS 中的记录并返回特定信息的服务。主要目的是记录特定用户的位置以供以后参考
Image - 一个简单的上传服务,用于上传图像并将元数据存储在数据库中。
Load-Image - 一个简单的服务,它根据位置等参数和年龄、性别等用户资料数据返回一组随机图像
个人资料 - 一种简单地管理用户数据(例如年龄、性别等)的服务
通常,这三个项目将在更大的数据库中各有一个表,而不是它们各自的数据库。按位置和年龄过滤图像是一个非常简单的 JOIN 和过滤器。
这样的东西如何在微服务架构中发挥作用?如果数据完全保存在不同的数据库中,我将如何设置逻辑来过滤数据?我可以复制不经常更改的数据(例如配置文件信息)并将其添加到包含图像数据(包括 user_id 和配置文件数据)的 MongoDB 文档中 - 但是,位置数据可以定期更改,并且不断更新听起来不切实际。
最好的方法是什么?还是应该只为这几个服务使用共享 RDBMS?
【问题讨论】:
-
“微服务”的任何良好表示/定义或只是其变体的许多 SO 问题都没有解决这个问题?每当您有多个必须满足约束的微服务时,它们都是更大的非微服务实现的一部分,并且您需要非微服务架构。这个问题是一个常见问题解答,尽管大多数情况下是使用特定的架构或框架提出的。但是,如果您不指定框架和其他细节,那么这与询问如何编写软件系统或编写 DBMS 并没有太大区别。这样的问题“太宽泛了”。
-
请检查更新。我希望这能进一步澄清这个问题。它与框架无关,是一个设计问题
-
请不要插入“EDIT”s/“UPDATE”s,编辑您的帖子以成为最好的演示文稿。您还添加了大约 19 个问号。问 1 个具体问题。在提出问题时添加问号只会使您不清楚您真正想要回答的内容。这在技术方面仍然是通用的,您刚刚添加了您的应用程序主题,它仍然过于宽泛且重复。添加所有这些问题只是反映问题太宽泛了。 How to Ask help center 您甚至期望采取什么形式得到可接受的答案? (修辞。)
标签: postgresql relational-database microservices