python 跨不同服务共享架构

gupuwyp2  于 2023-01-04  发布在  Python
关注(0)|答案(2)|浏览(148)
    • bounty将在2小时后过期**。回答此问题可获得+50声望奖励。ZooPanda希望引起更多人关注此问题。

我有一个ETL管道,它从多个源提取数据并将其存储在数据库表(具有固定模式)中。
我还有一个单独的FASTAPI服务,它允许我通过REST端点查询数据库,调用该端点是为了在前端(ReactTS)显示数据。
现在的问题是,我的ETL管道、FASTAPI服务和前端都有一个单独的模式版本,在需要更改数据模式的情况下,必须对所有3个服务上的模式规范进行更改。
我曾考虑过创建一个包含该模式的python包,但这只能在使用Python的服务之间共享,并且我的前端仍然必须保留自己的模式版本。
是否存在某种我应该拥有的"模式服务"?我可以做些什么来减少这种耦合?

jgwigjjp

jgwigjjp1#

我喜欢这个模式:

import sqlalchemy as sa

...
        meta = sa.MetaData(bind=self.engine)
        my_table = sa.Table('my_table', meta, autoload=True)

也就是说,磁盘上的数据库模式是事实的来源,并且代码总是动态地内省它以了解模式细节。例如,这很好地适应了新添加的列。
有了这样一个表对象,您可以轻松地迭代它的列:

for col in my_table.columns:
            print(col)  # we can examine details like name and type

这应该足以让您创建一个适合react类型脚本使用的JSON dict。

vqlkdk9b

vqlkdk9b2#

对于fastAPI + frontend =〉,使用swagger,其中基于pydantic模型自动为frontend生成模式(为了更好的一致性,您可以向每个API端点添加版本,并在该端点的模式更改时更改版本)
对于fastAPI + database + elt =〉,我们使用'mono repository'.一个git repo和ORM数据库架构在libs文件夹+fastAPI微服务文件夹(带有FastAPI应用程序的Dockerfile)+etl服务文件夹(带有enother Dockerfile)中,并且在一次提交中,您可以一致地更改elt脚本+ fastAPI应用程序+添加您的数据库迁移。

相关问题