Exercice temps réel

[Résolu]
Signaler
Messages postés
26
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
12 décembre 2009
-
Messages postés
26
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
12 décembre 2009
-
Bonjour la famille,

j'ai un petit exercice simple d'énoncé a vous soumettre, je n'ai pas trouvé de solution. Il s'agit d'un exercice temps réel.

Prenons un serveur(dans le sens général) qui reçoit en entrée 2000 messages par seconde. Le serveur les traites dans l'ordre d'arrivée,en gardant l'ordonnencement, puis les renvoie en temps réel.

Chaque message reçu par le serveur est traité de la manière suivante:
-> tout les messages entrants demandent un accès en lecture à une base de données (qu'n appellera BD)
-> 20 messages entrants par seconde(parmis les 2000) demandent en plus un acces en écriture à la BD

La BD possède les caractéristiques suivantes:
-> un maximum de 80 acces (écriture et/ou lecture) par seconde max
-> elle a une taille de 500M

La question est: comment faire pour garder le temps réel?

(à mon avis c'est une question de multi thread)

Merci pour votre aide la famille

6 réponses

Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Ce n'est pas la solution, mais une idée comme ça.

Le problème que tu as c'est que tu ne peux faire que 80 accès pour 2000 messages entrant.
C'est donc impossible en l'état.

L'astuce consiste à dupliquer les BD, sur différentes machines si possible, et de répartir la charge à l'aide loadbalancer (répartisseur de charge).

Une fois la charge répartit, si tu as suffisamment de BD, c'est bon !
Petit problème qui complique tout: les accès en écriture. Si tu n'écris pas dans toutes les bases au même moment, c'est foutu !
Mais si tu écris dans toutes les bases, c'est foutu aussi puisque tu bloques tout.

L'astuce consiste à prendre une BD supplémentaire et à faire tourner régulièrement un processus de réplication. Si tu n'écris que dans une seule BD, il suffit alors d'utiliser la BD supplémentaire pour instaurer un cycle de roulement pour la réplication. Tu recopies une BD, la BD qui est recopiée étant gelée, il est nécessaire d'avoir une base de plus que prévu pour ne pas engendrer de perte de performance.

Si tu synchronise bien tout ceci, alors tu peux conserver ton temps réel.

Quelques petits défaut, tout de même:
- Prends beaucoup de place (nb de BD (au moins 25) * 500Mo)
- Peut coûter cher si on veut faire les choses biens et acheter suffisamment de machine.
- Les données se synchronise par cycle, et donc il peut y avoir des différences de résultats temporaire entre les BD. Ce qui peut très bien être inacceptable, tout dépend du contexte.
- Il faut correctement synchroniser tout ceci, ce qui est une vraie plaie à créer et à maintenir.
Messages postés
26
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
12 décembre 2009

Merci Pingu,

je n'étais pas allé si loin avec le gars qui m'a posé le problème.

Cependant il m'a dit que ca pouvait se faire en gardant cette BD uniquement (j'ai donc compris sans la dupliquer) est ce possible?
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Ben, en faisant une file d'attente, ouais, mais ce n'est plus du temps réel, il y aura un temps de latence de plus en plus grand au fur et à mesure que la liste grandit.
Si tu reçoit 2000 accès et que la base ne peut en gérer que 80, je suis désolé, mais ce n'est pas possible, ou encore une fois, je serais très intéressé par une solution à ce problème !
Messages postés
26
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
12 décembre 2009

Moi aussi j'ai proposé d'empiler les messages d'entrée et bien, plus de temps réel.

Comme la question avant l'exercice etait en gros: "connaissez vous le multi tache?"
A mon avis il faut partir la dessus. DOnc cest ce que j'ai dit tout de suite "a ca cest du multi tache" mdr

Mais sans toucher a la BD ca me paraissait impossible, donc j'ai clairement posé la question, il m'a dit que oui cest possible tel quel...

Petit indice il m'a dit : "si vous aviez trouvé comment faire, je vous aurais demandé que se passe-t-il quand on augmente le nombre de message entrant."

Sous entendu je pense: il y a une solution pour cette exercice, mais avec ces valeurs la précisément. Au dela la solution montre ses limites...
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Sûrement une c?????ie, mais...
Ne peux-tu pas récupérer des infos pour plusieurs messages en même temps?
Par exemple, plusieurs messages demandant accès aux mêmes données, ou à des données similaires que tu pourrais récupérer d'un coup...
Cela nécessiterait un tri des messages entrant suivant certains critères, selon ce qu'il y a dans ta BD.
Messages postés
26
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
12 décembre 2009

je ne sais pas peut etre faut il trier els messages,

en tout cas il faut garder l'ordre des messages et le temps réel.

Sinon pour info, cest pas un bout de code que le mec attendait, cest plus un algorithme ou une methode de faire...