VT2020-Ballerina-Fiche

Ballerina est un langage de programmation natif pour le cloud, proposant nativement des solutions d'intégration pour les micro-services.



Abstract
Ballerina is a new programming language that aims to ease the integration phase of software development' for developers. Indeed as application development evolves, it switches from a monolithic architecture to a serverless, micro-services-oriented one. This means that one program will have to communicate with many others in order to work and it can be extremely difficult, as each program can have its own specificities (protocol, ...). Ballerina thanks to its "integration first" philosophy can help answer this issue.

Présentation
Ballerina est un langage open-source créé par WSO2 en 2017. WSO2 est une entreprise spécialisée dans la création de solutions open-source pour l'intégration de micro-services. Ballerina contrairement aux langages existants tels que Java ou Javascript qui sont plus anciens, a placé au cœur de sa philosophie que les applications vont créer et communiquer avec des APIs. De ce fait, il va intégrer nativement des concepts propres aux micro-services tels que les endpoints, HTTP, les services, les ressources etc. Mais également :
 * Le support de container : il est facile de créer automatiquement un Dockerfile, le packager dans une image et l'exécuter comme un container. Ce qui rend le déploiement dans le Cloud plus simple. Il est également compatible avec Kubernetes;
 * Fonctionnalités serverless : N'importe quelle fonction d'un programme Ballerina peut être transformé en endpoint, ainsi chaque fonction peut être vue comme un micro-service indépendant;
 * Sécurité : Ballerina possède des outils pour se prémunir contre les injections SQL, et d'autres attaques;
 * Documentation et tests : Docerina génère la documentation au format HTML, bien qu'elle puisse s'étendre à d'autres formats. Le framework de test automatisé de Testerina permet d'écrire des tests unitaires.

Micro-services
Une architecture dite en "micro-services" est une architecture logicielle que l'on peut opposer à une architecture dite "monolithique". Le principe réside en le fait de découper un programme en plusieurs petits blocs autonomes et indépendants appelés "services". Ce découpage a plusieurs avantages et notamment :
 * Une plus grande flexibilité comme chaque bloc est indépendant;
 * Une plus grande tolérance aux fautes, en effet si un service cesse de fonctionner le reste de l'application fonctionnera;
 * Une réduction de la complexité, chaque service servant à une tâche en particulier nous n'avons pas besoin d'y ajouter la complexité du reste de l'application.

Intégration
L'intégration est le fait de faire communiquer plusieurs micro-services entre eux. En effet contrairement à une architecture monolithique où tout est "interne" au programme, dans une architecture micro-services nous allons devoir communiquer avec des services externes. Il faut donc prévoir au préalable quel protocole utiliser et comment formater une requête. Mais également comment interpréter et formater le résultat.

Pourquoi Ballerina répond à un vrai problème
Au fur et à mesure de l'évolution de l'informatique, on peut remarquer une tendance des applications à se "désagréger" en un nombre de plus en plus conséquent de micro-services. Ce changement répond à une évolution de la demande à laquelle les applications doivent répondre. Elles doivent s'adapter et être capable de changer leur échelle en toute flexibilité. Toutefois ce découpage amène plusieurs problématiques, en effet plus le découpage est "fin", plus il y a d'éléments à faire communiquer ensembles. L'intégration en devient donc plus complexe, ainsi qu'une étape critique du développement applicatif.

De plus, en fonction des services que l'on doit faire communiquer ensembles, on peut se heurter à différents problèmes : Si bien, qu'en général c'est une étape difficile pour les développeurs. Des solutions telles que la méthode ESB (Enterprise Service Bus) existent pour tenter de palier ce problème mais elles ne sont pas forcément simples à mettre en place. Ballerina au contraire se veut être une solution user-friendly au problème en proposant un langage concret, simple et intégrant différents protocoles de communications et formats de réponse nativement. Par exemple, il supporte HTTP, HTTPS, HTTP2, Websockets, GRPC, TCP, UDP, JSON, XML.
 * Différents protocoles de communications;
 * Différents format de données en réponse des APIs;
 * Différentes plateformes,
 * etc.

Marché
Ballerina est un langage de programmation récent et est le premier à placer la problématique de l'intégration de micro-services et du déploiement cloud au cœur de sa conception. Il n'a pas vraiment de concurrent en terme de langage de programmation dans ce domaine.

Cependant, il existe en dehors Ballerina d'autres méthodes d'intégration tels que la méthode ESB. Mais elles ne sont pas vraiment comparables car ESB est une architecture à mettre en place sur un projet et l'intégration est encore à la charge des développeurs. Alors que Ballerina, simplifie le processus en intégrant les différents concept : Il n'y a plus qu'à les utiliser.

Ballerina ne semble pas encore très utilisé pour de gros projets, mais l'ensemble des ressources que j'ai pu consulter sont très optimistes sur son intérêt et sur son évolution. On peut donc imaginer dans quelques années une augmentation de son utilisation. Il y a, à l'heure actuelle plus de 200 projets ayant pour langage principal Ballerina sur Github.

Installation et Utilisation

 * Une démonstration du langage et un guide d'installation du langage sont disponibles ici.

Bibliographie et Références

 * Dzone, Why Ballerina is different from other programming languages
 * Hackernoon, Rethinking Programming: From Code to Cloud
 * Nordic Apic, Review of Ballerina
 * Official website

Veille Technologique 2020

 * Année : VT2020
 * Sujet : Ballerina
 * Slides : [[Media:VT2020-Ballerina-Presentation.pdf|Slides]]
 * Auteurs : User:Romain.Pasdeloup