月末结算已经跑到一半,外部系统的接口调用额度却快耗尽了。还有几百笔订单等着同步,我们手里有一笔经过审批的备用额度,可以让处理继续推进。这种场景,很容易让人想到《仙剑奇侠传 1》里的天仙玉露。游戏资料通常将它记为恢复单人约 700 点真气的道具。真气恢复后,角色能够继续施展原本已经掌握的仙术,但天仙玉露不会替角色学会新招,也不会把真气上限永久提高。
放到 ABAP 世界,答案是有相似的设计,却没有一个叫作天仙玉露的标准语句、函数模块或者类。最贴切的对应物,是我们在业务系统里设计的一次性资源补充机制。它可以给某个业务对象补足调用额度、处理次数或预付余额,使原本因为资源不足而暂停的操作继续进行。这里的关键不是物品名称,而是四条规则,资源有当前值和上限,使用会消耗资源,补充只能增加当前值,补充不能越过上限。
需要把类比的边界划清。游戏中的真气是角色持有的数值;ABAP 应用服务器的内存、工作进程、数据库连接和 CPU 时间,则由平台管理。写一行 ABAP 代码,不能像服用道具那样给应用服务器凭空增加一个工作进程。我们的程序可以管理自己定义的业务额度,却不能把业务表中的额度数字当成真实的系统容量。若一个批处理任务由于内存不足而终止,把自定义字段从零改成 700,任务依旧可能在同一个位置失败。
在企业软件里,最容易理解的真气,是有明确计量单位的业务资源。我们的销售接口每天允许调用外部报价服务一定次数。每发起一次调用,剩余额度减少一次;获得一笔已批准的临时额度,剩余额度增加,但不能超过合同约定的上限。另一种情况是预付服务包,客户购买了一万次单据识别服务,识别一张单据消耗一次,购买追加包以后恢复可用次数。这两种资源确实能补,也能用完,和天仙玉露的行为接近。
线程池、数据库缓存与它只有表面相似。缓存命中能少做一次昂贵的计算