node.js - NodeJS 中的微服务架构

标签 node.js microservices

我正在做一个副项目,我决定将我的 Skelton 项目重新设计为微服务,到目前为止,我还没有找到任何遵循这种模式的开源项目。经过大量的阅读和搜索,我得出了这个设计的结论,但我仍然有一些问题和想法。

enter image description here

以下是我的问题和想法:

  • 如果我有来自同一个微服务的 2 个 Node ,如何使 API 网关足够智能以加载平衡请求?
  • 如果其中一个微服务发生故障,发现应该如何知道?
  • 有没有类似的实现?我的设计对吗?
  • 我应该使用 Eureka 还是类似的东西?

最佳答案

你的设计看起来不错。我们还在使用 API Gateway 方法构建我们的微服务项目。包括网关服务(GW)在内的所有服务都是容器化的(我们使用 docker) Java 应用程序(spring bootdropwizard)。也可以使用 nodejs 构建类似的架构。与您的问题相关的一些主题:

  • 身份验证/授权: GW 服务是客户端的单一入口点。所有的身份验证/授权操作都在 GW 中使用 JSON web tokens(JWT) 处理,它也有 nodejs 库。我们将用户角色等授权信息保存在 JWT token 中。一旦 token 在 GW 中生成并返回给客户端,客户端在每次请求时都会在 HTTP header 中发送 token ,然后我们检查 token 是否客户端具有调用特定服务所需的角色或 token 是否已过期。在这种方法中,您不需要在服务器端跟踪用户的 session 。实际上没有 session 。所需信息在 JWT token 中。
  • 服务发现/负载均衡:我们使用dockerdocker swarm是docker引擎捆绑的一个docker引擎集群工具(在docker之后v.12.1)。我们的服务是码头容器。使用 docker 的容器化方法可以轻松部署、维护和扩展服务。在项目开始的时候,我们一起使用了Haproxy、RegistratorConsul来实现服务发现和负载均衡,和你画的差不多。然后我们意识到,只要我们创建一个 docker 网络 并使用 docker swarm 部署我们的服务,我们就不需要它们来进行服务发现和负载平衡。使用这种方法,您可以通过为每个环境创建不同的网络,在一台或多台机器上轻松地为您的服务(如 dev、beta、prod)创建隔离环境。一旦您创建了网络并部署了服务,服务发现和负载平衡就不再是您关心的问题了。在同一个 docker 网络中,每个容器都有其他容器的 DNS 记录,并且可以与它们通信。使用 docker swarm,您可以通过一个命令轻松扩展服务。在对服务的每个请求中,docker 将请求分发(负载平衡)到服务实例。

关于node.js - NodeJS 中的微服务架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40448015/

相关文章:

javascript - 使用 Nestjs 监听多个 RabbitMQ 队列

javascript - 如何解构有时被接收为 null 的对象属性

javascript - Node 不打印完整对象

javascript - 为什么我的 React 组件无法获取我需要的库?

orm - 解决微服务之间的设计依赖关系

java - 在 REST 客户端和 Jersey Java 代码完成的 REST 调用的响应中获取不同的内容类型

asp.net-core - API 网关 Ocelot 和 Kubernetes

javascript - Koa.js 中止正在运行的请求

android - 在 Firebase 控制台上查看发送的消息

microservices - 带有 1 个生产者和 2 个消费者的 Nestjs 基于事件的消息传递