Java 后端生成海报图片遇到了性能压力,求指教~

42 天前
 acbingo

因为我们服务基本都是 Java 框架,所以当初也是想当然的用 Java 原生的图片编辑能力来画图实现需求,随着业务增长,性能越来越吃紧,而且需求也越来越复杂,需要画越来越复杂的图,Java 越来越难画了

求大家指教,有什么成熟的后端服务方案,画图又快,还能画一些复杂的海报图呢。可以考虑用别的语言

3538 次点击
所在节点    Java
44 条回复
cz5424
42 天前
用前端画,吃用户手机 cpu
cz5424
42 天前
后端画图避免不了性能问题
acbingo
42 天前
@cz5424 哈哈,也考虑过。但是绝大多数需求是需要一下画出来好几张图,让前端画担心用户停留不了那么长时间
justNoBody
42 天前
原生指的是 java.awt.Graphics2D 么?
securityCoding
42 天前
海报用 H5 实现输出 html 文件,后台起一个 headless chrome 进程直接本地渲染最后调用 sdk 截图 api 就好了,封装成服务很方便
cz5424
42 天前
@acbingo 你如果实时显示,后端也要那么久,除非你挂异步任务提前生成
acbingo
42 天前
@cz5424 对就是挂的异步提前生成,用户进活动落地页就去生成了,等到他划到最后去预览海报都过去好几秒了
cz5424
42 天前
@securityCoding Chrome 并发也是一个很大的问题,内存大户
acbingo
42 天前
@securityCoding 也考虑过用 puppeteer ,但是 pptr 太吃内存了,而且速度也没快多少。倒是解决了画复杂海报的痛点
cz5424
42 天前
前端画图,像素根据手机宽度生成低分辨率的,速度应该不慢
securityCoding
42 天前
@cz5424 #8
@acbingo #9 堆机器就好了啊,一个海报生成服务能有多高并发?
acbingo
42 天前
我甚至在想,能不能上一些 GPU 加速呢🤔🤔,稍微研究了一下,感觉上手成本都比较高😂
securityCoding
42 天前
@acbingo #9 封装成独立服务堆数量就是了,海报别再 java 画了这是条不归路,ui 同学走查能搞死你
acbingo
42 天前
@securityCoding 现在已经部了 20 台了,业务还会有几倍的增长空间,所以还是想看看能不能找到性能更好的方案。。。另外现在业务想画一些复杂的,比如说画些饼图、曲线图,之前用 Java 写写字、拼拼图还行,但是让我生成饼图就有点功力不够了😂
acbingo
42 天前
@securityCoding 一开始就是独立出来的。

我也不想用 Java 了,所以这不出来请教大家嘛,用啥方案更合适些
darkengine
42 天前
考虑下把这个活儿胶水给其他适合做图像处理的语言搞吧
securityCoding
42 天前
@acbingo #14 另外就是纯 web 的方案了这个不太了解不过我之前有同事实现过,headless chrome 方案我之前做了一版上线稳如老狗,k8s hpa 一开不需要操啥心
insubtemp
42 天前
前端画,前端也能异步提前生成,这不就省了 20 台服务器
night98
42 天前
你海报是什么类型的海报,这点你要说清楚,你生成的图片是底图加用户信息的这种,还是每次生成的图片都不一样?解决方案也都不一样的
openmynet
42 天前
考虑性能的话最佳选择就是 c++或 rust ,rs 的话这有个库 https://crates.io/crates/charts-rs ,支持 json 格式数据直接生成图表方便对接。或者是用 plotters 实现更复杂的操作。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1030721

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX