NestJS 微服务和云部署
Posted
技术标签:
【中文标题】NestJS 微服务和云部署【英文标题】:NestJS Microservices and Cloud deployment 【发布时间】: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 应用程序这样的东西对我的用例有好处。经过一些测试,我会提出新的信息。感谢您的帮助 【参考方案1】:您需要服务发现,这里是pattern
然后,使用 DNS 或 Registry service(如 Consul)来查询您的服务。
GCP 中的服务发现
例子:
检查列表服务:4566 身份验证服务:3030 mongodb:27018领事详情可见here
【讨论】:
以上是关于NestJS 微服务和云部署的主要内容,如果未能解决你的问题,请参考以下文章
NestJS - 在微服务中结合 HTTP 和 RabbitMQ