构建和部署 Node.js 微服务应用程序
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
在现代软件开发领域,微服务是目前最热门的趋势之一。这些小型、独立的软件服务允许开发人员构建和部署更小的代码块,从而可以更频繁地更新并更快地响应用户需求。此外,借助微服务,团队可以根据自身需求按计划更新各个服务,而无需等待整个应用程序的新版本或操作系统升级。每个服务的体积也更小,因此更容易理解、测试、编写文档和维护。而且,微服务还能帮助您应对开发过程中可能出现的各种挑战。
在本教程中,我将解释什么是微服务以及如何使用 Harness CD 部署微服务。Harness 是一个持续交付平台。
什么是微服务?
微服务是指大型应用程序内部的小型、自主的软件服务。传统的单体应用程序由多个模块组成,这些模块在单个代码库中作为一个整体构建。而在基于微服务的架构中,服务被设计成独立且模块化的组件,可以单独部署。每个微服务通常处理一个特定的业务功能,并且独立构建、部署和管理。
先决条件
- 免费Harness 持续交付帐户
- 需要访问 Kubernetes 集群。您也可以使用 Minikube 或 Kind。
教程
让我们构建一个基于 Node.js 的微服务来计算两个邮政编码之间的距离。
创建一个应用目录来存储你的应用程序代码,并使用命令npm init -y初始化项目。接下来,让我们把主应用程序代码添加到该server.js文件中。
const express = require('express')
const app = express();
const port = process.env.PORT || 3002;
const routes = require('./api/routes');
routes(app);
app.listen(port, function() {
console.log('Server started on port: ' + port);
});
接下来我们来定义路由和控制器逻辑。首先,在根目录下创建一个名为 api 的新文件夹,用于存放我们的路由和控制器逻辑。
完整的项目文件夹结构如下:
在 api 文件夹内,创建两个文件 -controller.js和routes.js。
将以下代码添加到routes.js文件中:
'use strict';
const controller = require('./controller');
module.exports = function(app) {
app.route('/about')
.get(controller.about);
app.route('/distance/:zipcode1/:zipcode2')
.get(controller.getDistance);
};
将以下代码添加到controller.js文件中:
'use strict';
var properties = require('../package.json')
var distance = require('../service/distance');
var controllers = {
about: function(req, res) {
var aboutInfo = {
name: properties.name,
version: properties.version
}
res.json(aboutInfo);
},
getDistance: function(req, res) {
distance.find(req, res, function(err, dist) {
if (err)
res.send(err);
res.json(dist);
});
},
};
module.exports = controllers;
现在,我们需要编写一些代码来处理外部 API。我们将使用 zipcodeapi.com 来计算两个地点之间的距离(需要提供邮政编码)。请访问http://www.zipcodeapi.com获取 API 密钥。
现在,在根文件夹内创建一个名为service 的新文件夹。在 service 文件夹内,创建一个名为 的新文件distance.js,并添加以下代码:
var request = require('request');
const apiKey = process.env.ZIPCODE_API_KEY || "DemoOnly00xM8GfwlIQE2Jf2FneBr1uZBPGCw3W8DzyZjKoPaVCRGamRCaclrpVR";
const zipCodeURL = 'https://www.zipcodeapi.com/rest/';
var distance = {
find: function(req, res, next) {
request(zipCodeURL + apiKey
+ '/distance.json/' + req.params.zipcode1 + '/'
+ req.params.zipcode2 + '/mile',
function (error, response, body) {
if (!error && response.statusCode == 200) {
response = JSON.parse(body);
res.send(response);
} else {
console.log(response.statusCode + response.body);
res.send({distance: -1});
}
});
}
};
module.exports = distance;
现在,进入应用程序的主文件夹(根目录),然后使用命令启动应用程序npm start。
访问http://localhost:3002/about,您应该会看到文件夹名称和版本信息。
接下来,查看我们的下一条路线,即距离。访问http://localhost:3000/distance/pincode1/pincode2。
将邮政编码 1 和邮政编码 2 相加,您应该可以看到这两个邮政编码区域之间的距离。
下面举个例子:
请再次尝试计算两个邮政编码(35004 和 86556)之间的距离。
因此,我们已经成功构建了一个简单的微服务,用于计算两个邮政编码之间的距离。
使用 Harness 部署应用程序:
Harness 是一个现代化的软件交付平台,可以帮助企业轻松部署应用程序。接下来,我们将了解如何使用 Harness 将此应用程序部署到 Kubernetes 上。
首先,我们需要使用 Dockerfile 将应用程序容器化。让我们为应用程序编写一个简单的Dockerfile 。
FROM node:14-alpine AS development
ENV NODE_ENV development
# Add a work directory
WORKDIR /app
# Cache and Install dependencies
COPY package.json .
RUN npm install
# Copy app files
COPY . .
# Expose port
EXPOSE 3002
# Start the app
CMD [ "npm", "start" ]
使用以下命令构建 Docker 镜像:docker build -t microservices-app .
使用以下命令运行 Docker 镜像:docker run -p 3000:3000 microservices-app
使用 DockerHub 凭据重新构建镜像:docker build -t DockerHub Username/microservices-app .
现在,使用以下命令将镜像推送到 Docker Hub:docker push DockerHub Username/microservices-app
现在我们已经将应用程序作为镜像推送到 Docker Hub,我们可以使用 Harness CD 模块将应用程序部署到 Kubernetes 上。
但在此之前,我们需要创建 Kubernetes 清单文件 deployment.yaml 和 service.yaml 来部署我们的应用程序。
让我们创建deployment.yaml这些文件。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: microservice-app
name: app-deployment
spec:
replicas: 2
selector:
matchLabels:
app: microservice-app
template:
metadata:
labels:
app: microservice-app
spec:
containers:
- image: pavansa/microservice-app
name: app-deployment
ports:
- containerPort: 3000
将应用程序代码推送到新的 GitHub 仓库。
注册Harness 平台并选择 CD(持续交付)模块。

设置所需的连接器,例如 Docker Hub、GitHub 等以及委托。
Harness Delegate是一个工具,您需要在目标集群(在本例中为 Kubernetes 集群)上安装并运行它,以便将您的工件、基础设施、协作、验证和其他提供程序与 Harness Manager 连接起来。首次设置 Harness 时,您需要安装 Harness Delegate。
为您的应用程序配置一个简单的管道。您可以在此处定义服务、基础架构和执行类型。
服务代表你要部署的内容,例如 Kubernetes 清单和微服务的 Docker 镜像。基础设施告诉 Harness 你的应用程序将部署到哪里。执行则是此阶段如何将服务部署到其基础设施。
请确保已正确配置所有内容,然后保存并运行管道,将您的应用程序部署到 Kubernetes 上。
恭喜!我们已成功构建了一个 node.js 微服务,并在Harness CD的帮助下将其部署到 Kubernetes 上。
最终,使用微服务的优缺点取决于具体情况。不过,一般来说,微服务非常适合需要扩展的大型复杂应用程序。因此,它们通常与容器和服务导向架构结合使用。另一方面,微服务并非总是适用于小型应用程序。然而,微服务既适用于大型应用程序,也适用于小型应用程序,其有效性取决于具体的实现方式。
微服务是现代软件开发的新趋势。它允许开发人员构建和部署更小、更独立的代码块,这些代码块可以更频繁地更新,并更好地响应用户需求。虽然微服务架构有很多种,但我们建议您选择适合自身业务和技术栈的微服务架构。
文章来源:https://dev.to/pavanbelagatti/build-and-deploy-a-nodejs-microservices-application-2966








