Articles of 微服务

微服务:如何处理有限上下文之间需要数据的场景

我开始将一个node.js项目移动到一个微服务的方法,并没有得到如何共享数据。 这里是一个例子,假设我有以下有界的上下文: 帐户(用于pipe理用户帐户,权限,login/注销,configuration文件等) 图像(用于pipe理file upload,如与给定帐户关联的个人资料照片,图像库等) video(用于pipe理video上传和转码为与给定用户相关的各种格式) 在这个例子中,图像和video似乎有自然依赖的帐户有限上下文或微服务。 我假设我可以将帐户表复制到图像和video数据库,并只存储所需的帐户数据,但这在保持一致性等方面看起来像一场噩梦,因为帐户信息经常更新,更不用说如果其他微服务需要这种相同的依赖。 我可以让所有三个微服务使用相同的数据库,但是这违反了每个微服务与自己的数据库绑定的build议。 处理这种情况的build议方法是什么? 我仍然在计划阶段,并希望确保我以正确的方式做到了这一点。

Google云端点是否等同于API网关,或端点是否等同于微服务?

使用App Engine灵活环境,我准备部署一个Angular 4客户端,并且正在研究云端点来处理我的node.js / express微服务,因为它似乎简化了对端点请求的安全和validation,我想澄清一些事情: 我是否使用云端点作为将请求路由到各个微服务后端的API网关,还是应该将微服务构build为单独的端点 – 应用程序本身? 我是否静态托pipeAngular 4应用程序(与服务器无关),并将端点请求直接发送到ng客户端的Gateway / microservice,或者是通过服务器框架(例如node.js / express)托pipe的应用程序,请求一起到网关/ microservice

Cqrs +微服务架构:如何从其他服务获取数据

我正在为个人项目设置一个微服务/ cqrs体系结构,在“标准”设置中有一点我不明白。 我的意思是标准设置 https://www.ibm.com/developerworks/cloud/library/cl-build-app-using-microservices-and-cqrs-trs/index.html 假设我有一个订单服务和一个提货点服务,而且我有一个像“发送订单汇总电子邮件”的命令。 订单服务应该如何获得发送电子邮件所需的取件点数据(例如开放时间等)? 我看到4种可能性,但肯定有其他的。 该命令直接进入订单服务,然后订单服务查询取货点服务以获取数据。 该命令转到取件点服务,然后取件点服务发布订单服务的新事件,并附带所需的信息。 该命令直接进入订单服务,然后订单服务查询只读的面向客户端的数据库。 合并2服务…鉴于他们没有其他共享的上下文,这将是一个可惜… 谢谢 !

使用stream式JSON连接两个Node / Express应用程序

我目前有两个应用程序运行… 一个是我的REST API层,为前端提供了许多服务。 另一个是“翻译应用程序”,它可以通过一个JSON对象(通过http POST调用),对该对象执行一些数据转换和映射,并将其返回给REST层 我的情况是我想为大量的对象做这个。 我想要的stream程是: 用户以特定格式请求100,000个对象 – > REST层从数据库中检索 – >将每个JSON数据对象传递给翻译服务以执行格式化 – >将每个对象传回REST层 – > REST层将新对象返回给用户。 我不想要的是在100,000个不同的调用上调用tranlate.example.com/translate,或者通过1个巨大的POST请求传递兆字节的数据。 所以很明显的答案是将数据stream式传输到翻译应用程序,然后将数据stream式传回。 似乎有很多解决scheme可以跨应用程序stream式传输数据:打开一个websocket(socket.io),在两者之间打开一个原始的TCP连接,或者由于Node的HTTP请求和响应数据实际上是一个可以利用的数据stream然后发送一个JSON对象,当它成功的翻译 我的问题是在这里有两个应用程序之间stream数据的最佳做法吗? 看来我应该使用http(req,res)stream,并保持一个长期的连接打开,以保留“REST”模型。 任何可以提供的样本都会很好。

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或更多的要求我的应用程序将粉碎… … – 队列? 缩放?