Upload
brian-beaumont
View
114
Download
0
Embed Size (px)
Citation preview
Projet SystèmeGestion de bases de données réparties
LALUQUE FlorianPERS CyrilROSE AurélienSAUJOT Steeven
PlanSujet
Choix techniques
Format des messages et donnée
Connexion des serveurs
Répartition
Client
Superviseur
Conclusion
Démo
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Sujet
Base de données répartie tolérante aux pannes
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Choix techniques• Utilisation des sockets
• Utilisation des sémaphores
• Election d’un serveur-maitre
• XMLHTTPRequest pour requêtes client et superviseur
• Utilisation de JSON pour les messages
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Donnée
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Les messages• Une classe message contenant une map de string,
object
• Une méthode statique pour envoyer les messages
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Format des messages• Envoie du message connect d’un serveurs à un
autre:
• Emission:Message nouveau_message=new Message(new
HashMap<String,Object>()
{{ put("connect",port);}});
Message message = null;
message=(Message)getP().jsonToJava(input);
• Reception:
Message.envoyer_message(outcli, nouveau_message);
String input = in.nextLine();
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Connexion des serveurs• Utilisation d’un serveurs.properties pour qu’un
nouveau serveur est connaissance des serveurs potentiels du réseau
S3 : Serveur
S3 : Client
S2 : Serveur
S2 : Client
S1 : Serveur
S1 : Client
Serveur hors-ligne
{‘’Connect’’ :S3
}{‘’Jesuis’’:
S1}
• Un serveur possède :• Un thread principal• Autant de threads ( ServeurAction ) qu’il y’a
d’autres serveurs sur le réseau
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Répartition
• Evènements déclencheurs
• Etapes de la répartition
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Répartition
Evènements déclencheurs :
• Ajout d’une donnée
• Nouveau serveur sur le réseau
• Crash d’un serveur
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
RépartitionElection d’un serveur-maitre
Serveur 1BD.size()=15
Serveur 2BD.size()=16
Serveur 3BD.size()=4
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
RépartitionElection d’un serveur-maitre
Serveur 1BD.size()=15
Serveur 2BD.size()=16
Serveur 3BD.size()=4
SujetChoix techniques*Format des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
RépartitionEnvoi de la table d’ID
Serveur 2
Serveur 3
ArrayList<1,3,4>
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
RépartitionCréation d’une table d’occurrence
ID Serveur possédant la donnée
1 S1,S2,S3
2 S1
3 S2,S3
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
RépartitionLecture de la table et envoi des
instructions
TableEnvoi<Id,Serveur recepteur>Serveur 1 Serveur 2 Serveur 3
ID Recept
1 Serveur 2
3 Serveur 3
ID Recept
2 Serveur 1
ID Recept
1 Serveur 1
2 Serveur 1
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
RépartitionEchange des données
Serveur 1
Serveur 2
Serveur 3
SujetChoix techniquesConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Client
Les actions du clients :
• Ajouter une donnée• Sélectionner une donnée• Supprimer une donnée
SujetChoix techniquesConnexion des serveursRépartitionClientSuperviseurConclusionDémo
ClientAjouter une donnée : JavaScript
Serveur.java
ClientWebAction.java
xhr.open(url)
url.contains(HTTP)
serv.AjouterDonnee()
JavaScript
responText
url.contains(SELECT)
SujetChoix techniquesConnexion des serveursRépartitionClientSuperviseurConclusionDémo
ClientSélectionner une donnée : JavaScript
Serveur.java
ClientWebAction.java
xhr.open(url)
url.contains(HTTP)
serv.GetDonnee(id)
JavaScript
responText
url.contains(SELECT)
SujetChoix techniquesConnexion des serveursRépartitionClientSuperviseurConclusionDémo
ClientSupprimer une donnée : JavaScript
Serveur.java
ClientWebAction.java
xhr.open(url)
url.contains(HTTP)
serv.SupDonnee(id)
JavaScript
responText
url.contains(SELECT)
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Superviseur
• Connecter aux autres serveurs uniquement lorsqu’il y’a une requête
• Connaitre l’état des serveurs
• Voir la répartition sur les serveurs
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Superviseur
SUPERVISEUR
RECEPTION S2
INTERFACE
SERVEUR S1(donnée : id = 1)
ClientAction
SERVEUR S2(donnée : id = 2)
ClientAction
{rep_getID: donnée: id=1}
{rep_getID: not_exist}
{getIDFromSupervisor :1}
{getIDFromSupervisor :1}
Recherche de la donnée 1
RECEPTION S1
• Recherche de la donnée contenant l’id 1
SujetChoix techniquesConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Superviseur Web• Connaitre l’état des serveurs
JavaScriptxhr.open(url, true)
Pour tous les serveurs
Si xhr.status = 200Serveur OK
Sinon Serveur Hors-ligne
=asynchrone
SujetChoix techniquesConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Superviseur Web• Voir la répartition sur les serveurs
Pour tous les serveurs
xhr.open(url, true)
Serveur.java
SuperviseurWebAction.java
url.contains(HTTP)
serv.getBaseDonnee(id)url.contains(LISTE)
JavaScript
responText
SujetChoix techniquesConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Superviseur Web• Voir la répartition sur les serveurs
Pour tous les serveurs
xhr.open(url, true)
Serveur.java
SuperviseurWebAction.java
url.contains(HTTP)
serv.getBaseDonnee(id)url.contains(LISTE)
JavaScript
responText
SujetChoix techniquesFormat des messages et donnéeConnexion des serveursRépartitionClientSuperviseurConclusionDémo
Conclusion
Le projet nous a permis :
• D’approfondir nos connaissances en java• D’utiliser les sockets• De gérer des accès concurrents
Démo