PCS*_*S-I 7 architecture scalability node.js google-compute-engine puppeteer
该应用程序的目标是使用 puppeteer 生成 pdf,我们获取数据,构建 html 模板,然后使用 chrome headless 生成 pdf,然后返回新生成的 pdf 的链接。
问题是生成 pdf 需要大约 7000 毫秒,主要是因为三个 puppeteer 函数:launch(启动无头浏览器)、goto(导航到 html 模板)和 pdf(生成 pdf)。
因此,大约需要 7~8 秒来回答一个请求,随着更多传入请求或突然激增,很容易需要大约 40 到 50 秒来处理 30 个同时请求,这是我无法接受的。
经过大量时间的研究,我将实现集群模块以利用多个进程。
但除了集群之外,还有其他可能的选项来优化单个实例的时间吗?
有一些事情需要考虑...
puppeteer.launch一次。您的转换脚本将仅检查浏览器实例是否已存在并通过调用使用它newPage(),这基本上创建新选项卡,而不是每次创建浏览器。Request并过滤掉页面当前正在加载的某些类型的文件,但您不需要它们来进行 PDF 渲染;如果是这种情况,您也可以过滤掉外部资源。page.on('request', this.onPageRequest);goto()pdf()您可以从服务中返回Buffer,而不是使用文件系统,并将链接返回到创建的 PDF 文件的位置。这可能会也可能不会加快速度,具体取决于您的服务设置;无论如何,IO 越少越好。这可能是您可以为应用程序的单个实例执行的所有操作;通过上述常规(几页)PDF 的实现,我可以在 1-2 秒内渲染出一些图像。
为了加快速度,请使用集群。除了将其嵌入到您的应用程序中之外,您还可以考虑使用PM2管理器来启动和扩展服务的多个实例。
| 归档时间: |
|
| 查看次数: |
4454 次 |
| 最近记录: |