tal-tech / h5-transfer-pdf

H5TransferPDF是一个将网页HTML渲染为PDF和各种图像格式的API工具,完美兼容HTML、CSS、JS,较好的排版支持,并支持生成多种版本的PDF。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

几个问题讨论

nicholas-yangding opened this issue · comments

1.这样计算亲和并且需要 cpu 时间较重的服务,在服务入口最好是否有服务内部的限流,用来做快速返回和快速失败?
2.一次请求 pdf 直接启动一个进程这样的方式对整体服务器负载较重,是否最好可以改成node 服务单独部署方式,通过 node 集群或者单台机器多个 browser 热备的方式,可以降低 browser 频率启动带来的负载问题
3.
image
这个地方的线程池数量是否可以调整,由于主要影响吞吐的在于 node puppeteer browser 可并发进程数,线程池数量太少反而会影响服务的吞吐量

谢谢!

1、在应用层去做限流,可以通过排队形式异步生成PDF,PDF生成成功后,和用户再做一个交互;
2、可以暴露node web服务,代码中维护一个或者多个browser,通过打开page的方式去生成PDF,做好单个browser的内存管理即可,时间长了会容易占内存;
3、关于线程池个数配置,puppeteer比较占用cpu,如果线程池设置多大,多个CPU的上下文切换比较大,这个需要根据自己的业务来做权衡,我们在内部使用的过程中,由于html中的数据过大,排版比较复杂,导致单个pdf文件能独占一颗CPU;

PS:后续我们也会相应增加限流,限制PDF请求速率; 多个browser热备这种方式,目前这种方式没有用到生产中,主要考虑因素是长时间打开browser,随着时间推移,可能会出现性能问题,目前我们是每次生成时,打开一个browser,会同时打开多个Page页

感谢您的提问,我们会针对您的问题做更深层次考虑,并针对一些问题进行加强,您有比较好的建议或者实现方式,也可以提供给我们。

commented

image
内存不断往上涨,怎么处理