gRPC est un framework RPC universel Open Source hautes performances développé par Google. Vous pouvez l'utiliser pour définir vos services à l'aide de Protocol Buffers. Vous pouvez utiliser gRPC pour interagir avec Cloud Storage. gRPC utilise une connectivité directe entre Compute Engine et les buckets Cloud Storage, en contournant les frontends Google (GFEs).
Bien que l'utilisation directe de gRPC pour se connecter à Cloud Storage ne soit pas prise en charge, vous pouvez vous connecter à Cloud Storage à l'aide de gRPC via les clients compatibles suivants:
- Connecteur Cloud Storage sur Dataproc
- Connecteur d'E/S Apache Beam sur Dataflow pour les requêtes de lecture et d'écriture.
- Bibliothèques clientes Cloud Storage C++, Go et Java Pour savoir comment activer gRPC pour ces bibliothèques clientes, consultez Activer gRPC dans la bibliothèque cliente.
Activer gRPC sur une bibliothèque cliente
C++
Avant de commencer
Assurez-vous que les versions suivantes sont installées:
- gRPC version 1.65.1 ou ultérieure
- Bibliothèque cliente C++ version 2.30.0 ou ultérieure
- C++ version 14 ou ultérieure
Pour obtenir des instructions d'installation, consultez la page Configurer un environnement de développement C++.
Configurer la bibliothèque cliente C++
Créez un client gRPC à l'aide de
gcs::MakeGrpcClient()
:namespace gcs = google::cloud::storage; void App() { auto client = gcs::MakeGrpcClient(); // application code }
La bibliothèque cliente C++ utilise automatiquement la connectivité directe lorsqu'elle détecte que l'application s'exécute sur Google Cloud.
Pour configurer la bibliothèque cliente C++ pour qu'elle utilise gRPC, activez le client gRPC Cloud Storage afin de mettre à jour la configuration de votre système de compilation pour
CMake
etBazel
.CMake
Activer le plug-in client gRPC Cloud Storage au moment de la compilation
cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
Dans votre codebase, pour la commande
target_link_libraries()
, remplacezgoogle-cloud-cpp::storage
pargoogle-cloud-cpp::storage_grpc
.Par exemple, le programme de démarrage rapide pour gRPC utilise le code suivant:
add_executable(quickstart_grpc quickstart_grpc.cc) target_link_libraries(quickstart_grpc google-cloud-cpp::storage_grpc)
Bazel
Remplacez les dépendances de
@google_cloud_cpp//:storage
par@google_cloud_cpp//:storage_grpc
.Par exemple, le programme de démarrage rapide pour gRPC utilise le code suivant:
cc_binary( name = "quickstart", srcs = [ "quickstart.cc", ], deps = [ "@com_github_googleapis_google_cloud_cpp//:storage_grpc", ], )
Java
Avant de commencer
Assurez-vous que les versions suivantes sont installées:
Bibliothèques clientes Java:
com.google.cloud:google-cloud-storage:2.43.1
ou version ultérieure.com.google.cloud:libraries-bom:26.48
ou version ultérieure.
Java 8 ou version ultérieure
Pour obtenir des instructions d'installation, consultez Configurer un environnement de développement Java.
Mettre à jour votre projet pour utiliser la nomenclature
Pour vous assurer que vos projets disposent de versions compatibles des bibliothèques clientes Google Cloud, utilisez les versions spécifiées dans la nomenclature (BOM) des bibliothèques Google Cloud. Pour mettre à jour votre projet afin qu'il utilise la nomenclature, utilisez l'une des méthodes suivantes:
Cloud Storage autonome
Si vous utilisez la bibliothèque cliente Cloud Storage indépendamment (sans autres bibliothèques Google Cloud), utilisez la nomenclature spécifique à la bibliothèque cliente Cloud Storage.
Maven
Importez la BOM dans la section dependencyManagement
de votre fichier pom.xml
.
L'exemple suivant montre comment importer la nomenclature et inclure l'artefact 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
Ajoutez une dépendance de plate-forme sur 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 avec d'autres bibliothèques Google Cloud
Si vous utilisez la bibliothèque cliente Cloud Storage avec d'autres bibliothèques Google Cloud, utilisez la BOM des bibliothèques clientes Google Cloud.
Maven
Importez la BOM dans la section dependencyManagement
de votre fichier pom.xml
.
L'exemple suivant montre comment importer la nomenclature et inclure l'artefact 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
Ajoutez une dépendance de plate-forme sur com.google.cloud:libraries-bom
:
implementation platform('com.google.cloud:libraries-bom:26.48.0')
implementation 'com.google.cloud:google-cloud-storage'
Créer un client gRPC
L'exemple suivant utilise un générateur centré sur gRPC. Le client Java gRPC utilise automatiquement la connectivité directe lorsqu'il détecte que l'application s'exécute sur Google Cloud.
Go
Avant de commencer
Assurez-vous d'utiliser la version 1.46.0 ou ultérieure de la bibliothèque cliente Cloud Storage Go.
Créer un client gRPC
Pour utiliser le client, vous devez appeler le constructeur NewGRPCClient
dans votre application au lieu de 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)
}
La bibliothèque cliente Go utilise automatiquement la connectivité directe lorsqu'elle détecte que l'application s'exécute sur Google Cloud.
Pour savoir comment utiliser un client gRPC, consultez la page API gRPC.
Configurez VPC Service Controls
Si vous utilisez un cloud privé virtuel avec des adresses IP virtuelles limitées ( VPC Service Controls) pour renforcer la sécurité de votre réseau, vous devez mettre à jour vos règles de pare-feu afin d'activer la connectivité directe pour des performances optimales entre les instances de machines virtuelles Compute Engine et Cloud Storage.
Pour ce faire, ajoutez des règles de pare-feu d'autorisation pour autoriser le trafic sur tous les ports pour les blocs CIDR suivants:
- Pour le trafic IPv4:
34.126.0.0/18
- Pour le trafic IPv6:
2001:4860:8040::/42
En plus des règles précédentes, conservez la règle de liste d'autorisation existante pour 199.36.153.4/30
.
Si vous avez des restrictions concernant les modifications des règles de pare-feu et que vous ne pouvez pas les mettre à jour, vous pouvez forcer le trafic à éviter la connectivité directe en utilisant storage.googleapis.com
comme point de terminaison Cloud Storage au lieu de google-c2p://storage.googleapis.com
.
Par exemple, pour C++, utilisez .set<google::cloud::EndpointOption>(storage.googleapis.com)
au lieu de google-c2p:///storage.googleapis.com
.
Activer l'observabilité pour les requêtes liées à gRPC
Vous pouvez configurer les bibliothèques clientes Cloud Storage pour générer des métriques liées à gRPC dans Cloud Monitoring. Les métriques liées à gRPC peuvent vous aider à effectuer les opérations suivantes:
Surveillez et optimisez les performances des requêtes gRPC envoyées à Cloud Storage.
Dépanner et déboguer les problèmes
Obtenez des insights sur l'utilisation et le comportement de votre application.
Pour savoir comment générer des métriques liées à gRPC, consultez la section Utiliser des métriques côté client.
Si la collecte de métriques n'est pas nécessaire pour votre cas d'utilisation, vous pouvez choisir de désactiver la collecte de métriques. Pour obtenir des instructions, consultez Désactiver les métriques côté client.
Limites
Les requêtes IPv6 ne peuvent pas être envoyées sur des anciens réseaux.
L'utilisation de gRPC pour se connecter à Cloud Storage devrait améliorer les performances de lecture des charges de travail d'analyse exécutées sur Google Cloud uniquement lorsque les VM de calcul et les buckets Cloud Storage se trouvent dans la même région. Nous vous déconseillons d'utiliser gRPC pour les buckets dans les emplacements multirégionaux et birégionaux.
La connectivité directe n'est pas prise en charge lorsque vous utilisez les versions GKE suivantes sur des clusters IPv4 uniquement:
- 1.28, 1.28.0-gke.100 ou version ultérieure jusqu'à 1.28.5-gke.1199000
- 1.27, 1.27.4-gke.1900 ou version ultérieure
- 1.26, 1.26.10-gke.1238000 ou version ultérieure
- 1.25, 1.25.15-gke.1045000 ou versions ultérieures
gRPC n'est pas compatible avec les méthodes notifications, hmacKeys et serviceAccount.
Les options de constructeur client spécifiques à HTTP, telles que WithHTTPClient, ne sont pas compatibles avec la bibliothèque cliente Go.
Étape suivante
- Se connecter au connecteur Cloud Storage sur Dataproc à l'aide de gRPC
- Activez gRPC sur le connecteur d'E/S Apache Beam dans Dataflow.