The document proposes a high integrity profile for the OMG Data Distribution Service (DDS) standard to address its complexity and lack of real-time and priority support for use in safety-critical systems. It defines restrictions and refinements to the DDS specification to reduce optional complexity. It also defines a hierarchical priority model and multicast data dissemination technique. The profile is implemented on the Real-Time Specification for Java platform using patterns to support the priority model while achieving certification standards for high integrity systems. Evaluation shows the implementation meets deterministic and bounded latency requirements.
Un programme Lustre définie un traitement sur des flots de données, c’est `a dire qu’il définie quelles sont les valeurs de sorties en fonction des valeurs entrées `a tout instant. Il est parfaitement adapté pour programmer des taches temps réel et il est basé sur la notion de synchronisme fort.
application de gestion de station service .pdfmuhamedvallmed2
developpement d'une applivcation web pour le reapprovisionnement de station station-service ceci contient les Besoins fonctionnels et non fonctionnels d'une application de gestion de gestion de station-service
The document proposes a high integrity profile for the OMG Data Distribution Service (DDS) standard to address its complexity and lack of real-time and priority support for use in safety-critical systems. It defines restrictions and refinements to the DDS specification to reduce optional complexity. It also defines a hierarchical priority model and multicast data dissemination technique. The profile is implemented on the Real-Time Specification for Java platform using patterns to support the priority model while achieving certification standards for high integrity systems. Evaluation shows the implementation meets deterministic and bounded latency requirements.
Un programme Lustre définie un traitement sur des flots de données, c’est `a dire qu’il définie quelles sont les valeurs de sorties en fonction des valeurs entrées `a tout instant. Il est parfaitement adapté pour programmer des taches temps réel et il est basé sur la notion de synchronisme fort.
application de gestion de station service .pdfmuhamedvallmed2
developpement d'une applivcation web pour le reapprovisionnement de station station-service ceci contient les Besoins fonctionnels et non fonctionnels d'une application de gestion de gestion de station-service
Implémentation efficace et durable de processus métiers complexesGeeks Anonymes
La transposition de processus métiers complexes en programmes informatiques est parfois difficile pour des raisons techniques et/ou communicationnelles. Le faire efficacement et sous une forme flexible l'est encore plus. Pousse-Café, un framework Java se basant sur le Domain-Driven Design (DDD), rend la tâche plus abordable. https://www.pousse-cafe-framework.org/
Par Gérard Dethier, aux Geeks Anonymes du 15 janvier 2021
Vidéo : https://youtu.be/DE0QpTIz1cQ
Restructuration d applications Java Temps réelCédric Mouats
La restructuration de programmes consiste à apporter des modifications sur la structure interne de ces programmes, pour différents buts tels que la facilité de compréhension et de maintenance, l’optimisation, l’ordonnancement de tâches, la facilité de conversion d’un langage à un autre, ou la détermination de modules réutilisables. Dans ce travail, nous avons conçu et implémenté un système de restructuration de programmes Java temps réel, qui permet d’obtenir une sensible amélioration de l’ordonnançabilité de ce type d’applications.
En effet, les programmes associés à des systèmes temps réel doivent être logiquement corrects et doivent s’exécuter sans fautes temporelles. Afin de satisfaire leurs échéances, les tâches de ces systèmes sont ordonnancées par des techniques adéquates. Dans le cas par exemple, où un ensemble de tâches serait non ordonnançable, le programmeur procède à des opérations manuelles de modification, de réglage et de restructuration de l’application, afin de la rendre ordonnançable. De telles opérations sont lentes, coûteuses, et non contrôlables. Les solutions existantes dans ce domaine, sont de nature à améliorer l’ordonnançabilité d’une tâche.
Etant donné que Java est un langage de programmation purement orienté objet, nous avons utilisé les modèles de représentation de dépendances qui tiennent compte des différents aspects des systèmes orientées objets tels que la réutilisation et le polymorphisme.
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Jérôme Mainaud
Découvrez au cours de cette présentation le fonctionnement de la base de données Cassandra.
- Qu'est-ce que Cassandra ?
- Pourquoi l'utiliser ?
- Comment l'utiliser ?
- Comment la mettre en œuvre ?
Cette présentation a été jouée lors de l'IppEvent qui a eu lieu le 2017-03-02 dans les locaux d'OVH Lyon. Elle fait partir du temps fort Big Data 2017 https://blog.ippon.fr/2017/03/01/un-mois-de-mars-100-big-data/.
Merci à l'équipe d'OVH pour son accueil chaleureux.
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchMourad DACHRAOUI
Retour d'experience sur l'utilisation de spray dans le cadre de Mogobiz. Explication de la technique du "Magnet Pattern" et présentation des bénéfices de l'utilisation de Rx.
http://j.mp/psug43Xebia
Implémentation efficace et durable de processus métiers complexesGeeks Anonymes
La transposition de processus métiers complexes en programmes informatiques est parfois difficile pour des raisons techniques et/ou communicationnelles. Le faire efficacement et sous une forme flexible l'est encore plus. Pousse-Café, un framework Java se basant sur le Domain-Driven Design (DDD), rend la tâche plus abordable. https://www.pousse-cafe-framework.org/
Par Gérard Dethier, aux Geeks Anonymes du 15 janvier 2021
Vidéo : https://youtu.be/DE0QpTIz1cQ
Restructuration d applications Java Temps réelCédric Mouats
La restructuration de programmes consiste à apporter des modifications sur la structure interne de ces programmes, pour différents buts tels que la facilité de compréhension et de maintenance, l’optimisation, l’ordonnancement de tâches, la facilité de conversion d’un langage à un autre, ou la détermination de modules réutilisables. Dans ce travail, nous avons conçu et implémenté un système de restructuration de programmes Java temps réel, qui permet d’obtenir une sensible amélioration de l’ordonnançabilité de ce type d’applications.
En effet, les programmes associés à des systèmes temps réel doivent être logiquement corrects et doivent s’exécuter sans fautes temporelles. Afin de satisfaire leurs échéances, les tâches de ces systèmes sont ordonnancées par des techniques adéquates. Dans le cas par exemple, où un ensemble de tâches serait non ordonnançable, le programmeur procède à des opérations manuelles de modification, de réglage et de restructuration de l’application, afin de la rendre ordonnançable. De telles opérations sont lentes, coûteuses, et non contrôlables. Les solutions existantes dans ce domaine, sont de nature à améliorer l’ordonnançabilité d’une tâche.
Etant donné que Java est un langage de programmation purement orienté objet, nous avons utilisé les modèles de représentation de dépendances qui tiennent compte des différents aspects des systèmes orientées objets tels que la réutilisation et le polymorphisme.
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Jérôme Mainaud
Découvrez au cours de cette présentation le fonctionnement de la base de données Cassandra.
- Qu'est-ce que Cassandra ?
- Pourquoi l'utiliser ?
- Comment l'utiliser ?
- Comment la mettre en œuvre ?
Cette présentation a été jouée lors de l'IppEvent qui a eu lieu le 2017-03-02 dans les locaux d'OVH Lyon. Elle fait partir du temps fort Big Data 2017 https://blog.ippon.fr/2017/03/01/un-mois-de-mars-100-big-data/.
Merci à l'équipe d'OVH pour son accueil chaleureux.
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchMourad DACHRAOUI
Retour d'experience sur l'utilisation de spray dans le cadre de Mogobiz. Explication de la technique du "Magnet Pattern" et présentation des bénéfices de l'utilisation de Rx.
http://j.mp/psug43Xebia
Apache Storm - Introduction au traitement temps-réel avec Storm
Real Time Meta Events
1. RTME-SL
Real Time Meta Event
Specification Language
Vincenzo Caruso
DEA - Informatique Fondamental et Applications
6/20/05 1
2. Systèmes Asynchrones
La plupart des applications temps réel ont
des fortes interactions avec le monde réel.
Le monde réel peut-être modelé par un
système asynchrone
Chaque framework conçu par le temps réel
doit présenter un système pour la gestion
des événement asynchrones
3. Asynchrony in RT-Java
RTSJ (Real Time Specification for Java)
contient depuis son lancement:
une implémentation pour le modèle à événement
ATC (Asynchronous Transfer of Control)
ATT (Asynchronous Thread Termination)
Ils sont conçu comme une généralisation du
modèle traditionnel de Java
Introduction des contraintes temporelles
4. Modèle à événement de RTSJ
javax.realtime.AsyncEvent
Représente la possibilité de déclanchement pour un
événement asynchrone
javax.realtime.AsyncEventHandler
Représente l’action à prendre lors qu’un événement est
déclanché
Enregistrement
addHandler(AsyncEventHandler) sur une instance
de AsyncEvent
any-to-any
Déclanchement
fire() sur une instance de AsyncEvent
schedulation des handlers associés
6. Handlers & Threads
L’handler encapsule une action
Il n’est pas une sous-classe de RealtimeThread!
...mais il a son comportement
En fait il implante Schedulable et Runnable
Il accepte des ReleaseParameters,
ScheduleParameters et MemoryParameters
Il est lié dynamiquement à un RealtimeThread par
le support à runtime
On évite de surcharger inutilement le scheduler par des
threads que on ne sait pas quand ils seront activés
7. Handlers & Threads (2)
Ce mécanisme ajoute un retard d’activation
variable
Si on ne peut pas tolérer cette pénalité
BoundAsyncEventHandler
L’handler a un RealtimeThread dédié dans lequel
il est exécuté
On l’utilise pour avoir une réponse immédiate à
l’événement
Souvent on lui donne une priorité très haute
8. Meta Evénement
On veut identifier et contrôler des situations
caractérisées par une séquence
d’événement
Cette séquence doit être exprimable par un
modèle rational, donc par un langage
On propose une description des séquences
basée sur les expression logiques
9. Meta Evénement
Un méta-événement est un AsyncEvent qui est
déclanché lors de la vérification de l’expression
logique qui décrive lui même
Deux entité sont toujours associées à un méta-
événement:
SUPPLIERS
instances de AsyncEvent
événements de base, utilisés pour décrire la condition de
déclanchement du méta-événement
CONSUMERS
instances de AsyncEventHandler
schedulés lors de la validation de la condition de
déclanchement
10. Proxy?
Le méta-événement peut être considéré
comme un proxy entre les suppliers
(AsyncEvents) et les consumers
(AsyncEventHandlers)
Mais il n’est pas un proxy « pure » !
Il a un état interne qui dépende des signaux en
entrée
Il active les suppliers lors de la détection d’une
bonne séquence des signaux en entrée
12. Un exemple
Scenario:
Un système de schedulation pour des taches real-
time
Le scheduler nous offre des événement pour
signaler les dépassement de coût et d'échéance
pour chaque tache
CostOverRunEvent, DeadLineMissedEvent
On veut réaliser un système pour la prévention
des fautes
13. Un exemple (2)
Trois taches, en ordre de priorité
t1, t2, t3
On a étudié le système et on a vu que
(statistiquement):
trois dépassements de coût par t3 ou deux par t2 amènent
à un dépassement d'échéance
deux dépassement d’échéance par t3 suivis par un de t2
amènent à un dépassement d’échéance par t1
On veut contrôler ces situations à l’aide des méta
événements
14. Un exemple (3)
On veut utiliser des meta-événements pour
contrôler et prévoir des crashes
CostOverrunMetaEvent
Dans son handler
Deschedulation des threads t2 et t3
Augmentation des leurs coûts
Reschedulation
DeadLineMissedMetaEvent
Dans son handler
Incrément de la deadline pour t2 et t3
15. Le langage
package rtme.test;
directives
import custom.events.*;
Suppliers {CostOverRun, DeadLineMissed};
déclarations
Consumers {COHandler, DLMHandler};
MetaEvents {CostOverRunMetaEvent, DeadLineMissedMetaEvent};
MetaEvent CostOverRunMetaEvent {
Suppliers CostOverRun co1, CostOverRun co2;
Consumers COHandler coh1;
EventCondition (( co3 TIMES 3 ) OR ( co2 TIMES 2 ));
};
définitions
MetaEvent DeadLineMissedMetaEvent {
Suppliers DeadLineMissed dl1, DeadLineMissed dl2;
Consumers DLMHandler dlmh1;
EventCondition (( dm3 TIMES 2 ) THEN dm2 ));
};
la grammaire complète est consultable sur le site du projet: http://www.linux.it/~vcaruso/RTME-SL
16. La compilation
On a plusieurs options qui caractérisant le comportement du
compilateur:
--parse-only
fait seulement le check syntactique
--generate-skeletons
engendre les classes (vides) pour suppliers et consumers
--output-dir [path]
dit où seront placés les fichiers engedrés
--use-bounds
utilise BoundAsyncEvents plutôt que AsyncEvents (nécessaire pour jRate)
--debug
mode « verbose »
--mesure
place des balises pour faire des mesures (exp.)
On compile l’exemple avec:
java -jar RTME.jar --generate-skeletons --use-bounds
exemple.mes
Et on obtient...
17. La compilation (2)
Chaque méta-événement
prend comme paramètres:
Les références aux
suppliers:
instances de
AsyncEvent
Les références aux
consumers:
instances de
AsyncEventHandler
Dans le méta-evenement:
Un AsyncEventHandler
pour chaque supplier
Un AsyncEvent auquel on
attache les consumers
Le système de détection de
sequence
19. Définir les séquences
Les opérateurs sont:
AND
s1 AND s2 valide avec {s1,s2} ou {s2,s1}
OR
s1 OR s2 valide avec {s1} ou {s2}
THEN
s1 THEN s2 valide avec {s1,s2} [introduit une relation
temporelle entre les signaux]
TIMES
s1 TIMES 4 valide avec la répétition {s1,s1,s1,s1}
Bien sur on peut combiner les effets
( ( (s1 OR s2) AND s3 ) THEN s4) TIMES 4
Une séquence valide est {s1, s3, s4, s2, s3, s4, s3, s1, s4, s3, s1, s4}
20. Le détecteur des séquences
En gros, il peut être considéré comme un lexer, où
les tokens sont les signaux (événements)
Deux possibilité de réalisation:
approche classique: table des transitions
PROs:
temps d'exécution constant
CONs:
non scalable, difficile ajouter nouveaux éléments, explosion des
états
notre approche: simulation d’une réseau logique
22. L’approche « dynamique »
Chaque nœud de l’APT est représenté par le
détecteur correspondant
L’expression est modélisée comme une réseau
logique
Communication par événement entre gates
package org.sorbet.realtime.rtme.detectors
GATES: AndDetector, OrDetector, ThenDetector,
TimesDetector
Supplier’s handler: SignalDetector
Il est aussi un AsyncEventHandler (BoundAsyncEventHandler)
Final Gate: GlobalDetector
Il est aussi un AsyncEvent (auquel on attache les consumers)
24. Exemple d’implantation
public void handle (IDetector source) {
/* if the source is not registered, return */
if (!_sources.contains(source))
return;
/* turns off the connection */
source.disconnect();
/* records the event
* (_state is initialized to n in the constructor)
*/
_state--;
/* verifies fire condition */
if (_state==0) {
/* fire up the event */
this.fire();
/* reconnects inputs */
this.reconnect();
}
}
25. Dans la classe engendrée
Pour créer le détecteur de:
(((s1 AND s2) OR s3) THEN s3 ) TIMES 4
/* creation of the global external event */
_globalDetector = new GlobalDetector(new AsyncEventHandler[] {c1});
/* creation of internal interconnections */
IDetector detector_0 = new TimesDetector(_globalDetector, 4);
IDetector detector_1 = new ThenDetector(detector_0);
IDetector detector_2 = new OrDetector(detector_1);
IDetector detector_3 = new AndDetector(detector_2, 2);
IDetector s1Handler_4 = new SignalDetector(s1, detector_3);
IDetector s2Handler_5 = new SignalDetector(s2, detector_3);
IDetector s3Handler_6 = new SignalDetector(s3, detector_2);
IDetector s3Handler_7 = new SignalDetector(s3, detector_1);
26. Prochainement
Nouveaux opérateurs
Possibilité d'intégrer directement du code Java
dans la définition de méta événement
Amélioration des performances
Création d’une nouvelle construction dans le
langage qui permet la construction d’une table de
transition avec AsyncEvents as inputs
ex: CurrentState -- Event -- NextState -- Action
27. Conclusions
Notre but est de séparer, dans l'ingénierie
des systèmes temps réel, la partie qui
concerne la logique de l’application e la
partie qui gère les événements asynchrones
Pour participer:
http://www.linux.it/~vcaruso/RTME
téléchargement des sources et de la
documentation
package pour le testing