gRPC es un framework de RPC universal de código abierto y alto rendimiento desarrollado por Google que puedes usar para definir tus servicios con búferes de protocolo. Puedes usar gRPC para interactuar con Cloud Storage. gRPC utiliza conectividad directa entre Compute Engine y los buckets de Cloud Storage, lo que evita los frontends de Google (GFEs).
Si bien no se admite el uso directo de gRPC para conectarse a Cloud Storage, puedes conectarte a Cloud Storage con gRPC a través de los siguientes clientes compatibles:
- Conector de Cloud Storage en Dataproc.
- Conector de E/S de Apache Beam en Dataflow para solicitudes de lectura y escritura
- Bibliotecas cliente de Cloud Storage para C++, Go y Java Para obtener instrucciones sobre cómo habilitar gRPC para estas bibliotecas cliente, consulta Habilita gRPC en la biblioteca cliente.
Habilita gRPC en una biblioteca cliente
C++
Antes de comenzar
Asegúrate de tener instaladas las siguientes versiones:
- gRPC versión 1.65.1 o posterior
- Versión 2.30.0 o posterior de la biblioteca cliente de C++
- C++ versión 14 o posterior
Para obtener instrucciones de instalación, consulta Configura un entorno de desarrollo de C++.
Configura la biblioteca cliente de C++
Crea un cliente de gRPC con
gcs::MakeGrpcClient()
:namespace gcs = google::cloud::storage; void App() { auto client = gcs::MakeGrpcClient(); // application code }
La biblioteca cliente de C++ usa automáticamente la conectividad directa cuando detecta que la aplicación se ejecuta en Google Cloud.
Para configurar la biblioteca cliente de C++ para usar gRPC, habilita el cliente gRPC de Cloud Storage para actualizar la configuración del sistema de compilación para
CMake
yBazel
.CMake
Habilita el complemento cliente de gRPC de Cloud Storage en el tiempo de compilación
cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
En tu base de código, reemplaza
google-cloud-cpp::storage
porgoogle-cloud-cpp::storage_grpc
en el comandotarget_link_libraries()
.Por ejemplo, el programa de la guía de inicio rápido para gRPC usa el siguiente código:
add_executable(quickstart_grpc quickstart_grpc.cc) target_link_libraries(quickstart_grpc google-cloud-cpp::storage_grpc)
Bazel
Se reemplazaron las dependencias de
@google_cloud_cpp//:storage
por@google_cloud_cpp//:storage_grpc
.Por ejemplo, el programa de la guía de inicio rápido para gRPC usa el siguiente código:
cc_binary( name = "quickstart", srcs = [ "quickstart.cc", ], deps = [ "@com_github_googleapis_google_cloud_cpp//:storage_grpc", ], )
Java
Antes de comenzar
Asegúrate de tener instaladas las siguientes versiones:
Bibliotecas cliente de Java:
com.google.cloud:google-cloud-storage:2.43.1
o una versión posteriorcom.google.cloud:libraries-bom:26.48
o una versión posterior
Java 8 o versiones posteriores
Para obtener instrucciones de instalación, consulta Configura un entorno de desarrollo de Java.
Actualiza tu proyecto para usar la BOM
Para asegurarte de que tus proyectos tengan versiones compatibles de las bibliotecas cliente de Google Cloud, usa las versiones especificadas en la Lista de materiales (BOM) de las bibliotecas de Google Cloud. Para actualizar tu proyecto para usar la BOM, usa cualquiera de los siguientes métodos:
Almacenamiento en la nube independiente
Si usas la biblioteca cliente de Cloud Storage de forma independiente (sin otras bibliotecas de Google Cloud), usa la BoM específica de la biblioteca cliente de Cloud Storage.
Maven
Importa la BOM en la sección dependencyManagement
de tu archivo pom.xml
.
En el siguiente ejemplo, se muestra cómo importar la BoM y, luego, incluir el artefacto 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
Agrega una dependencia de plataforma en 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 con otras bibliotecas de Google Cloud
Si usas la biblioteca cliente de Cloud Storage junto con otras bibliotecas de Google Cloud, usa la BoM de bibliotecas cliente de Google Cloud.
Maven
Importa la BOM en la sección dependencyManagement
de tu archivo pom.xml
.
En el siguiente ejemplo, se muestra cómo importar la BoM y, luego, incluir el artefacto 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
Agrega una dependencia de plataforma en com.google.cloud:libraries-bom
:
implementation platform('com.google.cloud:libraries-bom:26.48.0')
implementation 'com.google.cloud:google-cloud-storage'
Crea un cliente de gRPC
En el siguiente ejemplo, se usa un compilador centrado en gRPC. El cliente de Java de gRPC usa automáticamente la conectividad directa cuando detecta que la aplicación se ejecuta en Google Cloud.
Go
Antes de comenzar
Asegúrate de usar la versión 1.46.0 o posterior de la biblioteca cliente de Go de Cloud Storage.
Crea un cliente de gRPC
Para usar el cliente, debes llamar al constructor NewGRPCClient
en
tu aplicación en lugar 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 biblioteca cliente de Go usa conectividad directa automáticamente cuando detecta que la aplicación se ejecuta en Google Cloud.
Para obtener información sobre cómo usar un cliente de gRPC, consulta la API de gRPC.
Configurar los Controles del servicio de VPC
Si usas una nube privada virtual con direcciones IP virtuales restringidas ( Controles del servicio de VPC) para mejorar la seguridad de tu red, debes actualizar las reglas de firewall para habilitar la conectividad directa y obtener un rendimiento óptimo entre las instancias de máquina virtual de Compute Engine y Cloud Storage.
Para ello, agrega reglas de firewall de lista de entidades permitidas para permitir el tráfico en todos los puertos de los siguientes bloques CIDR:
- Para el tráfico IPv4:
34.126.0.0/18
- Para el tráfico IPv6:
2001:4860:8040::/42
Además de las reglas anteriores, conserva la regla de lista de entidades permitidas existente para 199.36.153.4/30
.
Si tienes restricciones en las modificaciones de las reglas de firewall y no puedes actualizarlas, puedes forzar el tráfico para evitar la conectividad directa usando storage.googleapis.com
como el extremo de Cloud Storage en lugar de google-c2p://storage.googleapis.com
.
Por ejemplo, para el uso de C++, .set<google::cloud::EndpointOption>(storage.googleapis.com)
en lugar de google-c2p:///storage.googleapis.com
.
Habilita la observabilidad para las solicitudes relacionadas con gRPC
Puedes configurar bibliotecas cliente de Cloud Storage para generar métricas relacionadas con gRPC en Cloud Monitoring. Las métricas relacionadas con gRPC pueden ayudarte a hacer lo siguiente:
Supervisa y optimiza el rendimiento de las solicitudes de gRPC a Cloud Storage.
Solucionar y depurar problemas
Obtén estadísticas sobre el uso y el comportamiento de tu aplicación.
Para obtener información sobre cómo generar métricas relacionadas con gRPC, consulta Usa métricas del cliente.
Si no es necesario recopilar métricas para tu caso de uso, puedes inhabilitar la recopilación de métricas. Para obtener instrucciones, consulta Cómo inhabilitar las métricas del cliente.
Limitaciones
Las solicitudes de IPv6 no se pueden enviar a través de redes heredadas.
Se espera que el uso de gRPC para conectarse a Cloud Storage mejore el rendimiento de lectura de las cargas de trabajo de análisis que se ejecutan en Google Cloud solo cuando las VMs de procesamiento y los buckets de Cloud Storage se encuentren en la misma región. No recomendamos usar gRPC para buckets en regiones dobles y multirregionales.
La conectividad directa no es compatible con las siguientes versiones de GKE en clústeres solo IPv4:
- 1.28, 1.28.0-gke.100 o versiones posteriores hasta 1.28.5-gke.1199000
- 1.27, 1.27.4-gke.1900 o versiones posteriores
- 1.26, 1.26.10-gke.1238000 o versiones posteriores
- 1.25, 1.25.15-gke.1045000 o versiones posteriores
gRPC no admite los métodos notifications, hmacKeys ni serviceAccount.
Las opciones de constructor de cliente específicas de HTTP, como WithHTTPClient, no son compatibles con la biblioteca cliente de Go.
¿Qué sigue?
- Conéctate al conector de Cloud Storage en Dataproc con gRPC.
- Habilita gRPC en el conector de E/S de Apache Beam en Dataflow.