Traffine I/O

Bahasa Indonesia

2023-04-19

Twelve-Factor App

Apa itu Twelve-Factor App

Twelve-Factor App adalah sebuah metodologi untuk membangun aplikasi modern, terutama aplikasi berbasis web dan Software as a Service (SaaS). Metodologi ini menguraikan sekumpulan dua belas praktik terbaik yang bertujuan untuk meningkatkan skalabilitas, maintainability, dan portabilitas. Prinsip-prinsip ini memfasilitasi pengembangan aplikasi yang dapat dengan mudah berpindah antara berbagai tahap, mulai dari pengembangan hingga penyebaran, dan beroperasi secara efisien di lingkungan cloud.

Dua Belas Faktor

Saya akan menguraikan setiap dari dua belas faktor ini dan menjelajahi signifikansinya, aplikasinya, dan praktik terbaik.

Faktor 1: Kode Sumber

Satu Kode Sumber, Beberapa Penyebaran

Faktor pertama menentukan bahwa suatu aplikasi harus memiliki satu kode sumber yang dilacak dalam sistem kontrol versi. Dapat dilakukan beberapa penyebaran dari kode sumber ini. Prinsip ini mendorong maintainability dan konsistensi di berbagai tahap siklus hidup aplikasi.

Dengan menggunakan sistem kontrol versi seperti Git, Mercurial, atau SVN, pengembang dapat mengelola kode sumber secara efisien, melacak perubahan, berkolaborasi, dan menghindari versi kode yang saling bertentangan.

Kontrol Versi

Kontrol versi merupakan aspek penting dalam pengembangan perangkat lunak modern. Ini tidak hanya memberikan catatan historis tentang perubahan kode, tetapi juga memungkinkan beberapa kontributor untuk bekerja secara bersamaan tanpa menimpa pekerjaan satu sama lain. Penting untuk menggunakan kontrol versi untuk kode sumber dan menjadikannya sebagai sumber kebenaran aplikasi Anda.

Faktor 2: Ketergantungan

Mengelola Ketergantungan

Ketergantungan adalah perpustakaan eksternal dan alat yang diperlukan oleh aplikasi Anda. Faktor kedua menyarankan untuk secara eksplisit mendeklarasikan dan mengisolasi ketergantungan, daripada menganggap bahwa ketergantungan tersebut ada dalam lingkungan. Dengan melakukan hal ini, Anda dapat memastikan bahwa aplikasi Anda berjalan secara konsisten di berbagai lingkungan.

Isolasi Ketergantungan

Alat seperti virtual environment dalam Python, npm dalam Node.js, dan Bundler dalam Ruby, memungkinkan Anda untuk mengisolasi ketergantungan aplikasi Anda. Isolasi ini memastikan bahwa aplikasi Anda tidak secara implisit bergantung pada paket yang ada di seluruh sistem, yang dapat menyebabkan konflik versi dan inkonsistensi antar lingkungan.

Faktor 3: Konfigurasi

Pemisahan Konfigurasi dan Kode

Faktor ketiga menekankan pentingnya memisahkan konfigurasi dari kode. Konfigurasi mencakup semua hal yang mungkin berbeda antara penyebaran, seperti kredensial database, kunci API, dan pengaturan yang khusus untuk setiap lingkungan. Menyimpan pengaturan ini di dalam kode sumber dapat menyebabkan kerentanan keamanan dan mengurangi portabilitas.

Variabel Lingkungan

Variabel lingkungan adalah metode umum untuk mengelola konfigurasi. Mereka memungkinkan Anda untuk menyimpan konfigurasi secara terpisah dari kode sumber dan dapat dengan mudah dimodifikasi tanpa mengubah kode.

Faktor 4: Layanan Pendukung

Perlakuan Layanan Pendukung sebagai Resource Terlampir

Layanan pendukung, seperti database, sistem pesan, atau caching, harus diperlakukan sebagai resource terlampir. Ini berarti aplikasi tidak harus membedakan antara layanan lokal dan layanan pihak ketiga.

Kopling Longgar

Abstraksi ini mendorong kopling longgar dan portabilitas, karena aplikasi dapat dengan mudah beralih antara penyedia layanan yang berbeda tanpa perubahan kode. Detail konfigurasi seperti endpoint layanan dan kredensial harus disimpan dalam variabel lingkungan.

Faktor 5: Build, Release, Run

Proses Penyebaran

Faktor kelima memisahkan proses penyebaran menjadi tiga tahap: build, release, dan run. Tahap build melibatkan kompilasi kode dan penyelesaian ketergantungan. Tahap release menggabungkan hasil build dengan konfigurasi. Tahap run menjalankan aplikasi di lingkungan eksekusi.

Rilis Tak Berubah

Setelah rilis dibuat, rilis tersebut harus tidak berubah, artinya tidak ada perubahan yang dapat dilakukan padanya. Jika perubahan diperlukan, rilis baru harus dibuat dari tahap build.

Faktor 6: Proses

Proses Stateless

Faktor keenam menyarankan agar aplikasi dijalankan sebagai satu atau lebih proses stateless. Ini berarti aplikasi tidak harus bergantung pada penyimpanan lokal untuk persistensi, karena penyimpanan lokal umumnya bersifat sementara di lingkungan cloud.

Skalabilitas Proses

Statelessness memungkinkan aplikasi untuk ditingkatkan secara horizontal dengan menambahkan lebih banyak proses. Setiap proses harus independen dan tidak berbagi apapun dengan proses lain yang sedang berjalan.

Faktor 7: Penjalinan Port

Layanan Mandiri

Aplikasi harus mandiri dan tidak bergantung pada penyuntikan web server ke dalam lingkungan eksekusi. Mereka harus dapat mengikat diri ke suatu port untuk melayani permintaan.

Eksport Layanan melalui Penjalinan Port

Faktor ini menekankan bahwa aplikasi web harus dapat terikat ke sebuah port dan menerima permintaan masuk tanpa mengandalkan web server eksternal. Hal ini membuat skalabilitas, penyebaran, dan pengelolaan aplikasi menjadi lebih mudah dan fleksibel.

Faktor 8: Konkurensi

Model Proses

Konkurensi dalam konteks Twelve-Factor App mengacu pada kemampuan aplikasi untuk meningkatkan skala secara horizontal, yaitu dengan menambahkan lebih banyak instance yang berjalan daripada meningkatkan kapasitas pada satu instance yang ada. Aplikasi harus dirancang sebagai kumpulan proses kecil yang saling berkomunikasi melalui backplane.

Skalabilitas melalui Model Proses

Ini memungkinkan aplikasi untuk ditingkatkan secara horizontal dengan mudah hanya dengan menambahkan lebih banyak proses. Jenis pekerjaan yang berbeda dapat ditugaskan ke jenis proses yang berbeda, dan Anda dapat menyesuaikan skala mereka secara independen berdasarkan kebutuhan beban kerja.

Faktor 9: Disposabilitas

Memulai dengan Cepat dan Berhenti dengan Elegan

Aplikasi harus dapat memulai dengan cepat dan juga dapat berhenti dengan elegan ketika menerima sinyal untuk melakukannya. Hal ini memastikan bahwa aplikasi dapat dengan cepat dan dapat diandalkan ditingkatkan, diimplementasikan, dan dirilis.

Keandalan dengan Komponen yang Dapat Dibuang

Membuat komponen dapat dibuang memastikan bahwa sistem dapat pulih dari kegagalan dan perubahan secara otomatis, meningkatkan keandalan dan ketahanannya.

Faktor 10: Kesamaan Dev/Prod

Penyebaran Terus-Menerus

Faktor ini menekankan pentingnya menjaga lingkungan pengembangan, pengujian, dan produksi sejalan sebisa mungkin. Hal ini membantu dalam mengidentifikasi dan mengatasi masalah secara dini dalam siklus pengembangan dan memfasilitasi penyebaran terus-menerus.

Menjaga Lingkungan Pengembangan, Pengujian, dan Produksi sejalan sebisa mungkin

Dengan memastikan bahwa kesenjangan antara pengembangan dan produksi kecil, tim dapat memahami dan menangani masalah produksi dengan lebih efisien dan dapat diandalkan. Hal ini melibatkan penggunaan layanan pendukung, database, dan konfigurasi lingkungan yang serupa.

Faktor 11: Log

Aliran Log

Aplikasi tidak harus memperhatikan pengelolaan file log. Sebaliknya, mereka harus menulis log ke output standar, memungkinkan lingkungan eksekusi untuk menangkap log tersebut.

Manajemen dan Pemantauan Log

Di produksi, penting untuk memiliki sistem manajemen log yang menggabungkan aliran log, memantau, dan memberikan peringatan berdasarkan log tersebut. Hal ini membantu dalam debugging, pemantauan kinerja, dan pemahaman perilaku pengguna.

Faktor 12: Proses Admin

Menjalankan Tugas Administratif

Tugas administratif satu kali, seperti migrasi database, harus dijalankan di lingkungan yang identik dengan proses berjalan reguler aplikasi.

Proses Satu Kali

Ini memastikan bahwa semua tugas administratif dilakukan dalam kondisi yang sama dengan aplikasi, mengurangi ketidaksesuaian dan perilaku yang tidak terduga. Proses satu kali harus diotomatiskan dan dikelola melalui kode dalam sistem kontrol versi.

Referensi

https://12factor.net

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!