代码之家  ›  专栏  ›  技术社区  ›  YK S

与KMS服务器的ssl握手需要花费一些请求的时间(50秒)

  •  0
  • YK S  · 技术社区  · 9 月前

    我们正在使用 AwsCrypto aws java sdk 用于加密和解密。我们遵循中提到的模式 this aws doc 用于在启用数据密钥缓存的情况下使用相同的。

    对于一些请求,我看到间歇性TLS握手 千米 服务器正在花费时间(根据日志,在重试建立连接之前,最长50秒),但还有其他类似的请求,TLS握手发生在 ms .

    根据日志,套接字连接超时设置为 2000 ms 但由于某种原因,连接超时没有发生,线程被困在等待握手响应的时间超过30秒,范围高达50秒。

    这是一个更大的问题,因为线程被无故阻塞,而且随着我们的服务规模的扩大,它可能会成为一个瓶颈,我们希望解决这些由于kms引起的延迟峰值。

    相关日志

    *.*.awssdk.http.apache.internal.conn.SdkTlsSocketFactory: Connecting socket to kms.us-east-1.amazonaws.com/52.119.199.83:443 with timeout 2000
    
    2023-12-09T14:26:04.993Z *.*.awssdk.http.apache.*.conn.SdkTlsSocketFactory: Starting handshake
    
    2023-12-09T14:26:35.029Z *.*.awssdk.request: Retryable error detected. Will retry in 43ms. Request attempt number 2
    
    

    可以看出,握手启动后,连接在重试前30秒内没有断开。但是连接到套接字的超时是 2sec 从第一个日志中可以看出

    是否存在导致此问题或其他问题的错误配置?

    我们的服务是基于云服务器的服务usingn aws sdk 1.x

    附言 对于那些投票结束的人,请就为什么这个问题应该结束发表评论。如果有可以接受的理由,我很乐意亲自去做。

    0 回复  |  直到 9 月前
        1
  •  0
  •   YK S    9 月前

    基于POC,我尝试了与KMS客户端相关的不同类型的超时,学到了以下内容:

    • 在Aws客户端中,连接超时是与服务器主机的初始连接相关的超时。可以理解为客户端向端点发送请求,并花费时间与服务器建立连接。可以启动握手过程。但是这个超时不包括握手。

    • 一旦建立了连接,现在套接字超时就进入了画面,握手时间也受其控制。

    在我们的例子中,我们没有设置任何相同的值,而是使用默认值50秒。一旦我们设置了套接字超时的自定义值,我们就可以摆脱高握手时间。

    虽然不知道为什么握手会花这么长时间,但根据我的研究,可能会有短暂的网络问题导致握手,最好有自定义的套接字超时,这样客户端就可以快速重试并失败。

    推荐文章