node.js 用于 Web 应用程序的 golang 复合架构

node.js golang composite architecture for web application

我目前正在构建一个将使用 node.js 进行基本路由的网络应用程序。该应用程序的某些部分需要更多处理器,我想对这些部分使用 golang。但是,我不确定在两种语言之间安装和通信的最佳方式。我正在使用 Amazon Elastic Beanstalk 进行初始测试,因此任何细节都可以针对该平台。

本质上归结为以下两个问题:

1) 如何在 Amazon EC2 上同时安装 node.js 和 golang docker 映像?亚马逊有一个或另一个的指南,但没有两个。

2) 将处理器密集型任务从 node.js 卸载到 golang 代码库的最佳方法是什么(我可以成像 RPC,或者只是 运行 golang 在某些本地主机端口上,但我这类事情的新手)? golang 任务可能是严肃的数字运算或复杂的图形搜索。

感谢您的指导。

  1. Go 部署起来很简单。只需在 linux 框(或使用 gox)上构建它并部署二进制文件。 (你不需要在服务器上安装 go 来 运行 一个 go 程序)
  2. Go 和 Node.js 之间有很多通信选项。这里有一些:

    1. 如果您正在做的工作需要很长时间,让用户等待响应可能不合适。对于后台任务,您可以使用队列(如 Redis 的 rpoplpush or a real queue like Kafka or RabbitMQ, or since you're using Amazon: SQS)。将您的作业作为 JSON 对象推送到队列中,然后编写一个从队列中提取的 Go 程序,进行处理,然后将最终结果写入某处。
    2. Go 有一个 jsonrpc library。您可以通过 TCP 进行通信,在 Node 中序列化请求,在 Go 中读取它,然后在 Node 中反序列化响应。它是 jsonrpc 1.0 协议,对于 TCP,您所要做的就是添加一些消息框架(在您的 json 字符串前加上一个长度)或只是用换行符分隔每个请求/响应。
    3. 用 Go 编写一个标准的 HTTP 服务,然后从 NodeJS 进行 HTTP 调用。 (PUT/POST/GET)