golang 相互引用_golang 中的微服务 - 第3部分 - docker compose 和 datastores

本文是 Golang 微服务系列的第三部分,重点介绍了如何使用 docker-compose 管理多个服务,选择数据库(如 MongoDB 和 Postgres)以及在微服务中使用 ORM Gorm。通过 docker-compose,可以方便地在本地运行和管理服务。文中还讨论了数据库选择的考量因素,如数据结构和操作频率。在实践中,选择了 MongoDB 作为 NoSQL 数据库,并展示了如何设置 docker-compose 配置。最后,文章简要介绍了 Gorm,一个用于 Go 的 ORM 工具,它简化了与 Postgres 的交互,并展示了如何在创建用户时使用 UUID 作为安全的 ID。
摘要由CSDN通过智能技术生成
21a34f93ab1c1802445c2216903ddae4.png

之前的文章(「GCTT 出品」Golang 中的微服务-第一部分,「GCTT 出品」Golang 中的微服务-第二部分-Docker 和 go-micro)中,我们介绍了 go-microDocker 的一些基础知识。在推出了这两项服务之后我们将在本文介绍 docker-compose、教大家如何更便捷地在本地运行多个服务,还会列述一些在本系列微服务教程中可以使用的数据库类型,最后引出本系列的第三项服务 —— User service。

(译者注:阅读本文之前建议先下载作者源码配合理解)

准备工作

安装 docker-compose: https://docs.docker.com/compose/install/

docker-compose 安装完毕之后,我们来介绍一些可用的数据库以及他们之间的区别。

数据库选择

在前两篇文章,我们的数据并不会持久化的存储到某地,它只会存储在我们服务的内存中,当容器重新启动时,这些数据会丢失。所以需要选择一种数据库来持久化的存储和查询我们的数据。

微服务的优点是,你可以为每个服务选择一个不同的数据库。当然许多情况下我们不必这样做。例如生产环境中的小团队完全不必选择多个数据库,这样会增加维护成本。但在某些情况下,一个服务的数据可能并不兼容其他服务的数据库,这时不得不增加一个数据库。微服务使得数据兼容这件事变得更加简单,你完全不必操心不同服务的数据使用不同的数据库带来的额外维护成本。

本文不会解释如何为你的服务选择“正确的”数据库,这是一个值得深入探究的话题,详情可以借鉴如何为你的服务选择“正确的”数据库。本文示例的数据持久化选择 NoSQL 文档存储解决方案,NoSQL 更适用于处理大量松散且不一致的数据集,例如 json 存储数据更加灵活,我会选择效果良好并且社区服务更加完善的 MongoDB 作为我们的 NoSQL。

如果需要处理的数据是被严格定义并且联系紧密,那么可以使用传统的关系型数据库(RDBMS),但实际上并非一定要这么做。在选择之前一定考虑我们服务的数据结构,它是做的读操作更多还是写操作更多?查询的复杂程度如何?等等。这些才是我们选择使用何种数据库的出发点。由于个人原因,关系数据库我更喜欢使用 Postgres,当然,你也可以使用 MySQL 或者 MariaDB 等等。

如果你不想亲自管理自己的数据库(通常是可取的),你可以选择使用亚马逊或者谷歌提供的完全成熟的 NoSQL 和 RDBMS 解决方案。除此之外 compose 则是另外一个非常棒的选择,你可以将自己的服务完全托管在 compose 上,它可以提供类似于亚马逊和谷歌的云服务,并且能够更加便捷的扩展各种数据库实例,同时还具备更低的延迟。

  • 亚马逊:
  • RDBMS:https://aws.amazon.com/rds/
  • NoSQL:https://aws.amazon.com/dynamodb/
  • 谷歌:
  • RDBMS:https://cloud.google.com/spanner/
  • NoSQL:https://cloud.google.com/datastore/

数据库相关知识讨论完毕之后我们就可以写一些代码了!

docker-compose

上一篇文章我们介绍了 Docker ,它可以用轻量级的容器运行我们的服务,并拥有自己独立的运行时间和依赖关系。但是服务数量较多的情景下使用单独的 Makefile 运行和管理每个服务太麻烦了。docker-compose应运而生,它很好的帮我们解决了这一问题。 Docker-compose 允许我们在 yaml 文件中定义 Docker 容器列表,并指定关于其运行时间的元数据。我们可以从 Docker-compose 中看到一些熟悉的 docker 命令的影子。例如:

67413224c36dda29b0e480dc1d27e64a.png

在 docker-compose 里可以写为:

8c5c0d611f983fc0699d2978126cb782.png

太简单了,不是吗?

接下来我们可以在根目录下创建一个 docker-compose 文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值