首页
Preview

在Go中构建微服务 - 第1部分:项目设置,Docker化

我是一名产品工程师,与多个初创公司和技术爱好者合作,为他们构建技术。我和我的团队将Python(Flask)作为后端的首选技术栈,因为它易于用于快速应用程序开发,但是当你需要处理大量数据时,服务会受到影响。Python在小型应用程序中的表现更好,但是对于大规模数据,你总是需要引入一些中间件来加快数据传输速度。

我们决定转向另一种优化并且生成结果更快的语言。这总是一个非常困难的决定,特别是当你的团队大部分人对新技术不熟悉时。我想尝试Go,因为我听说过它的性能基准以及它与Java/C++在速度、优化等方面的相似之处。我倾向于Go的另一个原因是它有很好的生态系统,并且对于GCP、RabbitMQ、Reddis等工具有很好的支持。

当我开始使用Go构建微服务时,我意识到它没有像Python那样强大的社区,我不得不花费很多时间进行试错,以确定框架、ORM层、第三方配置。因此,我决定写一系列关于如何在Go中构建微服务的文章,以便人们不必花费很多时间在这些事情上,可以立即开始构建他们的系统。

技术栈

我选择Go Fiber是因为它的极简主义和与Flask的相似之处。我在其上使用了Beego的ORM层,因为它易于配置,可以轻松创建迁移。

环境设置

在本系列中,我们将构建一个模拟Web服务。在我们的示例中,我们将构建两个微服务:用户(负责认证、维护用户数据)和博客(管理博客、类别作者)。在本部分中,我们将设置我们的基本结构,并编写一个将字符串“Hello World”返回为基本端点。

让我们从创建我们的docker-compose文件并在其中定义我们的微服务开始。

version: '3.8'
services:
  web_blog:
    container_name: web_blog
    build:
      context: ./services/web_blog
      dockerfile: Dockerfile
    ports:
      - 3069:3069

这是一个非常简单易懂的compose文件,我们定义了我们的服务,它将监听的端口、它的Dockerfile和上下文。

接下来,我们将创建一个顶级服务文件夹。在其中,我们将根据我们的服务web_blog创建另一个文件夹,在其中我们将创建我们的服务的docker文件。因此,你的目录结构应该如下所示:

现在我们将开始编写我们的Dockerfile文件。

FROM golang:1.18

RUN apt update && apt upgrade -y &&\
    apt install -y git\
    make openssh-client

WORKDIR /go/src/app

COPY . ./
RUN go mod tidy \
    && go mod verify
    

RUN go build -o  /main
CMD ["/main"]

我们首先拉取Go 1.18镜像,然后更新二进制文件。之后,我们指定我们的工作目录,并将当前目录的内容复制到工作目录中。接下来,我们安装依赖项,构建我们的二进制文件,最后执行二进制文件。

现在我们需要初始化我们的模块。我们将通过以下命令更改我们的目录到我们的服务文件夹中:

cd services/web_blog

然后运行以下命令:

go mod init github.com/saadfarhan124/microservices_go/web_blog.git;

你可以将你的模块命名为任何你喜欢的名称,但遵循一些约定总是是一个好习惯。我通过将服务名称附加到我的git存储库URL来命名这个服务。

运行此命令将为我们创建一个go.mod文件,该文件将为我们处理所有的依赖项。现在,我们将添加我们的第一个依赖项,即Go Fiber框架。在同一目录中运行以下命令:

go get github.com/gofiber/fiber/v2

添加我们的第一个依赖项将为我们创建一个go.sum文件。

接下来,我们将在服务目录中创建一个main.go文件。你的结构应该如下所示:

现在,我们将开始在我们的main.go文件中键入一些代码。首先,我们将声明我们的包名称并导入我们的依赖项。


package main

import (
	"log"

	"github.com/gofiber/fiber/v2"
)

接下来一步是编写我们的主函数。

func main() {
	app := fiber.New()
	app.Get("/hello", func(c *fiber.Ctx) error {
		return c.SendString("Hello World")
	})
	log.Fatal(app.Listen(":3069"))
}

我们首先创建一个fiber对象,然后设置一个简单的get端点,返回字符串“Hello World”。最后,我们使用Listen函数启动服务器,并传递一个端口号。现在让我们通过在终端中运行以下命令来测试我们的端点:

docker-compose up --build

所以,我们成功地创建了一个docker化的微服务。在第2部分中,我们将配置实时重载到我们的服务中,添加模型、迁移等等。

你可以在这里找到源代码。

译自:https://saadfarhan124.medium.com/building-microservices-in-go-part-1-e7e58893bc5e

版权声明:本文内容由TeHub注册用户自发贡献,版权归原作者所有,TeHub社区不拥有其著作权,亦不承担相应法律责任。 如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

点赞(0)
收藏(0)
菜鸟一只
你就是个黄焖鸡,又黄又闷又垃圾。

评论(0)

添加评论