SRS-CoCaas

=1.  Introduction=

Dans le cadre du projet de fin d'étude à Polytech Grenoble, Nous avons choisi de travailler dur le projet CoCaas (Collaborative Containers as a service)

En informatique, certains domaines exigent une grande puissance de calcul ou un nombre conséquent de machines pour créer un système distribué. A l’heure actuelle, ces plateformes coûtent extrêmement cher auprès des acteurs du cloud, ou sont dédiées à la recherche (comme Grid’5000). Il est donc assez compliqué pour des entreprises, des chercheurs ou même des étudiants d’avoir accès à une telle plateforme.

1.1 Equipe

 * ARRADA Imad
 * FAURE Quentin
 * FOUNAS Abdelaziz
 * HALLAL Marwan
 * MEDEWOU Cenyo (Scrum Master)
 * VOUTAT Manuel (Chef de projet)

Personnes Ressources :


 * Comité de pilotage : Didier Donsez
 * Chef de projet du groupe de l'année dernière : Robin EUDES

1.2 Principe du projet
Nous avons choisi comme sujet de continuer un projet étudié l’année dernière par un autre groupe (IaaS Collaboratif). L’objectif de leur projet était de créer une solution de partage de ressources entre utilisateurs basée sur la virtualisation. Pour ce faire, ils utilisaient des méthodes de containers (Docker), afin de partager les ressources de plusieurs machines et ainsi améliorer la vitesse de calcul, sans influencer l’utilisation du propriétaire de la machine.

L’objectif du projet est de permettre de créer une plateforme collaborative permettant de déployer des containers sur les machines constituant cette plateforme, basée sur Docker Swarm​. La plateforme est constituée de deux types de machines : les workers et les managers.

La plateforme sera constituée d’une partie front-end​, qui permet de déployer des services, et d’une partie back-end qui gérera les services et les ressources en se basant sur swarm.

1.3 Vocabulaire et Définitions
Partage de ressource : 

​En informatique, il est parfois nécessaire d’effectuer des calculs qui nécessitent une grande puissance de calcul. Si ces calculs sont exécutés sur une seule machine, cela peut prendre énormément de temps (par exemple, la durée d’un calcul pour casser le chiffrement RSA, un chiffrement courant sur internet, se compte en année). Dans un cas comme celui-là, il est intéressant de réunir plusieurs PC pour disposer de plus de ressources de calcul, pour gagner du temps.

Virtualisation :

​La virtualisation consiste à faire fonctionner un système d’exploitation dans un autre système d’exploitation, comme s’il s’agissait d’un simple logiciel. Ainsi, il est possible de faire fonctionner Linux dans Windows, comme si c’était une simple application. Dans ce cas là, le système Linux est appelé système invité (ou machine virtuelle en abus de langage, abrégé VM en anglais), et le système Linux est appelé système hôte (ou host​ en anglais). Docker : Docker est une technologie de virtualisation dite « légère ». Basée sur des technologie du noyau Linux (LXC, cgroups, …), elle permet de virtualiser uniquement une application plutôt qu’un système d’exploitation complet. De fait, une machine virtuelle mets beaucoup plus de temps à démarrer et prend beaucoup plus de ressource sur un système hôte que Docker, qui utilise les containers.

Container :

Un container dans Docker peut être comparé à ce qu’est une machine virtuelle dans la virtualisation. Si le nom est différent, c’est que le procédé l’est aussi. Là où, avec la virtualisation, un système complet est disponible (avec son interface graphique, ses applications de bases, …), un container ne dispose que des outils nécessaires à son bon fonctionnement. Par exemple, si une machine virtuelle est créée pour faire un site web, elle embarquera tous les logiciels de base de son système d’exploitation, alors que le container ne contiendra que les application pour faire le site web.

Images Docker :

Les images sont la base des containers. Elle contiennent un ensemble de logiciels et d’outils sur lequel se basent les containers. C’est une image d’un système à un moment donné. Une image n’est jamais modifiée, alors qu’un container va évoluer au cours du temps, selon les interactions qu’il subit (par exemple, pour un site web, des informations vont être ajoutées).

Docker Swarm (+ worker/manager) :

Là où Docker permet de lancer des containers sur une machine précise, Docker Swarm permet de constituer un ensemble de machines (appelé swarm) sur lesquelles les containers vont être déployés. Dans un swarm, il existe deux types de machines : les workers et les managers​. Les workers sont des machines qui sont ici seulement pour effectuer des tâches (dans swarm, il s’agit de services); de leur côté, les managers sont présent pour coordonner le swarm, et définir les services à effectuer. Pour chaque swarm, il faut au minimum un manager, alors que les workers ne sont pas nécessaires (un manager effectue les mêmes tâches qu’un worker).

Service dans Docker Swarm :

Dans Docker Swarm, un service correspond à une tâche à effectuer, comme pour un container avec Docker. Pour créer un service, il est nécessaire d’indiquer une image sur laquelle se baser, et un nombre de containers, qui vont être répartis sur les machines du swarm.

Front-end :

​Partie visuelle d’un projet. Dans notre projet, il s’agit de l’interface utilisateur, accessible par un site web.

Back-end :

​Ensemble de fonctionnalités qui permettent de faire fonctionner le projet. Dans notre cas, il s’agit de toute la partie qui permet au site d'interagir avec les différentes machines du swarm

1.4 Liens du projet
Page du projet

Depots GitHub : Cocaas Front-end

Projet de l'année dernière

Installation Docker swarm

1.5 Overview of the remainder of the document
=2.Description Générale=

2.1 Perceptive du produit
Avec une telle plateforme, chaque utilisateur pourrait mettre à disposition des ressources qu’il n’utilise pas sur son ordinateur, dont pourraient se servir les membres en demande de ressources. Notre projet peut être utilisé dans un intranet d'une entreprise par exemple ou (avec l'utilisation de OpenVPN), il permettra d'utiliser les ressources d'un cluster à distance.





2.4 Contraintes Générales
Langage utilisé, Frameworks et autres outils :


 * Back-end
 * Python (Compatible avec Python 2.7)
 * Commande UNIX
 * Flask
 * MongoDB
 * Docker Swarm
 * OpenVPN


 * Front-end
 * JavaScript
 * AngularJS
 * JQuery
 * HTML5, CSS3
 * Bootstrap

2.5 Hypothèses et Dépendances
Le projet est réalisé sur console Unix et la compatibilité avec Windows est ignoré pour le moment.

=3.Specific requirements, covering functional, non-functional and interface requirements=
 * document external interfaces,
 * describe system functionality and performance
 * specify logical database requirements,
 * design constraints,
 * emergent system properties and quality characteristics.

3.1 Requirement X.Y.Z (in Structured Natural Language)
Function:

Description:

Inputs:

Source:

Outputs:

Destination:

Action:
 * Natural language sentences (with MUST, MAY, SHALL)
 * Graphical Notations : UML Sequence w/o collaboration diagrams, Process maps, Task Analysis (HTA, CTT)
 * Mathematical Notations
 * Tabular notations for several (condition --> action) tuples

=4.Evolution du produit=

=5. Appendices=

5.1. SRS structure
=6. Index=