使用 Express.js 和 docker 理解微服务

Posted

技术标签:

【中文标题】使用 Express.js 和 docker 理解微服务【英文标题】:Understanding microservices using Express.js and docker 【发布时间】:2018-09-11 18:24:14 【问题描述】:

我是 node.js 和 docker 以及微服务架构的新手。 我试图了解微服务架构实际上是什么,理论上我确实了解微服务架构是什么。请参阅以下实现 这是 index.js 文件:

var express = require("express"); 
var app = express();
var service1 = require("./service1");
var service2 = require("./service2");
app.use("/serviceonerequest",service1);
app.use("/servicetwo",service2);
app.listen(3000,function()
    console.log("listening on port 3000");
);

文件service1

var express = require("express");
var router = express.Router();
router.use(express.json());
router.get("/",(req,res)=>
    //perform some service here
    res.send("in the get method of service 1");
    res.end();
);        
router.post("/letsPost",(req,res)=>
    res.send(req.body);
    res.end("in post method here");
)
module.exports = router;

文件service2:

var express = require("express");
var router = express.Router();       
router.use(express.json());
router.get("/",(req,res)=>
    //perform some service here
    res.end("in the GET method for service 2");
);    
router.post("/postservice2",(req,res)=>
    res.send(req.body);
);    
module.exports = router;
    以上是否符合“微服务架构”的条件?既然有两个服务,可以通过“api-gateway”index.js 访问它们? 我已经阅读了Docker的基础教程。是否可以将上述三个“模块”放在单独的容器中? 如果上述不符合微服务的条件,应该如何将上述示例转换为微服务?

【问题讨论】:

【参考方案1】:

这并不真正符合微服务架构的要求。

您提供的整个代码足够小,可以被视为一个微服务(包含两条路由),但这不是微服务架构的示例。

根据这个定义;

“微服务是协同工作的小型自治服务”Building Microservices

被视为微服务的 service1 和 service2 都应该是自治的,当您将它们放在同一个 express 应用中时不会发生这种情况。例如;你不能在不影响另一个的情况下重新启动一个。您无法升级 service1 的版本而无需部署 service2。它们不是分布式的,它们可以放在不同的机器中。

【讨论】:

说得好,我也推荐了同一本书! ;) @Renato 感谢您的建议。 OP的第三个问题呢?你应该怎么做才能把这个例子变成微服务? @Renato 感谢您进一步澄清,但每个人都只回答微服务架构的理论概念,通常没有任何代码。现在提问者继续在他的问题中放了一些代码。我认为他也应该得到至少一些演示微服务架构的伪代码来回答。所有微服务都有 package.json 吗?应用程序。听?等等。【参考方案2】:

实际上我认为您缺少微服务架构的概念。您的服务必须是独立的,如果它们需要相互通信,它们必须使用服务发现机制,该机制将返回该服务的健康实例。微服务架构的另一种模式是,每个服务都必须有一个端点(/health)来返回服务的健康状态,让您的服务发现可以检查该实例是否健康并将其作为健康实例返回。.

微服务与技术无关,它与概念和实施正确的模式有关。否则你会有一个混乱的架构:D

如果你想理解这些概念我真的推荐这本书:http://shop.oreilly.com/product/0636920033158.do

【讨论】:

这是一本必读的书!在我的回答中也推荐了它

以上是关于使用 Express.js 和 docker 理解微服务的主要内容,如果未能解决你的问题,请参考以下文章

[express.js学习笔记]理解Router

很难理解 express.js 中的 'next/next()'

容器中的 Node.js 始终获取 docker0 ip

在 Express.js 中停止执行 Sequelize 承诺

express.js 中的中间件功能范围

Express.js:app.locals vs res.locals vs req.session