Apa yang membuat Erlang cocok untuk aplikasi cloud?

9

Kami memulai proyek baru dan mengimplementasikan instantiation cloud openstack perusahaan kami (lihat http://www.openstack.org/ ). Proyek ini adalah alat keamanan untuk perusahaan kami. Kami saat ini menjalankan ratusan server khusus untuk alat keamanan dan memindahkannya ke instantiasi openstack perusahaan kami.

Proyek-proyek lain di perusahaan saya saat ini menggunakan erlang di beberapa aplikasi server terdistribusi, dan titik T / T lainnya erlang digunakan di beberapa layanan cloud populer. Saya mencoba meyakinkan orang lain untuk mempertimbangkan di mana itu mungkin berlaku pada proyek kami.

Apa kekuatan erlang untuk pemrograman cloud? Di mana area yang sangat tepat untuk menggunakan erlang?

Duncan
sumber
15
Tetapkan "cloud" dan kami dapat memberi tahu Anda apa yang mungkin ingin Anda ketahui. Istilah "cloud" adalah pemasaran berbicara dan berarti sesuatu yang berbeda untuk setiap orang yang menggunakannya.
Saya pikir mengatakan cloud openstack akan cukup definisi dari apa yang kami terapkan. Lihat openstack.org . Atau apakah Anda meminta info lebih lanjut tentang proyek ini? Ini alat keamanan untuk perusahaan kami. Kami saat ini menjalankan ratusan server khusus untuk alat keamanan dan memindahkannya ke instantiasi openstack perusahaan kami.
Duncan
Saya mengedit pertanyaan agar mudah-mudahan menjadi lebih baik dan menghilangkan masalah 'pemasaran'. Masalah saya adalah memilih alat terbaik untuk pekerjaan itu. Saya pemula di stackexchange jadi tidak cukup paham.
Duncan
1
khususnya istilah "cloud" samar-samar dan tidak berarti sesuatu yang spesifik, itu adalah pemasaran berbicara, Anda masih belum menentukan apa yang sebenarnya memenuhi syarat sesuatu sebagai aplikasi cloud . Secara pribadi saya tahu apa yang saya tahu apa yang saya pikirkan artinya, saya yakin itu bukan apa yang Anda pikirkan artinya , diberikan pertanyaan.
"istilah 'cloud' samar-samar" - bagus! Ini berarti sesuatu yang virtual dan Anda harus menentukan apakah "sesuatu" itu adalah perangkat lunak, sistem operasi, mesin tunggal, multi-mesin-dan-jaringan, atau sesuatu yang lain.
GlenPeterson

Jawaban:

8

Selain fakta bahwa Erlang secara khusus dikembangkan untuk dijalankan dalam situasi bersamaan / diparalelkan / terdistribusi, dua teknik utama yang digunakannya adalah memungkinkan:

Tidak ada efek samping:

Ini berarti, ketika Anda memberikan fungsi sepotong data untuk dieksekusi, itu tidak akan kecuali dalam kasus yang sangat ketat mempengaruhi hal lain dalam sistem / proses yang berjalan. Ini berarti bahwa jika Anda menjalankan fungsi 300 kali sekaligus, tidak satu pun dari 300 eksekusi fungsi tersebut yang akan memengaruhi yang lain.

Teknik implementasi untuk memastikan tidak ada efek samping disebut "kekekalan" yang kira-kira berarti, tidak boleh bermutasi (diubah). Ini berarti bahwa segera setelah Anda membuat variabel, nilai variabel itu tidak dapat dimodifikasi. Erlang mengimplementasikan perilaku ini dengan "penugasan tunggal" sehingga setelah Anda menetapkan nilai ke variabel, Anda tidak dapat menetapkan nilai lagi.

X = 1.
X = 2. // This is not a valid operation

Ini memastikan bahwa tidak ada kode yang secara tidak sengaja mengubah nilai X yang menyebabkan kondisi balapan, oleh karena itu kode tersebut secara inheren aman dan penggunaan bersamaan menjadi sepele. Ini adalah perilaku yang sangat tidak umum di antara bahasa-bahasa perangkat lunak dan cara terbesar Erlang mengatur agar sangat cocok untuk eksekusi bersamaan.

Model aktor:

Ini adalah cara pemodelan tertentu yang telah menunjukkan untuk membuat implementasi dan manajemen pemrosesan bersamaan sangat sederhana untuk pengembang. Langsung dari wikipedia (http://en.wikipedia.org/wiki/Actor_model):

Model Aktor mengadopsi filosofi bahwa semuanya adalah aktor. Ini mirip dengan semuanya adalah filosofi objek yang digunakan oleh beberapa bahasa pemrograman berorientasi objek, tetapi berbeda dalam perangkat lunak berorientasi objek biasanya dieksekusi secara berurutan, sedangkan model Actor secara inheren berbarengan. Seorang aktor adalah entitas komputasi yang, dalam menanggapi pesan yang diterimanya, dapat secara bersamaan: mengirim sejumlah pesan ke aktor lain; membuat sejumlah aktor baru yang terbatas; tentukan perilaku yang akan digunakan untuk pesan berikutnya yang diterimanya. Tidak ada urutan yang diasumsikan untuk tindakan di atas dan mereka dapat dilakukan secara paralel. Memisahkan pengirim dari komunikasi yang dikirim adalah kemajuan mendasar dari model Aktor yang memungkinkan komunikasi tidak sinkron dan struktur kontrol sebagai pola pesan yang lewat.

Jimmy Hoffa
sumber
Tentang "Tanpa Efek Samping", Anda mengatakan "Ini adalah perilaku yang sangat tidak umum di antara bahasa perangkat lunak" - Saya sedikit terkejut dengan hal ini. Tidak bisakah Java dan C # melakukan ini hari ini? Bahasa apa yang Anda ketahui yang harus memiliki efek samping saat memanggil suatu fungsi?
NoChance
3
@EmmadKareem Ini bukan pertanyaan apakah Anda dapat menulis program tanpa efek samping; seperti yang Anda catat, Anda dapat melakukan ini di Java atau C #. Ini adalah apakah defaultnya adalah efek samping gratis, dan apakah ada dukungan kompiler untuk ini. Di Java Anda tidak bisa, misalnya, memberi tahu kompiler "metode ini tidak memiliki efek samping". Ini pada gilirannya berarti kompiler tidak dapat memperingatkan Anda ketika Anda melanggar aturan!
Andres F.
@EmmadKareem Saya tidak mengatakan tidak mungkin untuk menulis C # atau java tanpa efek samping (walaupun sangat jarang), tetapi saya mengatakan bahwa sangat sedikit bahasa pemrograman memiliki kebijakan ketat yang dibangun ke dalam bahasa yang memisahkan fungsi dengan efek samping dari yang tidak.
Jimmy Hoffa
Akan lebih bagus jika Java memiliki anotasi @NoSideEffects untuk menggunakan metode untuk memberi tahu kompiler untuk menerapkan tanpa efek samping untuk metode itu. Dalam kode saya sendiri, saya suka berpikir bahwa metode umum tidak memiliki efek samping. Tentu, beberapa metode harus menjadi mutator dalam bahasa seperti Java, tetapi banyak yang tidak. Terutama jika Anda lebih suka objek yang tidak berubah dalam desain Anda.
GlenPeterson
Jimmy Hoffa dan @AndresF., Terima kasih atas klarifikasi Anda.
NoChance
9

Erlang sangat kuat dalam komputasi bersamaan / paralel. Bahkan, itu dirancang awalnya untuk tujuan itu. Ini tidak ada hubungannya dengan cloud, kecuali bahwa seringkali, aplikasi perhitungan berat diparalelkan dan digunakan dalam contoh "cloud" untuk membuatnya lebih mudah untuk menumbuhkan / mengecilkan kapasitas sesuai permintaan.

Sisanya hanya bicara pemasaran.

pap
sumber
7
Erlang dirancang untuk komputasi yang toleran terhadap kesalahan . Hanya saja, komputasi terdistribusi adalah prasyarat untuk itu (bagaimana Anda dapat dengan andal mengembalikan hasil jika seseorang secara tidak sengaja menumpahkan kopi ke mesin tunggal Anda, Anda memerlukan setidaknya dua mesin) dan komputasi paralel dan bersamaan adalah kasus khusus dari komputasi terdistribusi, jadi Erlang kebetulan juga baik pada mereka. Tapi bukan itu yang dirancang untuk itu.
Jörg W Mittag
1
@ JörgWMittag Selama kita membelah rambut ... ya, tujuannya adalah untuk mencapai toleransi kesalahan. Ini mencapai ini melalui paralelisasi. Itu dirancang untuk menerapkan ini dalam saklar telepon digital AX yang membawa dua pipa perhitungan paralel yang terisolasi dengan satu berfungsi sebagai siaga panas.
Pap
1
Ya, maaf, saya seharusnya lebih jelas: komputasi awan didistribusikan cukup banyak menurut definisi, dan seringkali (tidak selalu tetapi biasanya) diimplementasikan oleh kelompok mesin yang tidak dapat diandalkan yang lebih murah dan yang lebih penting tetapi dirancang untuk memberikan layanan yang dapat diandalkan. Itulah yang membuat Erlang sangat cocok.
Jörg W Mittag
3

Salah satu aspek cloud yang berbeda dari penyebaran perangkat keras tradisional adalah kemudahan yang Anda gunakan untuk memutar instance baru saat dibutuhkan. Kemampuan untuk memonitor node lain, dan memproses pada node lain, membuatnya relatif mudah untuk membangun sistem yang sangat dinamis yang dapat menambah atau menghapus vms dan mengelolanya sesuai kebutuhan.

Ini khususnya terjadi jika Anda membangun sistem Anda menggunakan kerangka kerja OTP (Open Telecom PLatform) erlang, yang menyediakan struktur dan mekanisme (pohon pengawas) untuk mendukung pembuatan beberapa hal yang cukup canggih dengan efek yang jauh lebih sedikit daripada yang Anda bayangkan. Erlang menangani semua bit yang rumit sehingga Anda tidak perlu melakukannya.

Garry Hodgson
sumber