Node.js 中构建微服务的完整教程

阅读时长 8 分钟读完

随着现代应用程序变得越来越复杂,使用微服务架构成为了越来越流行的选择。微服务架构提供了一种将应用程序分解为小型、独立的服务,每个服务都可以运行在自己的进程中,并通过网络进行通信的方法。这就使得应用程序的开发、部署与扩展变得更为容易。

在这篇文章中,我们将详细介绍如何使用 Node.js 构建微服务应用程序。我们将探讨什么是微服务,并且讨论如何使用 Node.js 构建一个简单的微服务体系结构,并说明如何使用 Docker 和 Kubernetes 部署微服务。

什么是微服务?

微服务是一种将应用程序拆分为多个小型、独立的服务的体系结构。每个服务都可运行在自己的进程中,并可以通过网络进行通信。这样的分解使得应用程序拆分成小块后,更容易通过部署、扩展、更改等方式进行操作。

构建微服务应用程序

在本节中,我们将讨论如何使用 Node.js 构建一个简单的微服务体系结构。

步骤一:建立服务之间的通信

微服务之所以卓有成效,在于它们可独立启动和更新,并能互相协作完成工作。微服务通常都是在不同的进程中运行,必须采用网络协议和数据格式进行通信。

我们可以通过 HTTP REST APIs、gRPC 等方式建立服务之间的通信,但在本例中,我们将使用 Redis 作为独立的消息队列,以进行服务之间的消息传递。

对于这个步骤,我们需要做的是:

  1. 安装 Redis,并确保 Redis 正常运行。

  2. 使用 Node.js 的 redis 包安装 redis 库,并确保在服务中使用此库可以顺利连接 Redis。

  3. 建立基础结构目录。

我们将在 frontend、processor 和 redis 目录中创建 Node.js 应用程序,这些应用程序将分别表示前端、处理器和 Redis 消息队列的一部分。

步骤二:编写前端应用程序

我们从编写应用程序的前端部分开始。

前端应用程序将通过 HTTP 调用解决方案,并将消息发布到 Redis 队列,以便由处理器处理。

创建 frontend/src/index.js,并输入以下代码:

-- -------------------- ---- -------
----- ------- - -------------------
----- ---------- - -----------------------
----- ----- - -----------------

-- ------ -- -------- -- ------- --- ----- -------
----- --- - ----------
----- ----------- - ---------------------

-- ------- ------- ---- -- ----
---------------------------

-- ---- ------- -------
-------------------- ----- ---- -- -
  -- ------- ------- -- --- ----- -----
  ------------------------------- --------------------------

  -- ---- -------- -- --- ------
  ---------- ------- ---- ---
---

-- ----- --- ------
----- ---- - ---------------- -- -----
---------------- -- -- ---------------------- -- ---- -----------

在此,我们使用 bodyParser 解析 POST 请求的 JSON 正文,并使用 redis 将消息发布到 Redis 消息队列。请注意,此处我们将请求名称设置为“requests”,以便处理器的订阅器可以找到它。

步骤三:编写处理器应用程序

现在,我们将编写处理器应用程序来接收来自 Redis 队列的消息,并执行适当的逻辑。

处理器应用程序应该:

  1. 安装 npm redis 库并确保它可以顺利连接到 Redis。

  2. 订阅消息队列并对订阅器使用 message 事件处理程序,该事件处理程序可以执行特定操作(在此例中为 console.log)。

请按照下面的示例编写处理器应用程序。创建 processor/src/index.js:

-- -------------------- ---- -------
----- ----- - -----------------

-- ------ - ----- ------
----- ----------- - ---------------------

-- --------- -- --- -------- -----
----------------------------------

-- ----- ------- --- ---- - ------- -- --------
------------------------- --------- -------- -- -
  -- --- --- ------- -- --- -------
  -------------------- --------- -------------
---

此处理器应用程序将消息订阅到队列,并针对节点和信息执行特定操作(在此处,我们只是将其记录在控制台中)。

步骤四:设置 Docker 容器和 Kubernetes

我们已经成功创建了前端和处理器服务。现在,我们将使用 Docker 和 Kubernetes 作为容器引擎为这些微服务部署生产容器。此步骤是可选项,但是下面的命令将使用 Docker 和 Kubernetes 构建和部署应用程序。

建立前端应用程序Docker容器

在前端文件夹中,Create a Dockerfile 文件:

-- -------------------- ---- -------
---- -------

- ------ --- ---------
------- ----

- ------- --- ------------
---- ------------- --
--- --- -------

- ------ --- ------
---- - -

- ------ --- ----
------ ----

- --- --- -----------
--- ------- --------

现在,我们可以建立一个 Docker 镜像,并尝试使用 Docker 本地容器运行应用程序(实际使用中是部署到 Kubernetes 集群中):

在其它终端中使用 curl 测试前端提交 POST 请求是否能够正确连接到 Redis:

如果一切正常,此时控制台应该会打印出 Message received:{"message": "Test message"}。

建立处理器应用程序Docker容器

可以建立一个相同的 Docker 镜像,尽管真正的代码可能稍有不同:

-- -------------------- ---- -------
---- -------

- ------ --- ---------
------- ----

- ------- --- ------------
---- ------------- --
--- --- -------

- ------ --- ------
---- - -

- --- --- -----------
--- -------- -----------

然后,按照下面的命令开始构建和运行容器:

一旦容器正在运行,您就可以在控制台中看到处理器应用程序输出的消息。

部署至Kubernetes

最后,我们将使用 Kubernetes 将处理器应用程序部署到生产环境中的 Kubernetes 集群中。

首先,创建一个 yaml 文件(例如 k8s/deployment.yaml),并输入以下内容:

-- -------------------- ---- -------
----------- -------
----- ----------
---------
  ----- ---------
-----
  --------- -
  ---------
    ------------
      ---- ---------
  ---------
    ---------
      -------
        ---- ---------
    -----
      -----------
        - ----- ---------
          ------ ---------
          ---------------- -----

我们可以将 processor 镜像上传至 Docker hub,或者使用 Kubernetes 的本地镜像存储库。对于本示例,我们使用了 Never 的 imagePullPolicy,表示 Kubernetes 使用本地存储库而非远程拉取镜像。1倍的机器计数最终被部署,保证面前容器副本高可用和冗余。

在此处执行以下命令:

部署后,您应该可以查看 Pod 是否正在运行:

如果容器正在运行,则可以查看控制台以确保消息被处理正确。

此外,您也可以配置 Kubernetes,在处理器运行时自动缩放节点计数(例如,使用水平自动缩放)。根据特定的需求进行配置。

结论

本文介绍了如何使用 Node.js 构建微服务应用程序的完整指南:了解微服务的定义以及如何使用它们,使用 Redis 作为消息队列,然后简单介绍了使用 Docker 和 Kubernetes 部署微服务的步骤。

这个例子是基本的,实际使用中的情况会更加复杂。不过,学习和了解基础知识有助于更好的理解和扩展。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67501a5dfbd23cf890736095

纠错
反馈