Solusi multicloud dengan Serverless Framework

Azure Functions

Artikel ini menjelaskan bagaimana tim Microsoft Commercial Software Engineering (CSE) bermitra dengan peritel global untuk menyebarkan solusi tanpa server yang sangat tersedia di platform cloud Azure dan Amazon Web Services (AWS), menggunakan Serverless Framework.

Arsitektur

Diagram memperlihatkan arsitektur tanpa server multicloud.

Unduh file Visio arsitektur ini.

Aliran data

  • Aplikasi pengguna bisa berasal dari sumber mana pun yang mampu masuk ke cloud. Dalam implementasi ini, pengguna masuk ke aplikasi gateway yang menyeimbangkan beban permintaan 50-50 antara cloud Azure dan AWS.
  • Respons apa pun juga dirutekan melalui gateway API Manager, yang kemudian mengirimkannya ke aplikasi pemohon.

Komponen

Serverless Framework

Solusi ini menggunakan Kerangka Kerja Tanpa Server, tersedia dari Tanpa Server, Inc. Versi gratis Kerangka Kerja Tanpa Server mencakup CLI, lebih banyak plugin, dan layanan pemantauan terbatas. Edisi Pro dilengkapi dengan kemampuan operasional di seluruh cloud, seperti peningkatan pemantauan dan peringatan. Kerangka kerja ini mendukung bahasa Node.js dan Python, serta host cloud AWS dan Azure.

Untuk menggunakan Azure dengan Serverless Framework, Anda memerlukan:

  • Node.js, untuk mengemas layanan mikro
  • Azure Functions, untuk menyediakan fungsionalitas yang sebanding dengan platform cloud lainnya
  • Serverless Framework, untuk mendukung penyebaran dan pemantauan multicloud
  • Serverless Multicloud Library, untuk menyediakan API runtime yang dinormalisasi bagi pengembang
  • Plugin Tanpa Server Azure Functions, untuk mendukung penyebaran multicloud. Plugin ini awalnya tidak seimbang dengan plug-in AWS Lambda yang sebanding, dan diperluas untuk proyek ini.

Gambar berikut menunjukkan alur pemrosesan. Lapisan middleware mewakili fungsi menengah yang diperlukan sebelum mencapai handler.

Diagram yang menunjukkan alur pemrosesan multicloud.

API agnostik cloud

Implementasi tanpa server pada setiap platform mendukung fungsi individual sebagai layanan mikro, satu untuk setiap simpul VM fungsional, dan menjalankan pemrosesan sesuai kebutuhan. Setiap fungsi AWS Lambda memiliki fungsi Azure Functions yang sesuai. Pustaka Multicloud Tanpa Server membangun layanan mikro analog dari salah satu cloud ke API REST yang dinormalisasi agnostik cloud yang dapat digunakan aplikasi klien untuk berinteraksi dengan salah satu platform. Karena lapisan API abstrak menyediakan kode untuk menangani layanan mikro yang sesuai untuk setiap platform, transaksi tidak memerlukan terjemahan. Antarmuka agnostik cloud memungkinkan aplikasi pengguna berinteraksi dengan cloud tanpa mengetahui atau peduli dengan platform cloud mana yang diakses.

Diagram berikut mengilustrasikan konsep ini:

Diagram yang menunjukkan API cloud-agnostic.

CI/CD dengan GitOps

Tugas utama dari Serverless Framework adalah untuk mengabstraksi semua masalah infrastruktur penyebaran aplikasi ke cloud. Dengan menggunakan pendekatan berbasis manifes, Kerangka Kerja Tanpa Server dapat menangani semua masalah penyebaran, memungkinkan penyebaran diotomatisasi sesuai kebutuhan untuk mendukung GitOps.

Meskipun proyek awal ini menggunakan penyebaran manual, adalah masuk akal jika menerapkan pengujian, penyebaran, dan build tanpa server berbasis manifes di dalam atau di seluruh cloud. Proses ini dapat menggunakan alur kerja pengembang GitOps: membangun dari Git, menggunakan gerbang kualitas untuk pengujian dan evaluasi, dan menerapkan solusi tanpa server ke kedua penyedia cloud. Melakukan semua penyebaran menggunakan Serverless Framework sejak awal proyek adalah cara yang paling efisien untuk melanjutkan.

API Manager

API Manager dapat berupa aplikasi yang sudah ada atau kustom. Apigeeā„¢ API Manager dalam implementasi ini hanya bertindak sebagai router untuk menyediakan penyeimbangan beban transaksi 50-50 ke dua platform cloud, dan kurang dimanfaatkan karena kemampuannya.

API Manager harus dapat:

  • Disebarkan di dalam atau di luar platform cloud sesuai kebutuhan
  • Merutekan pesan ke dan dari kedua platform cloud
  • Mencatat permintaan lalu lintas untuk mengkoordinasikan lalu lintas pesan asinkron
  • Menyampaikan permintaan dan respons menggunakan REST API umum dari dan ke aplikasi pengguna
  • Memantau kesehatan kedua penyebaran kerangka kerja tanpa server cloud untuk memvalidasi kemampuan untuk menerima permintaan
  • Melakukan pemeriksaan kesehatan dan ketersediaan otomatis pada setiap platform cloud, untuk mendukung perutean dan ketersediaan tinggi

Alternatif

  • Bahasa lain seperti Python dapat menerapkan solusi, selama didukung oleh implementasi tanpa server dari platform cloud, AWS Lambda, dan Azure Functions dalam kasus ini. Proyek ini menggunakan Node.js untuk mengemas layanan mikro, karena pelanggan sudah biasa dengan Node.js, dan platform AWS dan Azure mendukungnya.

  • Solusinya dapat menggunakan platform cloud apa pun yang mendukung Serverless Framework, bukan hanya Azure dan AWS. Saat ini, Serverless Framework melaporkan kompatibilitas dengan delapan penyedia cloud yang berbeda. Satu-satunya peringatan adalah memastikan bahwa elemen yang mendukung arsitektur multicloud atau yang setara tersedia di platform cloud target.

  • API Manager dalam implementasi awal ini hanya bertindak sebagai router untuk memberikan keseimbangan beban transaksi 50-50 ke dua platform cloud. API Manager dapat menggabungkan logika bisnis lain untuk skenario tertentu.

Detail skenario

Dalam komputasi tanpa server, penyedia cloud secara dinamis mengalokasikan sumber daya layanan mikro untuk menjalankan kode, dan hanya mengenakan biaya untuk sumber daya yang digunakan. Komputasi tanpa server menyembunyikan kode aplikasi dari implementasi infrastruktur, penyebaran kode, dan aspek operasional seperti perencanaan dan pemeliharaan.

Seperti halnya layanan lain, setiap penyedia cloud memiliki implementasi tanpa server sendiri, dan pelanggan sulit menggunakan penyedia yang berbeda tanpa dampak dan biaya operasional yang cukup besar. Pelanggan potensial dapat memandang situasi ini sebagai melemahnya posisi tawar-menawar dan kelincahannya. Penguncian vendor adalah salah satu hambatan terbesar untuk adopsi cloud perusahaan.

Serverless Framework sumber terbuka adalah antarmuka cloud universal untuk mengembangkan dan menyebarkan solusi komputasi tanpa server di seluruh penyedia cloud. Sumber terbuka dan API umum untuk fungsi tanpa server membantu penyedia, pelanggan, dan mitra membangun solusi lintas cloud untuk mendapatkan layanan terbaik. Serverless Framework mengurangi hambatan untuk adopsi cloud dengan mengatasi masalah penguncian vendor dan redundansi penyedia lintas cloud. Pelanggan dapat mengoptimalkan solusi mereka berdasarkan biaya, kelincahan, dan pertimbangan lainnya.

CSE dan tim produk Azure secara kolektif menulis ulang CLI Tanpa Server untuk mendukung fitur Azure Functions baru seperti Premium Functions, API Management, dan KeyVault. CLI Tanpa Server kini menyediakan antarmuka standar untuk penyebaran GitOps ke Azure dan AWS. Tim juga telah mengembangkan Pustaka Multicloud Tanpa Server, yang dilengkapi dengan API runtime yang dinormalisasi untuk menyebarkan aplikasi tanpa server ke AWS dan Azure.

Desain ini menyediakan ketersediaan tinggi dengan failover aktif-aktif antara beberapa platform cloud, yang berbeda dengan failover aktif-pasif. Jika layanan dari satu penyedia cloud tidak sehat atau tidak tersedia, solusi ini dapat mengalihkan permintaan ke platform cloud lainnya.

Proyek ini memenuhi tujuan teknis berikut:

  • Membuat solusi lintas industri.
  • Menggunakan Pustaka Tanpa Server Multicloud untuk mendukung API agnostik cloud yang berinteraksi dengan layanan mikro di mana pun layanan ini digunakan.
  • Mendukung alur kerja proses GitOps CI/CD untuk pengembangan, pengujian, dan penyebaran di semua platform cloud yang didukung.
  • Menggunakan akses berbasis API melalui gateway cloud yang diautentikasi, dan keseimbangan beban antar platform cloud dengan menggunakan gateway sebagai router.

Potensi manfaat lain menggunakan Serverless Framework meliputi:

  • Pencegahan atau pengurangan penguncian vendor
  • Pengurangan kode 40-60+% selama pengembangan dengan menggunakan Pustaka Tanpa Server Multicloud
  • Pengembangan solusi terbaik yang menggabungkan berbagai layanan penyedia cloud
  • Penghapusan sebagian besar persyaratan pemeliharaan dan kompleksitas platform dan infrastruktur
  • Berbagi data lebih mudah, perbandingan performa dan biaya, dan kemampuan untuk memanfaatkan penawaran khusus
  • Ketersediaan tinggi aktif-aktif

Kasus penggunaan potensial

  • Tulis aplikasi sisi klien untuk berbagai platform dengan menggunakan API agnostik cloud dari Pustaka Multicloud Tanpa Server.
  • Sebarkan koleksi layanan mikro fungsional dalam kerangka tanpa server ke beberapa platform cloud.
  • Gunakan aplikasi agnostik cloud di seluruh platform cloud tanpa mengetahui atau peduli platform mana yang meng-hostingnya.

Pertimbangan

  • Artikel ini tidak menjelaskan solusi keamanan, meskipun penyebaran awal menyertakannya. Ada banyak kemungkinan solusi keamanan, beberapa platform yang dependen, dan kerangka kerja ini harus mengakomodasi semua solusi yang wajar. Autentikasi pengguna adalah keamanan minimum yang diasumsikan.

  • Karena sulit untuk mengartikulasikan perbedaan antara penawaran fungsional tanpa server AWS dan Azure, upaya awal harus fokus pada pemetaan fungsi yang tersedia di setiap platform cloud dan mengidentifikasi persyaratan transformasi yang diperlukan. Anda dapat mengembangkan API agnostik platform dari informasi ini.

  • Menggunakan solusi sumber terbuka dapat menimbulkan risiko, karena tantangan pemeliharaan dan dukungan jangka panjang dengan perangkat lunak sumber terbuka apa pun.

  • Dalam Serverless Framework gratis, pemantauan dibatasi terutama pada dasbor administratif. Pemantauan tersedia dalam penawaran perusahaan berbayar. Saat ini, Plugin Tanpa Server Azure Functions tidak menyertakan ketentuan untuk pengamatan atau pemantauan, dan memerlukan modifikasi untuk mengimplementasikan kemampuan ini.

  • Solusi ini dapat menggunakan metrik untuk membandingkan performa dan biaya antara platform cloud, yang memungkinkan pelanggan mengoptimalkan penggunaan dengan lancar di seluruh platform cloud.

Menyebarkan skenario ini

Penyebaran Biru-Hijau tradisional mengembangkan dan menyebarkan aplikasi ke dua lingkungan yang terpisah namun identik, biru dan hijau, yang meningkatkan ketersediaan dan mengurangi risiko. Lingkungan biru biasanya berupa lingkungan produksi yang biasanya menangani lalu lintas langsung, dan lingkungan hijau adalah penyebaran failover sesuai kebutuhan. Biasanya, alur CI/CD otomatis menyebarkan lingkungan biru dan hijau dalam platform cloud yang sama. Konfigurasi ini dianggap sebagai konfigurasi aktif-pasif.

Dalam solusi multicloud, penyebaran biru-hijau diterapkan di kedua platform cloud. Dalam kasus tanpa server, dua set duplikat layanan mikro digunakan untuk setiap platform cloud, satu sebagai lingkungan produksi dan yang lainnya sebagai lingkungan failover. Penyiapan aktif-pasif dalam setiap platform cloud ini mengurangi risiko bahwa platform ini akan mengalami penurunan, yang meningkatkan ketersediaannya, dan memungkinkan ketersediaan tinggi aktif-aktif multicloud.

Diagram memperlihatkan penyebaran biru-hijau aktif-aktif.

Manfaat kedua penyebaran biru-hijau adalah kemampuan untuk menggunakan penyebaran failover di setiap platform cloud sebagai lingkungan pengujian untuk pembaruan layanan mikro, sebelum melepaskannya ke penyebaran produksi.

Langkah berikutnya