Elixir: Kekuatan Sistem Yang Benar-Benar Terdistribusi

Informasi

Elixir: Kekuatan Sistem Yang Benar-Benar Terdistribusi – Siklus hidup sebagian besar startup teknologi dimulai dengan zaman kegelapan. Di sanalah Anda, memahami kesesuaian produk pasar, tidak terlalu mengkhawatirkan masa depan. Anda mungkin tidak benar-benar menemukannya. Tapi kemudian, semoga, orang lain mulai menunjukkan minat pada ide Anda, dan inilah saatnya untuk menghasilkan bukti konsep, iterasi pertama Anda. MK1 Anda. Ini melayani tujuannya. Anda akan dapat mendemonstrasikannya, meluncurkannya, dan menunjukkan seperti apa masa depan, dengan waktu dan uang yang diberikan.

Elixir: Kekuatan Sistem Yang Benar-Benar Terdistribusi

Menskalakan 2 Atau 3 Kali Cukup Mudah

elixir-memory – Selama pertumbuhan Anda, Anda dapat bereaksi terhadap setiap tantangan yang muncul. Menambahkan infrastruktur untuk mengatasi kebutuhan mendesak adalah praktik umum. Anda juga dapat meningkatkan beberapa kueri ke database dan mengoptimalkan beberapa algoritme. Semuanya akan tampak lebih cepat dan lancar selama 5 menit berikutnya. Suatu malam, seluruh tim Anda dibangunkan oleh klien karena layanan Anda turun pada jam 4 pagi pada hari Minggu.

Menskalakan 10 Hingga 20 Kali Tidak Semudah Itu

Penskalaan ke nol berikutnya diharapkan dari Anda, tetapi seringkali sulit, jika Anda tidak siap. Di Unbabel, kami cukup menyukai sebuah buku kecil berjudul Toyota Way . Ada banyak hal, tetapi kita dapat mengekstrak tiga aturan dasar untuk memandu jalan kita:

Menghilangkan limbah
Jadilah efisien
Dipersiapkan

Cobalah untuk menghilangkan pemborosan dari proses Anda, rutinitas harian Anda dan kode Anda. Selalu berusaha untuk mengoptimalkan apa yang Anda lakukan dan menjadi seefisien mungkin: memberikan kualitas dengan cepat. Rencanakan untuk masa depan. Sesuaikan cara berpikir dan alat Anda.

Eliksir

Perwujudan pola pikir ini bagi kami adalah mengadopsi Elixir. Ini mencakup cara berpikir ini pada intinya. Bahasa ini menghasilkan aplikasi berlatensi rendah dan skalabel yang toleran terhadap kesalahan dan terdistribusi. Itu juga dikelilingi oleh komunitas yang hebat dan sehat yang cukup aktif dan membantu. Dokumentasi yang bagus adalah ceri di atas kue.

Baca Juga : Memberdayakan Aplikasi Interaktif Real Time Dengan Elixir Dan Phoenix

OTP

Singkatan dari Open Telecom Platform dan merupakan satu set blok bangunan, tidak lagi hanya digunakan di telekomunikasi, yang memanfaatkan Erlang itu sendiri, alat dan perpustakaan yang disediakan oleh mesin virtual dan seperangkat prinsip desain. Salah satu prinsip tersebut adalah menggunakan arsitektur berbasis proses.

Proses

Apakah dasar pemrograman di Elixir. Semua kode Anda berjalan di dalam proses. Ini bukan proses sistem operasi standar Anda, tetapi proses mesin virtual Erlang (BEAM). Mereka sangat ringan, baik dalam hal penggunaan CPU dan Memori, memungkinkan kami untuk menjalankan beberapa ratus ribu dari mereka secara bersamaan. Sangat efisien. Mereka juga sepenuhnya terisolasi, tidak berbagi status atau ruang memori di antara mereka, sehingga memungkinkan untuk konkurensi yang sebenarnya. Mereka menyimpan status, tetapi, karena mereka tidak berbagi memori, satu-satunya cara untuk mengomunikasikannya adalah melalui pesan. Ini juga membantu bahwa Elixir adalah bahasa pemrograman fungsional dan salah satu fiturnya adalah kekekalan. Ini memastikan bahwa kita tidak mengendalikan keadaan dengan cara yang aneh. Lupakan tentang benang. Setiap proses memiliki antrian di mana ia akan menerima pesan dan akan bertindak secara asinkron. Anda tidak boleh diblokir menunggu tanggapan.

Pengawas

Ini adalah jenis proses khusus. Proses ini terkait dengan proses lain dengan tujuan memantau keadaan mereka. Ketika sebuah proses gagal, supervisor akan mengidentifikasinya, menghentikannya dan memulai kembali, memulihkan keadaan awalnya. Dampak dari kegagalan ini selalu sangat rendah karena proses ini terisolasi, yang akan memberi kami waktu untuk menyelesaikan masalah.

Berpikir Bersamaan

Ketika Anda berpikir secara bersamaan, Anda mengubah pendekatan dan pola pikir Anda. Anda memecahkan masalah secara berbeda. Anda mulai melihat keuntungan dari apa yang kita bicarakan sebelumnya. Anda menyimpulkan bahwa, alih-alih menggunakan satu server web besar yang menangani jutaan sesi, yang Anda butuhkan adalah jutaan server web, masing-masing menangani satu sesi. Anda mulai mendekati setiap masalah, bahkan yang kecil, seperti ini. Anda menciptakan pola pikir berbasis pengoptimalan dan Anda baru saja beradaptasi.

Dalam Praktek

Bagaimana Anda mendekati masalah secara bersamaan? Kami menjalankan satu skenario untuk menunjukkan cara berpikir yang bersamaan ini, kami mengisi tabel database sederhana dengan 20.000 baris. Tabel ini hanya memiliki 2 kolom: ID dan Integer yang disebut Nilai. Nilai ini dimulai dari 3 dan kita harus mengurangi 1 darinya setiap detik hingga mencapai 0. Kami ingin mengulangi proses ini setiap 2 detik. Kami akan meluncurkan 1 proses yang akan bertanggung jawab untuk memantau database. Proses ini akan memutuskan untuk meluncurkan 10.000 proses yang akan, secara individual, menangani satu, dan hanya satu, baris database. Kami akan terus meluncurkan proses baru sampai semua baris diproses. Ketika semua selesai proses akan berakhir, melepaskan semua memori.

Bagaimana Dengan Kode?

Server web mikro ini sebenarnya adalah GenServer. Dalam Elixir/Erlang, GenServer adalah proses yang dapat digunakan untuk mempertahankan status dan mengeksekusi kode secara asinkron. Perilakunya mengabstraksi interaksi klien server dan kita hanya perlu mengimplementasikan panggilan balik. Itu cocok dengan pohon pengawasan. Kami memiliki fungsi init yang kami gunakan untuk menginisialisasi statusnya. Kami menginisialisasi dengan ID catatan yang ingin kami tangani. Kami juga telah mendefinisikan fungsi handle info yang akan menangani pesan dengan simbol bekerja, memicu transaksi di mana kami memperbarui catatan dan menjadwalkan eksekusi berikutnya, secara asinkron. Terakhir, kami mendefinisikan fungsi schedule yang bertanggung jawab yang pada dasarnya akan membuat proses swakelola dengan mengeksekusi panggilan ke dirinya sendiri di masa mendatang. Ini adalah server mikro kami dan kami dapat memiliki beberapa ribu di antaranya. Elixir memungkinkan untuk kode yang bersih dan sederhana. Dengan mudah kita dapat merasa produktif dan cepat, menghilangkan lebih banyak pemborosan.

Bagaimana Ini Berperilaku?

Untungnya, Elixir memungkinkan kita untuk memonitor BEAM dengan mudah. Kami dapat memantau pohon proses, penggunaan memori, IO, dan informasi berguna lainnya selama pengembangan. Selama eksekusi, kami dapat memantau jumlah proses yang digunakan, dan bahwa proses tersebut secara kasar sesuai dengan berapa banyak proses yang kami putuskan untuk diluncurkan. Kami dapat melacak penggunaan memori dan melihat bahwa proses melepaskannya saat selesai. Kami dapat sepenuhnya memahami bagaimana kode kami berperilaku selama eksekusi saat mengembangkan dan itu mendorong kami untuk menjaga kode kami tetap efisien. Visibilitas adalah kuncinya.

Jadi Apa Dampaknya?

Elixir, sementara menjadi sangat efisien dengan sendirinya, memungkinkan kita untuk mengambil pendekatan yang efisien untuk pemecahan masalah. Ini adalah alat dan pola pikir yang memungkinkan kami menulis aplikasi yang dapat diskalakan dan toleran terhadap kesalahan untuk layanan kami yang paling intensif pemrosesan. Dan ketika kita akhirnya menerapkan prinsip-prinsip ini, apa yang kita dapatkan? Kami mendapatkan waktu respons rata-rata 20 ms, penggunaan memori rendah yang stabil, dan penggunaan CPU puncak 2%. Kami mendapatkan telemetri yang membosankan (telemetri terbaik).

Kami mendapatkan ketenangan pikiran bahwa sistem kami sehat dan stabil. Kami mengontrol variabel, mereka tidak mengontrol kami. Kita bisa berhenti bersikap reaktif dan mulai proaktif dan fokus. Kami dapat meninggalkan lingkaran memperbaiki barang dan mulai fokus pada lingkaran membangun barang. Ini sangat beresonansi dengan kami sebagai Tim Teknik dan itulah cara kami ingin mengalahkan Thanos. Sekarang, jadilah Tony Stark dan buat aplikasi skalabel Anda sendiri dengan Elixir.

Leave a Reply