Qu'est-ce qui rend Erlang adapté aux applications cloud?

9

Nous démarrons un nouveau projet et mettons en œuvre l'instanciation de notre entreprise d'un cloud openstack (voir http://www.openstack.org/ ). Le projet est un outil de sécurité pour notre société. Nous exécutons actuellement plusieurs centaines de serveurs dédiés pour les outils de sécurité et les déplaçons vers l'instanciation openstack de nos sociétés.

D'autres projets dans mon entreprise utilisent actuellement erlang dans plusieurs applications de serveur distribué, et d'autres questions / réponses soulignent que erlang est utilisé dans plusieurs services cloud populaires. J'essaie de convaincre les autres de considérer où cela pourrait s'appliquer à notre projet.

Quelles sont les forces d'Erlang pour la programmation cloud? Où sont les zones où il est particulièrement approprié d'utiliser erlang?

Duncan
la source
15
Définissez «cloud» et nous pouvons vous dire ce que vous voudrez peut-être savoir. Le terme «cloud» signifie marketing et signifie quelque chose de différent pour chaque personne qui l'utilise.
Je pensais que le cloud openstack serait une définition suffisante de ce que nous implémentons. Voir openstack.org . Ou demandez-vous plus d'informations sur le projet? C'est un outil de sécurité pour notre entreprise. Nous exécutons actuellement plusieurs centaines de serveurs dédiés pour les outils de sécurité et les déplaçons vers l'instanciation openstack de nos sociétés.
Duncan
J'ai modifié la question pour, espérons-le, l'améliorer et supprimer le problème de «marketing». Mon problème est de sélectionner le meilleur outil pour le travail. Je suis une recrue chez stackexchange, donc je n'ai pas vraiment le coup.
Duncan
1
spécifiquement le terme "cloud" est nébuleux et ne signifie rien de spécifique, c'est du marketing, vous n'avez toujours pas défini ce qui qualifie réellement quelque chose comme une application cloud . Personnellement, je sais ce que je sais ce que je pense que cela signifie, je suis sûr que ce n'est pas ce que vous pensez que cela signifie , étant donné la question.
"le terme" nuage "est nébuleux" - bon! Cela signifie quelque chose de virtuel et vous devez spécifier si ce «quelque chose» est un logiciel, un système d'exploitation, une machine unique, une machine multiple et un réseau, ou autre chose.
GlenPeterson

Réponses:

8

Outre le fait qu'Erlang a été spécifiquement développé pour être exécuté dans des situations simultanées / parallélisées / distribuées, les deux principales techniques qu'il emploie pour rendre cela possible sont:

Pas d'effets secondaires:

Cela signifie que lorsque vous donnez à une fonction une donnée à exécuter, cela n'affectera pas, sauf dans des cas très stricts, tout le reste du système / processus en cours d'exécution. Cela signifie que si vous exécutez une fonction 300 fois en même temps, aucune de ces 300 exécutions de la fonction n'affectera les autres.

La technique de mise en œuvre pour garantir l'absence d'effets secondaires est appelée «immuabilité», ce qui signifie grosso modo qu'elle ne peut pas être modifiée (modifiée). Cela signifie que dès que vous créez une variable, la valeur de cette variable ne peut pas être modifiée. Erlang implémente ce comportement avec une "affectation unique", donc après avoir attribué une valeur à une variable, vous ne pouvez plus lui attribuer de valeur.

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

Cela garantit qu'aucun code ne peut accidentellement modifier la valeur de X provoquant une condition de concurrence critique, il est donc intrinsèquement thread-safe et l'utilisation simultanée devient triviale. C'est un comportement très rare parmi les langages logiciels et le plus grand moyen par lequel Erlang parvient à être aussi bien adapté à une exécution simultanée.

Le modèle d'acteur:

Il s'agit d'une méthode particulière de modélisation qui a montré que la mise en œuvre et la gestion du traitement simultané étaient très simples pour les développeurs. Directement à partir de wikipedia (http://en.wikipedia.org/wiki/Actor_model):

Le modèle Acteur adopte la philosophie que tout est acteur. Ceci est similaire à tout ce qui est une philosophie d'objet utilisée par certains langages de programmation orientés objet, mais diffère en ce que le logiciel orienté objet est généralement exécuté séquentiellement, tandis que le modèle Actor est intrinsèquement concurrent. Un acteur est une entité de calcul qui, en réponse à un message qu'il reçoit, peut simultanément: envoyer un nombre fini de messages à d'autres acteurs; créer un nombre fini de nouveaux acteurs; désigner le comportement à utiliser pour le prochain message qu'il recevra. Il n'y a pas de séquence supposée pour les actions ci-dessus et elles pourraient être effectuées en parallèle. Le découplage de l'expéditeur des communications envoyées a été une avancée fondamentale du modèle Acteur permettant des communications asynchrones et des structures de contrôle comme modèles de transmission de messages.

Jimmy Hoffa
la source
À propos de "Pas d'effets secondaires", vous dites "C'est un comportement très rare parmi les langages logiciels" - je suis un peu surpris de cela. Java et C # ne peuvent-ils pas faire cela aujourd'hui? Quelles langues savez-vous qui doivent avoir des effets secondaires lors de l'appel d'une fonction?
NoChance
3
@EmmadKareem Il ne s'agit pas de savoir si vous pouvez écrire un programme sans effets secondaires; comme vous l'avez noté, vous pouvez le faire en Java ou en C #. Il s'agit de savoir si la valeur par défaut est sans effet secondaire et s'il existe une prise en charge du compilateur pour cela. En Java, vous ne pouvez pas, par exemple, dire au compilateur "cette méthode n'a pas d'effets secondaires". Cela signifie que le compilateur ne peut pas vous avertir lorsque vous enfreignez les règles!
Andres F.
@EmmadKareem Je ne dis pas qu'il est impossible d'écrire C # ou java sans effets secondaires (bien que extrêmement rare), je dis plutôt que très peu de langages de programmation ont des politiques strictes intégrées dans le langage qui séparent les fonctions avec effets secondaires de celles sans.
Jimmy Hoffa
Ce serait formidable si Java avait une annotation @NoSideEffects pour mettre sur une méthode pour dire au compilateur d'appliquer des effets secondaires pour cette méthode. Dans mon propre code, j'aime à penser qu'il est courant que les méthodes n'aient aucun effet secondaire. Bien sûr, certaines méthodes doivent être des mutateurs dans un langage comme Java, mais beaucoup ne le font pas. Surtout si vous préférez des objets immuables dans vos créations.
GlenPeterson
Jimmy Hoffa et @AndresF., Merci pour vos éclaircissements.
NoChance
9

Erlang est particulièrement performant en informatique concurrente / parallélisée. En fait, il a été conçu à l'origine dans ce but précis. Il n'a rien d'inhérent au cloud, sauf que, souvent, des applications lourdes de calcul sont parallélisées et déployées dans des instances "cloud" pour faciliter l'augmentation / la réduction de la capacité à la demande.

Le reste n'est que du marketing.

bouillie
la source
7
Erlang a été conçu pour l' informatique à tolérance de pannes . C'est juste que l' informatique distribuée est une condition préalable à cela (comment pouvez-vous retourner un résultat de manière fiable si quelqu'un renverse accidentellement du café sur votre seule machine, vous avez besoin d' au moins deux machines) et l'informatique parallèle et simultanée ne sont que des cas particuliers de l'informatique distribuée, donc Erlang se trouve également être bon à ceux-ci. Mais ce n'est pas pour cela qu'il a été conçu.
Jörg W Mittag
1
@ JörgWMittag Tant que nous séparons les cheveux ... oui, son but était d'atteindre une tolérance aux pannes. Il y est parvenu grâce à la parallélisation. Il a été conçu pour l' implémenter dans le commutateur de téléphonie numérique AX qui transportait deux tuyaux de calcul parallèles isolés, l'un fonctionnant en redondance d'UC.
pap
1
Oui, désolé, j'aurais dû être plus clair: le cloud computing est distribué à peu près par définition, et il est souvent (pas toujours mais généralement) implémenté par des grappes de machines peu coûteuses et surtout peu fiables mais conçues pour fournir un service fiable. C'est ce qui rend Erlang un si bon ajustement.
Jörg W Mittag
3

Un aspect du cloud différent des déploiements matériels traditionnels est la facilité avec laquelle vous pouvez faire tourner de nouvelles instances en cas de besoin. La capacité de surveiller d'autres nœuds et processus sur d'autres nœuds, rend relativement simple la construction de systèmes hautement dynamiques qui peuvent ajouter ou supprimer des vms et les gérer selon les besoins.

Cela est particulièrement vrai si vous construisez votre système à l'aide du cadre OTP (Open Telecom PLatform) d'erlang, qui fournit à la fois la structure et les mécanismes (arborescences de superviseur) pour prendre en charge la construction de trucs assez sophistiqués avec beaucoup moins d'effrot que vous ne l'imaginez. Erlang gère tous les bits délicats afin que vous n'ayez pas à le faire.

Garry Hodgson
la source