小编mit*_*dav的帖子

如何使用不同的数据库模式提供多个版本的API?

在Kevin Goldsmith 2015年关于Spotify微服务(15:25-17:43)的讨论中,他提到当他们创建一个新版本的API时,他们只需创建一个新服务器,并保持旧服务器运行旧版本只要还有客户呼叫它(在这种情况下,嵌入了Spotify的智能灯).

我很困惑他们将如何能够维护和提供旧版本的潜在年份,当时在这段时间内肯定会有数据库架构更改?

我可以看到一些可能的解决方案,但它们似乎都不合理:

  1. 在所有版本中使用相同的数据库,只需添加新表和新的可空字段.永远不要删除字段,也不要重命名字段,也不要将字段设置为不可为空,也不要删除表,也不要重命名表.
  2. 每个版本使用不同的数据库,将每个版本的数据分开.
  3. 每个版本使用不同的数据库,将每个版本的数据分开,但写一种方法来迁移并将请求从一个版本传递到另一个版本,以便每个版本都接收带有该版本的有效参数的请求.

解决方案1听起来会引起太多的代码味道,遗留代码无处不在(在我看来,凯文似乎暗示他们当然不这样做).

对于其他服务或报告,解决方案2听起来像是一场噩梦.如果您想要的实体信息在您要求的实体的另一个版本的数据库中,该怎么办?

解决方案3听起来更像是一场噩梦,因为您必须编写代码来将您的版本请求迁移到您上面和下面的版本.这意味着您不能在创建新版本时保留现有(当前正在生产的版本)版本,因为您需要添加迁移以向前和向后移动请求,以便所有版本都接收到正确的请求参数.

希望我在这里错过了一些简单的东西,并且有一个神奇的解决方案可以让这个问题变得更容易,但我真的看不出它们是如何实现这一目标的?

谢谢!

database versioning microservices

6
推荐指数
1
解决办法
842
查看次数

标签 统计

database ×1

microservices ×1

versioning ×1