Cloudübergreifende Programmierung mit Go Cloud

Einführung


Heute (ca. Übersetzer 24.07.2008) hat das Go-Team von Google das neue Open Source-Projekt Go Cloud veröffentlicht , eine Bibliothek und Entwicklungstools in der Open Cloud . Mit diesem Projekt möchten wir, dass Entwickler die Go-Sprache für die Erstellung von Cloud-übergreifenden Anwendungen auswählen.

In diesem Beitrag wird erklärt, warum wir dieses Projekt gestartet haben, wie Go Cloud funktioniert und wie Sie sich beteiligen und es verwenden können.

Warum Cloud-übergreifende Programmierung? Warum jetzt?


Wir schätzen, dass es weltweit mehr als eine Million Entwickler gibt, die Go verwenden. Go bedient viele der wichtigsten Cloud-orientierten Projekte, darunter Kubernetes, Istio und Docker. Unternehmen wie Lyft, Capital One, Netflix und viele andere sind bei der Produktion auf Go angewiesen. Im Laufe der Jahre haben wir festgestellt, dass Entwickler Go aufgrund seiner Effizienz, Produktivität, integrierten Wettbewerbsfähigkeit und geringen Latenz gerne für die Cloud-Entwicklung verwenden.

Im Rahmen unserer Arbeit zur Unterstützung der raschen Entwicklung von Go haben wir Teams befragt, die mit Go zusammenarbeiten und verstehen, wie sie die Sprache verwenden und wie sie das Go-Ökosystem in Zukunft verbessern können. Eines der Hauptthemen vieler befragter Organisationen ist die Notwendigkeit einer Cloud-übergreifenden Entwicklung. Diese (befragten) Teams möchten in der Lage sein, ihre Anwendungen in Multi-Cloud- und Hybrid-Cloud- Umgebungen bereitzustellen und die Last ohne wesentliche Änderungen am Anwendungscode auf Cloud-Anbieter zu verteilen.

Um dies zu erreichen, versuchen einige Teams, ihre Anwendungen von einer anbieterspezifischen API zu trennen, um einfacheren und portableren (Cloud-übergreifenden) Code zu schreiben. Kurzfristige Anforderungen für die Bereitstellung von Funktionen bedeuten jedoch, dass Teams langfristige Anforderungen für Cross-Cloud-Computing opfern müssen. Infolgedessen sind die meisten Go-Anwendungen, die in der Cloud ausgeführt werden, eng mit dem ursprünglich ausgewählten Cloud-Anbieter verbunden.

Alternativ können Teams Go Cloud verwenden, eine Reihe offener, gemeinsam genutzter Cloud-APIs, um einfachere und portablere Cloud-Anwendungen zu programmieren. Go Cloud bietet auch die Grundlage für ein Ökosystem tragbarer Cloud-Bibliotheken. Mit Go Cloud können sich Teams während der Anwendungsentwicklung auf die Funktionalität konzentrieren und gleichzeitig die langfristige Flexibilität für die Bereitstellung von Anwendungen in Multi-Cloud- und Hybrid-Cloud-Architekturen beibehalten. Go Cloud-Anwendungen können auch auf den Cloud-Anbieter migriert werden, der den Anforderungen der Anwendung am besten entspricht.

Was ist Go Cloud?


Wir haben gemeinsame Dienste identifiziert, die von Cloud-Anwendungen verwendet werden, und eine gemeinsame API für die Arbeit zwischen Cloud-Anbietern erstellt. Heute kann Go Cloud mit Blob-Speicher, MySQL-Datenbank, Laufzeiteinstellungen (Konfiguration) und einem HTTP-Server arbeiten, der mit Anforderungsprotokollierung, Überwachung und Integritätsprüfung konfiguriert ist. Go Cloud funktioniert mit der Google Cloud Platform (GCP) und Amazon Web Services (AWS). Wir werden weiterhin mit Partnern aus der Cloud-Branche und der Go-Community zusammenarbeiten, um in naher Zukunft weitere Cloud-Anbieter zu unterstützen.

Go Cloud zielt darauf ab, eine herstellerneutrale gemeinsame API für die meisten verwendeten Dienste zu entwickeln, z. B. die einfache und einfache Bereitstellung von Go-Anwendungen in einer anderen Cloud. Go Cloud kann auch als Grundlage für die Entwicklung anderer Open Source-Bibliotheken für die Zusammenarbeit zwischen Cloud-Anbietern verwendet werden. Das Feedback von Entwicklern aller Art und auf allen Entwicklungsebenen wirkt sich auf die Priorität der Implementierung / Hinzufügung dieser oder jener Funktionen in zukünftigen Versionen der Go Cloud-API aus.

Wie funktioniert es


Go Cloud basiert auf einer Reihe allgemeiner APIs für die Cloud-übergreifende Programmierung. Schauen wir uns ein Beispiel für die Verwendung von Blob-Speicher an. Sie können den generischen Typ * blob.Storage verwenden, um eine Datei von einem lokalen Laufwerk in die Cloud zu kopieren. Beginnen wir mit dem Öffnen des S3-Speichers mit dem mitgelieferten s3blob-Paket :

// 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") } 

Ab dem Moment, in dem * blob.Bucket in der Anwendung angezeigt wird , haben Sie die Möglichkeit, * blob.Writer zu erstellen, der wiederum die io.Writer- Schnittstelle implementiert. Ab diesem Moment kann die Anwendung (das Programm) * blob.Writer verwenden , um Daten in den Cloud-Speicher zu schreiben und zu überprüfen, ob Close keinen Fehler zurückgibt .

 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) } 

Beachten Sie, dass sich die Logik der Arbeit mit dem Speicher (Bucket) nicht auf die Besonderheiten von AWS S3 bezieht. Go Cloud macht das Ersetzen des Cloud-Speichers im Wesentlichen zu einem Ersatz für die Funktion zum Öffnen von * blob.Bucket . Eine Anwendung kann problemlos zur Verwendung von Google Cloud Storage wechseln, indem sie * blob.Bucket mit gcsblob.OpenBucket instanziiert, ohne den Code zu ändern, der die Datei kopiert:

 // 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) } 

Bisher sind jedoch unterschiedliche Schritte erforderlich, um auf den Speicher für verschiedene Cloud-Anbieter zuzugreifen . Der endgültige Typ, der von der Anwendung verwendet wird, bleibt derselbe * blob.Bucket . Somit bleibt der Anwendungscode vom Cloud-spezifischen Code isoliert. Um die Kompatibilität mit vorhandenen Go-Bibliotheken zu erhöhen, verwendet Go Cloud vorhandene Schnittstellen, die in der Standard-Go-Bibliothek bereitgestellt werden, z. B. io.Writer , io.Reader und * sql.DB.

Der für den Zugriff auf Cloud-Dienste erforderliche Code (die Funktion setupBucket () aus dem obigen Beispiel) folgt dem folgenden Muster: Höhere Abstraktionen werden unter Verwendung grundlegenderer (niedrigerer) Abstraktionen erstellt. Während Sie solchen Code mit Stiften schreiben können, automatisiert Go Cloud dies mit Wire , einem Tool, das Cloud-spezifischen Code für Sie generiert. In der Wire-Dokumentation wird die Installation und Verwendung erläutert. In den Beispielen wird Wire in Aktion gezeigt.

Wie kann ich mich an dem Projekt beteiligen und mehr erfahren?


Zu Beginn empfehlen wir die folgende Anleitung und empfehlen dann, dass Sie versuchen, die Anwendung mit Go Cloud selbst zu erstellen. Wenn Sie bereits AWS oder GCP verwenden, können Sie versuchen, Teile vorhandener Anwendungen auf Go Cloud zu migrieren. Wenn Sie andere Cloud-Anbieter oder einen lokalen Dienst verwenden, können Sie Go Cloud erweitern, um dies zu unterstützen, indem Sie Treiberschnittstellen (z. B. driver.Bucket ) implementieren .

Wir werden jede Art von Erfahrung mit Go Cloud schätzen. Die Go Cloud- Entwicklung wird von GitHub unterstützt. Wir freuen uns über jeden Beitrag zum Projekt, einschließlich des Recuest-Pools. Erstellen Sie ein Problem , um uns mitzuteilen, was Ihrer Meinung nach verbessert werden sollte oder welche APIs die Bibliothek überhaupt unterstützen sollte. Um über Updates und Neuigkeiten auf dem Laufenden zu bleiben, treten Sie der Projekt- Mailingliste bei .

Für das Projekt müssen Mitwirkende dieselbe Lizenzvereinbarung für Mitwirkende unterzeichnen, die vom Go-Projekt angenommen wurde. Weitere Informationen finden Sie im Contributor's Guide .

Vielen Dank für Ihre Zeit beim Kennenlernen von Go Cloud. Wir freuen uns, mit Ihnen zusammenzuarbeiten, um Go zur Wahl der Entwickler für die Erstellung von Cloud-übergreifenden (tragbaren) Anwendungen zu machen.

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


All Articles