Assalamu‘alaikum wr. wb.
Halo guys! Salah satu Prinsip atau Praktik Terbaik untuk membuat Aplikasi/Software berbasis Web (Web Applications) adalah 12-Factor App (Twelve-Factor App) atau Aplikasi Dua Belas Faktor (Aplikasi 12 Faktor). Mari kita Simak pada Artikel berikut ini!
Sumber Artikel : en.Wikipedia.org, Techtarget.com, Geeksforgeeks.org, dan Dev.to (@cadienvan)
A. Pengertian 12 Factor App
Aplikasi Twelve-Factor adalah metodologi untuk membangun aplikasi terdistribusi yang berjalan di cloud dan disajikan sebagai layanan. Pendekatan ini dikembangkan oleh Adam Wiggins, salah satu pendiri Heroku, sebuah platform sebagai layanan (PaaS) yang sekarang menjadi bagian dari Salesforce. Tujuan Wiggins adalah untuk menyatukan praktik terbaik dalam penerapan aplikasi di Heroku dan memberikan kerangka kerja bagi pengembang yang baru mengenal cloud agar dapat mendiskusikan tantangan aplikasi yang bersifat cloud-native.
Meskipun beberapa faktor mungkin terlihat jelas bagi pengembang saat ini, minat untuk mengembangkan aplikasi yang mengikuti praktik terbaik umum terus meningkat dengan berkembangnya microservices dan aplikasi yang terdiri dari layanan web yang saling terhubung secara longgar.
B. Aplikasi 12 Faktor (12 Factor App)
Metodologi Aplikasi Twelve-Factor adalah serangkaian praktik terbaik untuk membangun aplikasi modern berbasis cloud. Metodologi ini diciptakan oleh Adam Wiggins dan secara luas dianggap sebagai standar untuk membangun aplikasi perangkat lunak yang skalabel, andal, dan mudah dikelola. Dalam artikel ini, saya akan memperkenalkan dua belas faktor yang penting untuk membangun aplikasi cloud-native yang efektif.
1. Codebase
Setiap aplikasi hanya memiliki satu basis kode yang dikelola dalam sistem kontrol versi, meskipun dapat dideploy berkali-kali. Basis kode ini mencakup semua kode sumber yang ditulis oleh manusia dan harus dikelola dengan alat kontrol versi seperti Git. Jika ada lebih dari satu basis kode untuk suatu aplikasi, maka aplikasi tersebut bukanlah satu aplikasi tunggal, tetapi bagian dari sistem terdistribusi.
2. Dependencies (Ketergantungan)
Semua ketergantungan aplikasi harus dideklarasikan dan diisolasi dengan jelas. Hal ini menghindari kesalahan akibat versi pustaka atau paket yang tidak cocok. Ketergantungan dideklarasikan dalam berkas manifest yang memuat informasi versi pustaka yang diperlukan, sehingga pengembang tidak perlu mengelola versi pustaka secara manual.
3. Config (Konfigurasi)
Konfigurasi harus disimpan dalam variabel lingkungan, bukan di dalam kode sumber. Hal ini memungkinkan aplikasi untuk dengan mudah dikonfigurasi sesuai lingkungan yang berbeda, seperti pengembangan, staging, atau produksi, tanpa mengorbankan keamanan.
4. Backing Services
Layanan pendukung seperti database dan cache harus diperlakukan sebagai sumber daya eksternal. Artinya, aplikasi seharusnya tidak bergantung pada lokasi tertentu dari layanan ini dan harus dapat dengan mudah mengganti layanan yang digunakan.
5. Build, Release, Run
Build, Release, Run Proses deployment harus dipisahkan menjadi tiga fase yang berbeda: build, release, dan run. Fase build melibatkan kompilasi kode, fase release menambahkan konfigurasi lingkungan, dan fase run menjalankan aplikasi. Pemisahan ini memastikan pengelolaan yang baik dalam siklus hidup aplikasi.
6. Processes (Proses)
Aplikasi harus berjalan sebagai satu atau lebih proses stateless, artinya data harus disimpan dalam penyimpanan persisten. Data sementara dapat disimpan dalam memori proses, tetapi sebaiknya dihindari penggunaan sesi yang "lengket" (sticky session) agar beban dapat terdistribusi secara merata.
7. Port Binding (Pengikatan Port)
Aplikasi yang mematuhi prinsip ini adalah aplikasi mandiri yang dapat mengikat dirinya ke port tertentu dan menerima permintaan di port tersebut tanpa memerlukan server tambahan. Informasi port biasanya disimpan dalam berkas konfigurasi aplikasi.
8. Concurrency (Konkruensi)
Aplikasi harus dipecah menjadi proses-proses kecil yang independen dan dapat diskalakan secara horizontal, yaitu dengan menambahkan lebih banyak instance dari proses tersebut. Hal ini memungkinkan aplikasi menangani lebih banyak permintaan secara efisien.
9. Disposability (Dapat Dihapus)
Aplikasi harus dirancang agar dapat memulai dan berhenti dengan cepat. Hal ini memastikan bahwa aplikasi dapat dengan cepat memulai ulang tanpa mengganggu fungsionalitas utamanya, sehingga meningkatkan ketahanan.
10. Dev/Prod Parity
Lingkungan pengembangan, staging, dan produksi harus dibuat semirip mungkin untuk meminimalkan kejutan ketika aplikasi dipindahkan dari pengembangan ke produksi. Ini membantu mendeteksi masalah sejak tahap pengembangan.
11. Logs
Log harus diperlakukan sebagai aliran peristiwa. Log digunakan untuk melacak dan menganalisis jalannya aplikasi. Aplikasi seharusnya tidak perlu mengkhawatirkan penyimpanan log, karena log dianggap sebagai aliran peristiwa yang bisa diakses untuk keperluan debugging.
12. Admin processes
Tugas administratif atau manajemen yang jarang dilakukan harus dieksekusi sebagai proses satu kali (one-off) dan menjadi bagian dari basis kode yang dikelola dalam sistem kontrol versi. Hal ini memudahkan untuk menjalankan tugas seperti migrasi database atau backup.
Itulah Pembahasan mengenai 12-Factor App (Twelve-Factor App) atau Aplikasi Dua Belas Faktor (Aplikasi 12 Faktor).
Terima Kasih 😄😘👌👍 :)
Wassalamu‘alaikum wr. wb.