Pikiran Pada Elixir: Pro Dan Kontra Dari Alat Yang Paling Populer Untuk Dev Beban Tinggi



Mengapa Elixir / Phoenix mencapai tingkat adopsi yang begitu tinggi dalam industri pengembangan perangkat lunak? Apa kasus penggunaan terbaik dari bahasa ini? Apakah ada kekurangan saat menggunakannya? Kami berbicara dengan Sergiy Kukunin, pengembang full-stack di Spotlight dan pakar Elixir, untuk menemukan jawaban untuk ini dan pertanyaan lain.

Ivan: mengapa Elixir menjadi begitu populer?


Sergey: Elixir menampilkan prinsip-prinsip yang jarang dipenuhi dalam bahasa lain. Juga didasarkan pada Erlang yang digunakan untuk membangun jaringan telekomunikasi. Sebagai hasilnya, kami memiliki alat yang sangat andal untuk proyek beban tinggi yang terbukti dari waktu ke waktu.

Ini penting, karena dalam beberapa tahun terakhir kemajuan teknologi perangkat keras melambat. Kinerja satu inti CPU telah mencapai batas fisik 5 GHz. Satu-satunya hal yang dilakukan produsen untuk meningkatkan kinerja perangkat keras adalah dengan menggunakan lebih banyak core.

Masalah dengan pendekatan ini adalah bahwa Anda memerlukan perangkat lunak yang mampu bekerja dengan banyak core secara paralel. Bahasa pemrograman klasik tidak cocok untuk tugas-tugas seperti itu. Ketika berbicara tentang multithreading di, katakanlah, C, kita tahu bahwa ada memori bersama dan beberapa utas yang dapat bersaing untuk sumber daya. Dalam kondisi seperti itu, sulit untuk membuat kode yang dapat diandalkan untuk proyek beban tinggi karena kondisi balapan acak dan kesalahan segmentasi.

Elixir secara efektif menyelesaikan masalah ini dengan memperkenalkan pendekatan baru untuk multithreading.

Apa keunggulan inti dari teknologi ini?


Karakteristik penting pertama dari bahasa yang berasal dari sifat fungsionalnya adalah kekekalan. Setelah kami membuat dan memuat struktur data (tidak ada objek dalam bahasa fungsional), kami tidak dapat mengubahnya, kecuali dengan membuatnya kembali dari awal.

Di satu sisi, kekhasan ini mengangkat ambang entri untuk menggunakan Elixir, karena Anda tidak dapat memilih satu bagian aplikasi dan mencoba untuk merekam sesuatu di sana berulang kali, dan berakhir dengan semuanya berjalan dan berjalan. Di sisi lain, ini membuat insinyur merencanakan arsitektur aplikasi lebih menyeluruh.

Mesin virtual Elixir secara harfiah adalah mini-OS, di mana setiap proses memiliki ruang memori sendiri. Tidak ada proses lain yang dapat masuk ke dalamnya, meminjam sumber dayanya. Yang dapat dilakukan oleh suatu proses hanyalah mengirim pesan ke proses lain, tanpa kontrol bagaimana prosesnya. Juga, karena ini adalah bahasa fungsional, tidak ada struktur data yang tidak dapat ditransmisikan antar proses, bahkan melalui jaringan (tidak seperti pendekatan yang digunakan dalam bahasa berorientasi objek).

Lebih sulit untuk menulis kode Elixir karena beberapa batasan runtime berlaku, dan butuh waktu lebih lama daripada menulis sesuatu menggunakan Java. Namun, keandalan aplikasi secara keseluruhan sangat tinggi.

Apakah ada alternatif selain Elixir?


Pendekatan yang paling mirip adalah coroutine yang digunakan dalam bahasa Go. Juga, Greenlets dan serat Python di Ruby memberikan pendekatan yang serupa, tetapi tidak ada runtime yang kuat dan cepat untuk menjalankannya. Pengembang harus memutuskan bagaimana menjalankan coroutine ini, sementara Erlang menangani semua itu sendiri.

Alat apa pun memiliki kekurangannya. Apa itu untuk Elixir?


Elixir saat ini adalah alat yang siap produksi, tetapi ekosistem bahasa secara keseluruhan masih agak terlalu muda. Secara khusus, ini berarti Anda tidak bisa hanya masuk ke Stack Overflow dan menemukan jawaban untuk semua pertanyaan Anda yang mungkin, seperti yang dapat Anda lakukan untuk di Ruby, misalnya. Ya, ada buku, kursus, dan beberapa blog, tetapi Anda harus terus melakukan penelitian dan eksperimen untuk menyelesaikan banyak tugas sehari-hari. Ini adalah kelemahan utama bagi saya.

Selain itu, lebih sulit untuk menguji aplikasi Elixir karena tes unit kurang membantu, dan Anda perlu lebih fokus pada yang integrasi. Namun, Anda harus ingat bahwa hampir semua fungsi Elixir bersih, yang membuat unit test lebih sederhana: ada satu output untuk setiap input.

Bisakah Anda menggambarkan kasus saat menggunakan Elixir memberikan hasil maksimal?


Jika Anda tidak memiliki kebutuhan nyata untuk mendukung beban tinggi dengan jutaan permintaan yang diproses oleh aplikasi Anda, maka Elixir bukanlah alat yang harus Anda gunakan. Namun, Elixir adalah solusi sempurna untuk proyek-proyek dengan beban tinggi nyata. Anda bahkan mungkin tidak menulis semua aplikasi Anda menggunakannya, tetapi menggunakan Elixir untuk bagian terpanas dari suatu sistem akan selalu menjadi ide yang baik.

Di era internet yang dinamis ketika pengguna mengharapkan kecepatan yang sangat tinggi dan respons langsung oleh situs web apa pun, terutama sumber daya terkait konten. Jika Anda, katakanlah, memiliki outlet media online dengan banyak koneksi bersamaan dari ribuan pembaca yang ingin menerima pembaruan berita secara instan, maka pindah ke Elixir akan membuat hidup Anda jauh lebih mudah.

Pengalaman pribadi: pada satu proyek kami memiliki aplikasi web Node.js yang mampu mempertahankan hingga 20.000 koneksi sekaligus. Setelah pindah ke Elixir, jumlah ini tumbuh menjadi 80.000 tanpa ada perubahan dalam logika atau bisnis. Hasil ini dimungkinkan semata-mata karena efisiensi bahasa yang kami gunakan lebih baik.

Elixir memungkinkan pembuatan hal-hal yang tidak terpikirkan beberapa tahun yang lalu, seperti membuat game online yang sepenuhnya ditampilkan di sisi server menggunakan soket web. Bahkan ada contoh permainan Ular web yang ditulis di Elixir tanpa kode JavaScript sama sekali.

Namun, pengembang harus memahami bahwa tidak ada peluru perak. Elixir tidak bisa memberi Anda lebih dari yang seharusnya dimiliki oleh mesin virtual Erlang. Itu hanya menerjemahkan sintaks baru sehingga kompiler lama yang belum bagus yang dibuat oleh Ericsson pada akhir 90-an dapat memahaminya. Ini adalah contoh sempurna tentang bagaimana teknologi yang telah terbukti waktu dikombinasikan dengan yang baru dapat membuka kemungkinan baru bagi pengembang, tetapi selalu ada beberapa kendala.

Apa saran Anda ketika mulai menggunakan Elixir? Teknologi apa yang harus dipelajari seseorang untuk bangkit dan bekerja lebih cepat?


Nah, sintaksis dari Elixir memiliki beberapa kesamaan dengan Ruby. Bahasanya sangat berbeda, tetapi selalu baik untuk melihat simbol dan elemen yang biasa Anda gunakan. Yang paling sederhana adalah menggunakan beberapa kerangka kerja pengembangan web yang kompatibel dengan Elixir. Kerangka web paling populer untuk Elixir adalah Phoenix. Anda harus mencobanya, terutama jika Anda terbiasa menggunakan Ruby on Rails. Ini akan menyederhanakan pengembangan sambil tetap membuat aplikasi lebih cepat dan lebih dapat diandalkan.

Source: https://habr.com/ru/post/id449522/


All Articles