פתרון בעיות

בדף הזה מתוארות שיטות לפתרון בעיות נפוצות שלפעמים נתקלים בהן במהלך השימוש ב-Cloud Storage.

בלוח הבקרה של סטטוס שירותי Google Cloud אפשר למצוא מידע על אירועים אזוריים או גלובליים שמשפיעים על שירותי Google Cloud, כמו Cloud Storage.

רישום בקשות גולמיות ביומן

בעבודה עם כלים כמו gcloud או ספריות הלקוח של Cloud Storage, הכלי מטפל ברוב המידע על הבקשות והתשובות. אבל לפעמים צריך לדעת פרטים שיכולים לעזור לפתור בעיות, או כשרוצים לפרסם שאלות בפורומים כמו Stack Overflow. אפשר להיעזר בהוראות הבאות כדי לקבל את הכותרות של הבקשות והתשובות בכלי שלכם:

המסוף

ההצגה של פרטי הבקשות והתשובות משתנה בהתאם לדפדפן שדרכו אתם נכנסים למסוף Google Cloud. בדפדפן Google Chrome:

  1. לוחצים על לחצן התפריט הראשי של Chrome ().

  2. בוחרים באפשרות More Tools.

  3. לוחצים על Developer Tools.

  4. בחלונית שמופיעה, לוחצים על הכרטיסייה Network.

שורת הפקודה

gcloud

משתמשים בדגלים גלובליים לניפוי באגים בבקשה. לדוגמה:

gcloud storage ls gs://my-bucket/my-object --log-http --verbosity=debug

gsutil

משתמשים בדגל -D הגלובלי בבקשה. לדוגמה:

gsutil -D ls gs://my-bucket/my-object

ספריות לקוח

C++‎

  • מגדירים את משתנה הסביבה CLOUD_STORAGE_ENABLE_TRACING=http כדי לקבל את כל תעבורת ה-HTTP.

  • מגדירים את משתנה הסביבה CLOUD_STORAGE_ENABLE_CLOG=yes כדי לקבל רישומי יומן של כל RPC.

C#‎

מוסיפים יומן דרך ApplicationContext.RegisterLogger ומגדירים אפשרויות רישום ביומן ב-handler של הודעת HttpClient. מידע נוסף אפשר למצוא בסעיף השאלות הנפוצות.

Go

מגדירים את משתנה הסביבה GODEBUG=http2debug=1. מידע נוסף אפשר למצוא ב-Go package net/http.

אם רוצים להכניס ליומן הרישום גם את גוף הבקשה, צריך להשתמש בצד לקוח HTTP מותאם אישית.

Java

  1. יוצרים קובץ בשם logging.properties עם התוכן הבא:

    # Properties file which configures the operation of the JDK logging facility.
    # The system will look for this config file to be specified as a system property:
    # -Djava.util.logging.config.file=${project_loc:googleplus-simple-cmdline-sample}/logging.properties
    
    # Set up the console handler (uncomment "level" to show more fine-grained messages)
    handlers = java.util.logging.ConsoleHandler
    java.util.logging.ConsoleHandler.level = CONFIG
    
    # Set up logging of HTTP requests and responses (uncomment "level" to show)
    com.google.api.client.http.level = CONFIG
  2. משתמשים ב-log.properties עם Maven

    mvn -Djava.util.logging.config.file=path/to/logging.properties insert_command

מידע נוסף אפשר למצוא במאמר שעוסק ב-Pluggable HTTP Transport.

Node.js

צריך להגדיר את משתנה הסביבה NODE_DEBUG=https לפני קריאה לסקריפט של הצומת.

PHP

מציינים handler ‏HTTP משלכם ללקוח באמצעות httpHandler, ומגדירים תווכה לרישום הבקשה והתשובה ביומן.

Python

משתמשים במודול הרישום ביומן. לדוגמה:

import logging
import http.client

logging.basicConfig(level=logging.DEBUG)
http.client.HTTPConnection.debuglevel=5

Ruby

בחלק העליון של .rb file אחרי require "google/cloud/storage", מוסיפים:

ruby
Google::Apis.logger.level = Logger::DEBUG

הוספת כותרות מותאמות אישית

הוספת כותרות מותאמות אישית לבקשות היא כלי מקובל לניפוי באגים, למשל לצורך הפעלת כותרות של ניפוי באגים או לצורך מעקב אחר בקשות. בדוגמה הבאה אפשר לראות איך מגדירים כותרות של בקשות לכלים שונים של Cloud Storage:

שורת הפקודה

gcloud

משתמשים בדגל --additional-headers, שזמין לרוב הפקודות. לדוגמה:

gcloud storage objects describe gs://my-bucket/my-object --additional-headers=HEADER_NAME=HEADER_VALUE

כש-HEADER_NAME ו-HEADER_VALUE מגדירים את הכותרת שמוסיפים לבקשה.

gsutil

משתמשים בדגל -h הגלובלי בבקשה. לדוגמה:

gsutil -h "HEADER_NAME:HEADER_VALUE" stat gs://my-bucket/my-object

כש-HEADER_NAME ו-HEADER_VALUE מגדירים את הכותרת שמוסיפים לבקשה.

ספריות לקוח

C++‎

namespace gcs = google::cloud::storage;
gcs::Client client = ...;
client.AnyFunction(... args ..., gcs::CustomHeader("header-name", "value"));

C#‎

בדוגמה הבאה רואים הוספה של כותרת מותאמת אישית לכל בקשה של ספריית הלקוח.

using Google.Cloud.Storage.V1;

var client = StorageClient.Create();
client.Service.HttpClient.DefaultRequestHeaders.Add("custom-header", "custom-value");

var buckets = client.ListBuckets("my-project-id");
foreach (var bucket in buckets)

{
  Console.WriteLine(bucket.Name);
}

Go

כדי להוסיף כותרות מותאמות אישית לבקשות של ספריית הלקוח של Go, צריך לתחום את התעבורה המשמשת את הלקוח באמצעות RoundTripper בהתאמה אישית. הדוגמה הבאה מראה שליחת כותרות של ניפוי באגים ורישום הכותרות של התשובות התואמות ביומן:

package main

import (
  "context"
  "io/ioutil"
  "log"
  "net/http"

  "cloud.google.com/go/storage"
  "google.golang.org/api/option"
  raw "google.golang.org/api/storage/v1"
  htransport "google.golang.org/api/transport/http"
)

func main() {

  ctx := context.Background()

  // Standard way to initialize client:
  // client, err := storage.NewClient(ctx)
  // if err != nil {
  //      // handle error
  // }

  // Instead, create a custom http.Client.
  base := http.DefaultTransport
  trans, err := htransport.NewTransport(ctx, base, option.WithScopes(raw.DevstorageFullControlScope),
            option.WithUserAgent("custom-user-agent"))
  if err != nil {
            // Handle error.
  }
  c := http.Client{Transport:trans}

  // Add RoundTripper to the created HTTP client.
  c.Transport = withDebugHeader{c.Transport}

  // Supply this client to storage.NewClient
  client, err := storage.NewClient(ctx, option.WithHTTPClient(&c))
  if err != nil {
              // Handle error.
  }

  // Use client to make a request
 }

type withDebugHeader struct {
  rt http.RoundTripper
}

func (wdh withDebugHeader) RoundTrip(r *http.Request) (*http.Response, error) {
  headerName := "X-Custom-Header"
  r.Header.Add(headerName, "value")
  resp, err := wdh.rt.RoundTrip(r)
  if err == nil {
    log.Printf("Resp Header: %+v, ", resp.Header.Get(headerName))
  } else {
    log.Printf("Error: %+v", err)
  }
  return resp, err
}

Java

import com.google.api.gax.rpc.FixedHeaderProvider;
import com.google.api.gax.rpc.HeaderProvider;
import com.google.cloud.WriteChannel;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

import java.io.IOException;
import java.nio.ByteBuffer;
import static java.nio.charset.StandardCharsets.UTF_8;

public class Example {

  public void main(String args[]) throws IOException {
    HeaderProvider headerProvider =
            FixedHeaderProvider.create("custom-header", "custom-value");
    Storage storage = StorageOptions.getDefaultInstance()
            .toBuilder()
            .setHeaderProvider(headerProvider)
            .build().getService();
    String bucketName = "example-bucket";
    String blobName = "test-custom-header";

    // Use client with custom header
    BlobInfo blob = BlobInfo.newBuilder(bucketName, blobName).build();
    byte[] stringBytes;
    try (WriteChannel writer = storage.writer(blob)) {
      stringBytes = "hello world".getBytes(UTF_8);
      writer.write(ByteBuffer.wrap(stringBytes));
    }
  }
}

Node.js

const storage = new Storage();

storage.interceptors.push({
  request: requestConfig => {
    Object.assign(requestConfig.headers, {
      'X-Custom-Header': 'value',
      });
    return requestConfig;
  },
});

PHP

כל הפעלות ה-method שמפעילות בקשות http מקבלות גם ארגומנט $restOptions בתור הארגומנט האחרון. אפשר לתת כותרות מותאמות אישית לכל בקשה בנפרד או לכל לקוח בנפרד.

use Google\Cloud\Storage\StorageClient;

$client = new StorageClient([
   'restOptions' => [
       'headers' => [
           'x-foo' => 'bat'
       ]
   ]
]);

$bucket = $client->bucket('my-bucket');

$bucket->info([
   'restOptions' => [
       'headers' => [
           'x-foo' => 'bar'
       ]
   ]
]);

Python

בשלב הזה, אין תמיכה בהוספת כותרות מותאמות אישית לבקשות של ספריית הלקוח של Python.

Ruby

require "google/cloud/storage"

storage = Google::Cloud::Storage.new

storage.add_custom_headers { 'X-Custom-Header'=> 'value' }

קודי שגיאה

הרשימה הבאה כוללת קודי מצב נפוצים של HTTP שאולי תתקלו בהם.

‏‎301: Moved Permanently

הבעיה: אתם מגדירים אתר סטטי, וניסיונות גישה לנתיב ספרייה מחזירים אובייקט ריק וקוד תגובת HTTP 301.

הפתרון: אם הדפדפן מוריד אובייקט של אפס בייט, ומקבלים קוד תגובת HTTP 301 בניסיון גישה לספרייה, כמו http://www.example.com/dir/, כנראה שבקטגוריה יש אובייקט ריק בשם הזה. כדי לבדוק אם זאת הבעיה ולפתור אותה:

  1. במסוף Google Cloud, נכנסים לדף Buckets ב-Cloud Storage.

    כניסה לדף Buckets

  2. לוחצים על הלחצן Activate Cloud Shell בחלק העליון של מסוף Google Cloud. הפעלת Cloud Shell
  3. מריצים את gcloud storage ls --recursive gs://www.example.com/dir/. אם בפלט יש http://www.example.com/dir/, במיקום הזה יש אובייקט ריק.
  4. מסירים את האובייקט הריק באמצעות הפקודה: gcloud storage rm gs://www.example.com/dir/

עכשיו יש לכם גישה אל http://www.example.com/dir/ כדי שיחזיר את הקובץ index.html של הספרייה הזו במקום את האובייקט הריק.

‏‎400: Bad Request

הבעיה: כשביצעתם העלאה שניתן להמשיך, קיבלתם את השגיאה הזו ואת ההודעה Failed to parse Content-Range header.

הפתרון: הערך שבו השתמשתם בכותרת Content-Range לא תקין. לדוגמה, הערך Content-Range: */* לא תקין ובעצם הוא צריך להיות Content-Range: bytes */*. אם השגיאה הזו מופיעה, ההעלאה הנוכחית שניתן להמשיך כבר לא פעילה וצריך להתחיל העלאה חדשה שניתן להמשיך.

‏‎401: Unauthorized

הבעיה: בקשות ישירות לקטגוריה ציבורית או דרך Cloud CDN נכשלות, ומתקבלות התשובות HTTP 401: Unauthorized ו-Authentication Required.

הפתרון: מוודאים שהלקוח, או כל שרת proxy מתווך, לא מוסיפים את הכותרת Authorization לבקשות ל-Cloud Storage. כל בקשה עם הכותרת Authorization, גם אם היא ריקה, מאומתת כאילו הייתה ניסיון לאימות.

‏‎403: Account Disabled

הבעיה: ניסיתם ליצור קטגוריה, אבל קיבלתם את הודעת השגיאה 403 Account Disabled.

הפתרון: השגיאה הזו מציינת שעדיין לא הפעלתם את החיוב בפרויקט המשויך. במאמר הפעלת החיוב בפרויקט אנחנו מסבירים איך מפעילים את החיוב.

אם החיוב פועל והודעת השגיאה הזו ממשיכה להופיע, אפשר לפנות לתמיכה, לציין את מזהה הפרויקט ולתאר את הבעיה.

‏‎403: Forbidden

הבעיה: אמורה להיות לכם הרשאת גישה לקטגוריה או לאובייקט מסוים, אבל כשאתם מנסים להשתמש בה, מופיעה הודעת השגיאה 403 - Forbidden עם הודעה שדומה לזו: example@email.com does not have storage.objects.get access to the Google Cloud Storage object.

הפתרון: חסרה הרשאת IAM לקטגוריה או לאובייקט, שנדרשת להשלמת הבקשה. אם אמורה להיות לכם אפשרות לבצע את הבקשה אבל אתם לא מצליחים, צריך לבצע את הבדיקות הבאות:

  1. האם בהודעת השגיאה מופיעים הפרטים הנכונים של מקבל ההרשאה? אם בהודעת השגיאה מצוינת כתובת אימייל לא צפויה או מצוין Anonymous caller, פרטי הכניסה בבקשה לא נכונים. זה יכול לקרות כשבהגדרת הכלי שבאמצעותו יצרתם את הבקשה יש פרטי כניסה של ישות או כתובת אימייל אחרת, או שהבקשה נוצרה מטעמכם על ידי חשבון שירות.

  2. האם ההרשאה שמצוינת בהודעת השגיאה היא ההרשאה שאתם צריכים? אם לא ציפיתם להרשאה הזו, כנראה שלכלי שבו אתם משתמשים נדרשת הרשאת גישה נוספת כדי להשלים את הטיפול בבקשה. לדוגמה, כדי למחוק בבת אחת כמות גדולה של אובייקטים בקטגוריה, gcloud צריך קודם ליצור רשימה של אובייקטים למחיקה בקטגוריה. לחלק הזה של פעולת המחיקה בכמות גדולה נדרשת הרשאת storage.objects.list, וזה מפתיע כי למחיקת אובייקט בדרך כלל נדרשת רק הרשאת storage.objects.delete. אם זו הסיבה להודעת השגיאה, בדקו אם קיבלתם את תפקידי ה-IAM עם ההרשאות הנדרשות הנוספות.

  3. האם קיבלתם את תפקיד ה-IAM במשאב המיועד או במשאב המקור? לדוגמה, אם קיבלתם תפקיד Storage Object Viewer בפרויקט ואתם מנסים להוריד אובייקט, ודאו שהאובייקט נמצא בקטגוריה שנמצאת בפרויקט. יכול להיות שבטעות יש לכם הרשאת Storage Object Viewer בפרויקט אחר.

‏‎403: Forbidden

הבעיה: אתם מורידים את התוכן שלכם מ-storage.cloud.google.com, ומקבלים את הודעת השגיאה 403: Forbidden כשאתם מנסים להגיע לאובייקט דרך הדפדפן באמצעות כתובת ה-URL:

https://storage.cloud.google.com/BUCKET_NAME/OBJECT_NAME

הפתרון: הורדות של אובייקטים באמצעות storage.cloud.google.com נקראות הורדות דפדפן מאומתות, והאימות בהורדות מהסוג הזה מבוסס על קובצי Cookie. אם הגדרתם את יומני בקרת הרשאות הגישה לנתונים ביומני הביקורת של Cloud למעקב אחר הגישה לאובייקטים, אחת מהמגבלות של התכונה היא שלא ניתן להשתמש בהורדות המאומתות של הדפדפן כדי להוריד אובייקט במעקב, אלא אם האובייקט ניתן לקריאה באופן ציבורי. כשמנסים להוריד אובייקטים לא ציבוריים בהורדה מאומתת של דפדפן, מתקבלת התשובה 403. ההגבלה הזו נועדה למנוע פישינג של מזהי Google שמשמשים לאימות באמצעות קובצי Cookie.

כדי למנוע מראש את הבעיה נסו אחד מהפתרונות הבאים:

  • השתמשו בקריאות API ישירות, שתומכות בהורדות לא מאומתות, במקום בהורדות דפדפן מאומתות.
  • השביתו את יומני בקרת הרשאות הגישה לנתונים של Cloud Storage שעוקבים אחרי הגישה לאובייקטים המושפעים. שימו לב שיומני בקרת הרשאות הגישה לנתונים מוגדרים ברמת הפרויקט או ברמה גבוהה יותר, ואפשר להפעיל אותם בו-זמנית במספר רמות.
  • מגדירים חריגים כדי לא לכלול משתמשים ספציפיים במעקב ביומן בקרת הרשאות הגישה לנתונים, וכך לאפשר למשתמשים האלה לבצע הורדות מאומתות של דפדפנים.
  • כדי שכולם יוכלו לקרוא את האובייקטים המושפעים, צריך לתת להם הרשאות קריאה allUsers או allAuthenticatedUsers. יומני בקרת הרשאות הגישה לנתונים לא מתעדים את הגישה לאובייקטים ציבוריים.

‏‎409: Conflict

הבעיה: ניסיתם ליצור קטגוריה, אבל קיבלתם את השגיאה:

409 Conflict. Sorry, that name is not available. Please try a different one.

הפתרון: שם הקטגוריה שבו ניסיתם להשתמש (למשל, gs://cats או gs://dogs) כבר תפוס. ל-Cloud Storage יש מרחב שמות גלובלי, כך שאי אפשר לתת לקטגוריה שם של קטגוריה שכבר קיימת. בחרו שם שלא נמצא בשימוש.

‏‎429: Too Many Requests

הבעיה: הבקשות שלכם נדחות עם שגיאת 429 Too Many Requests.

הפתרון: אתם מגיעים למגבלה של מספר הבקשות שאפשר לבצע ב-Cloud Storage במשאב נתון. מידע נוסף על המגבלות ב-Cloud Storage אפשר למצוא במאמר בנושא המכסות של Cloud Storage. במאמר בנושא הנחיות לקצב בקשות ולחלוקת גישה תוכלו למצוא דיון על שיטות מומלצות, כולל הגדלה הדרגתית של עומס העבודה והימנעות משמות קבצים רציפים אם עומס העבודה כולל אלפי בקשות לשנייה לקטגוריה.

‏‎429: Too Many Requests

הבעיה: הבקשות שלכם נדחות עם השגיאה הבאה:

429 Too Many Requests. This workload is drawing too much egress bandwidth
from Cloud Storage and has exceeded the InternetEgressBandwidth Quota.
Please reduce the rate of request or contact Google Cloud Support if you want to
increase your bandwidth quota.

הבעיה: הבקשות שלכם נדחות עם השגיאה הבאה:

429 Too Many Requests. This workload is drawing too much egress bandwidth
from Cloud Storage and has exceeded the
MultiregionInternetEgressBandwidth Quota. Please reduce the rate of request or
contact Google Cloud Support if you want to increase your bandwidth quota.

הפתרון: יכול להיות שתעבורת הנתונים היוצאת (egress) לאינטרנט מוגבלת בגלל ההיסטוריה של הפרויקט. כדי לבקש הגדלה של מכסת רוחב הפס, פונים לתמיכה של Google Cloud.

אבחון שגיאות במסוף Google Cloud

הבעיה: כשמשתמשים במסוף Google Cloud כדי לבצע פעולה, מופיעה הודעת שגיאה גנרית. לדוגמה, הודעת שגיאה מופיעה כשמנסים למחוק קטגוריה, אבל אין פרטים על הסיבה לכך שהפעולה נכשלה.

הפתרון: בהתראות במסוף Google Cloud אפשר לראות מידע מפורט על הפעולה שנכשלה:

  1. לוחצים על הלחצן Notifications בכותרת של מסוף Google Cloud.

    Notifications

    הפעולות האחרונות שבוצעו במסוף Google Cloud יוצגו בתפריט נפתח.

  2. לוחצים על הפריט שרוצים לקבל עליו מידע נוסף.

    ייפתח דף שמציג מידע מפורט על הפעולה.

  3. אפשר ללחוץ על כל שורה כדי להרחיב ולראות מידע מפורט על השגיאה.

    בדוגמה הבאה אפשר לראות את פרטי השגיאה של פעולת מחיקת הקטגוריה שנכשלה, והסבר על כך שמדיניות שמירת הקטגוריה מנעה את מחיקת הקטגוריה.

    פרטי שגיאה של מחיקת קטגוריה

תיקיות

הבעיה: מחקתם כמה אובייקטים בקטגוריה, ועכשיו התיקייה שמכילה אותם לא מופיעה במסוף Google Cloud.

הפתרון: במסוף Google Cloud התוכן של הקטגוריה מוצג באופן שנראה כאילו יש מבנה של ספרייה, אבל התיקיות בעצם לא קיימות ב-Cloud Storage. כתוצאה מכך, כשמסירים מקטגוריה את כל האובייקטים עם הקידומת המשותפת, סמל התיקייה שמייצג את קבוצת האובייקטים הזו לא יופיע יותר במסוף Google Cloud.

שגיאות באתר הסטטי

כאן אנחנו מציגים בעיות נפוצות שאפשר להיתקל בהן כשמגדירים קטגוריה לאירוח אתר סטטי.

מילוי בקשות HTTPS

הבעיה: אתם רוצים למלא בקשות תוכן ב-HTTPS בלי להשתמש במאזן עומסים.

הפתרון: אפשר למלא בקשות של תוכן סטטי דרך HTTPS באמצעות מזהי URI ישירים, כמו https://storage.googleapis.com/my-bucket/my-object. יש עוד אפשרויות למילוי בקשות תוכן באמצעות דומיין מותאם אישית ב-SSL:

אימות הדומיין

הבעיה: לא ניתן לאמת את הדומיין.

הפתרון: בדרך כלל, תהליך האימות ב-Search Console מפנה אתכם להעלאת קובץ לדומיין, אבל לפעמים כדי לעשות זאת צריך קטגוריה משויכת, שאפשר ליצור רק אחרי אימות הדומיין.

במקרה כזה, מאמתים את הבעלות באמצעות שיטת האימות של ספק שם הדומיין. במאמר אימות בעלות אפשר למצוא הסבר איך לעשות זאת. אפשר לבצע את האימות הזה לפני יצירת הקטגוריה.

דף לא נגיש

הבעיה: מוצגת הודעת השגיאה Access denied לגבי מילוי בקשה לדף אינטרנט על ידי האתר שלכם.

הפתרון: בודקים שהאובייקט משותף באופן ציבורי. אם הוא לא משותף, דרך הקישור אפשר לקבל הסבר איך להפוך נתונים לציבוריים.

אם בעבר העליתם ושיתפתם אובייקט, אבל אחר כך העליתם גרסה חדשה שלו, צריך לשתף אותו מחדש באופן ציבורי. הסיבה לכך היא שההרשאה הציבורית מוחלפת בהעלאה החדשה.

עדכון ההרשאות נכשל

הבעיה: כשמנסים לתת גישה ציבורית לנתונים מוצגת הודעת שגיאה.

הפתרון: מוודאים שיש לכם הרשאת setIamPolicy לאובייקט או לקטגוריה. את ההרשאה הזו מקבלים גם בתפקיד Storage Admin. אם יש לכם הרשאת setIamPolicy ובכל זאת מופיעה הודעת שגיאה, יכול להיות שהגדרת מניעה של גישה ציבוריתחלה על הקטגוריה, ולכן לא מתאפשרת גישה ל-allUsers או ל-allAuthenticatedUsers מניעת גישה ציבורית מוגדרת ישירות בקטגוריה או במדיניות הארגון שמוגדרת ברמה גבוהה יותר.

הורדת תוכן

הבעיה: מוצגת בקשה להוריד את תוכן הדף, במקום להציג אותו בדפדפן.

הפתרון: אם קבעתם שסוג התוכן באובייקט MainPageSuffix לא יהיה תוכן מהאינטרנט, המבקרים באתר יתבקשו להוריד את התוכן במקום להציג את הדף. כדי לפתור את הבעיה, צריך לעדכן את הערך סוג התוכן במטא-נתונים לערך מתאים, למשל text/html. הסבר איך לעשות זאת אפשר למצוא במאמר בנושא עריכת המטא-נתונים של אובייקט.

זמן אחזור

ריכזנו כאן כמה בעיות נפוצות שקשורות לזמן האחזור. בנוסף, בלוח הבקרה של סטטוס שירותי Google Cloud אפשר למצוא מידע על אירועים אזוריים או גלובליים שמשפיעים על שירותי Google Cloud, כמו Cloud Storage.

זמן אחזור של העלאה או הורדה

הבעיה: זמן אחזור ארוך יותר בזמן ההעלאה או ההורדה.

הפתרון: מריצים את הפקודה gsutil perfdiag כדי לאבחן את הביצועים בסביבה המושפעת. הגורמים הנפוצים הבאים משפיעים על זמן האחזור של העלאה והורדה:

  • מגבלות על המעבד (CPU) או על הזיכרון: במערכת ההפעלה של הסביבה המושפעת יש בדרך כלל כלים למדידת צריכת המשאבים המקומית, כמו שימוש במעבד (CPU) ושימוש בזיכרון.

  • אילוצים של קלט/פלט (IO) בדיסק: כחלק מהפקודה gsutil perfdiag, משתמשים בבדיקות rthru_file ו-wthru_file כדי לנטר את ההשפעה של הקלט/פלט המקומיים של הדיסק על הביצועים.

  • מרחק גיאוגרפי: הפרדה פיזית בין קטגוריה של Cloud Storage לסביבה המושפעת יכולה לפגוע בביצועים, במיוחד כשהן נמצאות ביבשות שונות. בדיקה באמצעות קטגוריה שנמצאת באותו אזור שבו נמצאת הסביבה המושפעת מאפשרת להעריך את מידת ההשפעה של ההפרדה הגיאוגרפית על זמן האחזור.

    • במקרים המתאימים, מקודד ה-DNS של הסביבה המושפעת צריך להשתמש בפרוטוקול EDNS(0) כדי שבקשות מהסביבה ינותבו דרך ממשק קצה מתאים של Google ‏(GFE).

זמן אחזור של CLI או של ספריית לקוח

הבעיה: בגישה ל-Cloud Storage באמצעות gcloud storage, gsutil או אחת מספריות הלקוח, זמן האחזור ארוך יותר.

הפתרון: במקרים של בקשות שכדאי לנסות לבצע שוב, ה-CLI וספריות הלקוח מנסים שוב באופן אוטומטי. הניסיונות האלה עלולים בסופו של דבר להאריך את זמן האחזור אצל משתמש הקצה. משתמשים במדד Cloud Monitoring storage.googleapis.com/api/request_count כדי לבדוק אם ב-Cloud Storage מוצג באופן עקבי קוד תגובה של ניסיון חוזר כמו 429 או 5xx.

שרתי Proxy

הבעיה: אתם מתחברים דרך שרת proxy. מה עושים?

הפתרון: כדי לגשת ל-Cloud Storage דרך שרת proxy, צריך לאפשר גישה לדומיינים הבאים:

  • accounts.google.com ליצירת אסימוני אימות OAuth2
  • oauth2.googleapis.com לביצוע החלפות אסימוני OAuth2
  • *.googleapis.com לבקשות אחסון

אם שרת ה-proxy או מדיניות האבטחה לא תומכים בהוספת רשימות היתרים לפי דומיין, ובמקום זאת נדרשת הוספה לרשימת ההיתרים לפי חסימת רשת IP, מומלץ מאוד להגדיר את שרת ה-proxy לכל טווחי כתובות ה-IP של Google. תוכלו למצוא את טווחי הכתובות בעזרת שאילתות על נתוני WHOIS ב-ARIN. מומלץ לבדוק מדי פעם את ההגדרות של שרת ה-proxy כדי לוודא שהן תואמות לכתובות ה-IP של Google.

לא מומלץ להגדיר לשרת ה-proxy את כתובות ה-IP הספציפיות שמתקבלות מחיפושים חד-פעמיים של oauth2.googleapis.com ו-storage.googleapis.com. הגישה לשירותי Google היא באמצעות שמות DNS, הממופים למספר גדול של כתובות IP שיכולות להשתנות עם הזמן. לכן הגדרת שרת ה-proxy על סמך חיפוש חד-פעמי עלולה לגרום לכשלים בהתחברות ל-Cloud Storage.

אם הבקשות שלכם מנותבות דרך שרת proxy, יכול להיות שתצטרכו לפנות למנהל הרשת כדי לוודא ששרת ה-proxy לא מסיר את הכותרת Authorization שמכילה את פרטי הכניסה שלכם. בלי הכותרת Authorization, הבקשות נדחות ומקבלים את הודעת השגיאה MissingSecurityHeader.

המאמרים הבאים