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

标签 node.js amazon-web-services web-applications amazon-ec2 go

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

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

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

2) 将处理器密集型任务从 node.js 卸载到 golang 代码库的最佳方法是什么(我可以想象 RPC,或者只是在某个本地主机端口上运行 golang,但我对这种类型的东西不熟悉)? golang 任务可能是严肃的数字运算或复杂的图形搜索。

感谢您的指导。

最佳答案

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

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

关于用于 Web 应用程序的 node.js golang 复合架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30004689/

相关文章:

amazon-web-services - AWS云形成: Inbound rules not getting added with this cloud formation template

java - 将桌面应用程序与应用程序服务器和数据库连接

node.js - 如何使用mongodb聚合以下数据

node.js - 创建使用 Number 的模式时出现 Mongoose TypeError

node.js - 提高 Amazon SQS 性能

amazon-web-services - SQS 过期 token : The security token included in the request is expired status code:

javascript - 哪些浏览器支持 HTML5 WebSocket API?

performance - 每秒请求数和响应时间之间的相关性?

node.js - 为 npm test 运行多个命令

javascript - 如何在我的 Javascript 中执行二进制可执行文件?