【问题标题】:NestJS Microservices and Cloud deploymentNestJS 微服务和云部署
【发布时间】:2020-04-10 04:38:03
【问题描述】:

我和朋友一起尝试开发移动应用程序。我的朋友掌握了 Flutter-App(前端),而我使用 NestJs 做后端工作。我们的目标是部署在云端(GCP / Firebase)中的微服务架构。

当前架构:

  • 前端:仅与面向公众的 API 通信的 Flutter 应用。
  • API:是一个 NestJS 后端,提供一个使用 JWT 保护的 GraphQL 端点
  • 数据库服务:所有数据处理都在连接到 MongoDB 的单独 NestJS 微服务(见下文)内完成。
  • 更多服务:将来我想添加更多后端服务并将它们相互连接并通过 API 连接

我的工作区是nx workspace。所以我认为创建多个 Nestjs 应用程序并为每个作业设置我自己的微服务很容易。例如前面提到的使用Nest microservice functionality的数据库服务

在我的本地机器上,这很完美,我喜欢 NestJS 和由此产生的微服务架构。现在我不知道如何将此架构交付给云。在“Google Cloud 术语”中,我将我的 API 想象为 App Engine 实例,并将所有连接的服务想象为 Cloud Functions。

问题:我的主要问题是:在 NestJS 中,使用如下配置对象创建了一个微服务:

//database-service: main.ts
createMicroservice(AppModule,{
    transport: Transport.TCP,
    {
        host:'127.0.0.1',
        port:4000
    }
})

//api: AppModule.ts
ClientsModule.register([
    {
        name: 'DATABASE_SERVICE',
        transport: Transport.TCP,
        options: {
            host: '127.0.0.1',
            port: 4000
        }
    }
])

如您所见,配置对象是静态的,对于服务和客户端来说是相同的。在云中,这些配置对象将由云确定,因此不是静态的。而且我还可以想象,在服务之间通过 TCP 进行这种通信是不可能的。

总之: 我该如何解决这个配置和跨服务通信问题?还是我的方法总体上是错误的?

提前致谢。

【问题讨论】:

  • 我对您围绕 GCP 设置 devops 的方式没有太多了解,但对我来说,您应该能够使用环境变量来解决您的问题。让我们更多地了解它当前的设置方式以及您是否考虑过这一点,以便我们进一步调查(不要犹豫,用更多上下文更新您的问题,即代码、回购等。)
  • 所以直到现在我还没有直接在 GCP 上做任何测试。我脑子里有太多的问题。我现在深入研究了文档,发现 App Engine 似乎适合我的需求。但是仍然存在配置问题。我的 API-Service 需要知道数据库服务的路径。我认为这将有助于cloud.google.com/appengine/docs/flexible/nodejs/…,但最终可能像 Pub/Sub 应用程序这样的东西对我的用例有好处。经过一些测试,我会提出新的信息。感谢您的帮助

标签: typescript google-cloud-platform microservices backend nestjs


【解决方案1】:

您需要服务发现,这里是pattern

然后,使用 DNSRegistry service(如 Consul)来查询您的服务。

GCP 中的服务发现

例子:

  • 检查列表服务:4566
  • 身份验证服务:3030
  • mongodb:27018

领事详情可见here

【讨论】:

    猜你喜欢
    • 2018-04-28
    • 2018-05-24
    • 1970-01-01
    • 2016-11-19
    • 2021-01-12
    • 2020-05-29
    • 2014-12-13
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多