Menghubungkan ke Cloud Storage menggunakan gRPC

gRPC adalah framework RPC universal open source berperforma tinggi yang dikembangkan oleh Google dan dapat Anda gunakan untuk menentukan layanan menggunakan Protocol Buffers. Anda dapat menggunakan gRPC untuk berinteraksi dengan Cloud Storage. gRPC menggunakan konektivitas langsung antara bucket Compute Engine dan Cloud Storage, yang mengabaikan Google Front End (GFEs).

Meskipun penggunaan gRPC secara langsung untuk terhubung ke Cloud Storage tidak didukung, Anda dapat terhubung ke Cloud Storage menggunakan gRPC melalui klien yang didukung berikut:

Mengaktifkan gRPC di library klien

C++

Sebelum memulai

  1. Pastikan Anda telah menginstal versi berikut:

    • gRPC versi 1.65.1 atau yang lebih baru.
    • Library klien C++ versi v2.30.0 atau yang lebih baru.
    • C++ versi 14 atau yang lebih baru.

    Untuk petunjuk penginstalan, lihat Menyiapkan lingkungan pengembangan C++.

  2. Siapkan autentikasi.

Mengonfigurasi library klien C++

  1. Buat klien gRPC menggunakan gcs::MakeGrpcClient():

      namespace gcs = google::cloud::storage;
      void App() {
       auto client = gcs::MakeGrpcClient();
    
      // application code
    
      }
    

    Library klien C++ secara otomatis menggunakan konektivitas langsung saat mendeteksi bahwa aplikasi berjalan di Google Cloud.

  2. Untuk mengonfigurasi library klien C++ agar menggunakan gRPC, aktifkan klien gRPC Cloud Storage untuk memperbarui konfigurasi sistem build Anda untuk CMake dan Bazel.

    CMake

    1. Mengaktifkan plugin klien gRPC Cloud Storage pada waktu kompilasi

      cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
      
    2. Dalam codebase Anda, untuk perintah target_link_libraries(), ganti google-cloud-cpp::storage dengan google-cloud-cpp::storage_grpc

      Misalnya, program memulai cepat untuk gRPC menggunakan kode berikut:

      add_executable(quickstart_grpc quickstart_grpc.cc)
      target_link_libraries(quickstart_grpc google-cloud-cpp::storage_grpc)
      

    Bazel

    Ganti dependensi dari @google_cloud_cpp//:storage menjadi @google_cloud_cpp//:storage_grpc.

    Misalnya, program memulai cepat untuk gRPC menggunakan kode berikut:

      cc_binary(
          name = "quickstart",
          srcs = [
              "quickstart.cc",
          ],
          deps = [
              "@com_github_googleapis_google_cloud_cpp//:storage_grpc",
          ],
      )
    

Java

Sebelum memulai

  1. Pastikan Anda telah menginstal versi berikut:

    • Library klien Java:

      • com.google.cloud:google-cloud-storage:2.43.1 atau yang lebih baru.
      • com.google.cloud:libraries-bom:26.48 atau yang lebih baru.
    • Java 8 atau yang lebih baru

    Untuk petunjuk penginstalan, lihat Menyiapkan lingkungan pengembangan Java.

  2. Siapkan autentikasi.

Mengupdate project untuk menggunakan BOM

Untuk memastikan project Anda memiliki versi library klien Google Cloud yang kompatibel, gunakan versi yang ditentukan dalam Bill of Materials (BOM) library Google Cloud. Untuk memperbarui project Anda agar menggunakan BOM, gunakan salah satu metode berikut:

Cloud Storage Mandiri

Jika Anda menggunakan library klien Cloud Storage secara independen (tanpa library Google Cloud lainnya), gunakan BOM khusus library klien Cloud Storage.

Maven

Impor BOM di bagian dependencyManagement file pom.xml Anda.

Contoh berikut menunjukkan cara mengimpor BOM dan menyertakan artefak google-cloud-storage.

<dependencyManagement>
  <dependencies>
  <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-storage-bom</artifactId>
   <version>2.43.1</version>
   <type>pom</type>
   <scope>import</scope>
  </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-storage</artifactId>
  </dependency>
</dependencies>

Gradle

Tambahkan dependensi platform di com.google.cloud:google-cloud-storage-bom:

implementation platform('com.google.cloud:google-cloud-storage-bom:2.43.1')
implementation 'com.google.cloud:google-cloud-storage'

Cloud Storage dengan library Google Cloud lainnya

Jika Anda menggunakan library klien Cloud Storage bersama dengan library Google Cloud lainnya, gunakan BOM library klien Google Cloud.

Maven

Impor BOM di bagian dependencyManagement file pom.xml Anda.

Contoh berikut menunjukkan cara mengimpor BOM dan menyertakan artefak libraries-bom.

<dependencyManagement>
  <dependencies>
  <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>libraries-bom</artifactId>
   <version>26.48.0</version>
   <type>pom</type>
   <scope>import</scope>
  </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-storage</artifactId>
  </dependency>
</dependencies>

Gradle

Tambahkan dependensi platform di com.google.cloud:libraries-bom:

implementation platform('com.google.cloud:libraries-bom:26.48.0')
implementation 'com.google.cloud:google-cloud-storage'

Membuat klien gRPC

Contoh berikut menggunakan builder yang berfokus pada gRPC. Klien Java gRPC otomatis menggunakan konektivitas langsung saat mendeteksi bahwa aplikasi berjalan di Google Cloud.

// Imports the Google Cloud client library
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class QuickstartGrpcSample {
  public static void main(String... args) throws Exception {

    // Create an instance of options which will use the Google Cloud Storage gRPC API for all
    // operations
    StorageOptions options = StorageOptions.grpc().build();

    // Instantiates a client in a try-with-resource to automatically cleanup underlying resources
    try (Storage storage = options.getService()) {
      // The name for the new bucket
      String bucketName = args[0]; // "my-new-bucket";

      // Creates the new bucket using a request to the gRPC API
      Bucket bucket = storage.create(BucketInfo.of(bucketName));

      System.out.printf("Bucket %s created.%n", bucket.getName());
    }
  }
}

Go

Sebelum memulai

  1. Menyiapkan lingkungan pengembangan.

  2. Pastikan Anda menggunakan library klien Cloud Storage Go versi 1.46.0 atau yang lebih baru.

  3. Siapkan autentikasi.

Membuat klien gRPC

Untuk menggunakan klien, Anda perlu memanggil konstruktor NewGRPCClient di aplikasi, bukan NewClient.

import (
  "context"
  "fmt"
  "log"
  "time"
  "cloud.google.com/go/storage"
  )
  func main() {
      ctx := context.Background()
      // The project ID and bucket name
      projectID := "project-id"
      bucketName := "bucket-name"

      // Creates a gRPC enabled client.
      client, err := storage.NewGRPCClient(ctx)
      if err != nil {
          log.Fatalf("Failed to create client: %v", err)
      }
      defer client.Close()
      // Creates the new bucket.
      ctx, cancel := context.WithTimeout(ctx, time.Second*10)
      defer cancel()
      if err := client.Bucket(*bucketName).Create(ctx, *projectID, nil); err != nil {
          log.Fatalf("Failed to create bucket: %v", err)
      }
      fmt.Printf("Bucket %v created.\n", *bucketName)
  }

Library klien Go otomatis menggunakan konektivitas langsung saat mendeteksi bahwa aplikasi berjalan di Google Cloud.

Untuk informasi tentang cara menggunakan klien gRPC, lihat gRPC API.

Mengonfigurasi Kontrol Layanan VPC

Jika menggunakan Virtual Private Cloud dengan alamat IP virtual yang dibatasi ( Kontrol Layanan VPC) untuk meningkatkan keamanan jaringan, Anda perlu memperbarui aturan firewall untuk mengaktifkan konektivitas langsung guna mendapatkan performa optimal antara instance virtual machine Compute Engine dan Cloud Storage.

Untuk melakukannya, tambahkan aturan firewall daftar yang diizinkan untuk mengizinkan traffic di semua port untuk blok CIDR berikut:

  • Untuk traffic IPv4: 34.126.0.0/18
  • Untuk traffic IPv6: 2001:4860:8040::/42

Selain aturan sebelumnya, pertahankan aturan daftar yang diizinkan yang ada untuk 199.36.153.4/30.

Jika Anda memiliki batasan pada modifikasi aturan firewall dan tidak dapat memperbaruinya, Anda dapat memaksa traffic untuk menghindari konektivitas langsung menggunakan storage.googleapis.com sebagai endpoint Cloud Storage, bukan google-c2p://storage.googleapis.com.

Misalnya, untuk penggunaan C++, .set<google::cloud::EndpointOption>(storage.googleapis.com), bukan google-c2p:///storage.googleapis.com.

Anda dapat mengonfigurasi library klien Cloud Storage untuk menghasilkan metrik terkait gRPC di Cloud Monitoring. Metrik terkait gRPC dapat membantu Anda melakukan hal berikut:

  • Pantau dan optimalkan performa permintaan gRPC ke Cloud Storage.

  • Memecahkan masalah dan men-debug masalah.

  • Dapatkan insight tentang penggunaan dan perilaku aplikasi Anda.

Untuk informasi tentang cara membuat metrik terkait gRPC, lihat Menggunakan metrik sisi klien.

Jika pengumpulan metrik tidak diperlukan untuk kasus penggunaan Anda, Anda dapat memilih untuk tidak ikut mengumpulkan metrik. Untuk mengetahui petunjuknya, lihat Memilih tidak ikut metrik sisi klien.

Batasan

  • Permintaan IPv6 tidak dapat dikirim melalui jaringan lama.

  • Penggunaan gRPC untuk terhubung ke Cloud Storage diharapkan dapat meningkatkan performa baca untuk workload analisis yang berjalan di Google Cloud hanya jika VM komputasi dan bucket Cloud Storage berada di region yang sama. Sebaiknya jangan gunakan gRPC untuk bucket di multi-region dan dual-region.

  • Konektivitas langsung tidak didukung saat menggunakan versi GKE berikut di cluster khusus IPv4:

    • 1.28, 1.28.0-gke.100 atau yang lebih baru hingga 1.28.5-gke.1199000
    • 1.27, 1.27.4-gke.1900 atau yang lebih baru
    • 1.26, 1.26.10-gke.1238000 atau yang lebih baru
    • 1.25, 1.25.15-gke.1045000 atau yang lebih baru
  • gRPC tidak mendukung metode notifications, hmacKeys, dan serviceAccount.

  • Opsi konstruktor klien khusus HTTP, seperti WithHTTPClient, tidak didukung untuk library klien Go.

Langkah selanjutnya