ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql-微服务集中式数据库模型

2019-11-11 21:15:36  阅读:331  来源: 互联网

标签:go microservices mysql database


当前,我们有一些microservice,它们有自己的数据库模型,并且可以迁移GORM Golang软件包提供的内容.我们有一个很大的旧MySQL数据库,它违反了微服务法,但是我们不能替代它.恐怕当微服务数量开始增长时,我们将迷失在许多数据库模型中.当我在微服务中添加新列时,我只是键入将服务迁移到终端(因为运行和迁移命令存在cli),并且它刷新了数据库.

什么是管理它的最佳实践.例如,我有1000个微服务,当有人刷新模型时,没有人会键入服务迁移.我正在考虑一个集中式数据库服务,我们在其中添加一个新列,它存储所有迁移的所有模型.唯一的问题是,服务将如何了解数据库模型的更改.例如,这就是我们在服务中存储用户的方式:

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实例,但要使用许多微服务.

有两种方法可以使SQL系统正常工作:

>您可以创建一个微服务类型,该类型可以处理数据库中的数据插入/读取,并利用connection pooling.让其余服务通过这些服务执行所有数据读取/写入操作.这肯定会给您的所有写/读操作增加一点额外的延迟,并且可能在规模上带来问题.
>您可以尝试寻找易于扩展的多主站SQL解决方案(例如CitusDB),并且可以为数据库使用中央模式,并确保处理数据插入(去重复等)的边缘情况.
>您可以使用数据流架构(例如KafkaAWS Kinesis)将数据传输到微服务,并确保它们仅通过这些流处理数据.这样,您可以将数据库与数据分离.

我认为最好的方法是#3.这样,您就不必考虑微服务体系结构的计算层上的存储.

不确定您要为微服务使用哪种服务,但是StdLib会强制进行一些转换(例如,仅通过HTTP传输数据),从而帮助人们全神贯注. AWS Lambda还可以与Kinesis一起很好地作为启动该功能的源,该功能可能有助于#3方法.

免责声明:我是StdLib的创​​始人.

标签:go,microservices,mysql,database
来源: https://codeday.me/bug/20191111/2022408.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有