sna*_*bel 5 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;
Run Code Online (Sandbox Code Playgroud)
否则,我应该在每次获取/删除请求后关闭连接吗?什么是最佳做法?
我正在开发一个将部署在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();
Run Code Online (Sandbox Code Playgroud)
这是最好的做法吗?这种实现会导致内存/资源问题吗?
小智 1
我认为您错过了谷歌的最佳实践文档。请参阅https://cloud.google.com/storage/docs/best-practices将数据上传到云存储,这将消除您的所有疑虑。
- 如果您使用 XMLHttpRequest (XHR) 回调来获取进度更新,并且检测到进度已停止,请不要关闭并重新打开连接。这样做会在网络拥塞期间产生不良的正反馈循环。当网络拥塞时,XHR 回调可能会积压在上传流的确认 (ACK/NACK) 活动之后,并且在发生这种情况时关闭并重新打开连接会在您最无力承担的时候使用更多的网络容量。
- 对于上传流量,我们建议设置相当长的超时。为了获得良好的最终用户体验,您可以设置一个客户端计时器,当您的应用程序长时间未收到 XHR 回调时,该计时器会使用消息(例如“网络拥塞”)更新客户端状态窗口。发生这种情况时,不要只是关闭连接并重试。
- 如果您将 Google Compute Engine 实例与 POST 到 Cloud Storage 的进程一起使用以启动可恢复上传,则您应该在与 Cloud Storage 存储桶相同的位置使用 Compute Engine 实例。然后,您可以使用地理 IP 服务来选择将客户请求路由到的 Compute Engine 区域,这将有助于保持流量本地化到某个地理区域。
- 如果可能,请避免将传输分成较小的块,而是将整个内容上传到单个块中。避免分块可以消除固定延迟成本并提高吞吐量,并降低 Google Cloud Storage 的 QPS。
- 您应该考虑分块上传的情况包括动态生成源数据、您的客户端有请求大小限制(对于许多浏览器来说都是如此),或者您的客户端在不首先加载完整数据的情况下无法在单个请求中传输字节。请求存入内存。如果您的客户端收到错误,他们可以向服务器查询提交偏移量并从该偏移量继续上传剩余字节。
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |