什么是微服务?

embedded/2024/11/15 4:16:51/

在这个日益数字化和竞争激烈的时代,企业对软件的敏捷性、可维护性和可扩展性的要求越来越高,在这种需求下微服务孕育而生,微服务架构提供了一种适应变化的灵活方式,使企业能够更加敏捷地创新、交付价值,并在技术和业务上取得成功。

什么是微服务

微服务(Microservices)是一种软件架构风格,它将一个大型的应用程序拆分成一组小而自治的服务,这些服务可以独立开发、部署、扩展和管理。每个微服务都专注于执行特定的业务功能,并通过轻量级通信机制(通常是 HTTP 或消息队列)进行交互。微服务架构旨在解决传统单体应用程序的一些挑战,如复杂性、可维护性和扩展性。

微服务架构的优势:

  1. 松耦合: 微服务之间是松耦合的,每个服务都可以独立开发、部署和维护。这样可以使团队可以更独立地工作,同时不会影响其他服务。

  2. 可独立部署: 每个微服务都可以独立地进行部署。这意味着你可以快速发布新功能或修复问题,而无需整个应用程序的重新部署。

  3. 可扩展性: 你可以根据需要独立地扩展每个微服务,而不会影响其他部分。这种方式可以优化资源的使用,以满足不同部分的需求。

  4. 技术多样性: 微服务允许不同的服务使用不同的技术栈。这使得团队可以选择最适合其需求的技术,而不受整个应用程序的技术选择限制。

  5. 容错性和隔离: 如果一个微服务发生故障,其他服务仍然可以继续运行。每个服务都在自己的进程中运行,因此一个服务的问题不会影响到整个应用程序。

  6. 团队协作: 微服务架构可以促进团队之间的协作,因为不同团队可以独立地开发和管理各自的微服务

接下来,让我手把手带你实战来带你创建一个简单的微服务项目。真正的体验一下微服务架构

微服务实战教程

步骤1:项目设置

首先我们要创建一个新文件夹,并初始化一个新的Node.js项目。打开终端并运行以下命令:

mkdir microservices-tutorial

进入我们的文件夹

cd microservices-tutorial

初始化文件夹

npm init -y

步骤2:安装相关依赖项

在这里,我们将使用Express.js和Axios。使用npm安装它们:

npm install express axios

步骤3:创建微服务

在这里,我们将创建两个微服务:一个“用户”服务和一个“订单”服务。其中,“用户”服务将处理与用户相关的操作,而“订单”服务将处理与订单相关的操作。

在主项目文件夹内创建两个文件夹,“users”和“orders”。在每个文件夹内,创建一个index.js文件。

image.png

步骤4:实现微服务

让我们从实现“用户”服务开始。打开users/index.js文件,并添加以下代码:

const express = require('express');
const app = express();
const port = 3000;// 定义路由
app.get('/users', (req, res) => {// 定义用户列表const users = [{ id: 1, name: 'John Doe' },{ id: 2, name: 'Jane Smith' },{ id: 3, name: 'Bob Johnson' },];// 返回用户列表res.json(users);
});// 监听端口
app.listen(port, () => {// 打印端口号console.log('Users service is running on port'+ port);
});
// 监听端口3000,访问/users
app.listen(port, () => {// 打印出访问/users的端口号console.log('Users service is running on port'+ port);
});

现在,让我们来实现“订单”服务。打开orders/index.js文件,并添加以下代码:

const express = require('express');
const app = express();
const port = 4000;// 设置路由
app.get('/orders', (req, res) => {// 定义订单数据const orders = [{ id: 1, product: 'Product A' },{ id: 2, product: 'Product B' },{ id: 3, product: 'Product C' },];// 返回订单数据res.json(orders);
});// 监听端口
app.listen(port, () => {// 打印端口号console.log('Orders service is running on port'+ port);
});

步骤5:微服务之间的通信

在这一步中,我们将使用Axios从一个微服务向另一个微服务发起HTTP请求。我们将修改“用户”服务,以从“订单”服务获取订单信息。

再次打开users/index.js文件,并添加以下代码:

const express = require("express");
const axios = require("axios");
const app = express();
const port = 3000;
const ordersServiceURL = "http://localhost:4000";// 设置路由
app.get("/users", async (req, res) => {try {// 获取订单服务器的订单信息const response = await axios.get(`${ordersServiceURL}/orders`);const orders = response.data;// 创建用户信息数组const users = [{ id: 1, name: "John Doe", orders: orders.slice(0, 2) },{ id: 2, name: "Jane Smith", orders: orders.slice(1, 3) },{ id: 3, name: "Bob Johnson", orders: orders.slice(0, 1) },];// 将用户信息返回给客户端res.json(users);} catch (error) {// 如果发生错误,返回500状态码res.status(500).json({ error: "Internal server error" });}
});// 监听端口
app.listen(port, () => {// 打印端口号console.log("Users service is running on port " + port);
});

步骤6:运行微服务

要运行这些微服务打开两个单独的终端窗口,进入项目文件夹,并运行以下命令:

对于“用户”服务:

cd users
node index.js

对于“订单”服务:

cd orders
node index.js

步骤7:测试微服务

打开我们的网络浏览器或使用类似Postman的工具来测试这些微服务

要测试“用户”服务,请访问http://localhost:3000/users。 它应该返回一列用户及其关联的订单。

image.png

要测试“订单”服务,请访问http://localhost:4000/orders。 它应该返回一列订单。

image.png

恭喜你!你已成功使用Node.js、Express.js和Axios创建了一个基本的微服务架构,其中两个微服务彼此通信以满足用户请求。


http://www.ppmy.cn/embedded/102298.html

相关文章

用宝塔部署项目到阿里云服务器访问不到的问题

今天用宝塔部署项目到阿里云,开始前端部署到了80端口,能正常访问,后端部署到了8081,但是后端接口一直无响应,最后超时。 但是java正常运行 系统防火墙的状态正常,策略也是放行 阿里云安全组也已经配置了 …

Bytebase 2.22.2 - 允许在工作空间为群组分配角色

🚀 新功能 允许在工作空间给群组分配角色。 支持禁用邮箱密码登录,仅允许 SSO 登录的设置项。 新增 Postgres SQL 审核规则:禁止在列上设置会变化的默认值。 🔔 重大变更 下线项目内的变更历史页面;所有变更历史仍可…

如何在Java中使用protobuf

写在前面 本文看下在Java中如何使用protofbuf。 1:介绍 1.1:什么是protobuf 是一种数据格式,同json,xml,等。但是一种二进制数据格式。 1.2:强在哪里?为啥要用? 小&#xff0c…

Flask-RESTFul 之 RESTFul 的第一个案例

Flask-RESTFul 之 RESTFul 的第一个案例 在 Flask-RESTful 中创建一个 RESTful API 的第一个案例通常涉及定义几个基本的路由(endpoints),这些路由将支持资源的创建(POST)、读取(GET)、更新(PUT/PATCH)和删除(DELETE)等操作。以下是一个简单的 Flask-RESTful 示例,…

73 OSPF图解LSA(华三)

71 OSPF多区域实验(华三)-CSDN博客文章浏览阅读166次,点赞8次,收藏3次。实操https://blog.csdn.net/qq_56248592/article/details/141563010?spm=1001.2014.3001.5501 一 基础配置省略 上次的原图基础上扩展

【C++】模板

目录 一、泛型编程——模板概念 二、模板 2.1 函数模板 2.2 类模板 三、模板的特化 3.1 函数模板特化 3.2 类模板特化 四、模板分离编译 五、模板总结 一、泛型编程——模板概念 我们在实现交换函数时,所交换的数据类型各不相同,为了能够普遍实…

LRU缓存算法,大厂面试会手撕

计算机的缓存容量有限,如果缓存满了就要删除⼀些内容,给新内容腾位置。但问题是,删除哪些内容呢? 我们肯定希望删掉哪些没什么⽤的缓存,⽽把有⽤的数据继续留在缓存⾥,⽅便之后继续使⽤。那么,什…

结合令牌(JWT)和签名认证的系统登录及页面访问的详细实现原理和流程

结合令牌(JWT)和签名认证的系统登录及页面访问的详细实现原理和流程如下: 1. 实现原理 1.1 JWT(JSON Web Token)令牌 JWT是一种用于用户认证的紧凑、安全的令牌格式。它通常由三部分组成: Header&#…