Memberdayakan Aplikasi Interaktif Real Time Dengan Elixir Dan Phoenix
Memberdayakan Aplikasi Interaktif Real Time Dengan Elixir Dan Phoenix – Elixir adalah bahasa pemrograman yang relatif baru yang terinspirasi oleh Erlang. Phoenix, kerangka kerja yang ditulis dalam Elixir yang mewakili pendekatan modern untuk pengembangan aplikasi web, terutama dalam hal aplikasi interaktif waktu nyata. Phoenix dirancang untuk bermain dengan baik dengan Elixir.
Memberdayakan Aplikasi Interaktif Real Time Dengan Elixir Dan Phoenix
elixir-memory – Di blog ini, kita melihat alasan mengapa Elixir dan Phoenix sangat cocok untuk aplikasi platform interaktif real time yang melibatkan beberapa pengguna secara bersamaan. Membuat aplikasi phoenix menggunakan perintah di atas menyediakan segalanya untuk memulai dengan fitur real time. Fitur utama yang harus dilihat adalah Endpoints, Sockets, Channels, Plugs, ETS, Presence, dan LiveView.
Titik Akhir
Titik akhir hanyalah batas tempat semua permintaan ke aplikasi web Anda dimulai, dan memiliki beberapa tujuan menyediakan pembungkus untuk memulai dan menghentikan proses yang merupakan bagian dari pohon pengawasan, mendefinisikan pipa plug awal untuk permintaan untuk melewati, dan juga mengelola konfigurasi untuk aplikasi Anda. Titik akhir aplikasi berfungsi sebagai titik awal di mana titik akhir soket kita ditentukan. Ini adalah tempat di mana soket didefinisikan pada socket URI dan memberi tahu aplikasi kita bahwa semua permintaan koneksi akan ditangani oleh modul UserSocket. Phoenix dirancang untuk menggunakan WebSockets secara default daripada polling panjang, tetapi dilengkapi dengan dukungan untuk keduanya.
Aplikasi web waktu nyata sering menggunakan protokol WebSocket untuk menyampaikan informasi dari server ke klien, baik secara langsung maupun tidak langsung melalui kerangka kerja (seperti Socket.io). Kerangka kerja Phoenix memiliki fungsionalitas WebSocket bawaan, yang dapat digunakan dengan modul Socket dan Channel. Soket bertanggung jawab untuk mengikat transport dan saluran bersama-sama. Setelah terhubung ke soket, acara masuk dan keluar dialihkan ke saluran. Data klien yang masuk dialihkan ke saluran melalui transportasi.
Baca Juga : 13 Kerangka Kerja Untuk Membangun API Di Elixir
Channels
Komponen utama perpustakaan Phoenix adalah channels. Ini memungkinkan jutaan klien yang terhubung untuk berkomunikasi secara real time. Chris McCord, Pencipta kerangka Phoenix mampu mencapai2 juta koneksi websocket2 juta koneksi websocketpada satu komputer dengan Phoenix Channels, tetapi dengan membagi lalu lintas ke banyak node, kinerjanya mungkin lebih baik. Modul Channel adalah implementasi GenServer dengan fungsi panggilan balik bergabung yang memungkinkan soket terhubung ke topik channel.
Klien yang terhubung ke topik channel akan memicu fungsi panggilan balik bergabung yang melaluinya Proses Phoenix.Channel.Server baru diluncurkan. Proses server Channel berlangganan topik channel yang digabungkan di PubSub lokal. Proses Phoenix.Channel.Server ini kemudian menyampaikan pesan ke setiap klien di server yang sama yang terhubung ke topik channel yang sama. Pesan tersebut kemudian diteruskan oleh server PubSub ke server PubSub jarak jauh mana pun yang beroperasi pada node lain dalam cluster, yang kemudian mengirimkannya ke klien langganan mereka sendiri.
Plugs
Plug adalah standar untuk membangun modul yang dapat dibagi antara aplikasi web. Lapisan HTTP Phoenix digerakkan oleh Plug, yang memungkinkan Anda membuat fungsi sederhana yang mengambil struktur data, biasanya koneksi, dan memodifikasinya sedikit sebelum mengembalikannya. Setiap permintaan ke server Phoenix Anda melalui sejumlah langkah hingga semua data siap dikirim sebagai tanggapan. Selain itu, komponen utama Phoenix, seperti titik akhir, router, dan pengontrol, telah terbukti tidak lebih dari plug. Bayangkan sebagai tumpukan middleware di mana permintaan berjalan melalui plug ini. Mereka dapat digunakan, misalnya, untuk menentukan apakah permintaan berisi HTML, mendapatkan sesi, atau mengamankan permintaan. Ini semua terjadi sebelum mencapai controller.
ETS
ETS adalah penyimpanan kunci atau nilai dalam memori yang sangat mirip dengan Redis yang terintegrasi langsung ke OTP, yang dapat digunakan dalam elixir melalui interoperabilitas Erlang. Ini dapat menyimpan volume data yang besar dan menyediakan akses data real time. Setiap tabel ETS, seperti hampir semua yang lain di Elixir dan Erlang, dibuat dan dimiliki oleh sebuah proses. Ketika proses pemilik berakhir, tabel yang dimilikinya akan dihapus. Ini menawarkan keuntungan signifikan yang dapat membantu pengembang dalam meringankan hidup mereka ketika caching diperlukan.
Phoenix Presence
Fitur Phoenix Presence memungkinkan untuk menyimpan dan mengekspos informasi topik tertentu ke semua klien berlangganan saluran di seluruh cluster. Modul Kehadiran mempermudah pengelolaan penerimaan sisi klien dari peristiwa terkait kehadiran dengan kode yang sangat sedikit. Untuk menyimpan dan menyiarkan informasi spesifik topik ke semua saluran dengan topik tertentu, Presence menggunakan Conflict Free Replicated Data Type (CRDT). Phoenix Presence, tidak seperti penyimpanan data terpusat seperti Redis, tidak memiliki titik kegagalan tunggal atau sumber kebenaran tunggal. Ini membuat penyimpanan data Presence sembuh sendiri dan dapat diulang di semua node cluster aplikasi Anda. Phoenix Presence dapat dengan mudah digunakan untuk kasus penggunaan real time seperti daftar pengguna yang hadir dalam obrolan atau ruang permainan tertentu.
LiveView
Fitur LiveView. Meskipun menjadi bagian opsional dari kerangka web Phoenix, ini menjadi semakin penting. Phoenix LiveView adalah perpustakaan yang dibangun di atas Phoenix yang menyediakan interaktivitas waktu nyata yang luar biasa tanpa perlu menulis Javascript untuk sebagian besar situasi. LiveView adalah proses yang mendengarkan peristiwa internal dan eksternal dan, saat menerima peristiwa tersebut, memperbarui statusnya. Negara itu sendiri terdiri tidak lebih dari struktur data Elixir yang tidak dapat diubah. Peristiwa adalah pesan dari proses lain atau balasan dari klien/browser.
Siklus Hidup LiveView
Saat LiveView terhubung ke klien, itu dimulai sebagai permintaan HTTP biasa dan respons HTML. Koneksi WebSocket persisten ke server dibuka saat halaman awal dimuat melalui assets/js/app.js dan JavaScript. Koneksi WebSocket persisten yang dibuat antara klien dan server memungkinkan aplikasi LiveView untuk merespons lebih cepat ke aktivitas pengguna karena lebih sedikit data yang perlu ditransmisikan dibandingkan dengan permintaan stateless.
Bagaimana Phoenix Mencapai Toleransi Kesalahan Dan Skabilitas?
Salah satu aspek terpenting dalam mengembangkan aplikasi waktu nyata adalah memastikan bahwa aplikasi tersebut sangat tersedia. Ketika datang untuk membuat sistem sangat tersedia, dua pertimbangan utama adalah toleransi kesalahan dan skalabilitas. Phoenix mewarisi karakteristiknya dari Elixir, yang pada gilirannya menurunkannya dari Erlang, berkat primitif mesin virtual BEAM dan pola arsitektur OTP. BEAM menggunakan proses sebagai unit utama konkurensi. Proses tersebut memberikan dasar untuk membangun sistem terdistribusi yang skalabel, toleran terhadap kesalahan.
Skalabilitas
Dengan membuat proses khusus untuk setiap tugas, semua inti CPU yang tersedia dapat dimanfaatkan sehingga mencapai paralelisasi maksimum. Dengan menjalankan proses secara paralel memungkinkan pencapaian skalabilitas kemampuan untuk mengatasi peningkatan beban dengan menambahkan lebih banyak daya perangkat keras yang secara otomatis dimanfaatkan oleh sistem.
Sebagai bagian dari aplikasi Phoenix, setiap permintaan HTTP yang bergabung dengan Saluran Phoenix menggunakan kemampuan ini. Setelah membuat koneksi ke aplikasi, Phoenix.Channel.Server baru dibuat di Mesin Virtual Erlang sehingga setiap permintaan benar-benar independen dari yang lain. Erlang dirancang untuk tujuan yang tepat ini. Segala sesuatu di Erlang adalah proses ringan yang berkomunikasi dengan mengirim dan menerima pesan.
Kesalahan Toleransi
Proses memastikan isolasi, yang sangat penting untuk kesalahan toleransi membatasi dampak kesalahan runtime yang akhirnya terjadi. Dengan membuat proses yang terisolasi, idenya adalah untuk tidak membiarkan mereka mengubah keadaan satu sama lain tetapi dapat berkomunikasi satu sama lain menggunakan pesan. Aplikasi Elixir tidak mematikan seluruh sistem ketika salah satu komponennya gagal. Sebagai gantinya, mereka memulai ulang bagian yang terpengaruh sementara sistem lainnya tetap beroperasi. Supervisor pada dasarnya adalah GenServer yang memiliki kemampuan untuk memulai, memantau, dan memulai kembali proses. Dengan membiarkan proses macet alih-alih mencoba menangani semua kemungkinan pengecualian di dalamnya, pendekatan “Gagal Cepat” mengalihkan tanggung jawab kepada pengawas proses. Pengawas memastikan bahwa proses tersebut dimulai ulang jika diperlukan, memulihkan status awal mereka.
Saat aplikasi pertama kali diluncurkan, supervisor biasanya memulai dengan daftar anak-anak untuk diajak bekerja sama. Namun, saat aplikasi kami pertama kali dijalankan, anak-anak yang diawasi mungkin tidak diketahui misalnya, aplikasi web yang memulai proses baru untuk menangani pengguna yang terhubung ke situs kami. Dalam hal ini, kita akan membutuhkan seorang supervisor yang dapat memulai anak-anak sesuai permintaan. Skenario ini ditangani oleh Supervisor Dinamis. Pengawas dinamis juga membantu dalam mengisolasi ketika salah satu komponen aplikasi interaktif real time mogok. Supervisor dinamis mendukung strategi “one for one” untuk memastikan bahwa jika proses turunan dihentikan, proses turunan lainnya tidak akan dihentikan oleh supervisor yang sama.
Ringkasan
Seperti dibahas di atas, beberapa komponen utama yang kami gunakan untuk membangun sistem real time yang berkinerja dan kuat ada di Phoenix dan Elixir. Dalam prosesnya, seseorang akan mendapatkan pemahaman yang lebih baik tentang Erlang dan OTP, yang dapat mencegah mereka mengandalkan ketergantungan eksternal.