ServiceSignature接口的sign实现在高并发场景下存在性能问题
Taaang opened this issue · 0 comments
Taaang commented
Version:3.15.0
ServiceSignature的实现HmacSHA1Signature及HmacSHA256Signature内部,
通过LOCK控制macInstance的初始化,避免单例对象重复创建。
但是macInstance对象创建的过程是在父类ServiceSignature中的sign方法中进行的,
该方法仅对入参的macInstance进行初始化,而该处参数是值传递,并不会对实际子类中的macInstance进行赋值。
最终导致的结果,
每一次调用sign方法时,传入的macInstance其实都是null,都会调用Mac.getInstance(algorithm)进行初始化。
该问题在普通场景下并不会带来问题,
但是在高并发场景下,由于多线程并发调用sign方法,在进行macInstance初始化判断及实例化时,导致LOCK锁争夺带来性能问题。
以上,建议进行修改