node.js - 由于文件系统,如何正确构建微服务
问题描述
我有一个 API1 调用 API 2 来执行任务,例如:
1)裁剪图像,保存图像
这个过程需要很长时间,当然呼叫超时。
这两个 API 都内置在 Nodejs Rest API 中。
如何正确构建此过程以使我没有超时?
我是否调用端点,而不是稍后以某种方式调用端点再次检查?
解决方案
那种由于长时间操作而可能会超时的系统,您可以使用 aysnc 操作 AMQP(高级消息队列协议)。这两个服务/应用程序都应该完全独立地工作。您的服务 1 将消息放入队列中,服务 2 拾取要处理的消息。完成后,它会通知服务 1。
您必须注意 REST/HTTP 本质上是同步的,您需要了解其含义。这意味着当您的服务 1 通过 HTTP 请求其他服务做某事并等待它完成时,您实际上是在阻塞线程。尽管您的客户端可能正在实现异步 http 调用,但在后台您仍在等待请求以同步方式完成,并且这种系统很难扩展。
另一个建议是尽可能使用无服务器。例如 AWS lambda/Azure 函数通常非常擅长它。基本上你通知无服务器函数做一些操作,当它们完成时你可以连接通知。但是它们有只能运行几分钟的限制。真的取决于你是否有适合无服务器的操作。
推荐阅读
- excel - 我有两个文件夹,里面装满了名称相同但内容不同的文件。如何匹配它们以将数据从一个文件复制到另一个文件?
- c - 使用带有 MACROS 的 Switch
- javascript - 使 getDerivedStateFromProps 在 props 更新时表现得像 componentDidMount
- ios - CAShapeLayer 在哪里绘制?
- javascript - 如何修复无法 PUT /blogs/:id
- php - Laravel 4 DB 事务未提交和回滚
- javascript - Javascript 反向字母表
- mysql - Yii2/PHP:为 InfluxDB 和 MySQL 抽象数据库访问
- asp.net-mvc - 我可以转到根文件夹 MVC 上的内容文件吗?
- java - 如何检查是否有两个使用正则表达式连接的方法?