【问题标题】:Deleting a list of azure blobs blocks express/nodejs删除 azure blob 块列表 express/nodejs
【发布时间】:2018-07-11 21:29:01
【问题描述】:

给定一个 blob 列表,我想一个一个地删除它们(因为在 azure storage sdk 中没有批量/批量删除 blob)而不阻塞节点的事件循环或快速服务器。删除由请求触发(并在其上运行)。但是,尽管整个流程尽可能异步,但一旦删除开始,快速服务器就会变得无响应,有时某些端点会返回 500。

const async       = require('async');
const azure       = require('azure-storage');
const Promise     = require('bluebird');

const blobService = azure.createBlobService(CONFIG.CONNECTION_STRING);

// Endpoint
app.delete(`${BASE_URL}/files/:date`, deleteFiles);

const deleteFiles = async (req, res) => {

  const date = req.params.date;

  if (!date) {

    return res.status(400).send();

  }

  await deleteBlobs(date).catch((err) => {

    return res.status(500).send(err);

  });

  res.status(200).send();

};

const deleteBlobs = (date) => {

  return new Promise(async (resolve, reject) => {

    // findFiles calls blobService.listBlobsSegmentedWithPrefix and performs some async.map on the returned entrieds
    const blobNames = await findFiles(date)
      .catch(err => log.error('findFiles failed in deleteBlobs.', err));

    async.each(
      blobNames,
      (blobName, callback) => {

        blobService.deleteBlob(CONTAINER, blobName, (deleteError) => {

          if (deleteError) {

            return callback(deleteError);

          }

          callback();

        });

      },
      err => {

        if (err)  {

          return reject(err);

        }

        resolve();

      });

  });

};

那么我错过了什么?为什么服务器在删除完成之前没有响应?

提及(也许有帮助):快速服务器/应用程序托管在 Azure 中,采用基本 (B1) 服务计划。

【问题讨论】:

  • 我认为问题不是特定于您的应用程序,很可能与浏览器缓存有关。检查@Josh Lee's answer 看看是否有帮助。
  • 浏览器缓存与此无关,因为所有请求都被阻止,而不仅仅是同一个

标签: node.js azure express azure-storage async.js


【解决方案1】:

我认为有 1 个可能的原因会导致您的快递无响应。

删除异步操作过多,会在短时间内创建大量回调 I/O 事件。 Node.js 可能会先服务这些事件,然后卡住 Node.js 来处理其他传入的 HTTP 请求。

您可以使用 async.eachLimit 代替 async.each 来设置较低的并发限制吗?

http://caolan.github.io/async/docs.html#eachLimit

【讨论】:

  • 这太棒了。使用 eachLimit 限制为 10 时,服务器仍然感觉像挂起,但肯定是您提到的问题,因为我看到了巨大的改进。删除 1000 个 blob 需要 15 秒,现在它下降到只有 5 个。非常感谢!将继续玩极限,直到我找到一个好的平衡。
猜你喜欢
  • 1970-01-01
  • 2017-05-20
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 2021-10-10
  • 2019-04-01
  • 2017-08-22
相关资源
最近更新 更多