使用 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 中的 'next/next()'