【问题标题】:How to stress test PouchDB如何对 PouchDB 进行压力测试
【发布时间】:2015-02-22 16:59:44
【问题描述】:

我们正在研究使用 CouchDB 和 PouchDB 堆栈,我们希望对 CouchDB 进行压力测试,因为我们的用例之一可以同时让多达 70-80 个用户进行复制。

我们设法对 CouchDB 进行了压力测试,并对结果感到满意,但我们想从 PouchDB 做一些端到端的压力测试。

我尝试了一些方法:

1) 使用在 for 循环中启动多个页面的 PhantomJS 脚本 2) 使用 PhantomJS 脚本和 Github 上的某种并行函数 3) 使用 bash 脚本和 & 启动多个 phantomJS 4) 使用 bash 脚本和 GNU Parallel 启动 PhantomJS 的多个实例 * 上述所有测试都使用waitFor函数,仅在全局变量设置为true时完成(我能想到的唯一方法将等待页面中的所有JS执行)

虽然一次 phantomJS 执行大约需要 200-300 毫秒,但在运行多个时,它们似乎会以某种方式排队,并且对于大约 30 次执行中的最后一次,我们得到的数字从 200 毫秒到 30,000 毫秒不等。

看起来 PhantomJS 正在以某种方式排队。我可以看到每个后续请求的 n*200 毫秒的稳定进展。

我可能可以在 2-3 台设备上构建一个演示应用程序并循环 PUT 和 Replicate,但我想尝试以类似的方式编写脚本,以便 Siege 可以对具有多个资产的页面进行压力测试。只是,我希望它“等待”直到页面真正完成并且所有 JS 都完成运行。

知道我该怎么做吗?

【问题讨论】:

    标签: javascript scripting stress-testing pouchdb


    【解决方案1】:

    听起来您正在尝试通过模拟您希望从用户那里收到的负载来对整个系统进行压力测试,也就是说,您并没有尝试测试浏览器本身的性能。 (如果不是这样,并且您尝试在浏览器中进行测试,那么我们已经有一些 browser performance tests in PouchDB,尽管您会从 PhantomJS 得到错误的数字,因为它是一个旧的浏览器。)

    由于 PouchDB 是同构的,我建议避免使用 PhantomJS,而只在 LevelDB 之上运行一些 Node.js 进程来模拟您的用户。 PhantomJS 可能确实存在一些排队问题,因为底层数据存储是 WebSQL,它有一个全局写锁。但是,使用 Node,您可以拥有单独的进程,每个进程代表一个线程。你只需要确保每个都有一个单独的 LevelDB,因为 LevelDB 不是线程安全的(例如new PouchDB('/tmp/some/random/directory'))。

    【讨论】:

    • 感谢诺兰的帮助! :) 你对 PhantomJS 的看法是对的,我在这种测试中忘记了它。我们想主要测试从 PouchDB 到远程 CouchDB 数据库的复制,因为我们的用例最多可以同时拥有 70 个用户,在最坏的情况下,他们都同时复制。管理冲突会很有趣;)我会研究 LevelDB 和 NodeJS,你能指出我对 LevelDB 不熟悉的很棒的教程吗?谢谢!
    • 没有问题,只需像往常一样在 Node.js 脚本中使用 PouchDB,但是当您创建它时,将其指向一个空目录,它将在那里写入 LevelDB 文件:new PouchDB('/path/to/dir') .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2021-07-17
    • 2011-04-16
    • 2013-05-02
    • 2012-02-28
    • 2023-04-10
    相关资源
    最近更新 更多