Quels sont les éléments essentiels des systèmes distribués en temps réel?
je mets mon pied dans la passation de marchés et j'ai eu aujourd'hui ma première entrevue pour un poste d'entrepreneur. Je l'ai passé cependant j'ai été dit - étant principalement un développeur D'UI - j'ai seulement couvert les bases de ce qu'ils avaient besoin pour leur arrière-plan, et je devrais lire au sujet des systèmes distribués avant le deuxième tour.
jusqu'à présent dans ma carrière, j'ai travaillé dans les opérations de poste, où en temps réel n'a jamais été nécessaire. Comme il ne me reste que quelques jours, quels sont les sujets essentiel que je dois couvrir? D'abord pour être en mesure de répondre à sa question et généralement vu comme tout à fait adéquat dans les systèmes distribués?
la question était de savoir comment afficher des données en temps quasi réel sur votre interface utilisateur? Ce qui doit être fait sur le backend? J'ai mentionné le modèle producteur/consommateur pour l'alimentation de données en temps réel. Il a aimé, mais il a dit qu'il avait besoin de plus à la deuxième entrevue.
Toute aide serait vraiment appréciée,
2 réponses
Quels sont les éléments essentiels de la distribué des systèmes en temps réel?
un système distribué en temps réel compose deux ensembles de propriétés difficiles qui sont imposées par le domaine de problème ou le domaine de solution (ou les deux.)
distribué
Un distribué système de liens d'un certain nombre de independent computing entités ayant des propriétés locales par le biais d'un mécanisme de communication. En conséquence, les algorithmes et autres composants de conception doivent tenir compte du synchronie et du modèle de défaillance . Un résumé utile (qui n'est pas entièrement objectif) des préoccupations en matière de calcul distribué est inclus dans de Deutsch, "Eight Fallacies of Distributed Computing . (Voir cette exposition utile .) Tous ces éléments sont utiles à prendre en compte dans la conception distribuée (en temps réel); chacun constitue un point de départ pour essentiel de la conception et de la mise en œuvre de préoccupations:
- le réseau est fiable
- latence is zero
- bande passante infinie
- le réseau est sécurisé
- la topologie ne change pas
- il y a un administrateur
- le coût du Transport est zéro
- le réseau est homogène
Temps Réel
Un en temps réel est un système dans lequel la rapidité d'exécution de l'opération d'achèvement est une partie des exigences fonctionnelles et de l'exactitude de mesure du système. (J'ai ouvert un alors question ici pour essayer de clarifier cela.) En réalité, presque tous les systèmes peuvent être considérés comme "doux" en temps réel, qu'il y a généralement tacite exigences/attentes pour la rapidité des opérations. Nous nous réservons le temps réel terme, parfois qualifié par soft ou hard , pour les systèmes qui sont incorrect lorsque les contraintes de temps ne sont pas respectées. Notez que beaucoup de préoccupations résumées dans les erreurs ci-dessus se croisent avec l'actualité. (Voir aussi la étiquette en temps réel wiki )
il est utile de noter que les systèmes RT (et DRT) existent sur un continuum d'exigences, avec "déterministe" (ou conventionnellement, "151970920 dur" en temps réel ) à une extrémité. Cependant, de nombreux systèmes ont des contraintes de temps très importantes qui sont néanmoins non déterministes. En particulier dans le contexte des systèmes de DRT, il est également utile de séparer la notion d'activité urgence de l'activité priorité . Dans les grands systèmes où la latence et la défaillance sont des facteurs réels et non triviaux, la gestion explicite de l'informatique et les ressources de communication nécessaires pour mettre en œuvre les délais et d'autres exigences de conception deviennent de plus en plus importantes, et la séparation de ces deux dimensions devient importante.
composition distribuée en temps réel
- Explicite délais - Quelles sont les exigences, comment sont-ils mappés à des activités, sont-ils de vrais trans-nœud délais, comment les contraintes de temps, être représentée explicitement dans la conception et la mise en œuvre, et comment les défaillances seront-elles détectées, signalées et récupérées?
- time synchronization - quelles sont les exigences et les mécanismes pour réaliser la synchronisation de l'horloge? Wiki sur clock synchronization ; de nombreuses applications ne nécessitent que NTP ; des exigences plus strictes peuvent nécessiter un matériel spécial (par exemple, IRIG-B ) ou des approches.
- Synchrony requirements - quelles sont les hypothèses et les exigences en matière de synchronisation du système? Ceci est connecté à la synchronisation de l'horloge, mais pas identique. Quelques réflexions sur les modèles formels de Doug Jensen ; wikipedia sur système asynchrone et synchrone ; SO question on partial event ordering ;
- Design patterns - quelles sont les pièces mobiles, et comment sont-elles liées au cours du transport? (En particulier, comment ces relations d'incidence sur l'actualité?)
- Middleware - Comment allez-vous encoder les aspects distribués du système? Par exemple, CORBA en temps réel (voici une bonne page de OIS ) ou DDS .
- Time Contraintes - Comment allez-vous documenter, mesurer et appliquer les contraintes de temps dans le système?
- panne partielle -un système en temps réel a généralement des exigences de fiabilité. L'un des aspects uniques des systèmes distribués est la possibilité de classes entières de défaillances appelées défaillances "partielles", dues soit à de véritables défaillances de crash/comms, soit à des erreurs de ponctualité qui doivent être traitées comme des défaillances. donc question sur approches de basculement ;
- MSR - Ce système d'exploitation temps réel(s)?
quelques références
pour une présentation assez traditionnelle des systèmes DRT, jetez un oeil à kopetz' book . Pour une vue plus dynamique, les travaux de Jensen et son site Web sont recommandés . Dans le domaine de Java, je suggère de lire le excellent "Introduction à la fiabilité de la Programmation Distribuée" . Il ne traite pas de l'ensemble des questions liées à l'actualité, mais il aborde les échecs partiels d'une manière particulièrement claire.
récemment, le concept de détecteurs de défaillance (peu fiables) est apparu comme une construction synchrone utile, permettant un raisonnement théorique utile et des techniques pratiques de formulation/conception/construction pour les systèmes de DRT. Le livre séminal sur le sujet Sur l'impact de l'échec rapide de détecteurs en temps réel à tolérance de pannes des systèmes de , par Aguilera, Le Lann, et Toueg. Ce papier est une lourde luge, mais récompense chaque once d'investissement intellectuel.
à un niveau élevé sont deux façons fondamentales d'obtenir des données en temps réel de l'arrière-bout à l'avant-bout:
-
Push: vous pouvez" push " des données au client en envoyant des messages. J'ai utilisé cette méthode dans le passé pour envoyer des messages inter-processus au client afin d'alerter L'IU qu'une mise à jour a eu lieu. C'est le moyen le plus rapide de transmettre des informations, mais il y a des complications. Par exemple, vous ne pouvez pas (encore) envoyer de messages IPC à une application web à moins que vous utilisez Flash, Silverlight,etc. Et aussi, vous devez étouffer ces messages parce que si vous en envoyez trop, cela peut rendre votre UI moins réactive. Quelques technologies à examiner ici sont MSMQ, TCP / IP, et les équivalents WCF.
-
Pull: votre UI peut périodiquement demander des données à partir de la fin. L'avantage de cette méthode est qu'il est facile de code dans l'INTERFACE: il suffit de consulter une source de données chaque X. Mais bien sûr, l'inconvénient est qu'il n'y est une décalage entre le moment où une mise à jour se produit et le moment où votre application reçoit cette mise à jour. Cela peut être inacceptable pour le traitement en temps réel. Quoi qu'il en soit, dans ce modèle, vous pouvez appeler dans un service web ou faire un appel à une base de données.
ce n'est que le point de départ. Les deux méthodes peuvent être utilisées, les données peuvent être mises en cache sur le client, etc. Tout dépend des besoins de l'application.