我目前有两个应用程序正在运行...
一个是我的 REST API 层,它为前端提供了许多服务。另一个是"翻译应用程序",它可以被馈送到一个JSON对象(通过http POST调用(,对该对象执行一些数据转换和映射,并将其返回到REST层。
我的情况是我想为大量对象执行此操作。我想要的流程是:
用户以特定格式请求 100,000 个对象 -> REST 层从数据库中检索该对象 ->将每个 JSON 数据对象传递给翻译服务执行格式化 ->将每个传递回 REST 层 -> REST 层将新对象返回给用户。
我不想做的是在 100,000 个不同的调用中调用 tranlate.example.com/translate,或者通过 1 个巨大的 POST 请求传递兆字节的数据。
因此,显而易见的答案是将数据流式传输到翻译应用程序,然后将数据流式传输回。
似乎有很多解决方案可以跨应用程序流式传输数据:打开websocket(socket.io(,打开两者之间的原始TCP连接,或者由于Node的HTTP请求和响应数据实际上是一个流,我可以利用它,然后在成功转换时发出JSON对象
我的问题是,这里有在两个应用程序之间流式传输数据的最佳实践吗?似乎我应该使用 http(req, res( 流并保持长期连接打开以保留"REST"模型。可以提供的任何样品都会很棒。
这是消息队列的最佳用例之一。基本上,您为翻译服务要翻译的数据创建一个队列,并为已经转换并准备发送回用户的数据创建一个队列。您的 REST 层和转换层发布和订阅适用的队列,并且可以在数据传入时对其进行处理。这具有解耦 REST 和转换层的额外好处,这意味着以后添加多个转换层以在必要时处理额外的负载变得微不足道。
看看RabbitMQ,但也有很多其他选择。