Blockseminar – Siegmundsburg GROßRECHNERASPEKTE Messaging Systems / MQSeries (Grundlagen) Steffen Goldau Email: [email protected] Inhaltsverzeichnis 1. Einführung 1.1. Motivation 1.2. Middleware 1.3. MQSeries-Grundlagen und Charakteristika 1.4. Anwendungsgebiete 1.5. Alternativen 3 3 5 6 7 7 2. Messaging und Queuing 2.1. Speicherkommunikation vs. Nachrichtenkommunikation 2.2. Nachrichtenkommunikation: Paketkommunikation vs. Kanalkommunikation 2.3. Grundlegende Prinzipien 9 9 3. Messages 3.1. Segmentierung 3.2. Gruppierung 3.3. Distribution Lists 3.4. Message Types 3.5. Persistenz von Messages 3.6. Message Descriptor 13 13 13 13 13 14 14 4. Queue-Manager 4.1. Queue-Manager-Cluster 4.2. Queue-Manager-Objekte 4.2.1. Queues 4.2.2. Channels 4.2.3. Prozess-Definitionen 15 16 17 17 17 18 5. Message-Queues 5.1. Local Queues 5.2. Cluster Queues 5.3. Remote Queues 5.4. Transmission Queues 5.5. Dynamic Queues 5.6. Alias Queues 19 19 19 19 20 20 20 6. Events 20 7. Zusammenfassung 21 8. Quellenverzeichnis 21 10 10 2 1. Einführung 1.1. Motivation Parallele Rechnerarchitekturen bleiben hinsichtlich der Hochverfügbarkeit und der Performance in vielen wichtigen industriellen Bereichen erste Wahl für Systemadminstratoren. Aber durch das Internet (Grid- Computing) oder durch die ständige Verbesserungen und Leistungssteigerungen der Computerhardware im Customerbereich (Cluster- Computing) werden parallele Architekturen auch in vielen Bereichen interessant, bei denen man auf Grund der geringeren finanziellen Potenz früher wohl kaum damit gerechnet hat, Parallelcomputing nutzen zu können. Allen parallelen Anwendungen, ob sie nun auf massivparallelen Architekturen, wie man sie in Großrechnern (zSeries von IBM) findet, oder auf weniger statisch verbundenen Systemen (Cluster oder gar Internet) laufen, ist das Problem gemeinsam, daß zeitgleich ablaufende Prozesse untereinander kommunizieren müssen (es wird im Folgenden nicht zwischen z.B. Prozessen und Threads unterschieden, da die Unterschiede in den Abstraktionen unerheblich für die Problematik sind). In der Praxis wird für diese Kommunikationsorganisation sogenannte Middleware eingesetzt. Man könnte argumentieren, daß es auf einer Single- CPU- Maschine aber ebenfalls verschiedene Prozesse gibt, welche ebenfalls miteinander kommunizieren möchten. Offensichtlich reichen hier Funktionen aus, die im Allgemeinen das Betriebssystem zu Verfügung stellt, um diese Organisation zu übernehemen. Mehrere Gründe sprechen aber dagegen, diese Kommunikationsfunktionen dem Betriebssystem zu überlassen. Zum einen gestaltet sich diese Kommunikation auf einer Single-CPU-Maschine weitaus einfacher als bei echt parallelen Strukturen, da sich aus der zeitlichen Reihung der Aktionen (Parallelität ist auf einer solchen Maschine ja höchstens vorgetäuscht oder die Interaktion ist vernachlässigbar – z.B. zu einem Graphikprozessor) eine Art natürliche Synchronisation ergibt. Zum anderen gibt es hier ein übergeordnetes Betriebssystem, welches es so natürlich z.B. für Cluster o.ä. nicht gibt. Großrechner dagegen haben auch ein solches Betriebssystem. Da es aber üblich ist, diese in ggf. heterogenen Umgebungen einzusetzten, hat es sich als wesentlich einfacherer herausgestellt, ein Middlewaresystem zu etablieren, welches unabhängig von der Lokalisation der Prozessoren (respektive der Prozesse) die Kommunikationsaufgabe übernehmen kann, als neue Betriebssystemfunktionen zu implementieren. Wie implizit schon vorrausgesetzt wollen wir zunächst unter „verteilt“ sowohl über ein Netzwerk verbundene Single-CPU-Maschinen (Cluster) als auch massivparallele Maschinen (Mainframes) verstehen. In der folgenden Graphik soll veranschaulicht werden, wie sich MQSeries als ein Beispiel für ein Middlewareprodukt von IBM in ein System einfügen kann. Dabei steht eine Applikation für einen Prozeß / Prozessor, der mit anderen über ein beliebiges Netzwerk verbunden sein kann. Dieses Netzwerk kann ein Ethernet, Myrinet,... (z.B. Cluster) o.ä., aber auch ein Bussystem (Mainframes) sein: 3 Applikation Applikation MQI MQI MQSeries MQSeries NETWORK Abb.1: MQSeries als Middleware Dasselbe etwas detailierter beschreibt folgende Graphik, wobei zuätzlich veranschaulicht wird, wie die Middleware aus dem verteilten System ein Single System Image simulieren kann, sodaß der Benutzer (ggf. auch der Programmierer) die Vorstellung haben kann, mit einem einzigen (relativ leistungsfähigen) Prozessor zu arbeiten. Dies kann Aufgaben, bei denen der parallele Lösungsansatz vor dem Benutzer versteckt werden soll, unter Umständen wesentlich vereinfachen. Z.B. könnte eine solche Aufgabe eine aufwendige Bildbearbeitungsfunktion sein, welche automatisch parallelisiert wird. Serial Applications Parallel Applications Serial Programming Parallel Programming Environment Environment Cluster Middleware (Single System Image) PC/Workstation PC/Workstation Comm. SW Comm. SW Net.Interface HW Net.Interface HW (HIGHSPEED) NETWORK Abb.2: Cluster 4 1.2. Middleware Als Middleware bezeichnet man also Softwarekomponenten, welche den Datenaustausch auf Applikationsebene ermöglichen. Ovum definiert Middleware als (Zitat): "Off-the-shelf connectivity software that supports distributed processing at runtime and it is used by developers to build distributed software." MQSeries ist eine solche (proprietäre) Middleware von IBM, welche auf verschiedenen Plattformen verfügbar ist, sodaß insbesondere heterogene Kommunikation ermöglicht wird. Insbesondere ermöglicht MQSeries also die Kommunikation sowohl von Prozessen / Prozessoren innerhalb eines Mainframes als auch zwischen Mainframes und anderen (heterogenen) Prozessen. Daher sollte MQSeries auch verschiedenste Plattformen unterstützen. Dies sind zum Beispiel: Host: IBM MVS/ESA- Server und Client Tandem NonStop Kernel- Server IBM VSE/ESA- Server Midrange Pyramid DC/Osx- Server und Client IBM OS/400- Server und Client Digital Open VMS VAX- Server Workstation IBM AIX- Server und Client NCR (AT&T GIS) UNIX- Server und Client Siemens Nixdorf SINIX- Server und Client Hewlett Packard HP-UX- Server und Client SunSolaris and SunOS- Server und Client Digital Unix- Client – verfügbar als SupportPac Linux Client – verfügbar als SupportPac Desktop IBM OS/2- Server und Client Microsoft Windows 2000- Server und Client Microsoft Windows (MQSeries V2.0 - 16 Bit) Microsoft Windows (MQSeries V2.1 - 32 Bit) Windows 95 (32- Bit)- Client SCO Unixware- Server SCO Unix- Server SCO Unix (L2)- Client DOS Client- verfügbar als SupportPac MacOS (OEM)- Client 5 MQSeries unterstützt zusätzlich die Kommunikation auf verschiedenen Abstraktionsebenen. Dies bedeutet, daß mittels MQSeries Programme unterschiedlicher Benutzernähe (user applications vs. system applications) miteinander kommunizieren können. Daher bezeichnet man MQSeries auch als Produktfamilie für "Cross- Network- Communication". WINTEL OS Subsystems KommunikationsProtokolle Prozessoren Sun/Solaris OS Subsystems KommunikationsProtokolle Prozessoren Abb.3: Abstraktionsebenen von MQSeries 1.3. MQSeries - Grundlagen und Charakteristika Message- Queuing ist eine Methode der Programm- zu- Programm- Kommunikation. Diese ermöglicht verbindungsloses Senden und Empfangen von Nachrichten. Das bedeutet, daß es keine dedizierten Nachrichtenkanäle gibt, welche zum Zwecke der Kommunikation offen gehalten werden müssen, sondern daß, ähnlich einem Bussystem, alle Nachrichten über einen (virtuellen) Kanal gesendet werden können. Natürlich bedürfen die Nachrichten daher gewisser Verwaltungsinformationen, die Art, Ziel oder Absender der Nachricht definieren. Diese Informationen werden im sogenannten Header der Nachricht gespeichert. Die Nachrichten werden in einer speziellen Datenstrukur (Queues) von den Programmen hinterlegt und abgefragt. Damit wird eine Art Postfachprinzip realisiert. Das Programm, welches eine Nachricht versenden will, schickt diese an das Postfach des Programms, welches die Nachricht empfangen soll. Dieses holt sich dann die Nachricht ab, sobald es Zeit dafür hat. Zum Versenden der Nachrichten verwenden die Programme MQSeries- API- Calls, welche das MQI (Message Queue Interface) implementieren, um z.B. mit einem Queue- Manager zu kommunizieren. Die Arbeit der Postboten übernimmt dabei der Queue- Manager, welcher als Run- TimeUmgebung von MQSeries zuständig für Verwaltungsaufgaben ist. Allerdings leistet der Queuemanager etwas mehr, als es gemeinhin Postboten tun. Jedes Postfach eines Empfängers hat nämlich, sofern es von einem nicht lokalen (remote) Prozeß genutzt werden soll, ein Pendant eben im Speicher des Prozesses, der dieses Postfach remote benutzen soll. Der Prozeß, der die Nachricht also senden will, sendet sie gar nicht an das Postfach des Empfängers, sondern nur an ein lokales Postfach, von dem bekannt ist, daß alle dort liegenden Nachrichten vom Queue- Manager zum eigentlichen Postfach des Empfängers übertragen werden sollen. In der Realität würde man sagen, daß alle Leute, denen man Briefe senden will, neben ihren eigenen Briefkästen in ihrem eigenen Haus noch zusätzlich einen Briefkasten im Haus des Absenders hängen haben, von dem wiederum der Postbote weiß, wohin die Briefe zu bringen sind. Analog hat der Absender natürlich neben seinem eigenen Breifkasten in seinem Haus noch einen Briefkasten im Haus derer, die ihm Briefe senden wollen. 6 Man sieht also, es gibt Empfangs- uns Sendebriefkästen. Allerdings hat ein Programm nicht nur einen einzigen Empfangsbriefkasten, sondern für jedes andere Programm, welches ihm Nachrichten senden will, einen. Sollten sich zwei miteinander kommunizierende Prozesse aber auf einem lokalen Prozessor befinden, können natürlich der Empfangsbriefkasten des einen mit dem Sendebriefkasten des anderen zusammenfallen. Dieses etwas aufwendigere Postfachprinzip kostet natürlich etwas Verwaltungsaufwand, der sich aber durch Sicherheit und Effizienz ggf. bezahlt machen kann. Insbesondere ermöglicht es asynchrone Komunikation. Dies bedeutet, daß performance-fressendes auf-einen-anderen-Prozeß-Warten soweit wie möglich vermieden wird. Außerdem ermöglicht MQSeries so relativ komplexe Kommunikationsstrukturen (one-to-one, oneto-many, many-to-many sowie Gruppenorganisation der Kommunikationsteilnehmer). 1.4. Anwendungsgebiete Die Anwendungsgebiete dieser Middleware kann man eigentlich nicht sinnvoll umreißen oder einschränken, da jegliche Aufgaben, bei denen verteilte Anwendungen miteinander kommunizieren wollen, prinzipiell für den Einsatz von z.B. MQSeries geeignet sind. Zum Beispiel im Bereich Workflowmanagement mit LotusNotes kann MQSeries seine Vorteile gut einbringen, was nicht zuletzt an der Tatsache liegt, daß sowohl LotusNotes als auch MQSeries von IBM entwickelt wurden. Das Workflowmanagement soll helfen, betriebliche Prozesse zu optimieren, indem man Aufgaben eben nicht als eigenständige Entities versteht, sondern sie als Prozesse, welche in einem größeren Kontext eingebettet sind, auffaßt. Dies kann natürlich nur gelingen, wenn sowohl die Kommunikation unter den beteiligten Mitarbeitern (egal an welchen Teilen der IT- Infrastruktur sie sitzen) als auch die Kommunikation unter den Programmen, die ggf. an der Aufgabe/Prozeß beteiligt sind, effizient und effektiv getstaltet werden können. Durch seine Vielfätigkeit bezüglich der möglichen Plattformen und durch seine Kontextunabhängigkeit resultierend aus den standartisierten API- Interfaces, kann MQSeries hier hilfreich die Kommunikationsorganisation erleichtern. IBM- Strategen haben sich für den Einsatz von MQSeries folgende Bereiche vorgestellt: - Finanzen - Herstellung - Handel & Vertrieb - Gesundheitsfürsorge - Reise- & Transportwesen Die Auflistung zeigt schon die Unmöglichkeit einer sinnvollen Abgrenzung. Aufgrund der Komplexität bzgl. z.B. der Adminstration und des finanziellen Aufwands eignen sich solche Middlewareprodukte aber nicht für den Heimanwenderbereich. 1.5.Alternativen Häufig stehen größere Unternehmen bei der Integration ihrer IT- Systeme vor der Frage, ob es für sie sinnvoller ist, eigene Middleware zu entwickeln, oder auf vorkonfektionierte Standardprodukte zurück zu greifen. Im Mainframebereich stellt sich diese Frage nicht, da IBM einerseits mit MQSeries ein universelles und ausgereiftes Produkt für seine Großrechner entwickelt hat, andererseits IBM den Großrechnermarkt absolut dominiert. 7 Daher soll an dieser Stelle kurz auf Alternativen zur Integration außerhalb des Mainframebereichs (z.B. Cluster,...) eingegangen werden. Als erstes wäre hier wohl das distributed component oriented model (DCOM) von Microsoft zu nennen, mit dem Microsoft ebenfalls den Anspruch auf Plattformunabhängigkeit erfüllen möchte, was in der Realität aber häufig scheitert. Hinter DCOM verbirgt sich ein ähnliches Prinzip wie hinter MQSeries, d.h. verschiedene Anwendungen (components) kommunizieren über deditierte Interfaces miteinander, allerdings realisiert DCOM nicht in dem Maße wie MQSeries das Postfachprinzip. Außerdem gibt es noch einige programmiersprachenspezifische Systeme, welche i.A. als Zusatzbibliotheken für die entsprechenden Compiler die Kommunikation über unterschiedliche Netzwerke erlauben. Zu nennen wäre hier z.B. die remote methode invocation (RMI) für Java, MPI (massage passing interface) für C/C++ oder high percormance fortran eben für Fortran. Im Folgenden möchte ich noch kurz auf alternative Modelle zum Message- Queuing eingehen: - RPC (remote procedure call): Dies war eine der ersten und einfachsten Lösungen für Middleware und für kleinere Systeme (nicht zu letzt weil auch finanziell atraktiver) geeignet. Typischer Vertreter ist z.B. RMI für Java. Der wichtigste Unterschied zu Messaging- Queueing ist eben das gegenseitige Aufrufen von Prozeduren und nicht das Hinterlegen von Nachrichten wie bei MQSeries. - MOM (message oriented Middleware): Bestes Beispiel ist hier auch MQSeries. Das liegt daran, daß man Messaging Queuing auch als message oriented middleware auffassen kann – Messaging Queuing also eine Teilmenge von MOM ist. Die markantesten Vorteile von MOM sind Sicherheit und Zuverlässigkeit, die aber durch Einbußen in Sachen Geschwindigkeit und Leistungsfähigkeit unter anderem durch einen erhöhten Verwaltungsaufwand erkauft werden müssen. - ORB (object request broker): Dieses Modell wurde von CORBA entwickelt. Der wichtigste Vertreter dieses Modells ist DCOM. Wie schon erwähnt, weist dieses Modell mehrere Analogien zum Messaging Queuing auf. 8 2. Messaging und Queuing 2.1. Speicherkommunikation vs. Nachrichtenkommunikation Global Memory CPU CPU Lok.Mem. Lok. Mem. Abb.4: Speicherkommunikation Das Prinzip der Speicherkommunikation basiert prinzipiell auf dem Ablegen von Daten, welche mehrere Prozessoren / Prozesse nutzen sollen, in einem gemeinsamen Speicherbereich. Die Prozesoren haben in der Regel natürlich noch eigene lokale Speicher. CPU CPU Lok.Mem. Lok.Mem. NETWORK Abb.5: Nachrichtenkommunikation Bei der Nachrichtenkommunikation nun werden Nachrichten als dedizierte Objekte über ein Netzwerk versendet. Allerdings ist hier der lokale Speicher optional, da es einen solchen z.B. in Mainframes nicht gibt. 9 2.2. Nachrichtenkommunikation: Paketkommunikation vs. Kanalkommunikation Die Paketkommunikation und Kanalkommunikation unterscheiden sich als Spezialisierungen der Nachrichtenkommunikation dahingehend, daß es bei der Kanalkommunikation einen speziellen physischen Kanal nur für die Kommunikation zweier Teilnehmer gibt (ähnlich zum Telefonnetz). Dagegen werden im Modell der Paketkommunikation Kanäle von mehreren Kommunikationsteilnehmern genutzt, d.h. auf diesen Kanälen werden Nachrichten, die dann natürlich mit bestimmten Verwaltungsinformationen versehen sein müssen, von mehreren Teilnehmenr transportiert (z.B. TCP/IP). In der Realität findet man auch Mischformen: z.B. wird für den Internetzugang einer konventionellen Anbindung zunächst eine kanalorientierte Verbindung (über die auch schon die Pakete gehen, aber eben nur die Pakete eines Nutzers) genutzt, um dann z.B. zwischen den Backbones paketorientiert vermittelt zu werden (natürlich kann die „1st Mile “ auch von mehreren Nutzern (routing) genutzt werden, die aber nach außen als ein einziger agieren). 2.3. Grundlegende Prinzipien Wie schon erwähnt ist MQSeries eine nachrichtenorientierte middleware. Man würde es als paketorientiert einordnen, obwohl es auch Kanäle für die Kommunikation zwischen QueueManager-Cluster gibt. Diese channels aber sind keine physischen Kanäle, welche nur für die Kommunikation zwischen zwei Queue- Manager- Clustern genutzt werden, sondern spezielle Objekte, welche die Kommunikation zwischen diesen beiden vereinfachen soll. Messaging bedeutet, daß Programme durch wechselseitiges Senden und Empfangen von Daten in Form von Nachrichten, insbesondere nicht durch gegenseitiges Aufrufen der Applikationen (RPC), kommunizieren (dies könnte man natürlich auch als nachrichtenorientiert bezeichnen, wir wollen aber unter Nachricht ein dediziertes Objekt mit Verwaltungsinformationen verstehen). Queuing dagegen bedeutet, daß Programme über Queues (Warteschlangen) miteinander kommunizieren, damit eine Synchronisation weitgehend überflüssig wird. Vor allem müssen Programme nicht zeitgleich ausgeführt werden. Dies ermöglicht das Senden einer Nachricht an eine Applikation, welche zu diesem Zeitpunkt noch nicht einmal aktiv sein muß. Sollte die Empfängerapplikation später gestartet werden, wird sie einfach in ihrer Empfangsqueue nachsehen, ob eine Nachricht eingegangen ist. Die Wahl geeigneter Reaktionsschemata auf bestimmte Situationen ist natürlich stark davon abhängig, in welcher Größenordnung das Granulat der Aufgabenteilung ausfällt. Nicht in jedem Fall kann man einfach darauf warten, daß ein Programm irgendwann mal wieder gestartet wird, sondern man braucht vielleicht sofort eine Antwort. Wie man das Verhalten bestimmter Akteure auf bestimmte Situationen steuern kann, wird weiter unten erläutert. Aufgrund dieses Queueing, das ja einen wesentlichen Beitrag zur Realisierung des Postfachprinzips leistet, bezeichnet IBM MQSeries auch als indirekte Programm- zu- Programm- Kommunikation. Eine Queue ist nun eine Datenstruktur, auf welcher Nachrichten gespeichert werden können. Sie realisieren die Postfächer, die schon weiter oben erwähnt wurden. Jede Queue hat einen QueueManager, der die Verwaltung der Queues übernimmt bzw. für die Nachrichten die Weiterleitung initiiert und somit quasi das Herz von MQSeries darstellt. 10 Der Queue- Manager verwaltet also die Queues und legt Nachrichten auf ihnen ab. Auf einer Queue können sowohl Applikationen als auch Queue- Manager Nachrichten ablegen. Dabei existieren Queues unabhängig von den Applikationen, die sie nutzen. Die Queues können sowohl temporär (RAM) oder persistent (Festplatte) abgespeichert werden. Man unterscheidet Queues hinsichtlich der Absicht, sie zu nutzen. Darauf wird allerdings noch weiter unten eingegangen, an dieser Stelle soll aber schon auf den Unterschied zwischen lokalen und remote Queues hingewiesen werden, da er für das weitere Verständnis essentiell ist. Queues können also lokalen oder entfernten (remote) Managern zugeordnet werden. Die lokale Queue ist dabei der Empfangbriefkasten einer Anwendung. Die remote Queue ist keine echte Queue, sondern enthält nur Eigenschaften der lokalen Queue. Sie wird im Allgemeinen von einem andern Manager verwaltet. Sie stellt, wie weiter oben schon beschrieben, den Sendebriefkasten der Applikation dar, die meiner Appliaktion etwas senden will. In diesen Sendebriefkästen / remote Queues wird die zu sendende Nachricht abgelegt und automatisch von MQSeries zu den lokalen Queues / Empfangsbriefkästen weiter geleitet. Eine Anwendung nutzt zum Senden und Empfangen einer Nachricht standardisierte MessageQueuing- Interface- Calls (MQI- Calls). Durch dieses MQI ist der Queuing- Mechanismus in vielen Programmiersprachen und Plattformen nutzbar, was eine Integration verschiedenster IT- Strukturen ermöglicht. MQSeries ermöglicht sowohl synchrones als auch asynchrones Messaging. Dabei meint man mit asynchron, daß der Sender nach Senden der Nachricht weiter arbeitet. Dies ist zwar schnell aber auch unsicherer und eignet sich nur bei recht grobgranularen Aufgabenteilungen (z.B. Primzahltetst). Mit synchron meint man dagegen, daß der Sender auf eine Antwort wartet, was langsamer aber auch sicherer ist. Diese Technik wird bei feinerem Granulat eingesetzt (z.B. sortieren). MQSeries verwirklicht eine Client-/Server- Struktur, d.h. ein Queuemanager bietet sowohl Funktionen an, welche Anfragen beantworten, als auch welche, die Anfragen stellen. Aber es gibt auch MQSeries- Applikationen, die keinen Queuemanager haben, also nur Anfragen an andere Queuemanager stellen (reine Clients). Diese sind wichtig z.B. für mobile Computing (explizit für Win95/98 realisiert, wobei MQSeries für WIN98 z.B. doch wieder einen eigenen Queuemanager hat, welcher aber nur im single user modus arbeiten kann). Ein Programmierer kann nicht die Zielanwendung sondern lediglich die Ziel- Queue bzw. den ZielQueue- Manager spezifizieren, die Ziel- Queue ist dann nat. mit einer Zielapplikation verbunden. Damit wird gewährleistet, daß die Kommunikation wirklich asynchron organisiert werden kann – ohne Queue- Manager also keine Kommunikation möglich ist (natürlich kann man die Kommunikation auch über andere Middleware bzw. Komunikationssysteme organisieren, aber dann gehen eben die Vorteile von MQSeries verloren). Eine Applikation kann nat. mit mehreren Queues verbunden sein. Die Struktur der Kommunikationswege bleibt weitestgehend dem Administrator überlassen. Insbesondere ist es für den Sender häufig belanglos, ob der Empfänger „online“ ist oder nicht, MQSeries startet ggf. die Zielapplikation (z.B. für synchrones Messaging). Wenn die Zielapplikation gerade nicht verfügbar ist, so bleibt i.A. die Message in der Queue und wird eben später bearbeitet. 11 AQ(A) EQ(B) QueueManager QueueManager EQ(A) AQ(B) Applikation A Applikation B MQI MQI Abb.6: Dedizierte Queuemanager AQ(A) =Ausgabequeue der Applikation A EQ(A) =Eingabequeue der Applikation A In dem Beispiel, welches die obige Abbildung verdeutlichen soll, hat jede Applikation ihre eigenen dedizierten Queues. Dabei ist AQ(B) die remote Queue zur lokalen Queue EQ(A). Eine Queue kann aber auch mehreren Applikationen zugeordnet sein, um die Struktur ein wenig zu vereinfachen: Abb.7: Zusammengefaßte Queuemanager AQ(A)=EQ(B) Applikation Applikation Queuemanager A B EQ(A)=AQ(B) MQI MQI Welcher Manager welche Queue verwaltet und wie die Struktur am Ende aussehen soll, ist dem Entwickler überlassen. 12 3. Messages Messages bestehen prinzipiell aus zwei Teilen, den Daten einerseits und dem Header andererseits. Ab Version MQSeries 5 kann eine Nachricht bis zu 100MB Nutzdaten enthalten. Der Header enthät z.B. die MessageID und andere Steuerattribute. 3.1. Segmentierung Messages können zerteilt werden, um Ressourcen (z.B. Puffergröße der Zielapplikation) besser nutzen zu können. Dies kann sowohl automatisch als auch nach Regeln des Programmierers geschehen. Der Empfänger kann dann entweder die ganze Nachricht oder bestimmte, ihn intressierende, Segmente abfragen, wobei die Segmente dann prinzipiell wieder eigenständige kleinere Nachrichten sind. 3.2. Gruppierung Um den Netzwerktraffic zu optimieren, können viele kleine Messages auch zu einer großen Message zusammengefaßt werden. Dabei sorgt MQSeries automatisch über Attribute im Descriptor (Erklärung siehe 3.4.) für das Beibehalten der richtigen Reihenfolge. 3.3. Distribution Lists Eine Message kann natürlich auch an mehrere Ziel- Queues gesendet werden. Wenn diese Queues vom selben Manager verwaltet werden, sendet MQSeries die Nachrichten nicht an die empfangenden Queues, sondern an den betreffenden Manager, der sie dann an die Queues verteilt, um den Netzwerktraffic zu verringern. Welche Queues zu welchen Managern gehören wird mit Hilfe einer dynamic distribution list herausgefunden, welche z.B. bei Applikationsstart neu gelesen wird. 3.4. Message Types Man unterscheidet vier wesentliche Typen von Messages hinsichtlich ihrer Funktion: - datagram message: Dies ist eine konventionelle Nachricht, welche ohne Rückmeldungsforderung einfach nur Daten transportiert. 13 - request message: Dieser Typ von messages transportiert zwar auch Daten, erfordert aber eine Rückmeldung. - reply message: Diese Nachrichten sind dann die Antwort auf request messages. - report messages: Mit Hilfe dieser Nachrichten werden Event- Information (z.B. bei Fehler oder als Bestätigung) weitergeleitet. 3.5. Persistenz von Messages Man unterscheidet Nachrichten außerdem hinsichtlich ihrer Persistenz, mit der sie übertragen werden. Persistant messages werden mit Hilfe eines besonderen Übertragungsprotokolls versendet, welches sicherstellt, daß auch im Falle eines Systemausfalls die Nachricht reproduziert und ggf. noch einmal gesendet werden kann. Dies kostet natürlich Performance, da der hier betriebene Verwaltungsaufwand nicht unerheblich ist. Für Nachrichten, die aber ihr Ziel erreichen müssen, nimmt man diesen Nachteil in Kauf. Dementsprechend gibt es auch non persistent messages, bei denen dieser erhöhte Aufwand nicht betrieben wird. Wenn solche Nachrichten ihr Ziel nach einer vorgegebenen Zeit nicht erreicht haben, werden sie einfach gelöscht. Deshalb können diese Nachrichten im Falle eines Systemabsturzes auch nicht wieder reproduziert werden (temporäre Speicherung). Solche Nachrichten verwendet man, wenn es sich einerseits nicht um sehr wichtige Übertragungsdaten handelt (z.B. unwichtige Statusmeldungen) oder wenn die Performance absoluten Vorrang hat. 3.6. Message Descriptor Jede Nachricht enthält (wie schon erwähnt) einen Verwaltungsteil (message descriptor), in dem folgende wichtige Verwaltungsinformationen gespeichert sind: - Version: - MessageID / CorrellationID: Die Versionsnummer des verwendeten MQI ist nicht unerheblich, da es durchaus vorstellbar ist, daß verschiedene Versionen eingesetzt werden und es doch zum Teil erhebliche Unterschiede gibt. Mit dem Wissen um die Verwendung verschiedner Versionen kann MQSeries dann ggf. Konvertierungsmaßnahmen durchführen. Diese ID's werden verwendet, um mögliche Antwortnachrichten zuordnen zu können. Bevor ein Programm, welches eine reply message sendet, diese Nachricht absendet, speichert es deren ID. Das empfangende Programm versieht die Antwortnachricht mit der ID der reply message. So kann der Sender nach der Antwortnachricht suchen lassen (mittels get- Fkt.) und die Antwort dann auch zuordnen. 14 - persistent / non persistent: siehe oben - Priorität: Mittels dieses Flags kann man die Reihenfolge der Bearbeitung der Nachrichten beeinflussen. - Date & Time: Zeitpunkt des Sendens - Lifetime of a message: Zusammen mit Date/Time kann nun das Verfallsdatum einer Nachricht errechnet werden. Da es keinen GarbageCollector gibt, wird der Speicher erst freigegeben, wenn nach dieser Nachricht gefragt wird (und dann die Überfälligkeit festgestellt wird). - Returnadress: MQSeries ist nach dem Client- Server- Prinzip aufgebaut, weshalb vielfältige Kombinationen der Kommunikationsstruktur (ono-to-many,...) möglich sind. Daher ist es nötig bei request messages die Adresse zu übergeben, wohin die Antwort gesendet werden soll. Nicht zu letzt ist es in diesem Feld möglich festzulegen, ob die Nachricht an eine Queue oder an einen Queuemanager gesendet werden soll. - Format: Diese Feld enthält Typinformationen der Daten (z.B. ob es noch weitere Header gibt). - Sender application and type: Hier werden Informationen über die sendende Applikation übermittelt. - report option: Dieses Flag beantwortet die Frage, ob eine Antwort erwartet wird oder nicht bzw. ob die Nachricht selber eine Antwort ist (Rückkehrcode). - Backout- Counter: Wenn eine Nachricht an mehrere Ziele gesendet wird und eine oder mehrere ihr Ziel nicht erreichen und zurückgesendet werden, kann in diesem Feld gezählt werden, wie oft eine Nachricht zurück kam (zur Fehleranalyse). - Segmentierung/ Gruppierung: siehe oben 4. Queue- Manager Der Message- Queue- Manager (MQM) ist der Kern von MQSeries und wird durch das MQSeriesRun- Time- Program implementiert. Seine Hauptaufgabe ist die Verwaltung der Queues bzw. die interne Organisation der Nachrichten. Zusätzlich stellt er einige Funktionen bereit, die den Traffic verringern bzw. die Arbeit des Programmierers vereinfachen, was nicht zuletzt durch die Bereitstellung des MQI durch den MQM geschieht. 15 Application Program A Application Program B PUT to Q1 GET from Q1 Queuemanager mit Queue Q1 Abb.8: Queuemanager Wenn eine Anwendung einer anderen eine Nachricht senden will, so muß sie lediglich "wissen" welche Queue und damit welcher MQM angesprochen werden soll. Für die Weiterleitung der Nachricht sorgen dann ggf. die MQMs; das Programm muß insbesondere nicht wissen, wo sich das Zielprogramm befindet. Die MQMs untereinander kommunizieren über sogenannte channels, wobei sie bestehende Netzwerkprotokolle (z.B. TCP/IP) nutzen können. MQSeries startet z.B. im Falle einer Nichtverfügbarkeit einer Zielapplikation selber geeignete Behandlungsroutinen. Solche Routinen können vom Adminstrator manipuliert werden. Die Aufgaben der MQM’s im Einzelnen sind: - verwalten der Message- Queues der Applikationen - liefern des MQI's - nutzen vorhandener Netzwerk- Facilities (MQM-to-MQM) - segmentiert und gruppiert ggf. - übernehmen von Aufgaben der Kommunikationskoordination (Distribution List) - liefern von Queue-Verwaltungs-Funktionen 4.1. Queue-Manager-Cluster MQMs können in Clustern zusammengeschlossen werden. Der wesentliche Unterschied zur konventionellen Verbindung zweier MQMs besteht in dem Wissen der einzelen MQM’s um Eigenschaften anderer MQM’s. Man spricht bei konventionellen Verbindungen zweier MQMs von der sogenannten partial repository, wobei jeder MQM nur Informationen über ihn interessierende Objekte kennt. 16 Dagegen spricht man bei Clusterverbindungen zweier MQMs von einer full repository. Hier enthält eine MQM Informationen über alle anderen Objekte im Cluster. Durch das Clustering werden also mehr Informationen über das MQM- System ermöglicht, welche andere MQMs mittels spezieller Clusterchannels nutzen können. Das Clustering gestattet außerdem auch mehrere Queue- Instanzen des gleichen Namens in verschiedenen MQMs zu verwenden. Dies ermöglicht eine bessere Workloadverteilung, indem spezielle Agenten die verschiedenen aber gleichnamigen Queues auf den gleichen Informationsstand bringen. Der Programmierer nutzt solche gleichnamigen Queues wie eine einzige, er braucht sich nicht um die Kommunikation zu kümmern. 4.2. Queue-Manager-Objekte Die Arbeit der MQM bezieht sich also auf Objekte, die der Administrator definiert. Es gibt folgende Objekte für den Queuemanager: - Queuemanager - Queues - Channels - Prozess- Definitionen Diese Objekte gelten für alle MQSeries- Plattformen. Dagegen gibt es auch Objekte, die nur für bestimmte Plattformen standardisiert sind und ggf. konvertiert werden müssen: - Buffer Pool - Storage Class 4.2.1. Queues Message Queues werden verwendet, um Nachrichten zu speichern und weiterzugeben. Es gibt lokale Queues, welche vom lokalen Queuemanager verwaltet werden und remote Queues, welche dagegen von Queuemanagern anderer Maschinen (Prozessoren) verwaltet werden. Den einzelnen Queuearten werde wir uns noch im Abschnitt 5. widmen. 4.2.2. Channels Ein MQSeries Channel ist kein realer, physischer Nachrichtenkanal, sondern er stellt ein virtuelles Objekt dar, welches Informationen über Kommunikationspfade enthält. Es werden zwei Arten dieser Channels unterschieden: - Message- Channel - Message- Queue- Interface (MQI)Channel 17 Ein Message Channel verbindet zwei Queue Manager über gesonderte Agenten. Dabei arbeitet er unidirektional und integriert so zwei Message Agenten und ein Kommunikationsprotokoll. Der Message Agent ist nun ein Programm, welches für die Weiterleitung der Nachrichten verantwortlich ist (mover). Ein MQI- Channel verbindet ein MQSeriesClient mit einem Message Queuemanager eines MQSeriesServers. Im Gegensatz zu Message- Channels ist ein MQI- Channel immer bidirektional. MQ Client MQI- Channels bidirektional MQ Client MQM MessageChannels unidirektional MQM Abb.9: Channel Channels können unter Umständen automatisch etabliert werden, i. A. aber werden sie vom Administrator eingerichtet. Ein Message Channel kann in zwei verschiedenen Geschwindigkeiten arbeiten, wobei die zweite Geschwindigkeit für nicht persistente Nachrichten im Falle eines Kanalfehlers verheerend ist, da diese Nachricht einerseits natürlich nicht wiederhergestellt werden kann, andererseits mit der schnelleren Übertragung die Wahrscheinlichkeit für einen Übertragungsfehler wächst. 4.2.3. Prozess-Definitionen Eine Prozessdefinition definiert eine Applikation für einen Queuemanager. Sie enthält zum Beispiel den Namen und den Pfad eines Programmes, für das eine Nachricht eintreffen kann. 18 5. Message-Queues Queues werden als Objekte definiert, die zu einem Queue Manager gehören. Daher gibt es auch hier wieder lokale und remote Queues MQSeries unterscheidet je nach Zweck versiedene Arten von Queues: - Lokale Queues - Cluster- Queues - Remote Queues - Transmission Queues - Dynamic Queues - Alias Queues 5.1. Local Queues Über diese Art von Queues wurde inzwischen schon einiges erwähnt. Daher hier nur noch einmal das Prinzip: Angenommen wir haben zwei Programme (die nicht notwendigerweise auf einer Maschine laufen müssen), welche mittels Queues kommunizieren möchten. Sie habe daher jeweils eine Ein- und Ausgangs Queue , welche alle von einem Queue- Manager verwaltet werden, zu denen sie ihre Messages senden bzw. abholen. Man spricht hier von zwei lokalen Queues. 5.2. Cluster Queues Eine Clusterqueue ist eine lokale Queue, die überall in einem Cluster bekannt ist. D.h. irgendein Queuemanager, der zu diesem Cluster gehört, kann mit ihr kommunizieren, ohne daß eine Remotedefinition etabliert werden muß. 5.3. Remote Queues Remote Queues heißen remote, da sie von einem Queuemanager verwaltet werden, der nicht auf der lokalen Maschine läuft. Die remote Queue stellt keine reale Queue dar, sondern implementiert eine Struktur, die Eigenschaften von einer Queue eines anderen Managers enthält. Sie können wie Queues eines lokalen Managers verwendet werden, d.h. die eigentliche Organisation übernimmt MQSeries. Remote Queues werden mittels transmission Queues mit der Zielqueue verbunden, die dann aber nur eine lokale Queue sein kann. (Zielqueues werden vom Administrator definiert). Eine Applikation kann nicht von einer Remote Queue Nachrichten lesen. Eine Cluster Queue braucht natürlich keine remote Definition. 19 5.4. Transmission Queues Transmission Queues sind spezielle lokale Queues. Da Transmission Queues als Zwischenschritt für die Kommunikation zweier nicht lokaler Queues verwendet werden, muß sie mit einer remote Queue verbunden sein. Wenn nun eine Message in einer Remote Queue abgelegt wird, so wird sie zunächst in der zugehörigen Transmission Queue gelagert, von wo aus sie dann gelesen und an den entsprechenden remote Queuemanager gesendet wird. Bei Managerclustern gibt es nur eine transmission Queue, welche für alle Messages verantwortlich ist, die an andere Queuemanager versendet werden. Der Benutzer (Programmierer) hat i.A. nichts mit ihnen zu tun, d.h. ihre Verwendung ist transparent. 5.5. Dynamic Queues Dynamic Queues werden automatisch erzeugt, wenn ein Programm sie benötigt. Sie werden vom Queuemanager belegt oder gelöscht und i.A. verwendet, um Zwischenergebnisse zu speichern. Es gibt zwei Arten: - temporäre Queues (enden mit Queuemanager- Restart) - permanente Queues (überleben Queuemanager- Restart) 5.6. Alias Queues Alias Queues sind keine realen Queues, sondern Definitionen, um einer realen Queue z.B. mehrere Namen zuweisen zu können. Dadurch können mehrere Programme mit der selben Queue arbeiten, indem auf diese mit verschiedenen Namen und verschiedenen Attributen zugegriffen wird. 6. Events Es gibt MQSeries-Instrumentation-Events, welche benutzt werden können, um Operationen eines Managers zu verfolgen. Events generieren spezielle Nachrichten, wenn bestimmte Bedingungen erfüllt sind. Sie lassen sich z.B. wie folgt kategorisieren: - Queuemanager- Events - Performance- Events - Channel- Events Ressourcendefinition innerhalb des Managers, d.h. eine Nachricht soll an eine nicht existierende Queue gesendet werden -> QueuemanagerEvent Ressourcendefinitionen außerhalb eines Managers, BufferOverflow z.B., wenn Channel-Instanz gestoppt wird 20 7. Zusammenfassung Middleware ist also nicht nur für Kommunikation innherhalb eines Clusters geeignet, sondern auch für die Kommunikation im Mainframebereich. Sie stellt eine Softwarekomponente für Kommunikation auf Applikationsebene dar. MQSeries ist das wichtigste Middlewareprogramm im Mainframebereich von IBM. Es gibt verschiedene Kommunikationsarten (RPC, DCE, MOM, ORB, DTPM) sowie verschiedene Modellansätze (DCOM, RMI, MPI, PVM, HPF). MQSeries ist eine Software für paketorientierte Programm-zu-Programm-Kommunikation. Es werden Nachrichten in sogenannten Message Queues abgelegt, von wo aus sie auch wieder abgeholt werden können. Diese Queues werden von Queuemanagern verwaltet. Die einzelnen Programme brauchen dabei nichts über Zielanwendung wissen, sondern nur über Zielqueue. 8. Quellenverzeichnis - Herrmann/Kebschull/Spruth: - Bulitz/Döhre: - Prof.Dr.Fey: Einführung in z/OS und OS/390 Seminararbeit Enterprise Middleware Vorlesung: “Clustercomputing“ 21