Erlang'ı bulut uygulamaları için uygun kılan nedir?


9

Yeni bir proje başlatıyoruz ve şirketlerimizin bir opentack bulutu oluşturmaya başlıyoruz (bkz. Http://www.openstack.org/ ). Proje şirketimiz için güvenlik aracıdır. Şu anda güvenlik araçları için yüzlerce özel sunucu çalıştırıyoruz ve bunları şirketlerimizin opentack örneğine taşıyoruz.

Şirketimdeki diğer projeler şu anda birkaç dağıtılmış sunucu uygulamasında erlang kullanıyor ve diğer Q / A nokta erlang'ı birçok popüler bulut hizmetinde kullanılıyor. Başkalarını projemizde nerede geçerli olabileceğini düşünmeye ikna etmeye çalışıyorum.

Erlang'ın bulut programlama için güçlü yanları nelerdir? Erlang'ı kullanmak özellikle uygun olan yerler nerede?


15
"Bulut" u tanımlayın ve size bilmek istediklerinizi söyleyebiliriz. Terimi "bulut" it kullanan her kişiye konuşmak ve araçlar farklı bir şey pazarlamaktadır.

Ben opentack bulut demek ne üzerinde uyguladığımızın bir tanımı yeterli olacağını düşündüm. Bkz. Openstack.org . Yoksa proje hakkında daha fazla bilgi mi istiyorsunuz? Bizim şirketimiz için güvenlik aracı. Şu anda güvenlik araçları için yüzlerce özel sunucu çalıştırıyoruz ve bunları şirketlerimizin opentack örneğine taşıyoruz.
Duncan

Umarım daha iyi hale getirmek ve 'pazarlama' endişesini ortadan kaldırmak için soruyu düzenledim. Benim sorunum iş için en iyi aracı seçmek. Ben stackexchange bir çaylak değilim, bu yüzden asmak oldukça yok.
Duncan

1
özellikle "bulut" terimi belirsizdir ve belirli bir şey ifade etmez, pazarlama konuşur, bir şeyi gerçekte bir bulut uygulaması olarak nitelendiren şeyi hala tanımlamamışsınızdır . Şahsen ben biliyorum biliyorum bence o eminim demektir o anlama geldiğini düşünüyorsun ne değildir sorusu verilir.

"'bulut' terimi belirsiz" - iyi olan! Sanal bir şey anlamına gelir ve "bir şeyin" yazılım, işletim sistemi, tek makine, çoklu makine ve ağ veya başka bir şey olup olmadığını belirtmelisiniz.
GlenPeterson

Yanıtlar:


8

Erlang'ın eşzamanlı / paralel / dağıtılmış durumlarda çalışmak üzere özel olarak geliştirilmesinin dışında, bunu mümkün kılan iki ana teknik şunlardır:

Yan efektleri olmayan:

Bu, bir işleve karşı çalıştırılacak bir veri parçası verdiğinizde, çok katı durumlar dışında sistem / çalıştırma işleminde başka hiçbir şeyi etkilemeyeceği anlamına gelir. Bu, bir işlevi aynı anda 300 kez yürütürseniz, işlevin bu 300 yürütmesinden hiçbirinin diğerini etkilemeyeceği anlamına gelir.

Hiçbir yan etkiyi sağlamayan uygulama tekniğine kabaca mutasyona uğramayacağı (değiştirilemeyeceği) anlamına gelen "değişmezlik" denir. Bu, bir değişken oluşturduğunuz anda bu değişkenin değerinin değiştirilemeyebileceği anlamına gelir. Erlang bu davranışı "tekli atama" ile uygular, bu nedenle bir değişkene değer atadıktan sonra ona bir değer atayamazsınız.

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

Bu, hiçbir kodun X'in değerini bir yarış durumuna neden olarak yanlışlıkla değiştirmemesini sağlar, bu nedenle doğası gereği iş parçacığı açısından güvenlidir ve eşzamanlı kullanım önemsiz hale gelir. Bu, yazılım dilleri arasında çok nadir görülen bir davranıştır ve Erlang'ın eşzamanlı yürütme için çok uygun olmayı başardığı en büyük yoldur.

Aktör modeli:

Bu, eşzamanlı işlemenin uygulanmasını ve yönetimini geliştiriciler için çok basitleştirdiğini gösteren özel bir modelleme yoludur. Doğrudan wikipedia'dan (http://en.wikipedia.org/wiki/Actor_model):

Aktör modeli, her şeyin bir aktör olduğu felsefesini benimser. Bu, her şeye benzer, bazı nesne yönelimli programlama dilleri tarafından kullanılan bir nesne felsefesidir, ancak Aktör modeli doğal olarak eşzamanlı iken, nesne yönelimli yazılımın genellikle sıralı olarak yürütüldüğünden farklıdır. Bir aktör, aldığı bir mesaja yanıt olarak, eşzamanlı olarak yapabilen hesaplamalı bir varlıktır: diğer aktörlere sınırlı sayıda mesaj gönderme; sınırlı sayıda yeni aktör yaratmak; aldığı bir sonraki mesaj için kullanılacak davranışı belirtin. Yukarıdaki eylemlerde varsayılan bir sıra yoktur ve bunlar paralel olarak gerçekleştirilebilir. Gönderenin gönderilen iletişimden ayrılması, geçen iletilerin kalıpları olarak eşzamansız iletişim ve kontrol yapılarını mümkün kılan Aktör modelinin temel bir ilerlemesiydi.


"Hiçbir Yan Etkisi" hakkında "Bu yazılım dilleri arasında çok nadir bir davranış" diyorsun - Ben buna biraz şaşırdım. Java ve C # bugün bunu yapamıyor mu? Bir işlevi çağırırken yan etkileri olması gereken hangi dilleri biliyorsunuz?
NoChance

3
@EmmadKareem Size olmadığı bir soru değil olabilir yan etkileri olmayan bir program yazmak; belirttiğiniz gibi, bunu Java veya C # ile yapabilirsiniz. Varsayılanın yan etkisiz olup olmadığı ve bunun için derleyici desteği olup olmadığıdır. Java'da, örneğin derleyiciye "bu yöntemin yan etkileri olmadığını" söyleyemezsiniz. Bu da, kuralları ihlal ettiğinizde derleyicinin sizi uyaramayacağı anlamına gelir!
Andres F.

@EmmadKareem Yan etkiler olmadan (son derece nadir olsa da) C # veya java yazmanın imkansız olduğunu söylemiyorum, bunun yerine çok az programlama dilinin, yan etkilere sahip olmayan yan etkilerle işlevleri ayıran dilde yerleşik sıkı politikaları olduğunu söylüyorum.
Jimmy Hoffa

Java, derleyiciye bu yöntem için yan etki uygulamadığını bildirmek için bir yöntem koymak için @NoSideEffects ek açıklamasına sahip olsaydı harika olurdu. Kendi kodumda, yöntemlerin yan etkisi olmaması yaygın olduğunu düşünüyorum. Elbette, bazı yöntemlerin Java gibi bir dilde mutasyon yapması gerekir, ancak çoğu yoktur. Özellikle tasarımlarınızda değişmez nesneleri tercih ediyorsanız.
GlenPeterson

Jimmy Hoffa ve @AndresF., Açıklamalarınız için teşekkürler.
NoChance

9

Erlang özellikle eşzamanlı / paralel bilgi işlemde güçlüdür. Aslında, başlangıçta bu amaç için tasarlanmıştır. Bulutla ilgili hiçbir şey yoktur, ancak çoğu zaman hesaplama-ağır uygulamalar, talep üzerine kapasiteyi büyütmeyi / küçültmeyi kolaylaştırmak için "bulut" örneklerinde paralel hale getirilir ve dağıtılır.

Gerisi sadece pazarlama konuşması.


7
Erlang, hataya dayanıklı bilgi işlem için tasarlanmıştır . Sadece dağıtılmış bilgi işlem bunun için bir önkoşuldur (birisi yanlışlıkla tek bir makinenizin üzerine kahve dökerse, en az iki makineye ihtiyacınız varsa, nasıl güvenilir bir sonuç elde edebilirsiniz? ) Ve paralel ve eşzamanlı bilgi işlem sadece dağıtılmış bilgi işlemin özel durumlarıdır, bu yüzden Erlang bunlarda da iyi olur. Ama bunun için tasarlanmadı.
Jörg W Mittag

1
@ JörgWMittag Kılları böldüğümüz sürece ... evet, amacı hataya dayanıklılık sağlamaktı. Bunu paralelleştirme ile başardı . Bu edildi tasarlanmış için uygulanması sıcak bekleme gibi bir çalışma ile iki izole edilmiş paralel hesaplama borular taşınan AX dijital telefon anahtarına bu.
pap

1
Evet, özür dilerim, daha açık olmalıydım: bulut bilişim tanım gereği dağıtılır ve genellikle (her zaman değil, genellikle) ucuz ve daha önemlisi güvenilir olmayan makineler kümeleri tarafından uygulanır, ancak güvenilir bir hizmet sunmak için tasarlanmıştır. Erlang'ı bu kadar iyi yapan şey budur.
Jörg W Mittag

3

Bulutun geleneksel donanım dağıtımlarından farklı olan bir yönü, gerektiğinde yeni örnekleri dönüştürebilme kolaylığıdır. Diğer düğümleri ve diğer düğümlerdeki işlemleri izleme yeteneği, vms ekleyip kaldırabilecek ve gerektiğinde yönetebilecek oldukça dinamik sistemler oluşturmayı nispeten kolaylaştırır.

Bu, özellikle sisteminizi, hayal edeceğinizden çok daha az effrot ile oldukça karmaşık şeyler inşa etmeyi desteklemek için hem yapı hem de mekanizmalar (denetim ağaçları) sağlayan OTP (Open Telecom PLatform) çerçevesini kullanarak oluşturuyorsanız, böyledir. Erlang, tüm zor bitleri ele alır, böylece zorunda kalmazsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.