Fungsi Tanpa Server Cocok untuk Tugas Kecil
Komputasi berbasis cloud dengan fungsionalitas tanpa server telah mendapatkan popularitas yang luas. Daya tarik mereka untuk mengimplementasikan fungsionalitas baru berasal dari kesederhanaan komputasi tanpa server. Anda dapat menggunakan fungsi tanpa server untuk menganalisis foto masuk atau memproses peristiwa dari perangkat IoT. Ini cepat, sederhana, dan terukur. Anda tidak perlu mengalokasikan dan memelihara sumber daya komputasi – Anda cukup menerapkan kode aplikasi. Vendor cloud utama, termasuk AWS, MicrosoftDan Googlesemuanya menawarkan fungsionalitas tanpa server.
Untuk aplikasi sederhana atau ad hoc, fungsi tanpa server sangat berguna. Namun apakah cocok untuk alur kerja kompleks yang membaca dan memperbarui kumpulan data tetap dan penting? Bayangkan sebuah maskapai penerbangan yang mengelola ribuan penerbangan setiap hari. Penyimpanan data NO-SQL yang dapat diskalakan (mis DB Amazon Dynamo atau Azure Cosmos DB) dapat menyimpan data yang merinci penerbangan, penumpang, tas, penetapan gerbang, jadwal pilot, dan banyak lagi. Meskipun fungsi tanpa server dapat mengakses penyimpanan data ini untuk memproses peristiwa, seperti pembatalan penerbangan dan pemesanan ulang penumpang, apakah itu cara terbaik untuk menangani volume pemrosesan peristiwa yang diandalkan oleh maskapai penerbangan?
Masalah dan Keterbatasan
Kekuatan utama dari fungsi tanpa server adalah bahwa fungsi tersebut tidak memiliki server, sehingga menciptakan batasan bawaan. Sesuai sifatnya, mereka memerlukan overhead untuk mengalokasikan sumber daya komputasi saat digunakan. Selain itu, mereka tidak memiliki kewarganegaraan dan harus mengambil data dari penyimpanan data eksternal. Hal ini semakin memperlambat mereka. Mereka tidak dapat memanfaatkan cache lokal di dalam memori untuk menghindari perpindahan data; data harus selalu mengalir melalui jaringan cloud kami ke tempat fungsi tanpa server bekerja.
Saat membangun sistem besar, fungsi tanpa server juga tidak menawarkan arsitektur perangkat lunak yang jelas untuk mengimplementasikan alur kerja yang kompleks. Pengembang harus menerapkan ‘pemisahan perhatian’ yang bersih dalam kode yang dijalankan setiap fungsi. Saat membuat beberapa fungsi tanpa server, Anda akan mudah terjebak dalam duplikasi fungsi dan mengembangkan basis kode yang rumit dan tidak dapat dikelola. Selain itu, fungsi tanpa server dapat menghasilkan pengecualian yang tidak biasa, seperti waktu habis dan batas kuota, yang harus ditangani oleh logika aplikasi.
Alternatif: Pindahkan Kode ke Data
Kita dapat menghindari keterbatasan fungsi tanpa server dengan melakukan hal sebaliknya: memindahkan kode ke data. Pertimbangkan untuk menggunakan skalabel komputasi dalam memori untuk menjalankan kode yang diimplementasikan oleh fungsi tanpa server. Komputasi dalam memori menyimpan objek dalam memori utama yang didistribusikan ke seluruh kumpulan server. Ia dapat menjalankan fungsi pada objek ini dengan menerima pesan. Itu juga dapat mengambil data dan terus mengubahnya menjadi penyimpanan data, seperti penyimpanan NO-SQL.
Daripada mendefinisikan fungsi tanpa server yang beroperasi pada data yang disimpan dari jarak jauh, kita hanya dapat mengirim pesan ke objek yang diimplementasikan dalam platform komputasi dalam memori untuk menjalankan fungsi tersebut. Pendekatan ini mempercepat pemrosesan dengan menghindari kebutuhan untuk mengakses penyimpanan data berulang kali, sehingga mengurangi jumlah data yang harus mengalir melalui jaringan. Karena komputasi data dalam memori sangat skalabel, komputasi ini dapat menangani beban kerja besar yang melibatkan objek dalam jumlah besar. Selain itu, pemrosesan pesan yang tersedia menghindari kebutuhan kode aplikasi untuk menangani pengecualian lingkungan.
Komputasi dalam memori menawarkan manfaat utama untuk menyusun kode yang mendefinisikan alur kerja kompleks dengan menggabungkan kekuatan penyimpanan struktur data, misalnya. ulangDan model aktorS. Tidak seperti fungsi tanpa server, kisi data dalam memori dapat membatasi pemrosesan objek ke metode yang ditentukan oleh tipe datanya. Hal ini membantu pengembang menghindari penerapan kode duplikat di beberapa fungsi tanpa server. Hal ini juga menghindari kebutuhan untuk melakukan penguncian objek, yang dapat menjadi masalah untuk menyimpan data persisten.
Contoh benchmarking
Untuk mengukur perbedaan kinerja antara fungsi tanpa server dan komputasi dalam memori, kami membandingkan alur kerja sederhana yang diterapkan dengan fungsi AWS Lambda dengan alur kerja serupa yang dibuat menggunakan fungsi tersebut. ScaleOut Digital Kembar, arsitektur komputasi dalam memori yang dapat diskalakan. Alur kerja ini mewakili pemrosesan peristiwa yang dapat digunakan maskapai penerbangan untuk membatalkan penerbangan dan memesan ulang semua penumpang pada penerbangan lainnya. Ia menggunakan dua jenis data, objek penerbangan dan penumpang, dan menyimpan semua instans di Dynamo DB. Pengontrol acara memperhitungkan pembatalan grup penerbangan dan mengukur waktu yang diperlukan untuk menyelesaikan semua pemesanan ulang.
Dalam implementasi tanpa server, pengontrol peristiwa memicu fungsi lambda untuk membatalkan setiap penerbangan. Setiap ‘penumpang lambda’ memesan ulang penumpang dengan memilih penerbangan berbeda dan memperbarui informasi penumpang. Hal ini kemudian memicu fungsi tanpa server yang mengonfirmasi penghapusan penerbangan asli dan menambahkan penumpang ke penerbangan baru. Fungsi ini memerlukan penggunaan kunci untuk menyinkronkan akses ke objek Dynamo DB.
Implementasi digital twin secara dinamis membuat objek dalam memori untuk semua penerbangan dan penumpang ketika objek ini diakses dari Dynamo DB. Objek penerbangan menerima pesan pembatalan dari pengontrol peristiwa dan mengirimkan pesan tersebut ke objek kembar digital penumpang. Kembaran digital penumpang memesan ulang dirinya dengan memilih penerbangan berbeda dan mengirimkan pesan ke penerbangan lama dan baru. Kode aplikasi tidak perlu menggunakan penguncian, dan platform dalam memori secara otomatis memperbarui kembali ke Dynamo DB.
Pengukuran kinerja menunjukkan bahwa digital twin memproses 25 pembatalan penerbangan dengan 100 penumpang per penerbangan, 11X lebih cepat dibandingkan fungsi tanpa server. Kami tidak dapat menskalakan fungsi tanpa server untuk menjalankan target beban kerja yang membatalkan masing-masing 250 penerbangan dan 250 penumpang, namun ScaleOut Digital Twins tidak mengalami kesulitan memproses dua kali target beban kerja ini dengan 500 penerbangan.
kesimpulan
Meskipun fungsi tanpa server sangat cocok untuk aplikasi kecil dan ad hoc, fungsi tersebut mungkin merupakan pilihan terbaik saat membangun alur kerja kompleks yang perlu mengelola banyak objek data dan melakukan penskalaan untuk menangani beban kerja yang besar. Memindahkan kode ke data menggunakan komputasi dalam memori mungkin merupakan pilihan yang lebih baik. Ini meningkatkan kinerja dengan meminimalkan pergerakan data, dan memberikan skalabilitas tinggi. Ini juga menyederhanakan desain aplikasi dengan memanfaatkan akses terstruktur ke data.
Untuk mempelajari lebih lanjut tentang ScaleOut Digital Twins dan menguji pendekatan ini dalam mengelola objek data dalam alur kerja yang kompleks, silakan kunjungi: https://www.scaleoutdigitaltwins.com/landing/scaleout-data-twins.