我应该保持与Google云端存储的开放连接吗?

时间:2014-08-03 11:33:31

标签: java google-cloud-storage

要与Google云端存储进行通信,请遵循以下示例:https://developers.google.com/storage/docs/json_api/v1/json-api-java-samples

我应该保持与云的开放连接吗?这不会导致内存或资源问题吗?

/** Global instance of the HTTP transport. */
private static HttpTransport httpTransport;

private static Storage client;

否则,我应该在每次获取/删除请求后关闭连接吗?什么是最佳做法?

我正在处理将部署在Linux上的应用程序。 应用程序将收到HTTP POST请求,其中包含要上载到云的文件。 首次加载应用程序时,我将以下全局变量启动:

// Initialize the transport.
httpTransport = GoogleNetHttpTransport.newTrustedTransport();

// Initialize the data store factory.
dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);

// Authorization.
Credential credential = authorize();

// Set up global Storage instance.
client = new Storage.Builder(httpTransport, JSON_FACTORY, credential)
    .setApplicationName(APPLICATION_NAME).build();

这是最佳做法吗?这种实现是否会导致内存/资源问题?

1 个答案:

答案 0 :(得分:1)

我认为你错过了谷歌的最佳实践文档。请参阅https://cloud.google.com/storage/docs/best-practices上的将数据上传到云端存储,这将清除您的所有疑虑。

  
      
  • 如果您使用XMLHttpRequest(XHR)回调获取进度更新,则如果检测到进度已停止,则不要关闭并重新打开连接。这样做会在网络拥塞期间产生错误的正反馈回路。当网络拥塞时,XHR回调可以在上传流的确认(ACK / NACK)活动后面积压,并且当发生这种情况时关闭并重新打开连接会在您最不负担的时候使用更多的网络容量。 / LI>   
  • 对于上传流量,我们建议设置相当长的超时。为了获得良好的最终用户体验,您可以设置一个客户端计时器,当您的应用程序未收到XHR回调时,该计时器会使用消息(例如,"网络拥塞")更新客户端状态窗口需很长时间。 当发生这种情况时,请不要关闭连接并重试
  •   
  • 如果您将Google Compute Engine实例与POST到云端存储的流程启动可恢复上传,那么您应该在云存储存储桶的相同位置使用计算引擎实例。然后,您可以使用地理IP服务来选择路由客户请求的计算引擎区域,这有助于将流量本地化为地理区域。
  •   
  • 尽可能避免将传输分成较小的块,而是将整个内容上传到一个块中。避免分块可以消除固定的延迟成本并提高吞吐量,同时降低针对Google云端存储的QPS。
  •   
  • 您应该考虑以块的形式上传的情况包括动态生成源数据,客户端具有请求大小限制(对于许多浏览器都是如此),或者您的客户端在没有首先请求的情况下无法在单个请求中流式传输字节将完整请求加载到内存中。如果您的客户端收到错误,他们可以向服务器查询提交偏移量并继续从该偏移量上传剩余的字节。
  •