思维导图

系列总目录
背景
- 随着公司的快速发展,业务需要沉淀出根据模板生成PDF的通用能力
- 根据Word/PDF模板,填充对应信息,生成PDF
技术选型
- PDF相关的各个框架
- text: 基于AGPL协议,商业版需要开源项目代码或者收费
- spire.doc: 商业版收费,免费版有水印
- PDFbox: 提供pdf操作,创建PDF,合并PDF功能,但是对中文支持不是很好
- OpenPDF: demo较少,功能较少
- poi: Apache下的完全开源,GitHub start 1.1k,社区活跃性高,提供根据Word模板填充Word数据, word的转pdf对表格图像处理不好
- docx4j: GitHub start 1.6k提供Word转PDF, 完全开源
- PDF服务采用poi替换Word模板生成Word, 再使用docx4j 将Word生成PDF
高可用高性能保证
高可用
- 部署, 单点故障
- PDF采用异步处理,mq通知的形式,如果处理过程中断网导致没有发mq消息,### 高性能
- 异步处理
- 采用内部BlockingQueue形式,多线程拉取需要处理的任务
- 集群无状态可扩展提升处理能力
服务设计
-
总览
总览.png
-
假设业务方是通过grpc调用,那业务方调用PDF服务的流程图
业务方调用PDF服务.png
-
PDF服务异步处理
PDF服务异步处理.png
-
捡漏线程: 为保证可用性,在断网等异常情况下依然能发mq消息
捡漏线程.png
-
业务方监听MQ
业务方监听MQ.png
-
PDF任务详细处理流程
PDF任务详细处理流程.png
- 存储过程清理数据: 理任务表中已完成的任务
- 高度定制化: 后续考虑使用数据库映射能力代替代码中不同模板映射,以达到后续新增模板不需要改代码
jvm启动参数
- dev环境最多只给1G多一点的内存,dev环境启动参数默认设置的很简单,完全使用默认年轻代比较大,会造成年轻代来不及回收,内存就oom了,建议设置jvm参数:
-Xms800m -Xmx800m -Xmn120M -XX:MaxPermSize=256m -XX:InitialTenuringThreshold=15 -XX:CMSInitiatingOccupancyFraction=50 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGC
网友评论