目前我们有一些microservice ,他们有自己的数据库模型和 GORM Golang 包提供的迁移。我们有一个很大的旧 MySQL 数据库,这违反了微服务法,但我们无法取代它。恐怕当微服务数量开始增长时,我们将迷失在众多数据库模型中。当我在微服务中添加一个新列时,我只需在终端中键入 service migrate
(因为有一个用于运行和迁移命令的 cli),它会刷新数据库。
管理它的最佳实践是什么。例如我有 1000 个微服务,当有人刷新模型时,没有人会输入 service migrate
。我在考虑一个集中式数据库服务,我们只需添加一个新列,它将存储所有模型和所有迁移。唯一的问题是服务如何了解数据库模型的变化。这就是我们在服务中存储用户的方式:
type User struct {
ID uint `gorm:"column:id;not null" sql:"AUTO_INCREMENT"`
Name string `gorm:"column:name;not null" sql:"type:varchar(100)"`
Username sql.NullString `gorm:"column:username;not null" sql:"type:varchar(255)"`
}
func (u *User) TableName() string {
return "users"
}
最佳答案
根据您的用例,MySQL Cluster可能是一个选择。 Two phase commits MySQL Cluster 使用使频繁写入变得不切实际,但如果写入性能不是大问题,那么我希望 MySQL Cluster 比连接池或排队 hacks 更好。当然值得考虑。
关于mysql - 微服务中心化数据库模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41850142/