- Belakangan ini, pendekatan hibrida yang mengintegrasikan Go dan Rust sebagai bahasa ekstensi di dalam arsitektur monolitik PHP semakin mendapat perhatian
- Sebelumnya, kombinasi microservice Go dan monolitik PHP 8.3 memungkinkan tercapainya keseimbangan antara produktivitas dan kinerja tinggi
- Sesuai hukum Pareto (80% trafik terkonsentrasi pada 20% API), optimalisasi endpoint hotspot menjadi hal yang penting, dan di masa lalu hal ini ditangani dengan caching serta pemisahan layanan Go, tetapi kompleksitasnya meningkat
- Perkembangan terbaru dalam ekosistem PHP menghadirkan teknik seperti FFI, ekstensi Rust, dan ekstensi Go (FrankenPHP) sehingga kinerja dapat ditingkatkan secara signifikan di dalam monolitik itu sendiri
- Ekstensi Rust memberikan keamanan memori dan kecepatan sekaligus, sementara FrankenPHP menunjukkan peningkatan kinerja lebih dari 4x lewat worker mode dan ekstensi berbasis Go
- Tanpa harus menanggung biaya dan risiko menulis ulang semuanya ke Go/Rust, pendekatan PHP hibrida memungkinkan tercapainya produktivitas dan kecepatan sekaligus
Latar belakang dan arsitektur sebelumnya
- Sebelumnya, pengembangan berpusat pada aplikasi monolitik DDD (mother), lalu microservice berbasis Go (children) dikembangkan secara terpisah untuk mengoptimalkan fungsi tertentu
- Microservice Go menangani pemrosesan trafik berkinerja tinggi, sementara monolitik PHP 8.3 memberikan pengembangan fitur yang cepat dan keandalan deployment dalam lingkungan tim backend kecil
- Struktur ini menawarkan titik keseimbangan yang mampu menghadirkan kecepatan, stabilitas, dan produktivitas sekaligus
Titik bottleneck kinerja dan cara penanganan sebelumnya
- Prinsip Pareto bahwa 80% trafik terkonsentrasi pada 20% endpoint API sering diamati
- Untuk 20% area yang paling penting dari sisi kinerja ini, diterapkan berbagai cara seperti penulisan kode yang dioptimalkan, penambahan lapisan caching, dan pemisahan microservice Go
- Namun, pendekatan ini memiliki keterbatasan dari sisi kompleksitas dan beban operasional
Opsi hibrida dalam ekosistem PHP modern
- Kini semakin banyak teknologi yang memungkinkan peningkatan kinerja langsung di dalam monolitik PHP
-
1. FFI (Foreign Function Interface)
- Fitur FFI di PHP memungkinkan kode C dipanggil langsung dari PHP
- Logika level sistem maupun logika kritikal terhadap kinerja dapat diimplementasikan di dalam proyek PHP
- Namun, penggunaannya disarankan hanya pada situasi yang tepat dengan mempertimbangkan biaya context switching
-
2. Ekstensi berbasis Rust
- Ekstensi PHP dapat dikembangkan dengan Rust (atau Zig)
- Area pemrosesan beban tinggi dapat di-offload ke ekstensi Rust yang memiliki stabilitas memori dan kinerja kompilasi, sehingga keandalan dan kecepatan tinggi bisa diperoleh sekaligus
-
3. Ekstensi berbasis Go: FrankenPHP
- Setelah beralih ke FrankenPHP, saat dijalankan dalam worker mode, terlihat kinerja lebih dari 4x lebih cepat dibanding sebelumnya
- Rilis terbaru juga memungkinkan penulisan ekstensi PHP dengan Go
- Dengan ini, kinerja API Go dapat langsung dimanfaatkan di dalam monolitik PHP, sehingga produktivitas dan kecepatan bisa digabungkan tanpa memecah bahasa
Mengapa bukan migrasi total ke Go atau Rust
- Biaya penulisan ulang total dan risikonya sangat tinggi
- Mengganti sepenuhnya aplikasi yang sudah besar dan stabil ke Go atau Rust membutuhkan risiko dan sumber daya yang besar
- PHP sendiri masih memiliki kekuatan
- Untuk sebagian besar kebutuhan bisnis, pengembangan cepat, ekosistem yang ramah, dan performa yang cukup cepat dari PHP tetap kompetitif
- Jika hanya area tertentu yang benar-benar membutuhkan batas performa tertinggi yang disusun secara hibrida dengan Go atau Rust, kebutuhan migrasi total dapat dihilangkan
Kesimpulan: nilai dari PHP hibrida
- Ekosistem PHP modern menyediakan produktivitas pengembangan yang cepat sekaligus opsi integrasi ekstensi berkinerja tinggi (C, Rust, Go)
- Dengan struktur hibrida seperti ini, kecepatan dan produktivitas dapat dicapai bersamaan
- Ini menghadirkan paradigma arsitektur baru yang memungkinkan pengembangan tetap berpusat pada PHP sambil memperluas bahasa secara selektif sesuai kebutuhan
Belum ada komentar.