Pendahuluan
Hari ini (kira-kira. Penerjemah 07-24-2018), tim Go di Google merilis proyek Open Source baru
Go Cloud , perpustakaan dan alat pengembangan di
cloud terbuka . Dengan proyek ini, kami bertujuan agar pengembang memilih bahasa Go untuk membuat aplikasi lintas cloud.
Posting ini menjelaskan mengapa kami memulai proyek ini, perincian tentang cara kerja Go Cloud, dan bagaimana cara terlibat dan mulai menggunakannya.
Mengapa pemrograman lintas awan? Kenapa sekarang?
Kami memperkirakan ada
lebih dari satu juta pengembang yang menggunakan Go in the world. Go melayani banyak proyek berorientasi cloud yang paling kritis, termasuk Kubernetes, Istio, dan Docker. Perusahaan seperti Lyft, Capital One, Netflix, dan
banyak lainnya bergantung pada Go untuk produksi. Selama bertahun-tahun, kami telah menemukan bahwa pengembang suka menggunakan Go untuk pengembangan cloud karena efisiensi, produktivitas, daya saing bawaan, dan latensi rendah.
Sebagai bagian dari pekerjaan kami untuk mendukung pengembangan Go yang cepat, kami mewawancarai tim yang bekerja dengan Go dan memahami bagaimana mereka menggunakan bahasa tersebut dan bagaimana meningkatkan ekosistem Go di masa depan. Salah satu topik utama yang disuarakan di antara banyak organisasi yang disurvei adalah kebutuhan untuk pengembangan lintas cloud. Tim-tim ini (mereka yang disurvei) ingin dapat menyebarkan aplikasi mereka di lingkungan
cloud multi-cloud dan
hybrid , dan mendistribusikan beban antara penyedia cloud tanpa perubahan signifikan pada kode aplikasi.
Untuk mencapai hal ini, beberapa tim mencoba melepaskan aplikasi mereka dari API khusus penyedia untuk menulis kode yang lebih sederhana dan lebih portabel (cross-cloud). Namun, persyaratan jangka pendek untuk pengiriman fungsionalitas berarti bahwa tim harus mengorbankan persyaratan jangka panjang untuk komputasi lintas awan. Akibatnya, sebagian besar aplikasi Go yang berjalan di cloud terikat erat dengan penyedia cloud yang dipilih sebelumnya.
Atau, tim dapat menggunakan Go Cloud, satu set API cloud yang terbuka dan dibagikan, untuk pemrograman yang lebih sederhana dan aplikasi cloud yang lebih portabel. Go Cloud juga menyediakan fondasi bagi ekosistem perpustakaan cloud portabel. Go Cloud memungkinkan tim untuk fokus pada fungsionalitas selama pengembangan aplikasi sambil mempertahankan fleksibilitas jangka panjang untuk menyebarkan aplikasi dalam arsitektur multi-cloud dan hybrid-cloud. Aplikasi Go Cloud juga dapat dimigrasikan ke penyedia cloud yang paling sesuai dengan kebutuhan aplikasi.
Apa itu Go Cloud?
Kami telah mengidentifikasi layanan umum yang digunakan oleh aplikasi cloud dan menciptakan API umum untuk bekerja antara penyedia cloud. Hari ini, Go Cloud dapat bekerja dengan penyimpanan gumpalan, database MySQL, pengaturan runtime (konfigurasi), dan server HTTP yang dikonfigurasi dengan pencatatan permintaan, pemantauan, dan pemeriksaan kesehatan. Go Cloud bekerja dengan Google Cloud Platform (GCP) dan Amazon Web Services (AWS). Kami akan terus bekerja dengan mitra di industri cloud dan komunitas Go untuk menambah dukungan bagi penyedia cloud lainnya dalam waktu dekat.
Go Cloud bertujuan untuk mengembangkan API umum vendor-netral untuk sebagian besar layanan yang digunakan, misalnya, penyebaran aplikasi Go yang sederhana dan mudah ke cloud lain. Go Cloud juga dapat digunakan sebagai dasar untuk mengembangkan perpustakaan Open Source lainnya untuk bekerja di antara penyedia cloud. Umpan balik dari semua jenis pengembang dan di semua tingkat pengembangan akan memengaruhi prioritas implementasi / penambahan fungsi ini atau itu di versi API Go Cloud yang akan datang.
Bagaimana cara kerjanya?
Go Cloud didasarkan pada serangkaian API umum untuk pemrograman lintas-cloud. Mari kita lihat contoh penggunaan penyimpanan gumpalan. Anda dapat menggunakan tipe
* blob.Storage generik untuk menyalin file dari drive lokal ke cloud. Mari kita mulai dengan membuka penyimpanan S3 menggunakan paket bundel
s3blob :
Dari saat
* blob.Bucket muncul di aplikasi, Anda mendapat kesempatan untuk membuat
* blob.Writer , yang pada gilirannya mengimplementasikan antarmuka
io.Writer . Mulai saat ini, aplikasi (program) dapat menggunakan
* blob. Penulis untuk menulis data ke penyimpanan cloud, memeriksa bahwa
Tutup tidak mengembalikan kesalahan.
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) }
Perhatikan bahwa logika bekerja dengan penyimpanan (ember) tidak merujuk pada spesifikasi AWS S3. Go Cloud menjadikan penggantian penyimpanan cloud pada dasarnya merupakan pengganti fungsi yang digunakan untuk membuka
* blob.Bucket . Aplikasi dapat dengan mudah beralih ke menggunakan Google Cloud Storage dengan membuat instance
* blob.Bucket menggunakan
gcsblob.OpenBucket tanpa mengubah kode yang menyalin file:
Sejauh ini, bagaimanapun, langkah-langkah berbeda diperlukan untuk mengakses penyimpanan untuk berbagai penyedia cloud, tipe terakhir yang digunakan oleh aplikasi tetap sama
* gumpalan . Dengan demikian, kode aplikasi tetap terisolasi dari kode khusus cloud. Untuk meningkatkan kompatibilitas dengan Go libraries yang ada, Go Cloud menggunakan antarmuka yang ada yang disediakan di Go library standar, seperti
io.Writer ,
io.Reader, dan
* sql.DB.Kode yang diperlukan untuk mengakses layanan cloud (fungsi
setupBucket () dari contoh di atas) mengikuti pola berikut: abstraksi yang lebih tinggi dibangun menggunakan abstraksi yang lebih mendasar (lebih rendah). Meskipun Anda dapat menulis kode seperti itu dengan pena, Go Cloud mengotomatiskannya dengan
Wire , alat yang menghasilkan kode khusus cloud untuk Anda.
Dokumentasi Wire menjelaskan cara menginstal dan menggunakannya, sementara
contoh -
contoh menunjukkan Wire bertindak.
Bagaimana cara terlibat dalam proyek dan belajar lebih banyak?
Untuk memulai, kami merekomendasikan
panduan berikut, dan kemudian menyarankan Anda mencoba membangun aplikasi menggunakan Go Cloud sendiri. Jika Anda sudah menggunakan AWS atau GCP, Anda dapat mencoba memigrasi sebagian aplikasi yang ada untuk menggunakan Go Cloud. Jika Anda menggunakan penyedia cloud lain atau layanan di tempat, Anda dapat memperluas Go Cloud untuk mendukung ini dengan mengimplementasikan antarmuka driver (mis.
Driver.Bucket ).
Kami akan menghargai setiap dan semua jenis pengalaman dengan Go Cloud. Pengembangan
Go Cloud didukung oleh GitHub. Kami akan dengan senang hati memberikan kontribusi apa pun untuk proyek ini, termasuk kelompok penerima pinjaman. Buat
masalah untuk memberi tahu kami apa yang menurut Anda harus ditingkatkan atau API mana yang harus didukung perpustakaan di tempat pertama. Untuk tetap mengikuti perkembangan berita dan berita, bergabunglah dengan
milis proyek.
Proyek ini mengharuskan kontributor untuk menandatangani Perjanjian Lisensi Kontributor yang sama seperti yang diadopsi oleh proyek Go. Baca
Panduan Kontributor untuk lebih jelasnya.
Terima kasih atas waktu yang Anda habiskan untuk mengenal Go Cloud, kami senang dapat bekerja sama dengan Anda untuk menjadikan Go sebagai pilihan pengembang untuk membangun aplikasi lintas-cloud (portabel).