Blog
November 25, 2023

Menggunakan Elixir Phoenix dalam Proyek SaaS Komersial

Linkly ditulis dalam Elixir.

Saya selalu ingin terpapar pada ekosistem Erlang, dan Elixir adalah rute yang mudah.

Saya tidak akan membahas manfaat BEAM atau Erlang secara langsung di sini, karena telah ditulis di tempat lain. Sebaliknya, saya akan fokus pada praktik penggunaan Elixir Phoenix untuk proyek nyata.

Saya akan mengasumsikan Anda tahu apa itu Ruby on Rails, karena Phoenix, web framework Elixir, sangat terinspirasi oleh Rails.

Benar-Benar Memprogram di Elixir Phoenix

Menulis dalam Elixir adalah pengalaman yang menyenangkan.

Ini mengikuti paradigma serupa dengan Rails, termasuk MVC, dan bahkan terlihat serupa.

Tidak seperti Rails, kode dikompilasi sebelum dijalankan. Ini adalah langkah yang berguna karena memungkinkan Anda menangkap kesalahan yang mungkin tidak akan Anda tangkap sebaliknya.

Model di Phoenix dikelompokkan menjadi 'Contexts'. Ini adalah tingkat abstraksi tambahan, yang dimaksudkan untuk menciptakan pemisahan yang jelas antara bagian-bagian aplikasi, misalnya Users dan Products. Setiap context dapat berisi sejumlah model.

Performa

Banyak yang telah ditulis tentang performa di blog lain, jadi saya akan membahas sisi praktisnya di sini.

Untuk web framework yang sepenuhnya dilengkapi, performanya jelas jauh lebih cepat daripada Rails, dan memerlukan jauh lebih sedikit hardware untuk dijalankan.

Waktu 'boot' menjalankan mix phx.server versus rails server lebih cepat. Bahkan saat mengembangkan di laptop, halaman dimuat jauh lebih cepat dengan Phoenix.

Ketersediaan Paket untuk Elixir Phoenix vs Rails

Secara sepintas, sepertinya ada perbedaan di sini. Rails memiliki ribuan gem versus repositori Hex milik Elixir.

Ternyata, hampir semuanya yang akan Anda gunakan tersedia dalam sistem paket Elixir Hex - parser JSON, klien HTTP, alat untuk memformat dan mem-parsing Markdown - semuanya ada di sana, dan kualitas modulnya luar biasa.

Di Rails, ada secara substansial lebih banyak gem, tetapi Anda tidak akan pernah menyertakannya dalam proyek nyata, karena status unmaintained atau risiko yang terkait dengan membangun terlalu banyak dependensi eksternal ke dalam aplikasi Anda.

Platform seperti Stripe dan Recurly memelihara gem Rails mereka sendiri untuk berinteraksi dengan API mereka. Ini dapat berguna, dan umumnya kurang mendapat dukungan untuk Elixir.

Namun, saya menemukan bahwa sangat mudah untuk menggunakan paket Tesla milik Elixir untuk berinteraksi dengan endpoint HTTP layanan, dan pada akhirnya lebih suka bekerja dengan cara ini, versus menggunakan gem yang sudah dikemas, karena lebih ringan dan memungkinkan Anda memahami apa yang terjadi.

Abstraksi Database - Ecto dan ActiveRecord

Ecto tidak sepenuhnya dilengkapi seperti ActiveRecord.

Itu tidak dimaksudkan demikian.

Ecto adalah pembungkus database sederhana yang memetakan kueri database ke objek Elixir.

Awalnya, saya merasa frustrasi bahwa itu tidak bekerja seperti ActiveRecord.

Namun, Ecto memungkinkan Anda berinteraksi dengan database dengan cara yang sangat mudah, dan sebenarnya membuat pemrograman aplikasi web jauh lebih mudah.

Dengan ActiveRecord, begitu Anda mulai membangun kueri kompleks, membutuhkan waktu lebih lama untuk mengetahui ActiveRecord daripada hanya menulis kueri sebagai SQL.

Setelah menggunakan keduanya, saya menyimpulkan bahwa menggunakan pembungkus database ringan seperti Ecto lebih mudah daripada menggunakan abstraksi berat seperti ActiveRecord.

Ini memberi Anda keamanan menggunakan pembungkus database, tanpa sakit kepala dan beban abstraksi yang 'terlalu pintar'.

Keduanya berisi fungsionalitas migrasi dan rollback.

Database default untuk proyek Phoenix adalah Postgres.

Bagi mereka yang menggunakan database NoSQL, Ecto bekerja dengan Mongo.

Yang lebih baik lagi, Ecto bekerja dengan fitur NoSQL milik Postgres, memungkinkan Anda menyimpan dan membuat kueri JSON tanpa perlu Mongo.

Otentikasi Pengguna

Ini adalah tempat Elixir Phoenix kekurangan.

Rails memiliki modul Devise. Phoenix memiliki Coherence, namun saat ini tidak dirawat.

Jika Anda ingin menggunakan login nama pengguna & kata sandi dasar, Anda harus membangun setiap langkahnya. Itu termasuk hashing kata sandi, logika reset kata sandi, pengaturan 'remember-me' dll.

Ini membosankan dan membawa risiko keamanan yang substansial.

Saya memilih untuk menggunakan Auth0, yang bekerja dengan Phoenix dengan baik. Mungkin ini adalah solusi yang lebih baik pula, tetapi akan lebih baik memiliki pilihan.

Penyebaran & Hosting

Host utama aplikasi Phoenix adalah Gigalixir, perusahaan Amerika kecil yang dijalankan oleh penggemar Elixir.

Gigalixir dihosting di Google Cloud, jadi infrastruktur dasarnya solid.

Buildpack Gigalixir membuat penyebaran mudah, dan mendukung semua strategi penyebaran pintar Elixir (distillery, mix).

Ini lebih mahal daripada 'roll-your-own', tetapi sebagian besar biaya dibungkus dalam hosting database Postgres.

Elixir Phoenix sangat ringan sehingga dapat dijalankan pada pod docker kecil dan tetap menangani jumlah permintaan yang sangat sehat.

Meskipun markup-nya, sangat layak untuk menghilangkan sakit kepala.

Saya akan menambahkan, dukungan pelanggan mereka luar biasa.

Ketersediaan Programmer

Ada jauh lebih sedikit programmer Elixir di luar sana.

Elixir adalah "programmer's language" - bahasa yang dipilih orang setelah mempelajari sesuatu yang lain.

Meskipun demikian, mereka yang melakukan Elixir biasanya adalah programmer yang lebih baik. Mungkin ini adalah pilihan sadar memilih bahasa yang lebih baik.

Ini mengingatkan saya pada hari-hari awal Rails, di mana terlihat seperti hanya "rockstars" yang akan menggunakannya (versus PHP).

Programmer Rails yang baik tidak akan memiliki masalah memilih Elixir Phoenix, dan akan segera berjalan dalam beberapa hari.

Apakah Saya akan Menggunakan Elixir Phoenix Lagi?

Pasti.

Saya telah bekerja dengan banyak bahasa, dan Elixir adalah yang paling mudah dan paling kuat yang pernah saya gunakan.

Saya menantikan penulisan Elixir.

Dapatkan 100 tautan pendek dan lacak 500 klik bulanan secara gratis.

Mulai Gratis

Tidak diperlukan kartu kredit.

Volume tinggi? Hubungi tim kami.