思維導(dǎo)圖

思維導(dǎo)圖.png
系列總目錄
背景
- 隨著公司的快速發(fā)展,業(yè)務(wù)需要沉淀出根據(jù)模板生成PDF的通用能力
- 根據(jù)Word/PDF模板,填充對(duì)應(yīng)信息,生成PDF
技術(shù)選型
- PDF相關(guān)的各個(gè)框架
- text: 基于AGPL協(xié)議,商業(yè)版需要開源項(xiàng)目代碼或者收費(fèi)
- spire.doc: 商業(yè)版收費(fèi),免費(fèi)版有水印
- PDFbox: 提供pdf操作,創(chuàng)建PDF,合并PDF功能,但是對(duì)中文支持不是很好
- OpenPDF: demo較少,功能較少
- poi: Apache下的完全開源,GitHub start 1.1k,社區(qū)活躍性高,提供根據(jù)Word模板填充Word數(shù)據(jù), word的轉(zhuǎn)pdf對(duì)表格圖像處理不好
- docx4j: GitHub start 1.6k提供Word轉(zhuǎn)PDF, 完全開源
- PDF服務(wù)采用poi替換Word模板生成Word, 再使用docx4j 將Word生成PDF
高可用高性能保證
高可用
- 部署, 單點(diǎn)故障
- PDF采用異步處理,mq通知的形式,如果處理過(guò)程中斷網(wǎng)導(dǎo)致沒有發(fā)mq消息,### 高性能
- 異步處理
- 采用內(nèi)部BlockingQueue形式,多線程拉取需要處理的任務(wù)
- 集群無(wú)狀態(tài)可擴(kuò)展提升處理能力
服務(wù)設(shè)計(jì)
-
總覽
總覽.png
-
假設(shè)業(yè)務(wù)方是通過(guò)grpc調(diào)用,那業(yè)務(wù)方調(diào)用PDF服務(wù)的流程圖
業(yè)務(wù)方調(diào)用PDF服務(wù).png -
PDF服務(wù)異步處理
PDF服務(wù)異步處理.png -
撿漏線程: 為保證可用性,在斷網(wǎng)等異常情況下依然能發(fā)mq消息
撿漏線程.png
-
業(yè)務(wù)方監(jiān)聽MQ
業(yè)務(wù)方監(jiān)聽MQ.png
-
PDF任務(wù)詳細(xì)處理流程
PDF任務(wù)詳細(xì)處理流程.png
- 存儲(chǔ)過(guò)程清理數(shù)據(jù): 理任務(wù)表中已完成的任務(wù)
- 高度定制化: 后續(xù)考慮使用數(shù)據(jù)庫(kù)映射能力代替代碼中不同模板映射,以達(dá)到后續(xù)新增模板不需要改代碼
jvm啟動(dòng)參數(shù)
- dev環(huán)境最多只給1G多一點(diǎn)的內(nèi)存,dev環(huán)境啟動(dòng)參數(shù)默認(rèn)設(shè)置的很簡(jiǎn)單,完全使用默認(rèn)年輕代比較大,會(huì)造成年輕代來(lái)不及回收,內(nèi)存就oom了,建議設(shè)置jvm參數(shù):
-Xms800m -Xmx800m -Xmn120M -XX:MaxPermSize=256m -XX:InitialTenuringThreshold=15 -XX:CMSInitiatingOccupancyFraction=50 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGC





