aliyun/aliyun-oss-java-sdk

ServiceSignature接口的sign实现在高并发场景下存在性能问题

Taaang opened this issue · 0 comments

Version:3.15.0

ServiceSignature的实现HmacSHA1Signature及HmacSHA256Signature内部,
通过LOCK控制macInstance的初始化,避免单例对象重复创建。

但是macInstance对象创建的过程是在父类ServiceSignature中的sign方法中进行的,
该方法仅对入参的macInstance进行初始化,而该处参数是值传递,并不会对实际子类中的macInstance进行赋值。

最终导致的结果,
每一次调用sign方法时,传入的macInstance其实都是null,都会调用Mac.getInstance(algorithm)进行初始化。

该问题在普通场景下并不会带来问题,
但是在高并发场景下,由于多线程并发调用sign方法,在进行macInstance初始化判断及实例化时,导致LOCK锁争夺带来性能问题。

image

image

以上,建议进行修改