Tag: 微服务

Docker容器:基于Node.js的微服务的巨大尺寸

我一直在Docker容器中设置一些基于Seneca.js的微服务。 由于这是一个Node.js应用程序,我导出容器“FROM节点”。 但是,容器图像的大小约为600 MB。 不完全是“微”。 最终的应用程序将使用一个这样的服务集团,如果他们每个都是600 + MB的大小,它会炸掉几个GB的应用程序。 我做错了什么或者这是如何设置基于Docker-Node.js的微服务? 非常感谢。 干杯, 马丁

如何用微服务架构devise一个sails.js项目?

我从这里了解到微服务 现在,我想在我的下一个sails.js项目中使用微服务架构。 我能想到的一个方法是: 打破我的一个sails.js应用程序到多个小sails.js子项目/存储库。 在一个子项目中有一个控制器模型。 例如,如果我们考虑简单的电子商务应用程序与实体说用户,产品,订单等,那么将分别为每个他们与sails.js模型控制器分别sails.js存储库。 然后这个单一的子库会从我的一个微服务。 每个子存储库显然都有自己的configuration。 这些微服务将使用一些HTTP节点模块相互通信。 然后编写我自己的API网关在node.js中进行路由,这将负责根据来自客户端的请求从这些子库调用方法/ web服务。 这是最好的方法吗?还是有其他的方法来devise你的项目使用微服务架构? 用sail.js实现服务器间通讯,API网关的最佳方式是什么? 如果用上面提到的方法devise的一个微服务变得更大了,如果我必须把它拆分成2,sails.js模型应该如何改变?

Seneca.js在单独的Docker容器中的微服务架构中的angular色

我正在将ac#.net单片应用程序移动到node.js的计划阶段。 我想实现这个应用程序的微服务体系结构,这个应用程序使用seneca.js和docker将每个微服务分离到它自己的托pipe在aws弹性beanstalk上的容器中。 从我所阅读和推荐的内容来看,这似乎是迄今为止的方式。 在这里,我感到困惑,在审查seneca.js文档时,我没有看到如何进行失控的通信。 特别是,如果我想允许多个客户端订阅相同的事件,我应该使用rabbitmq与seneca.js,因为有几个微服务必须执行特定事件的操作? 在走这条路线时,我将如何处理一个用户失败并需要重新运行的场景? 看起来像这个事件将需要再次运行此微服务而不是其他人。 另外,在使用seneca.js时,我如何允许为每个微服务公开一个rest api,以允许客户使用这种方法访问其内部数据库和数据? 请让我知道,如果我在这方面的任何方面不正确。

应用程序端连接ORM的节点?

开始:我试过Loopback。 回送很好,但不允许跨多个REST数据服务的关系,而是调用初始数据服务,并传递查询参数来请求它执行连接的查询。 在我重新发明轮子并在Loopback的loopback-rest-connector上编写大量的包装器之前,我需要找出是否有任何现有的库或框架已经解决了这个问题。 到目前为止,我的广泛的谷歌search没有出现。 在真正的微服务环境中,每个数据库都有一个服务。 http://microservices.io/patterns/data/database-per-service.html 从这篇文章: 实现连接现在在多个数据库中的数据的查询是具有挑战性的。 有各种解决scheme: 应用程序端连接 – 应用程序执行连接而不是数据库。 例如,服务(或API网关)可以通过首先从客户服务中检索客户,然后查询订单服务以返回客户的最近订单来检索客户及其订单。 命令查询责任分离(CQRS) – 维护一个或多个包含来自多个服务的数据的物化视图。 这些视图由订阅每个服务在更新其数据时发布的事件的服务保存。 例如,在线商店可以通过维护join客户和订单的视图来实现查询特定地区的客户及其近期订单的查询。 该视图由订阅客户和订单事件的服务更新。 例: 我有2个数据微服务: GET / pets – 返回一个对象 { "name":"ugly", "type":"dog", "owner":"chris" } 和完全不同的微服务…. GET /所有者/ {OWNER_NAME} – 返回所有者信息 { "owner":"chris", "address":"under a bridge", "phone":"123-456-7890" } 我有一个API级别的微服务将要调用这两个数据服务。 这是我将应用于此的微服务。 我希望能够build立一个宠物模型,这样,当我查询宠物,GET /宠物的成功回应,它将与所有者“join”(发送GET /所有者/ {OWNERS_NAME}所有的回应)和用户,只需返回包含其所有者数据的宠物列表。 所以GET /宠物(也许像Pets.find())会返回 { "name":"ugly", "type":"dog", […]

使用winstonloggingnodejs微服务应用程序

我写了一个服务器端应用程序,这个应用程序被分成了几个微服务,所有这些服务现在都写在nodejs中。 我使用Winston作为我的日志库。 我也用麋鹿来监视我的日志。 最近,我发现我无法舒适地监视我的日志,而且我需要一种方法在我的微服务中一路查看kibana的请求。 我的意思是,我想查看所有来自请求进入第一个微服务的日志,直到她从最后一个微服务发回来。 我没有唯一的ID给我的请求或发送的实体,所以我需要为每个请求生成新的唯一ID。 但我不想将生成的ID添加到我的应用程序中的每个方法。 有一个优雅的解决scheme来做到这一点,而不改变我所有的日志? 非常感谢。

微服务每分钟处理100个请求

我有node.js应用程序应该处理以下 获取压缩文件提取这些文件(JS模块文件与一些关键和价值 – 最多20个文件,但通常是5-8个文件为每个请求) 对这些文件进行一些分析并从中创build新文件并将其发回客户端(如果请求是5个文件,分析应该返回相同的5个新文件等) 压缩这个新文件并将其发送回客户端 我创build了可以正常工作的分析模块,对于大约10个文件,大约需要250-300毫秒来进行分析并创build新文件。 让我们假设我需要服务100个客户,可以做到这一点 现在我想创build一些stateless微服务,这个function基本上就是这样做的 get zip extract zip manipulate zip send files 为此,我想在云中创build一个micro service (无状态)(我想将其部署到应该处理它的云(云代工/ Heroku)而我的问题在于如何处理多个请求?每分钟100的请求…我明白,应该是asynchronous工作,但我仍然恐怕10或更多的要求我的应用程序将粉碎… … – 队列? 缩放?

在NodeJs微服务体系结构中,我应该使用每个服务的package.json吗?

我目前正在开发一个NodeJs中的微服务架构。 我的第一个方法是每个服务的package.json 。 尽pipe访问公共区域(使用日志logging或数据库实用程序)对于所有微服务来说可能非常棘手。 例如: common-area > logger.js package.json – install module typeorm service1 > app.js – use logger.js package.json – also install module typeorm 当运行node app.js (服务1)时,我们最终加载了2个typeorm模块,一旦我们做了两个不同的安装,一个在公共区域(logging器使用),另一个在service1。 我应该只使用一个package.json ,对于所有的微服务,只产生一个node_modules文件夹?

NodeJS微服务,结合数据

我正在构build一个由几个核心“部分”(用户,消息和交易信号)组成的NodeJS平台。 所以我的想法是为他们每个人创build微服务,并且工作得很好..但是我无法理解如何在微服务之间“join”数据(我是一个最初的前哨者) 例如,我有3个微服务。每个都有自己的MongoDB,在它自己的机器上完成隔离。想象一下从一个微服务中检索消息的常见情况,消息有一个'user_id',我需要用户名和profilePicture将在检索到的消息对象中进行组合。 我读了很多关于使用Redis的信息,但是对我来说,这看起来像是一个“消息传递”服务,而不是一个“结合”服务。谁能帮助我度过黑暗? 谢谢!! 我知道这是一个非常普遍的问题,但是当我们把多个微服务的数据结合起来的时候,我却无法掌握'最佳实践'。

在两个NodeJS微服务之间共享自定义代码

我正在为该应用程序创buildWeb应用程序和micorservice,并且都需要使用Sequelize创build相同的数据库模型。 用NodeJS来处理这个任务的方法是什么? 我正在考虑创build我的数据库模型的单独模块,并将其保存在私有混帐中,并将此私有混帐添加到我的Web应用程序和微服务中,作为npm依赖项。 但我想知道是正确的方法或什么是正确的方式来分离less数微服务之间的共享私人模块,在我的情况下,它是数据库模型? 我应该干还是不干? 提前致谢!

API网关示例node.js

寻找一个很好的例子来说明如何为微服务应用程序实现一个节点API网关,我明白有一个网关的目的,我只是不知道如何实现这一点,而不只是添加另一级别的RESTful路由调用。 对我来说,一个网关应该把路线引导到微服务。 API网关端口3000 router.use('/microservicename/*', function (req, res, next) { **code that will direct to microservice** }); Microservice1 server.js端口3001 var express = require('express'); var app = express(); var routes = require('./routes/routes'); app.use('/microservicename', routes); var server = app.listen(3001, function () { console.log('Server running at http://127.0.0.1:3001/'); }); Microservice1 router.js(3001) router.get('/route1', function (req, res, next) { //get route code […]