Cloud Functions vs Kubernetes Engine

Diperbarui Agustus 2019.

Susunan komputer Google menawarkan banyak pilihan bagus. Dua teknologi terbaik di GCP adalah Kubernetes Engine dan Cloud Functions. Keduanya kuat dan sebagai pengembang mudah untuk default ke Cloud Functions karena dibutuhkan banyak pekerjaan administratif dari tangan saya. Pekerjaan administratif ini, meskipun file yaml deklaratif merupakan aspek penting untuk mengkonfigurasi Mesin Kubernetes.

Premis asli untuk artikel ini adalah seorang pengembang yang hanya bertanya kepada saya, "kapan Anda memilih Kubernetes di atas Cloud Functions?". Ini adalah pertanyaan yang saya anggap banyak sejak saya bekerja dengan keduanya, dan jadi saya pikir cara terbaik untuk menangani ini adalah dengan default ke Fungsi Cloud dan menjelaskan contoh-contoh di mana Kubernetes Engine akan menjadi pilihan yang lebih baik. Meskipun saya tidak membuat katalog setiap alasan, berikut adalah beberapa top yang berperan dalam memilih Kubernetes.

3 bahasa tidak akan memotongnya

Saat menggunakan Cloud Functions saat ini Anda hanya memiliki tiga lingkungan pengembangan untuk dipilih dan itu adalah Node.js, Python, dan Go. Ini adalah teknologi yang luar biasa dan sangat kuat.

Kubernetes Engine menawarkan Anda kebebasan karena pod yang Anda buat adalah lingkungan terisolasi yang dapat menjalankan bahasa dan runtime apa pun. Anda mungkin toko .NET dan perlu memanfaatkan C #. Saya telah menghibur gagasan untuk menggunakan perpustakaan Core Foundation dari Apple dalam suatu layanan. Layanan itu perlu ditulis dalam bahasa Swift. Ini hanya beberapa kasus yang mungkin melibatkan penggunaan bahasa dan kerangka kerja yang berbeda. Di masa depan, Cloud Functions akan mendukung lebih banyak teknologi ini, tetapi itu akan memakan waktu beberapa tahun sebelum diproduksi.

Kecepatan

Kecepatan, dan maksud saya sekarang, bukan dalam 200 ms. Ini adalah perbedaan mendasar. Ada beberapa contoh ketika Anda hanya ingin mendapatkan data dan mendorongnya ke suatu tempat. Jika Fungsi Cloud tidak digunakan untuk sementara waktu maka semua mesin virtual dari fungsi itu dimatikan. Ini adalah hal yang baik, Anda tidak membayar apa pun jika Anda tidak menggunakannya. Namun, mungkin ada beberapa contoh di mana Anda tidak ingin menunggu waktu mulai yang dingin itu. Jika itu bukan pilihan maka Kubernetes akan mendukung Anda, Anda sudah menjadi sebuah cluster dan Anda dapat membuat beberapa pod berjalan untuk layanan tertentu yang siap untuk bertindak ketika diperlukan.

Pemrosesan yang berat dan beban kerja yang besar

Fungsinya bagus untuk menghubungkan berbagai layanan secara bersamaan. Namun, mereka tidak dimaksudkan untuk tugas yang berat atau berjalan lama. Mereka kekurangan CPU dan Memori dibandingkan dengan Compute, Kubernetes, dan App Engine. Mereka memiliki batas waktu lebih cepat pada 5 menit yang berarti pekerjaan harus dilakukan dengan cepat dan Anda harus kembali dari fungsi dengan cepat.

Plus, itu tidak menangani beban berat dengan baik. Jika Anda akan melakukan banyak pemrosesan gambar atau analisis data besar pada fungsi cloud, Anda akan mengalami masalah. Dengan Kubernetes Engine Anda memiliki kemampuan untuk skala pod berdasarkan berbagai parameter seperti CPU tinggi, memori, dll. Dengan fungsi cloud Anda tidak memiliki kemampuan untuk memilih CPU dan alokasi memori cukup rendah dibandingkan dengan layanan komputasi lainnya.

Doa Kegilaan

Berapa kali Anda menjalankan fungsi? Apakah itu seratus atau seratus ribu kali dalam sehari? Itu berbeda jika fungsi cloud Anda mengandalkan pemicu basis data firebase, pada titik itu layak menerima Fungsi Cloud. Namun, jika Anda mencoba membangun layanan yang akan memvalidasi email atau hanya menelan data dalam jumlah besar, ada baiknya mempertimbangkan Kubernetes. Pertama, Anda selalu dapat menjalankan beberapa pod sehingga Anda mengurangi latensi pada layanan. Kedua, dengan Cloud Functions, bagian dari harga adalah berapa kali suatu fungsi dipanggil. Dengan Kubernetes Anda dapat meningkatkan lebih banyak instance selama waktu puncak daripada menurunkan kembali. Tidak masalah jika layanan Anda dipanggil sepuluh ribu kali, pada titik ini Anda membayar jumlah node dan pod yang Anda jalankan yang akan mengurangi biaya keseluruhan Anda.

Komunikasi dengan Layanan Mikro

Akhirnya, kami memiliki komunikasi layanan-ke-layanan. Fungsi cloud memiliki beberapa pemicu yang sangat kuat untuk Firebase dan GCP. Misalnya, Anda dapat mengatur Cloud Pub / Sub trigger atau memicu fungsi lain dengan mengunggah file ke Cloud Storage. Selain itu, kami memiliki pemicu HTTP yang bermanfaat untuk membuat kait web.

Namun, bagaimana jika Anda memiliki beberapa layanan yang tidak perlu dipicu, tetapi Anda hanya ingin mereka saling berbicara? Saat ini berbicara dan berkomunikasi antar layanan bukanlah pendekatan yang efektif ketika menggunakan Fungsi Cloud. Pikirkan proses penyebaran saja. Dengan Cloud Function, ini merepotkan saat Anda mulai memperbarui banyak layanan di Google Cloud. Sementara itu, dengan Kubernetes Anda hanya mengunggah konfigurasi Anda dan Kubernetes memastikan bahwa lingkungan berjalan dengan baik untuk Anda. Ya, ada banyak pekerjaan di muka untuk membuat file yaml, tetapi sangat mudah untuk menjaga agar infrastruktur tetap berjalan.

Pada akhirnya, itu tergantung pada apa yang Anda bangun dan apa kebutuhan Anda, tetapi jika Anda menyulap gagasan memanggil beberapa pemicu fungsi HTTP berdasarkan satu panggilan ke Fungsi Cloud Anda, maka Anda harus mundur dan bertanya pada diri sendiri apakah Kubernetes adalah pilihan yang lebih baik untuk komunikasi antar 90% yang terjadi.

Daftar ini tidak lengkap dan pasti terbuka untuk interpretasi. Sekali lagi, ini didasarkan pada kebutuhan Anda sebagai perusahaan dan organisasi. Kubernetes masih berkembang dengan pesat dan tidak semua orang memiliki pengembang / tim yang dapat mengelola proyek Mesin Kubernetes untuk mereka. Di sisi lain, mungkin Anda memiliki banyak layanan .NET Core yang ingin Anda gunakan dan Fungsi Cloud tidak akan memotongnya karena Anda perlu menggunakan Node.js, Python, atau Go. Selalu ada baiknya untuk mengambil langkah mundur dan berpikir tentang berbagai teknologi yang sedang bermain dan bagaimana kita dapat memanfaatkannya agar seproduktif mungkin.

James Wilson adalah pengembang yang membangun sistem terdistribusi menggunakan Go dan Google Cloud. Dia juga seorang penulis Pluralsight dan Anda dapat melihat kursusnya di sini.