QoS-Middleware am Beispiel des CORBA-ORBs TAO Ansgar Konermann E-Mail: [email protected] 15. November 2001 http://www-st.inf.tu-dresden.de/~ak26/slides/hs-ws0102/ Inhalt ' ' Einleitung ' wesentliche Fragestellungen Überblick ' CORBA-Architektur ' Beispiel-ORB TAO ' Einschub ACE 2 Inhalt (2) ' QoS in CORBA ' Unterstützung durch den ORB selbst ' Unterstützung durch optionale CORBAErweiterungen und Dienste ' Wichtige Informationsquellen ' Zusammenfassung 3 Einleitung Wesentliche Fragestellungen ' Wie wird QoS durch CORBA unterstützt? ' Wie weit wird diese Unterstützung von TAO umgesetzt? ' Welche Rolle spielt ACE hier? ' Welche Voraussetzungen sind notwendig, damit ein CORBA-System "echtzeitfähig/QoS-fähig wird"? (insbesondere TAO) 4 Inhalt ' ' Einleitung ' wesentliche Fragestellungen Überblick ' CORBA-Architektur ' Beispiel-ORB TAO ' Einschub ACE 5 Überblick CORBA-Architektur 6 Überblick: CORBA-Architektur Request (1) 7 Überblick CORBA-Architektur Request (2) 8 Überblick Beispiel-ORB TAO ' ' ' ' ' ' ' ' TAO: "The ACE ORB" Volle CORBA 2.2/2.3 Unterstützung Weitere Features: Echtzeitfähigkeit, Fehlertoleranz Quelltext frei verfügbar (C/C++) Kommerzieller Support verfügbar Umfangreiche Online-Dokumentation Entwicklung erfolgt in Zusammenarbeit mit Industriepartnern (Auswahl): ' Cisco, DARPA, Lockheed Martin, Microsoft, Siemens, Sprint Implementiert auf Grundlage von ACE 9 Überblick: Beispiel-ORB TAO TAO: Architektur 10 Überblick Einschub ACE ' ACE: "ADAPTIVE Computing Environment" ' Klassenbibliothek/Framework: vereinfacht Herstellung von verteilten Systemen ' Ziele von ACE: ' ' ' ' Erhöhte Portierbarkeit Software-Qualität durch Verwendung von Mustern Vorhersagbarkeit, Effizienz (QoS-Unterstützung!) Weg: Abstraktionen auf unterschiedlicher Ebene 11 Überblick: Einschub ACE ACE: Architektur 12 Überblick: Einschub ACE ACE: Architektur (2) ' "OS Adapter Layer": Plattformabhängigkeiten vor höheren Schichten verstecken ' "C++ Wrapper Facades": Typsichere Schnittstellen zur Kapselung und Erweiterung der OS-APIs ' "Frameworks": integrieren und erweitern C++ Wrapper ' "Distributed Services and Components": ' wiederverwendbare Komponenten für häufige Aufgaben in verteilten Systemen (Naming, Logging, ...) 13 Inhalt QoS in CORBA ' QoS in CORBA ' Unterstützung durch den ORB selbst: ' ' ' Repräsentation von QoS-Parametern: Policies CORBA Messaging Unterstützung durch optionale CORBAErweiterungen und Dienste ' ' ' Real-Time CORBA CORBA Notification Service Audio/Video Streams Service (nicht weiter betrachtet) 14 QoS in CORBA: Unterstützung durch den ORB Policies ' Repräsentation von QoS-Parametern in CORBA durch sog. Policies ' Abstrakte Basisklasse: CORBA::Policy; CORBADienste leiten konkrete Policy-Klassen ab ' ORB erzeugt Instanzen von CORBA::Policy: create_policy() ' Zahlreiche QoS-Klassen von OMG spezifiziert: eindeutige Zuordnung eines "PolicyType" ' TAO: Policies als solche voll unterstützt (Teil der IIOP-Spezifikation) 15 QoS in CORBA: Unterstützung durch den ORB Policies: Schnittstellen PRGXOH%14$#^ W\SHGHIXQVLJQHGORQJ2QNKE[6[RG LQWHUIDFH2QNKE[^ TGCFQPN[CVVTKDWVG2QNKE[6[RGRQNKE[AV[RG 3ROLF\FRS\ YRLGGHVWUR\ `HQG3ROLF\ W\SHGHIVHTXHQFH3ROLF\!2QNKE[.KUV W\SHGHIVHTXHQFH3ROLF\7\SH!2QNKE[6[RG5GS LQWHUIDFH14$^ 3ROLF\ETGCVGARQNKE[ LQ3ROLF\7\SHW\SH KPCP[XCN UDLVHV3ROLF\(UURU `HQG25% `HQG&25%$ 16 QoS in CORBA: Unterstützung durch den ORB Policies: Festlegung ' Auf Client-Seite: ' ' ' ' ' Für gesamten ORB: ORBPolicyManager Für aktuellen Thread: PolicyCurrent Durch Methoden in CORBA::Object: ' Policies für ein einzelnes CORBA-Objekt Auf Server-Seite: ' ' Durch spezielle CORBA-Objekte: Für einen POA: POA::create_poa() Bei widersprüchlichen Policies auf Client- und Serverseite: Lösungsmechanismus notwendig 17 QoS in CORBA: Unterstützung durch den ORB Policies: Codebeispiel CORBA::ORB_ptr orb = CORBA::ORB_init(argc, argv); CORBA::Object_ptr pfobj = orb->resolve_initial_references("RootPOA"); PortableServer::POA_ptr rootPOA; rootPOA = PortableServer::POA::narrow(pfobj); CORBA::PolicyList policies(2); policies.length(2); policies[0] = rootPOA->create_thread_policy( PortableServer::ThreadPolicy::ORB_CTRL_MODEL); policies[1] = rootPOA->create_lifespan_policy( PortableServer::LifespanPolicy::TRANSIENT); PortableServer::POA_ptr poa = rootPOA->create_POA(my_little_poa, PortableServer::POAManager::_nil(), policies); 18 Inhalt QoS in CORBA ' QoS in CORBA ' Unterstützung durch den ORB selbst: ' ' ' Repräsentation von QoS-Parametern: Policies CORBA Messaging Unterstützung optionalen CORBA-Erweiterungen und CORBA-Diensten ' ' ' Real-Time CORBA CORBA Notification Service Audio/Video Streams Service (nicht weiter betrachtet) 19 QoS in CORBA: Unterstützung durch den ORB CORBA Messaging ' ' ' ' Einführung neuer Methodenaufruf-Semantiken: ' ' bisher: synchrone Aufrufe (two/one-way, def. synchr.) neu: asynchronous method invocation (AMI) Callback vs. Polling Routing von asynchronen Aufrufen möglich ' ' Request und Reply zeitlich unabhängig: mobile bzw. temporär vom Netz abgekoppelte Clients/Server möglich Router können Request/Reply zustellen TAO: Unterstützung unvollständig (Kennzeichnung unterstützter Features: Feature) 20 QoS in CORBA: CORBA Messaging AMI Routing 21 QoS in CORBA: CORBA Messaging QoS Parameter ' ' ' ' ' RebindPolicy: Transparenz von Migration und Verbindungsabbrüchen Prioritäten für Request/Reply (sync/async) Start-/Endzeiten für Request/Reply (sync/async) Routing: ' ' Art: keins, "forward", "store and forward" Max. Anzahl Zwischenstationen QueueOrderPolicy: Anfragen im Router sortieren ' "egal", zeitlich, nach Priorität, nach Deadline 22 Inhalt QoS in CORBA ' QoS in CORBA ' Unterstützung durch den ORB selbst: ' ' ' Repräsentation von QoS-Parametern: Policies CORBA Messaging Unterstützung durch optionale CORBAErweiterungen und -Dienste ' ' ' Real-Time CORBA CORBA Notification Service Audio/Video Streams Service (nicht weiter betrachtet) 23 RT-CORBA Was ist RT-CORBA? ' ' Erweiterung von Standard-CORBA ' Bestandteil der CORBA 2.4 Spezifikation ' Optional: nicht jeder CORBA 2.4 ORB muss RTCORBA unterstützen TAO: teilweise Unterstützung ("work in progress") 24 RT-CORBA Ziele der Spezifikation ' ' ' ' Erleichterung, um Ende-zu-Ende Vorhersagbarkeit zu erreichen Unterstützung bei der Verwaltung von Ressourcen Allgemeinheit: geeignet für weiche und harte RTAnforderungen Nicht Ziel: Portabilitäts-Schicht für RTOS bereitstellen ' ' besser: "POSIX real-time extensions" verwenden Spezifikation kompatibel mit POSIX Extensions 25 RT-CORBA Ende-zu-Ende Vorhersagbarkeit ' Notwendige Voraussetzung: alle Systemkomponenten müssen RT unterstützen: ' ' ' ' Betriebssystem (Scheduling-Mechanismus) CORBA ORB Kommunikationsschicht (Netzwerk) Anwendung selbst ' RT-CORBA erleichtert RT-fähige Kombination dieser Komponenten (nicht: garantiert) ' TAO: wenig konkrete Informationen (beispielsweise als "Systemanforderungen") 26 RT-CORBA Architektur 27 RT-CORBA Prioritäten ' Prioritäten des verwendeten OS: Native Thread Priorities ' Prioritäten in CORBA: CORBA Priority ' PriorityMapping: Abbildung CORBA-Priority nach Native und umgekehrt ' Priority Models: ' Client Propagated ' Server Declared 28 RT-CORBA Prioritäten: Schnittstellen module RTCORBA { typedef short Priority; const Priority minPriority = 0; const Priority maxPriority = 32767; }; module RTPortableServer { local interface POA : PortableServer::POA { Object create_reference_with_priority ( in CORBA::RepositoryId intf, in RTCORBA::Priority priority ) raises ( WrongPolicy ); ObjectId activate_object_with_priority ( in PortableServer::Servant p_servant, in RTCORBA::Priority priority ) raises ( ServantAlreadyActive, WrongPolicy ); // ... }; // end POA }; // end RTPortableServer 29 RT-CORBA Prioritäten: Codebeispiel // Servant-Implementierung class MyFooServant : public POA_Foo { public: MyFooServant(POA_ptr poa, Long value){ // ... } //... }; // Hauptprogramm: // Servant-Objekt erzeugen und aktivieren MyFooServant* afoo = new MyFooServant(poa, 27); PortableServer::ObjectId_var oid = poa->activate_object_with_priority(afoo, 42); Foo_var foo = afoo->_this(); // ORB "starten" poa->the_POAManager()->activate(); orb->run(); // ... RT-CORBA Mutex ' Hilfsmittel bei Koordinierung von Wettbewerb um Betriebsmittel ("Sperre") ' Zusätzliche Maßnahmen zur Verhinderung von Prioritätsumkehr bei Threads ' ' durch "Priority inheritance" (vgl. VL EZS, Prof. Härtig) muss von Mutex-Implementierung berücksichtigt werden ' RTCORBA::Mutex bietet Schnittstelle zur MutexImplementierung des RT-ORB ' TAO: volle Unterstützung 31 RT-CORBA Threadpools ' ' ' Hilfsmittel zur serverseitigen Thread-Verwaltung ' Anzahl von Threads zu einem "Pool" zusammengefasst Möglichkeiten: ' ' ' ' Zuweisung von Prioritäten zum ThreadPool Threaderzeugung im Voraus Begrenzung der maximalen Thread-Anzahl Pufferung eingehender Anfragen Erzielbare Effekte: ' ' Verringerung von Prioritätsumkehr, Latenz Erhöhung der Vorhersagbarkeit 32 RT-CORBA Weitere Features ' Getrennte Netzwerkverbindungen für Requests gleicher Priorität (priority banded connections) ' Anforderung exklusiver Netzwerkverbindungen, kein Multiplexing von Anfragen (private connections) ' Zeitschranken für Requests (relative roundtrip timeout) ' Anwendung kann Protokoll auf Server- und Clientseite einstellen (TAO: IIOP, UIOP, SHMIOP, SSLIOP, DIOP) ' Scheduling Service vereinfacht korrekte Anwendung der RTCORBA-Erweiterungen 33 Inhalt QoS in CORBA ' QoS in CORBA ' Unterstützung durch den ORB selbst: ' ' ' Repräsentation von QoS-Parametern: Policies CORBA Messaging Unterstützung durch optionale CORBAErweiterungen und -Dienste ' ' Real-Time CORBA CORBA Notification Service 34 QoS in CORBA Notification Service ' Austausch asynchroner Nachrichten: ' Publisher/Subscriber-Modell ' ' ' Supplier - Channel - Consumer Erweitert CORBA Event Service: ' Filterung von Nachrichten ' Einstellung von QoS-Parametern Abwärtskompatibilität 35 QoS in CORBA: Notification Service Architektur (vereinfacht) 36 QoS in CORBA: Notification Service Properties ' QoS-Eigenschaften durch Properties repräsentiert (nicht: Policies) ' Einstellen der Eigenschaften: ' Mit Getter/Setter-Methoden: ' ' ' ' Channel, SupplierAdmin, ConsumerAdmin, ProxySupplier, ProxyConsumer Abstrakte Basisklasse QoSAdmin, o. g. Klassen erweitern Schnittstelle In speziellem Datenfeld: ' Auch für einzelne (strukturierte) Events Hierarchische Gültigkeitsbereiche (absteigende Priorität): Event, Proxy, Admin, Channel 37 QoS in CORBA: Notification Service QoSAdmin: Schnittstelle module CosNotification { interface QoSAdmin { QoSProperties get_qos(); void set_qos ( in QoSProperties qos ) raises ( UnsupportedQoS ); void validate_qos ( in QoSProperties required_qos, out NamedPropertyRangeSeq available_qos ) raises ( UnsupportedQoS ); }; // QosAdmin // ... }; 38 QoS in CORBA: Notification Service Properties: Schnittstelle module CosNotification { typedef string Istring; typedef Istring PropertyName; typedef any PropertyValue; struct Property { PropertyName name; PropertyValue value; }; typedef sequence<Property> PropertySeq; typedef PropertySeq QoSProperties; // .. }; 39 QoS in CORBA: Notification Service QoS-Parameter ' ' ' ' ' ' Verlässlichkeit: EventReliability, ConnectionReliability Event-Priority, Expiry times (StopTime, Timeout) Earliest Delivery Time Maximum Events per Consumer (Queue-Optimierung) Order Policy, Discard Policy Maximum Batch Size, Pacing Interval (für Empfänger von Ereignis-Folgen/sequences) 40 Inhalt Wichtige Informationsquellen ' QoS in CORBA ' Unterstützung durch den ORB selbst ' Unterstützung durch optionale CORBAErweiterungen und Dienste ' Wichtige Informationsquellen ' Zusammenfassung 41 Wichtige Informationsquellen (1) ' Object Management Group: ' "The Common Object Request Broker. Architecture and Specification", ab Revision 2.4 (00-10-01) ' ' ' ' ' ORB-Unterstützung für QoS (Policies, CORBA-Messaging) RT-CORBA "Notification Service Specification", Version 1.0 (00-06-20) "Audio/Video Stream Specification", Version 1.0 (00-01-03) Einstiegspunkt CORBA: http://www.omg.org/corba 42 Wichtige Informationsquellen (2) ' Distributed Object Computing Group: ' ' ' ' ' ' Große Informationsfülle, nicht immer optimal strukturiert Einstiegspunkt zu ACE: http://www.cs.wustl.edu/~schmidt/ACE.html Einstiegspunkt zu TAO: http://www.cs.wustl.edu/~schmidt/TAO.html USENET: news:comp.soft-sys.ace Mailinglisten: http://www.cs.wustl.edu/~schmidt/TAO-mail.html Kommerzieller Support: ' ' http://www.ociweb.com "TAO Developer's Guide version 1.1a" 43 Wichtige Informationsquellen (3) ' Literatur: ' ' ' Jon Siegel: "CORBA 3. Fundamentals and Programming. Second Edition", New York 2000 (OMG Press) Michi Henning, Steve Vinoski: "Advanced CORBA Programming with C++", Reading, Massachusetts 1999 (Addison Wesley Longman) Ergänzende Lehrveranstaltungen: ' ' Prof. H. Härtig: "Echtzeitsysteme" Dr. rer. nat. Cl.-J. Hamann: "Quantitative Methoden der Betriebssysteme-Konstruktion" 44 Zusammenfassung ' QoS/RT muss von jeder beteiligten Systemkomponente unterstützt werden ' CORBA bietet Hilfsmittel an, um ein QoS/RTfähiges Gesamtsystem zu bauen ' Keine einheitliche "QoS-Spezifikation" ' TAO implementiert Großteil der QoS/RTFeatures von CORBA ' QoS/RT weiterhin Forschungsgegenstand 45 Vielen Dank.