Programación Cross-Cloud con Go Cloud

Introduccion


Hoy (aprox. Traductor 24/07/2018), el equipo de Go en Google lanzó el nuevo proyecto de código abierto Go Cloud , una biblioteca y herramientas de desarrollo en la nube abierta . Con este proyecto, nuestro objetivo es que los desarrolladores elijan el idioma Go para crear aplicaciones entre nubes.

Esta publicación explica por qué comenzamos este proyecto, detalles sobre cómo funciona Go Cloud y cómo involucrarse y comenzar a usarlo.

¿Por qué la programación entre nubes? ¿Por qué ahora?


Estimamos que hay más de un millón de desarrolladores que usan Go en el mundo. Go sirve a muchos de los proyectos más críticos orientados a la nube, incluidos Kubernetes, Istio y Docker. Empresas como Lyft, Capital One, Netflix y muchas otras dependen de Go para la producción. Con los años, hemos descubierto que a los desarrolladores les encanta usar Go para el desarrollo de la nube debido a su eficiencia, productividad, competitividad incorporada y baja latencia.

Como parte de nuestro trabajo para apoyar el rápido desarrollo de Go, entrevistamos a equipos que trabajan con Go y entienden cómo usan el lenguaje y cómo mejorar el ecosistema Go en el futuro. Uno de los principales temas expresados ​​entre muchas organizaciones encuestadas es la necesidad de un desarrollo entre nubes. Estos equipos (los encuestados) desean poder implementar sus aplicaciones en entornos de nube híbrida y de múltiples nubes , y distribuir la carga entre los proveedores de la nube sin cambios significativos en el código de la aplicación.

Para lograr esto, algunos equipos intentan desatar sus aplicaciones de una API específica del proveedor para escribir un código más simple y portátil (cross-cloud). Sin embargo, los requisitos a corto plazo para la entrega de funcionalidad significa que los equipos tienen que sacrificar los requisitos a largo plazo para la computación en la nube. Como resultado, la mayoría de las aplicaciones Go que se ejecutan en la nube están estrechamente vinculadas al proveedor de la nube seleccionado originalmente.

Alternativamente, los equipos pueden usar Go Cloud, un conjunto de API de nube abiertas y compartidas, para programar aplicaciones en la nube más simples y portátiles. Go Cloud también proporciona la base para un ecosistema de bibliotecas portátiles en la nube. Go Cloud permite a los equipos centrarse en la funcionalidad durante el desarrollo de aplicaciones, al tiempo que mantiene la flexibilidad a largo plazo para implementar aplicaciones en arquitecturas de nubes múltiples e híbridas. Las aplicaciones Go Cloud también se pueden migrar al proveedor de la nube que mejor se adapte a las necesidades de la aplicación.

¿Qué es Go Cloud?


Identificamos servicios comunes utilizados por las aplicaciones en la nube y creamos una API común para trabajar entre proveedores de la nube. Hoy, Go Cloud puede trabajar con el almacenamiento de blobs, la base de datos MySQL, la configuración del tiempo de ejecución (configuración) y un servidor HTTP configurado con registro de solicitudes, monitoreo y verificación de estado. Go Cloud funciona con Google Cloud Platform (GCP) y Amazon Web Services (AWS). Continuaremos trabajando con socios en la industria de la nube y la comunidad Go para agregar soporte para otros proveedores de la nube en el futuro cercano.

Go Cloud tiene como objetivo desarrollar una API común independiente del proveedor para la mayoría de los servicios utilizados, por ejemplo, la implementación simple y fácil de las aplicaciones Go en otra nube. Go Cloud también se puede utilizar como base para desarrollar otras bibliotecas de código abierto para trabajar entre proveedores de la nube. Los comentarios de todo tipo de desarrolladores y en todos los niveles de desarrollo afectarán la prioridad de la implementación / adición de esta o aquella funcionalidad en futuras versiones de Go Cloud API.

Como funciona


Go Cloud se basa en un conjunto de API comunes para la programación entre nubes. Veamos un ejemplo del uso de blob storage. Puede usar el tipo genérico * blob.Storage para copiar un archivo de una unidad local a la nube. Comencemos abriendo el almacenamiento S3 usando el paquete s3blob incluido:

// setupBucket opens an AWS bucket. func setupBucket(ctx context.Context) (*blob.Bucket, error) { // Obtain AWS credentials. sess, err := session.NewSession(&aws.Config{ Region: aws.String("us-east-2"), }) if err != nil { return nil, err } // Open a handle to s3://go-cloud-bucket. return s3blob.OpenBucket(ctx, sess, "go-cloud-bucket") } 

Desde el momento en que aparece * blob.Bucket en la aplicación, tiene la oportunidad de crear * blob.Writer , que a su vez implementa la interfaz io.Writer . A partir de este momento, la aplicación (programa) puede usar * blob.Writer para escribir datos en el almacenamiento en la nube, verificando que Cerrar no devuelva un error.

 ctx := context.Background() b, err := setupBucket(ctx) if err != nil { log.Fatalf("Failed to open bucket: %v", err) } data, err := ioutil.ReadFile("gopher.png") if err != nil { log.Fatalf("Failed to read file: %v", err) } w, err := b.NewWriter(ctx, "gopher.png", nil) if err != nil { log.Fatalf("Failed to obtain writer: %v", err) } _, err = w.Write(data) if err != nil { log.Fatalf("Failed to write to bucket: %v", err) } if err := w.Close(); err != nil { log.Fatalf("Failed to close: %v", err) } 

Tenga en cuenta que la lógica de trabajar con el almacenamiento (depósito) no se refiere a los detalles de AWS S3. Go Cloud hace que reemplazar el almacenamiento en la nube sea esencialmente un reemplazo de la función utilizada para abrir * blob.Bucket . Una aplicación puede cambiar fácilmente al uso de Google Cloud Storage instanciando * blob.Bucket usando gcsblob.OpenBucket sin cambiar el código que copia el archivo:

 // setupBucket opens a GCS bucket. func setupBucket(ctx context.Context) (*blob.Bucket, error) { // Open GCS bucket. creds, err := gcp.DefaultCredentials(ctx) if err != nil { return nil, err } c, err := gcp.NewHTTPClient(gcp.DefaultTransport(), gcp.CredentialsTokenSource(creds)) if err != nil { return nil, err } // Open a handle to gs://go-cloud-bucket. return gcsblob.OpenBucket(ctx, "go-cloud-bucket", c) } 

Hasta ahora, sin embargo, se requieren diferentes pasos para acceder al almacenamiento de varios proveedores de la nube, el tipo final utilizado por la aplicación sigue siendo el mismo * blob.Bucket . Por lo tanto, el código de la aplicación permanece aislado del código específico de la nube. Para aumentar la compatibilidad con las bibliotecas Go existentes, Go Cloud utiliza las interfaces existentes proporcionadas en la biblioteca Go estándar, como io.Writer , io.Reader y * sql.DB.

El código requerido para acceder a los servicios en la nube (la función setupBucket () del ejemplo anterior) sigue el siguiente patrón: las abstracciones más altas se construyen usando abstracciones más básicas (más bajas). Si bien puede escribir dicho código con bolígrafos, Go Cloud lo automatiza con Wire , una herramienta que genera código específico para la nube. La documentación de Wire explica cómo instalarlo y usarlo, mientras que los ejemplos muestran Wire en acción.

¿Cómo participar en el proyecto y aprender más?


Para comenzar, le recomendamos la siguiente guía , y luego le recomendamos que intente construir la aplicación utilizando Go Cloud usted mismo. Si ya usa AWS o GCP, puede intentar migrar porciones de aplicaciones existentes para usar Go Cloud. Si utiliza otros proveedores de la nube o un servicio en las instalaciones, puede ampliar Go Cloud para admitir esto mediante la implementación de interfaces de controlador (por ejemplo, driver.Bucket ).

Apreciaremos cualquier tipo de experiencia con Go Cloud. El desarrollo de Go Cloud está impulsado por GitHub. Estaremos encantados de cualquier contribución al proyecto, incluido el grupo recuest. Cree un problema para informarnos qué cree que debería mejorarse o qué API debería admitir la biblioteca en primer lugar. Para estar atento a las actualizaciones y noticias, únase a la lista de correo del proyecto.

El proyecto requiere que los contribuyentes firmen el mismo Acuerdo de licencia de colaborador adoptado por el proyecto Go. Lea la Guía del colaborador para más detalles.

Gracias por su tiempo dedicado a conocer Go Cloud, nos complace trabajar con usted para que Go sea la elección de los desarrolladores para la creación de aplicaciones cruzadas en la nube (portátiles).

Source: https://habr.com/ru/post/es418131/


All Articles