【问题标题】:node.js golang composite architecture for web application用于 web 应用程序的 node.js golang 复合架构
【发布时间】:2015-07-12 08:05:22
【问题描述】:

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

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

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

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

感谢您的指导。

【问题讨论】:

  • 为什么不让 Go 也做路由并简化您的设计?
  • 如果你打算使用两种不同的语言,在前面使用 nginx 之类的东西来代理每个服务的请求会容易得多。这也将处理基本路由,因此没有流量必须去 golang 或节点并被路由到另一个。
  • 好的,在 EC2 上使用默认 node.js 设置,已经使用了 nginx,所以我可以使用它来将某些请求发送到不同的端口(node.js 在一个端口上侦听,golang 在另一个端口上侦听) .但是,还有其他选择吗,例如,如果我想直接从 node.js 调用到 golang?
  • @Not_a_Golfer,如果是我的选择,我会在 Go 中做所有事情,但是 node.js 只是更快地开始一些事情,我想选择卸载这些处理器密集型任务随着时间的推移。

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


【解决方案1】:
  1. Go 部署起来很简单。只需在 linux 机器上构建它(或使用 gox)并部署二进制文件。 (你不需要在服务器上安装 go 来运行 go 程序)
  2. Go 和 Node.js 之间的通信有很多选择。以下是一些:

    1. 如果您正在做的工作需要很长时间,让用户等待响应可能不合适。对于后台任务,您可以使用队列(例如 Redis 的 rpoplpush 或真正的队列,例如 Kafka 或 RabbitMQ,或者因为您使用的是 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-07
    • 2011-09-10
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 2010-12-23
    • 1970-01-01
    相关资源
    最近更新 更多