Stock Trading System Design Muster
Trading Systems Entwerfen Ihres Systems - Teil 1. Der vorhergehende Abschnitt dieses Tutorials betrachtete die Elemente, die ein Handelssystem bilden und diskutierten die Vor - und Nachteile der Verwendung eines solchen Systems in einem Live-Handelsumfeld. In diesem Abschnitt bauen wir auf diesem Wissen auf Indem sie untersuchen, welche Märkte sich besonders gut für den Systemhandel eignen, werden wir dann die verschiedenen Gattungen der Handelssysteme genauer betrachten. Wiederholen in den verschiedenen Märkten. Equity-Märkte Der Aktienmarkt ist wahrscheinlich der häufigste Markt für den Handel, Vor allem bei den Anfängern In dieser Arena dominieren große Akteure wie Warren Buffett und Merrill Lynch, und traditionelle Wert - und Wachstumsinvestitionsstrategien sind bei weitem am häufigsten. Trotzdem haben viele Institutionen deutlich in die Gestaltung, Entwicklung und Umsetzung von Handelssystemen investiert. Individuelle Investoren Treten diesem Trend bei, obwohl langsam. Hier sind einige Schlüsselfaktoren zu beachten bei der Verwendung von Handelssystemen im Aktienmarkt Die große Menge an verfügbaren Aktien ermöglicht es Händlern, Systeme auf vielen verschiedenen Arten von Aktien zu testen - alles von extrem volatilen außerbörslichen OTC-Aktien bis hin zu nicht-flüchtigen Blue-Chips. Die Effektivität von Handelssystemen kann durch die geringe Liquidität begrenzt werden Von einigen Aktien, vor allem OTC und rosa Blatt Issue-Missionen können in Gewinne aus erfolgreichen Geschäften zu produzieren und können Verluste zu erhöhen OTC und rosa Blatt Aktien oft zusätzliche Provision Gebühren. Die wichtigsten Handelssysteme verwendet werden, die für Wert suchen - das heißt, Systeme Die unterschiedliche Parameter verwenden, um festzustellen, ob eine Sicherheit im Vergleich zu ihrer bisherigen Wertentwicklung, ihren Kollegen oder dem Markt im Allgemeinen unterbewertet ist. Foreign Exchange Markets Der Devisenmarkt oder Forex ist der größte und liquideste Markt der Welt Die Regierungen der Welt , Banken und anderen großen Institutionen Handel Billionen Dollar auf dem Forex-Markt jeden Tag Die Mehrheit der institutionellen Händler auf dem Forex verlassen sich auf Trad Systeme sind das gleiche gilt für Einzelpersonen auf dem Forex, aber einige Handel auf der Grundlage von Wirtschaftsberichten oder Zinsauszahlungen. Hier sind einige Schlüsselfaktoren zu beachten bei der Verwendung von Handelssystemen auf dem Forex-Markt. Die Liquidität in diesem Markt - aufgrund der riesigen Volumen - macht Handelssysteme genauer und effektiver. Es gibt keine Provisionen in diesem Markt, nur Spreads Daher ist es viel einfacher, viele Transaktionen ohne Erhöhung der Kosten für die Menge der Aktien oder Rohstoffe zur Verfügung gestellt, ist die Anzahl der Währungen zu handeln begrenzt Aber wegen der Verfügbarkeit von exotischen Währungspaaren - also Währungen aus kleineren Ländern - ist die Bandbreite in Bezug auf die Volatilität nicht unbedingt begrenzt. Die wichtigsten Handelssysteme, die in Forex verwendet werden, sind diejenigen, die den Trends folgen, ein populäres Sprichwort auf dem Markt ist der Trend Ist Ihr Freund oder Systeme, die kaufen oder verkaufen auf Ausbrüche Dies ist, weil ökonomische Indikatoren oft große Preisbewegungen auf einmal verursachen. Futures Equity, Forex und Ware Märkte alle bieten Futures-Handel Dies ist ein beliebtes Fahrzeug für den Systemhandel wegen der höheren Menge an Leverage verfügbar und die erhöhte Liquidität und Volatilität Allerdings können diese Faktoren schneiden, wie sie entweder verstärken können Ihre Gewinne oder verstärken Sie Ihre Verluste Aus diesem Grund, die Die Verwendung von Futures ist in der Regel für fortgeschrittene individuelle und institutionelle System-Trader reserviert Dies ist, weil Handelssysteme, die in der Lage sind, auf dem Futures-Markt zu profitieren, viel größere Anpassungen benötigen, verwenden Sie fortgeschrittene Indikatoren und nehmen Sie viel länger, um zu entwickeln So, das ist das beste Es s bis zu dem Individueller Investor zu entscheiden, welcher Markt am besten für den Systemhandel geeignet ist - jeder hat seine eigenen Vor - und Nachteile Die meisten Menschen sind mit den Aktienmärkten vertraut und diese Vertrautheit macht die Entwicklung eines Handelssystems einfacher. Allerdings ist Forex üblicherweise die überlegene Plattform Um Handelssysteme zu betreiben - vor allem bei erfahrenen Händlern. Wenn sich ein Händler entscheidet, Kursiv auf erhöhte Hebelwirkung und Volatilität, die Futures-Alternative ist immer offen Letztlich liegt die Wahl in den Händen des Systementwicklers. Tradesysteme. Trend-Folgesysteme Die häufigste Methode des Systemhandels ist das Trend-Nachfolgesystem Die grundlegendste Form, dieses System wartet nur auf eine signifikante Preisbewegung, dann kauft oder verkauft in dieser Richtung Diese Art von Systembanken auf die Hoffnung, dass diese Preisbewegungen den Trend beibehalten werden. Moving Average Systems Häufig in der technischen Analyse ein gleitender Durchschnitt verwendet wird Ein Indikator, der einfach den durchschnittlichen Preis einer Aktie über einen Zeitraum zeigt Die Essenz der Trends wird aus dieser Messung abgeleitet Die häufigste Art der Bestimmung von Ein-und Ausreise ist ein Crossover Die Logik dahinter ist einfach ein neuer Trend ist, wenn Preis Fällt über oder unter seinem historischen Preis durchschnittlichen Trend Hier ist ein Diagramm, das sowohl die Preis blaue Linie und die 20-Tage-MA rote Linie von IBM. Breakout Systems The Grundgedanke hinter dieser Art von System ist ähnlich wie bei einem gleitenden Durchschnittssystem Die Idee ist, dass bei einer neuen Hoch - oder Tiefstufe die Preisbewegung am ehesten in Richtung des Ausbruchs fortgesetzt wird. Ein Indikator, der verwendet werden kann Bestimmungsausbrüche ist eine einfache Bollinger Band Overlay Bollinger Bands zeigen Durchschnittswerte von hohen und niedrigen Preisen, und Ausbrüche auftreten, wenn der Preis die Kanten der Bands trifft Hier ist ein Diagramm, das Preis blaue Linie und Bollinger Bands graue Linien von Microsoft. Disadvantages von Trend - Folgende Systeme. Empirische Entscheidungsfindung erforderlich - Bei der Bestimmung der Trends gibt es immer ein empirisches Element, um die Dauer des historischen Trends zu betrachten. Zum Beispiel könnte der gleitende Durchschnitt für die letzten 20 Tage oder für die letzten fünf Jahre sein, so dass der Entwickler Muss bestimmen, welche am besten für das System ist Andere Faktoren, die bestimmt werden sollen, sind die durchschnittlichen Höhen und Tiefen in Breakout-Systemen. Lagging Nature - Moving Mittelwerte und Breakout-Systeme wi Ll immer verzögert Mit anderen Worten, sie können niemals die genaue Oberseite oder Unterseite eines Trends überschreiten Dies führt zwangsläufig zu einem Verfall von potenziellen Gewinnen, die manchmal erheblich sein können. Wetterwirkung - Unter den Marktkräften, die schädlich für den Erfolg von sind Trend-Folgesysteme, das ist einer der häufigsten Die Whipsaw-Effekt tritt auf, wenn der gleitende Durchschnitt ein falsches Signal erzeugt - das heißt, wenn der Durchschnitt nur in Reichweite fällt, dann plötzlich umgekehrt Richtung Dies kann zu massiven Verlusten führen, solange keine effektive Stop - Verluste und Risikomanagementtechniken werden eingesetzt. Seitliche Märkte - Trendfolgesysteme sind von Natur aus in der Lage, nur in Märkten Geld zu verdienen, die tatsächlich Trend machen. Allerdings bewegen sich die Märkte auch seit einem längeren Zeitraum in einem bestimmten Bereich Volatilität kann auftreten - Gelegentlich können Trendfolgesysteme eine extreme Volatilität erleben, aber der Trader muss mit seinem System zusammenhängen. Die Unfähigkeit, dies zu tun, wird dazu führen Versicherte Ausfälle. Countertrend Systems Grundsätzlich ist das Ziel mit dem Gegensprechsystem, bei den niedrigsten niedrigen zu kaufen und am höchsten zu verkaufen. Der Hauptunterschied zwischen diesem und dem Trendfolgesystem besteht darin, dass das Gegensprechsystem nicht selbstkorrigiert ist. Mit anderen Worten , Es gibt keine festgelegte Zeit, um Positionen zu beenden, und dies führt zu einem unbegrenzten Nachteilpotenzial Arten von Countertrend-Systemen Viele verschiedene Arten von Systemen gelten als Gegensprechsysteme Die Idee hier ist zu kaufen, wenn Impuls in einer Richtung beginnt zu verblassen Dies wird am häufigsten berechnet mit Oszillatoren Zum Beispiel kann ein Signal erzeugt werden, wenn Stochastik oder andere relative Stärke Indikatoren unter bestimmten Punkten fallen Es gibt andere Arten von Countertrend Trading-Systeme, aber alle von ihnen teilen das gleiche grundlegende Ziel - zu kaufen niedrig und verkaufen hoch. Die Vorteile der Countertrend Following Systems. E mpirische Entscheidungsfindung erforderlich - Zum Beispiel, einer der Faktoren, die der Systementwickler entscheiden muss, ist der Poin Ts, bei denen die relativen Stärkenindikatoren verblassen. Extreme Volatilität kann auftreten - Diese Systeme können auch einige extreme Volatilität und eine Unfähigkeit, mit dem System zu bleiben trotz dieser Volatilität wird zu versicherten Ausfall führen. Unlimited Downside - Wie bereits erwähnt, gibt es unbegrenzt Abwärtspotenzial, weil das System nicht selbstkorrigiert ist, gibt es keine festgelegte Zeit, um Positionen zu verlassen. Schlussfolgerung Die Hauptmärkte, für die Handelssysteme geeignet sind, sind die Aktien-, Devisen - und Futures-Märkte Jeder dieser Märkte hat seine Vor - und Nachteile Die beiden Hauptgenres Von Handelssystemen sind die Trendfolgen und die Gegensprechsysteme Trotz ihrer Unterschiede erfordern beide Arten von Systemen in ihren Entwicklungsstadien eine empirische Entscheidungsfindung seitens des Entwicklers. Auch diese Systeme unterliegen extremen Volatilitäten und können etwas verlangen Ausdauer - es ist wichtig, dass der System-Trader mit seinem System während dieser Zeiten haften Im folgenden i Nstallment, werden wir einen genaueren Blick auf, wie man ein Handelssystem zu entwerfen und diskutieren einige der Software, die System-Händler verwenden, um ihr Leben leichter machen. Trading-Systeme Entwerfen Ihres Systems - Teil 2.Die vorherigen Abschnitt über die Gestaltung eines Handelssystems untersucht die Verschiedene Arten von Märkten, in denen Handel zu handeln ist, und werfen einen Blick auf die beiden grundlegenden Genres der Handelssysteme Trend-Follow-und Countertrend-Systeme Diese beiden Strategien bilden die Grundlage, auf der alle Handelssysteme gebaut werden, und die Märkte bieten das Medium In diesem zweiten Abschnitt über die Gestaltung eines Handelssystems, brechen wir die beiden Genres in einzelne Komponenten, untersuchen die empirische Entscheidungsfindung und schließlich werfen Sie einen Blick auf, wie Software revolutioniert Systemhandel. Basis Trading System Komponenten Wie in der Einführung erwähnt, Handel Systeme werden unter Verwendung von Parametern aufgebaut - die Gruppen von spezifischen Regeln, die Ein - und Ausspeisepunkte für ein beliebiges Eigenkapital erzeugen. Beide Trend - und Countertr Ende Handelssysteme halten sich an vier Grundprinzipien, die den Aufbau eines jeden Handelssystems regeln Diese Grundsätze sind auch die wesentlichen Merkmale eines effektiven Systems. Das System muss Geld verdienen - das ist leicht zu sagen, aber schwer zu tun Maximierung der prozentualen Rückkehr sollte sein Ihr primäres Ziel bei der Gestaltung eines Handelssystems. Das System muss in der Lage sein, Risiken zu begrenzen - Es ist schwierig, ein System zu verwenden, das zwischen extremen Höhen und Tiefen schwankt, nicht nur hemmt es Ihre Liquidationsfähigkeit, sondern kann auch psychologisch steuern sein. Durch die Begrenzung von Risiken können Sie den Effekt eines schlechten Einstiegs zum Beispiel abnehmen, so lange bei einer Abwärtsschwankung. Die Systemparameter müssen stabil und machbar sein - Handelssysteme können sich nicht auf Zufall oder Glück verlassen Der Systemdesigner kann dieses Prinzip erfüllen Der Stabilität durch die Erweiterung der Parameter und nicht Optimierung zu viel in dem Bemühen, seine Erfolgschancen zu erhöhen Die Machbarkeit von Parametern, Einschließlich Schlupf, wird im zweiten Teil dieses Tutorials besprochen. Wiederum ist es sehr wichtig, bei der Gestaltung eines Systems einen Schlupf zu berücksichtigen. Der Zeitrahmen des Systems muss stabil und machbar sein - Für ein System ist der Zeitrahmen erfolgreich, Zufall und Glück Sollte nicht einen Faktor spielen Die Möglichkeit, in diesem Fall auch in Betracht gezogen zu werden Wenn Zeitrahmen zu eng zusammengesetzt sind, ist die daraus resultierende Handelshäufigkeit aufgrund von Softwarebeschränkungen und / oder marktseitigen Einschränkungen nicht möglich. Empirische Entscheidungsfindung Ein Handelssystem erfordert die Designer, um einige empirische Entscheidungen zu treffen, die direkt die Leistung des Systems beeinflussen - wenn es keine Notwendigkeit für diese Entscheidungsfindung gab, wäre jeder reich Hier sind einige grundlegende Faktoren, die Systemdesigner entscheiden müssen und einige Richtlinien. Welche Zeitspanne sollte ich All verwenden Aktien können aus mehreren Perspektiven von Zeiträumen analysiert werden, von einer Minute bis zu einem Jahrzehnt oder mehr N drastisch die Leistungsfähigkeit des Systems beeinflussen Mehr zuverlässige Ergebnisse ergeben sich in der Regel aus längeren Zeiträumen, während kurze Perioden bei der Beurteilung von realen Marktbedingungen irreführend sein können. Allerdings bedeutet dies nicht, dass nur extrem lange Preisperioden genutzt werden sollten Denken Sie, dass je länger die Zeitspanne, desto länger kann es für Gewinn zu realisieren. Beobachten Sie das folgende Beispiel von Microsoft s langfristig eine Periode von mehr als 20 Jahren, im Vergleich zu seiner kurzfristigen Zeitraum von ein paar Wochen. Wir können deutlich Sehen, dass die kurzfristige nicht eine genaue Darstellung der langfristigen ist, und umgekehrt Als allgemeine Faustregel sind fünf bis 10 Jahre ein gutes Ziel für mittel - bis langfristige Systemhändler und sechs Monate bis fünf Jahre Ein vernünftiges Sortiment für kurzfristige Händler Wieder hängt es davon ab, wann Sie planen zu liquidieren. Welche Preisreihen sollte ich verwenden Die meisten Aktien werden auf einer ungebrochenen Preisreihe verzeichnet - das heißt, die Charts sind kontinuierlich Beim Handel von Futures und Einige andere Aktien, aber es gibt eine Option, um tatsächliche Vertragsdaten anstelle von Kontinuität Futures-Verträge selbst nur ein paar Monate dauern, und System-Backtesting erfordert oft ein Jahr oder mehr von Daten daher System-Trader oft nutzen kontinuierliche Futures, die ein sind Reihe von Verträgen kombiniert, um einen kontinuierlichen Datenstrom zu schaffen Als eine allgemeine Faustregel sollten langfristige Händler an kontinuierliche Futures halten, während kurzfristige Händler tatsächliche Vertragsdaten verwenden sollten. Welche Parameter und Einstellungen sollte ich verwenden Wir erforschen dies weiter In nachfolgenden Abschnitten, die den Aufbau eines Handelssystems adressieren Grundsätzlich werden die Parameter durch Raten und Prüfen ausgewählt oder blinde Simulationen erzeugt oder eine Gruppe von Parametern vorgegeben und dann den Durchschnitt verwendet, um die Leistung zu bestimmen. Viele dieser Faktoren Kann durch die gewünschte Liquiditätszeit bis zur Liquidation, Gefahr und einer Vielzahl anderer Faktoren beeinflusst werden. Daher ist es wichtig, sich die Zeit zu entscheiden, welche Werke zu finden sind Am besten für Sie. Software und System Trading Die Entwicklung des Computers ist vielleicht die größte treibende Kraft hinter Systemhandel Ursprünglich waren Computer nur verwendet, um die Zahlen knacken schließlich schließlich die Fähigkeit, Simulationen zu erwerben, generieren Signale in Echtzeit und sogar Ort Trades für den Trader Einige Software ist einfach als Plattform entwickelt, von der ein Systementwickler ein System aufbauen kann. Andere Software nutzt neuronale Netze, um aus den Märkten zu lernen und sich selbst zu erweitern. Einige Software wird auf der Festplatte des Benutzers installiert, andere Software wird nur zur Verfügung gestellt Online Hier sind ein paar der grundlegenden Programme, die von Systementwicklern verwendet werden. Client-Side Software Client-Side-Software muss auf dem Computer des Benutzers installiert werden Es ist oft mit dem Internet verbunden und ist in der Lage, Echtzeit-Daten einschließlich Preise, News zu erhalten , Etc Hinweis einige Unternehmen berechnen Sie nicht nur für die Software, sondern auch für die Daten Diese Anwendungen in der Regel ermöglichen dem Benutzer, um die Zeitspanne, Arten von p Arameter und mehr Eines der wichtigsten Merkmale bietet dem Benutzer jedoch die Möglichkeit, ein System zu programmieren. Dies geschieht mit einer einfachen Programmiersprache, die oft spezifisch für die verwendete Anwendung ist, mit der Sie Regeln für die Erstellung von Kauf - und Verkaufssignalen einrichten können - Diese erscheinen dann direkt auf dem Diagramm Hier ist ein Beispiel für eine clientseitige Anwendung namens MetaTrader. Server-Side Software Server-seitige Software wird auf einem entfernten Server installiert. Oftmals geben diese Anwendungen Signale an, die der Öffentlichkeit mit einem Webseite oder eine Abonnentenbasis Dies beseitigt die Notwendigkeit für jede clientseitige Software außer einem Webbrowser Darüber hinaus zahlt der Benutzer eine kleine Abonnementgebühr im Gegensatz zum Kauf eines Programms und bezahlt für ein Datenabonnement Schließlich muss sich der Benutzer nicht entwickeln Das System, nur erhalten generierte Signale Aber Sie sollten sich daran erinnern, dass diese Art von Software ist oft anfällig für Betrügereien, während die Client-Seite-Software ist nicht Für mehr auf diesem, siehe Trading Syste Ms Coding. Conclusion Jetzt haben Sie ein grundlegendes Verständnis von Handelssystemen, die Sie wissen, was sie sind, die verschiedenen Arten von Systemen, die vorhanden sind, die Faktoren, um im Auge zu behalten, während sie entwerfen, und die Software verwendet, um den Systemhandel einfacher auf Sie zu machen Next, Wir werden untersuchen, wie man tatsächlich ein Handelssystem konstruiert und es in use. Messaging Patterns Integration Patterns in Praxis Fallstudie Bond Trading System. Von Jonathan Simon. Es ist leicht, sich von einer großen Sammlung von Mustern oder einer Mustersprache zu entfernen. Muster sind die Abstraktion einer Idee in einer wiederverwendbaren Form Oft ist die sehr generische Natur der Muster, die sie so nützlich macht, sie auch schwer zu begreifen Manchmal ist das Beste, was zu verstehen, Muster zu verstehen ist ein echtes Weltbeispiel Nicht ein konstruiertes Szenario dessen, was passieren könnte, aber was tatsächlich passiert und was passieren wird. Dieses Kapitel wendet Muster an, um Probleme mit einem Entdeckungsprozess zu lösen. Das System, das wir diskutieren werden, ist ein Bondhandel System, mit dem ich seit zwei Jahren von der Erstgestaltung über die Produktion gearbeitet habe Wir erforschen Szenarien und Probleme, die aufgetreten sind und wie man sie mit Mustern lösen kann. Dies beinhaltet die Entscheidungsprozesse der Auswahl eines Musters, sowie wie man die Muster kombiniert und anpasst Die Bedürfnisse des Systems Und dies geschieht unter Berücksichtigung der Kräfte, die in realen Systemen, einschließlich der Geschäftsanforderungen, Kundenentscheidungen, angetroffen werden Chitectural und technische Anforderungen, sowie Legacy-System-Integration Die Absicht dieses Ansatzes ist es, ein klareres Verständnis der Muster selbst durch praktische Anwendung. Building ein System. A große Wall Street Investment Bank setzt sich auf ein Bond-Preissystem in einem Anstrengungen, um den Arbeitsablauf ihres Bond-Trading-Desk zu optimieren Derzeit müssen Bond-Trader die Preise für eine große Anzahl von Anleihen an mehrere verschiedene Handelsplätze senden, jeder mit seiner eigenen Benutzeroberfläche Das Ziel für das System ist es, die Minutien der Preisgestaltung zu minimieren Ihre Anleihen kombiniert mit fortschrittlicher analytischer Funktionalität, die für den Anleihemarkt in einer einzigen gekapselten Benutzerschnittstelle spezifisch ist. Dies bedeutet Integration und Kommunikation mit mehreren Komponenten über verschiedene Kommunikationsprotokolle Der High-Level-Flow des Systems sieht so aus. Erste Marktdaten kommen in den Systemmarkt Daten sind Daten über den Preis und andere Eigenschaften der Anleihe, die das, was Menschen sind willin G zu kaufen und zu verkaufen die Anleihe für auf dem freien Markt Die Marktdaten werden sofort an die Analytics-Engine, die die Daten verändert Analytics bezieht sich auf mathematische Funktionen für Finanzanwendungen, die die Preise und andere Attribute von Anleihen ändern Dies sind generische Funktionen, die Eingabe verwenden Variablen, um die Ergebnisse der Funktion an eine bestimmte Bindung anzupassen Die Client-Anwendung, die auf jedem Trader-Desktop ausgeführt wird, konfiguriert die Analytics-Engine auf jeder Trader-Basis und steuert die Besonderheiten der Analytics für jede Bindung, die der Trader pricing hat. Sobald die Analytics sind Auf die Marktdaten angewendet werden, werden die geänderten Daten an verschiedene Handelsplätze verschickt, in denen Händler anderer Firmen die Anleihen kaufen oder verkaufen können. Mit dieser Übersicht über den Workflow des Systems können wir einige der architektonischen Probleme lösen Wir begegnen während des Designprozesses Lassen Sie uns einen Blick auf das, was wir bis heute wissen, Trader brauchen eine sehr ansprechende Anwendung auf Windows NT an D Solaris-Workstations Deshalb haben wir uns entschlossen, die Client-Applikation als Java-dicker Client zu implementieren, und zwar aufgrund der Plattformunabhängigkeit und der Fähigkeit, schnell auf Benutzereingaben und Marktdaten zu reagieren. Auf der Serverseite erben wir Legacy-C-Komponenten, die unser System nutzen wird Die Marktdatenkomponenten kommunizieren mit der TIBCO Information Bus TIB Messaging Infrastruktur. Wir erben die folgenden Komponenten. Market Data Price Feed Server Veröffentlicht eingehende Marktdaten an die TIB. Analytics Engine Führt Analysen auf eingehenden Marktdaten und sendet die modifizierten Marktdaten an die TIB. Contribution Server Führt alle Kommunikation mit Handelsplätzen aus Die Handelsplätze sind Drittanbieter-Komponenten, die nicht von der Bank kontrolliert werden. Legacy Market Data Subsystem. Legacy Contribution Subsystem. Wir müssen entscheiden, wie die einzelnen Subsysteme Java dick Client, Marktdaten und Beitrag sind Kommunizieren Wir könnten den dicken Klienten direkt mit dem le teilen Gacy-Server, aber das würde zu viel Geschäftslogik auf dem Client benötigen Stattdessen bauen wir ein Paar Java-Gateways, um mit den Legacy-Servern zu kommunizieren Das Pricing Gateway für Marktdaten ein Contribution Gateway für das Versenden von Preisen an Handelsplätze Dies wird eine gute Kapselung erreichen Der Geschäftslogik in Bezug auf diese Bereiche Die aktuellen Komponenten im System sind unten gezeigt Die Verbindungen markiert als zeigen, dass wir noch unsicher sind, wie einige der Komponenten kommunizieren. Das System und seine Komponenten. Die erste Kommunikationsfrage ist, wie die Integration zu integrieren Java-Dick-Client und die beiden Java-Server-Komponenten, um Daten auszutauschen Schauen wir uns die vier in diesem Buch vorgeschlagenen Integrationsstile an. File Transfer Shared Database Remote Prozedur Invocation und Messaging Wir können Shared Database sofort ausschließen, weil wir eine Ebene von Abstraktion zwischen dem Client und der Datenbank und don t wollen Datenbank-Zugangscode in der Client-Datei Transfe R kann gleichermaßen ausgeschlossen werden, da eine minimale Latenzzeit erforderlich ist, um sicherzustellen, dass aktuelle Preise an die Handelsplätze gesendet werden. Damit haben wir die Wahl zwischen Remote Procedure Invocation oder Messaging. Die Java-Plattform bietet integrierte Unterstützung für Remote Procedure Invocation und Messaging RPC-Stil Integration kann mit Remote-Methode Aufruf RMI, CORBA oder Enterprise Java Beans EJB Der Java Messaging Service JMS ist die gemeinsame API für Messaging-Stil Integration So sind beide Integrationsstile einfach in Java. So implementieren, die besser funktionieren wird Für dieses Projekt, Remote Procedure Invocation oder Messaging Es gibt nur eine Instanz des Pricing Gateway und eine Instanz des Contribution Gateway im System, aber in der Regel viele Thick Clients verbinden sich gleichzeitig mit diesen Services für jeden Bond-Trader, der eingeloggt ist Zu einer bestimmten Zeit Darüber hinaus möchte die Bank dies ein generisches Preissystem sein, das in anderen Anwendungen genutzt werden kann Neben einer unbekannten Anzahl von Think Clients kann es eine unbekannte Anzahl von anderen Anwendungen unter Verwendung der Preisdaten, die aus den Gateways kommen. Ein Thick Client oder eine andere Anwendung, die die Preisdaten verwendet, kann RPC leicht nutzen, um Anrufe an die Gateways zu tätigen Preisdaten und Aufruf der Verarbeitung Allerdings werden die Preisdaten ständig veröffentlicht werden, und bestimmte Kunden sind nur an bestimmten Daten interessiert, so dass die relevanten Daten an die richtigen Kunden in einer fristgerechten Weise könnte schwierig sein Die Kunden könnten die Gateways abfragen, aber das wird Schaffen Sie viel Overhead Es wäre besser für die Gateways, um die Daten den Klienten zur Verfügung zu stellen, sobald es verfügbar ist. Dies erfordert jedoch, dass jedes Gateway verfolgt, welche Clients derzeit aktiv sind und welche wollen, welche Daten Dann, wenn ein neues Stück von Daten verfügbar wird, die mehrmals pro Sekunde passieren wird, muss das Gateway an jedem interessierten Klienten einen RPC machen, um die Daten an die Clie weiterzugeben Nt Idealerweise sollten alle Clients gleichzeitig benachrichtigt werden, so dass jeder RPC in seinem eigenen gleichzeitigen Thread gemacht werden muss. Das kann funktionieren, wird aber sehr schnell kompliziert. Messaging vereinfacht dieses Problem erheblich Mit Messaging können wir separate Kanäle für die verschiedenen Typen definieren Der Preisdaten Dann, wenn ein Gateway ein neues Datenstück erhält, fügt es eine Nachricht hinzu, die diese Daten dem Publish-Abonnement-Kanal für diesen Datentyp enthält. Inzwischen werden alle Clients, die an einer bestimmten Art von Daten interessiert sind, auf dem Kanal zu hören Diese Art Auf diese Weise können die Gateways problemlos neue Daten an wen auch immer interessiert senden, ohne zu wissen, wie viele Höreranwendungen es gibt oder was sie sind. Die Clients müssen noch in der Lage sein, das Verhalten in den Gateways zu betreten Es gibt immer nur zwei Gateways, und der Client kann wahrscheinlich blockieren, während die Methode synchron aufgerufen wird, können diese Client-to-Gateway-Aufrufe ziemlich einfach mit RPC implementiert werden Verwenden bereits Messaging für Gateway-to-Client-Kommunikation, Nachrichten sind wahrscheinlich genauso gut ein Weg, um Client-to-Gateway-Kommunikation als auch implementieren. Daher wird die gesamte Kommunikation zwischen den Gateways und den Clients durch Messaging durchgeführt werden Denn alle der Komponenten sind in Java geschrieben, JMS präsentiert eine einfache Wahl für das Messaging-System Dies ist effektiv die Schaffung eines Message Bus oder eine Architektur, die es möglich machen, dass zukünftige Systeme mit dem aktuellen System mit wenig oder keine Änderungen an der Messaging-Infrastruktur integrieren können Weg, die Business-Funktionalität der Anwendung kann leicht von anderen Anwendungen verwendet werden die Bank entwickelt. Java-Komponenten Kommunikation mit JMS. JMS ist einfach eine Spezifikation und wir müssen über ein JMS-kompatibles Messaging-System entscheiden Wir beschlossen, IBM MQSeries JMS verwenden, weil Die Bank ist ein IBM-Shop, mit WebSphere-Anwendungsservern und vielen anderen IBM-Produkten. Als Ergebnis werden wir MQSeries verwenden, da wir bereits h haben Ave eine Support-Infrastruktur und eine Website-Lizenz des Produkts. Die nächste Frage ist, wie man das MQSeries Messaging-System mit dem eigenständigen C-Contribution-Server und den TIBCO-basierten Market Data - und Analytics-Engine-Servern verbindet. Wir brauchen einen Weg für die MQSeries-Konsumenten Haben Zugriff auf die TIB-Nachrichten Aber wie könnten wir das Message Translator-Muster verwenden, um TIB-Nachrichten in MQSeries-Nachrichten zu übersetzen Obwohl der C-Client für MQSeries als Message-Translator dient, würde er die Unabhängigkeit des JMS-Servers beeinträchtigen Und obwohl TIBCO eine Java-API hat, Der Kunde Architekt und Manager haben es abgelehnt Als Ergebnis muss der Message Translator Ansatz aufgegeben werden. Die Brücke vom TIB Server zum MQSeries Server erfordert Kommunikation zwischen C und Java Wir könnten CORBA verwenden, aber dann was über die Messaging A näher Schauen Sie sich die Message Translator Muster zeigt, es ist im Zusammenhang mit dem Channel-Adapter in seiner Verwendung von Kommunikationsprotokollen Das Herz eines Kanals Adapter ist es, Nicht-Messaging-Systeme mit Messaging-Systemen zu verbinden Ein Paar Kanaladapter, die zwei Messaging-Systeme miteinander verbinden, ist eine Messaging Bridge. Der Zweck einer Messaging Bridge ist es, Nachrichten von einem Messaging-System zu einem anderen zu übertragen. Dies ist genau das, was wir mit machen Die zusätzliche Komplexität der intra-sprachlichen Java-to-C-Kommunikation Wir können die Cross-Sprache Messaging Bridge mit einer Kombination von Channel Adapter s und CORBA implementieren Wir bauen zwei leichte Channel-Adapter-Server, eine in C-Management-Kommunikation mit dem TIB und eine in Java, das die Kommunikation mit JMS verwaltet Diese beiden Channel-Adapter, die Message Endpoint s selbst sind, kommunizieren miteinander über CORBA Wie unsere Wahl für MQSeries, werden wir CORBA anstatt JNI verwenden, da es ein Firmenstandard ist. Die Messaging-Brücke implementiert die effektiv simulierte Nachricht Übersetzung zwischen scheinbar inkompatiblen Messaging-Systemen und verschiedenen Sprachen. Message Translator mit Channel Adapte Rs. Das nächste Diagramm zeigt das aktuelle Systemdesign einschließlich der Gateways und anderer Komponenten Dies ist ein gutes Beispiel für die Musteranwendung Wir kombinierten zwei Channel Adapter s mit einem Nicht-Messaging-Protokoll, um das Message Translator-Muster zu implementieren und effektiv ein Muster zu verwenden, um ein anderes zu implementieren Muster Zusätzlich haben wir den Channel-Adapter-Kontext geändert, um zwei Messaging-Systeme mit einem Nicht-Messaging-Cross-Language-Übersetzungsprotokoll zu verknüpfen, anstatt ein Messaging-System mit einem Nicht-Messaging-System zu verbinden. Das aktuelle System mit den Channel Adapters. Structuring Channels. A Key Die Arbeit mit Mustern ist nicht nur wissen, wann zu verwenden, welches Muster, sondern auch, wie man am effektivsten verwenden Jede Muster-Implementierung muss berücksichtigen, spezifische der Technologie-Plattform sowie andere Design-Kriterien Dieser Abschnitt wendet den gleichen Entdeckung Prozess zu finden Die effizienteste Nutzung des Publish-Subscribe-Kanals im Rahmen des Marktdaten-Servers, der mit t kommuniziert Er analytics engine. Real Zeit Marktdaten entsteht mit Marktdaten-Feed, ein C-Server, der Marktdaten auf der TIB sendet Die Marktdaten-Feed verwendet einen separaten Publish-Abonnement-Kanal für jede Bindung, die es veröffentlichen Preise für Dies mag ein wenig extreme seit Jede neue Bindung braucht ihren eigenen neuen Kanal Aber das ist nicht so schwer, da man eigentlich keine Kanäle in TIBCO erstellen muss. Andernfalls werden die Kanäle durch einen hierarchischen Satz von Themennamen bezeichnet, der als Themen bezeichnet wird. Der TIBCO-Server filtert dann einen einzelnen Nachrichtenfluss nach Thema , Jedes einzelne Subjekt an einen einzelnen virtuellen Kanal zu senden Das Ergebnis davon ist ein sehr leichter Meldungskanal. Wir könnten ein System erstellen, das auf einigen Kanälen veröffentlicht wird und Abonnenten nur auf die Preise hören können, die sie interessieren. Dies würde verlangen, dass Abonnenten ein Message Filter oder Selective Consumer, um den gesamten Datenfluss für interessante Anleihekurse zu filtern und zu entscheiden, ob jede Nachricht so verarbeitet werden soll, wie sie erhalten wird E-Marktdaten werden auf Bond-dedizierten Kanälen veröffentlicht, können Abonnenten für Updates auf einer Reihe von Anleihen registrieren Dies ermöglicht es den Teilnehmern, durch selektives Abonnieren von Kanälen zu filtern und nur empfangende Nachrichten von Interesse zu erhalten, anstatt zu entscheiden, nachdem die Nachricht empfangen wurde. Es ist wichtig zu Beachten Sie, dass die Verwendung mehrerer Kanäle, um die Filterung zu vermeiden, ein nicht standardmäßiger Einsatz von Messaging-Kanälen ist. Im Kontext der TIBCO-Technologie entscheiden wir jedoch wirklich, ob wir die Filterfilterung implementieren oder besitzen oder die in TIBCO integrierte Kanalfilterung nutzen können, anstatt ob sie so viele verwenden Kanäle. Die nächste Komponente, die wir entwerfen müssen, ist die Analytics-Engine, ein weiterer C-TIB-Server, der die Marktdaten modifizieren und an die TIB erneut übertragen wird. Obwohl es außerhalb des Umfangs unserer Java-JMS-Entwicklung liegt, arbeiten wir eng mit dem C zusammen Team, um es zu entwerfen, da wir die Analytics-Engine primäre Kunden Das Problem zur Hand ist es, die Kanalstruktur, die am effizientesten rebroadcas zu finden T die neu geänderten Marktdaten. Da wir bereits einen dedizierten Message Channel pro Anleihe aus dem Marktdatenpreis Feed geerbt haben, wäre es logisch, die Marktdaten zu modifizieren und die veränderten Marktdaten auf dem Bond-dedizierten Message Channel erneut zu übertragen. Aber das wird nicht work since the analytics modifying the bonds prices are trader specific If we rebroadcast the modified data on the bond Message Channel we will destroy the data integrity by replacing generic market data with trader specific data On the other hand, we could have a different message type for trader specific market data that we publish on the same channel allowing subscribers to decide which message they are interested in to avoid destroying the data integrity But then clients will have to implement their own filters to separate out messages for other traders Additionally, there will a substantial increase in messages received by subscribers, placing an unnecessary burden on them. There are two options. One Channel per Trader Each trader has a designated channel for the modified market data This way, the original market data remains intact and each trader application can listen to its specific traders Message Channel for the modified price updates. One Channel per trader per Bond Create one Message Channel per-trader per-bond solely for the modified market data of that bond For example, the market data for bond ABC would be published on channel Bond ABC while the modified market data for trader A would be published on Message Channel Trader A, Bond ABC , modified market data for trader B on Trader B, Bond ABC, and so on. One channel per trader. One channel per bond per trader. There are advantages and disadvantages to each approach The per-bond approach, for example, uses a lot more Message Channel In the worst-case scenario, the number of Message Channel will be the number of bonds total multiplied by the number of traders We can put upper bounds on the number of channels that will be created since we know that there are only around 20 traders and they never price more than a couple hundred bonds This puts the upper limit below the 10,000 range, which is not so outlandish compared to the nearly 100,000 Message Channel the market data price feed is using Also, since we are using the TIB and Message Channel are quite inexpensive, the number of Message Channel s is not a severe issue On the other hand, the sheer number of Message Channel s could be a problem from a management perspective Every time a bond is added a channel for each trader must be maintained This could be severe in a very dynamic system Our system, however, is essentially static It also has an infrastructure for automatically managing Message Channel s This combined with the inherited architecture of a legacy component using a similar approach minimizes the downside This is not to say we should make an unnecessarily excessive number of Message Channel s Rather, we can implement an architectural approach that uses a large number of Message Channel s when there is a reason. And there is a reason in this case that comes down to the location of logic If we implement the per trader approach, the Analytics Engine needs logic to group input and output channels This is because the input channels from the Analytics Engine are per bond and the output Message Channel s would be per trader, requiring the Analytics Engine to route all analytics input from multiple bonds for a particular trader to a trader specific output Message Channel This effectively turns the analytics engine into a Content-Based Router to implement custom routing logic for our application. Following the Message Bus structure, the Analytics Engine is a generic server that could be used by several other systems in the So we don t want to cloud it with system specific functionality On the other hand, the per-bond approach works since the idea of a trader owning the analytics output of bond prices is a company accepted practice The per-bond a pproach keeps the Message Channel separation of the market data feed intact, while adding several more Message Channel s Before we reach the client, we want a Content-Based Router to combine these several channels into a manageable number of channels We don t want the client application running on the trader s desktop to be listening to thousands or tens of thousands of Message Channel s Now the question becomes where to put the Content-Based Router We could simply have the C TIB Channel Adapter forward all of the messages to the Pricing Gateway on a single Message Channel This is bad for two reasons we would be splitting up the business logic between C and Java, and we would lose the benefit of the separate Message Channel s on the TIB side allowing us to avoid filtering later in the data flow Looking at our Java components, we could either place it in the Pricing Gateway or create an intermediary component between the Pricing Gateway and the client. In theory, if we persisted the bond - based separation of Message Channel s all the way to the client, the Pricing Gateway would rebroadcast pricing information with the same channel structure as the Pricing Gateway and Analytics Engine This means a duplication of all of the bond dedicated TIB channels in JMS Even if we create an intermediary component between the Pricing Gateway and the client, the Pricing Gateway will still have to duplicate all of the channels in JMS On the other hand, implementing logic directly in the Pricing Gateway allows us to avoid duplicating the large number of channels in JMS allowing us to create a much smaller number of channels in the order of one per trader The Pricing Gateway registers itself through the C TIB Channel Adapter as a consumer for each bond of every trader in the system Then the Pricing Gateway will forward each specific client only the messages related to that particular trader This way, we only use a small number of Message Channel s on the JMS end, while maximizing the ben efit of the separation on the TIB end. The complete Market Data Flow to the client. The Message Channel layout discussion is a good example of how integrating patterns is important The goal here was to figure out how to effectively use the Message Channel s Saying you use a pattern isn t enough You need to figure out how to best implement it and incorporate into your system to solve the problems at hand Additionally, this example shows business forces in action If we could implement business logic in any of our components, we could have gone with the per trader approach and implemented an overall more simple approach with many less channels. Selecting a Message Channel. Now that we know the mechanics of the communication between the Java JMS components and the C TIBCO components, and we have seen some Message Channel structuring, we need to decide which type of JMS Message Channel s the Java components should use to communicate Before we can choose between the different Message Channels av ailable in JMS, let s look at the high level message flow of the system We have two gateways Pricing and Contribution communicating with the client Market data flows to the client from the Pricing Gateway which sends it out to the Contribution Gateway The client application sends message to the Pricing Gateway to alter the analytics being applied to each bond The Contribution Gateway also sends messages to the Client application relaying the status of the price updates to the different trading venues. The system message flow. The JMS specification describes two Message Channel types, Point-to-Point Channel JMS Queue and Publish-Subscribe Channel JMS Topic Recall that the case for using publish-subscribe is to enable all interested consumers to receive a message while the case for using point-to-point is to ensure that only one eligible consumer receives a particular message. Many systems would simply broadcast messages to all client applications, leaving each individual client application to decide for itself whether or not to process a particular message This will not work for our application since there are a large number of market data messages being sent to each client application If we broadcast market data updates to uninterested trader, we will be unnecessarily wasting client processor cycles deciding whether or not to process a market data update. Point-to-Point Channel s initially sound like a good choice since the clients are sending messages to unique servers and visa versa But it was a business requirement that traders may be logged in to multiple machines at the same time If we have a trader logged in at two workstations simultaneously and a point-to-point price update is sent, only one of the two client applications will get the message This is because only one consumer on a Point-to-Point Channel can receive a particular message Notice that only the first of each group of a trader s client applications receives the message. Point-to-Point Messaging for Pri ce Updates. We could solve this using the Recipient List pattern, which publishes messages to a list of intended recipients, guaranteeing that only clients in the recipient list will receive messages Using this pattern, the system could create recipient lists with all client application instances related to each trader Sending a message related to a particular trader would in turn send the message to each application in the recipient list This guarantees all client application instances related to a particular trader would receive the message The downside of this approach is that it requires quite a bit of implementation logic to manage the recipients and dispatch messages. Recipient List for Price Updates. Even though point-to-point could be made to work, let s see if there is a better way Using Publish-Subscribe Channel s, the system could broadcast messages on trader specific channels rather than client application specific channels This way, all client applications processing messages for a single trader would receive and process the message. Publish-Subscribe Messaging for Price Updates. The downside of using Publish-Subscribe Channel s is that unique message processing is not guaranteed with the server components It would be possible for multiple instances of a server component to be instantiated and each instance process the same message, possibly sending out invalid prices. Recalling the system message flow, only a single communication direction is satisfactory with each Message Channel Server-to-client communication with publish-subscribe is satisfactory while client-to-server communication is not and client-server communication with point-to-point is satisfactory while server-client is not Since there is no need to use the same Message Channel in both directions, we can use each Message Channel only one direction Client-to-server communication will be implemented with point-to-point while server-to-client communication will be implemented with publish-subscribe Using this combination of Message Channel s, the system benefits from direct communication with the server components using point-to-point messaging and the multicast nature of publish-subscribe without either of the drawbacks. Message flow with Channel Types. Problem Solving With Patterns. Patterns are tools and collections of patterns are toolboxes They help solve problems Some think that patterns are only useful during design Following the toolbox analogy, this is like saying that tools are only useful when you build a house, not when you fix it The fact is that patterns are a useful tool throughout a project when applied well In the following sections we will use the same pattern exploration process we used in the previous section to solve problems in our now working system. Flashing Market Data Updates. Traders want table cells to flash when new market data is received for a bond, clearly indicating changes The Java client receives messages with new data which triggers a client data ca che update and eventually flashing in the table The problem is that updates come quite frequently The GUI thread stack is becoming overloaded and eventually freezing the client since it can t respond to user interaction We will assume that the flashing is optimized and concentrate on the data flow of messages through the updating process An examination of performance data shows the client application is receiving several updates a second some updates occurred less than a millisecond apart Two patterns that seem like they could help slow down the message flow are Aggregator and Message Filter. A first thought is to implement a Message Filter to control the speed of the message flow by throwing out updates received a small amount of time after the reference message As an example, lets say that we are going to ignore messages within 5 milliseconds of each other The Message Filter could cache the time of the last acceptable message and throw out anything received within the next 5 milliseco nds While other applications may not be able to withstand data loss to such an extent, this is perfectly acceptable in our system due to the frequency of price updates. Time based Message Filter. The problem with this approach is that not all data fields are updated at the same time Each bond has approximately 50 data fields displayed to the user including price We realize that not every field is updated in every message If the system ignores consecutive messages, it may very well be throwing out important data. The other pattern of interest is the Aggregator The Aggregator is used to manage the reconciliation of multiple, related messages into a single message, potentially reducing the message flow The Aggregator could keep a copy of the bond data from the first aggregated message, then update only new or changed fields successive messages Eventually the aggregated bond data will be passed in a message to the client For now, lets assume that the Aggregator will send a message every 5 mil liseconds like the Message Filter Later, we ll explore another alternative. Aggregator with partial successive updates. The Aggregator like any other pattern, is not a silver bullet it has its pluses and minuses that need to be explored One potential minus is that implementing an Aggregator would reduce the message traffic by a great amount in our case only if many messages are coming in within a relatively short time regarding the same bond On the other hand, we would accomplish nothing if the Java client only receives updates for one field across all of the traders bonds For example, if we receive 1000 messages in a specified timeframe with 4 bonds of interest, we would reduce the message flow from 1000 to 4 messages over that timeframe Alternatively, if we receive 1000 messages in the same timeframe with 750 bonds of interest, we will have reduced the message flow from 1000 to 750 messages relatively little gain for the amount of effort A quick analysis of the message updates proves t hat the Java client receives many messages updating fields of the same bond, and therefore related messages So, Aggregator is in fact a good decision. What s left is to determine how the Aggregator will know when to send a message it has been aggregating The pattern describes a few algorithms for the Aggregator to know when to send the message These include algorithms to cause the aggregator to send out its contents after a certain amount of time has elapsed, after all required fields in a data set have been completed, and others The problem with all of these approaches is that the aggregator is controlling the message flow, not the client And the client is the major bottleneck in this case, not the message flow. This is because the Aggregator is assuming the consumers of its purged messages the client application in this case are Event-Driven Consumer s, or consumers that rely on events from an external source We need to turn the client into a Polling Consumer or a consumer that continu ously checks for messages, so the client application can control the message flow We can do this by creating a background thread that continuously cycles through the set of bonds and updates and flashes any changes that have occurred since the last iteration This way, the client controls when messages are received and as a result, guarantees that it will never become overloaded with messages during high update periods We can easily implement this by sending a Command Message to the Aggregator initiating an update The Aggregator will respond with a Document Message containing the set of updated fields that the client will process. The choice of Aggregator over Message Filter is clearly a decision based solely on the business requirements of our system Each could help us solve our performance problems, but using the Message Filter would solve the problem at cost of the system data integrity. Major Production Crash. With the performance of the flashing fixed, we are now in production One day the entire system goes down MQSeries crashes, bringing several components down with it We struggle with the problem for a while and finally trace it back to the MQSeries dead letter queue an implementation of the Dead Letter Channel The queue grows so large that it brings down the entire server After exploring the messages in the dead letter queue we find they are all expired market data messages This is caused by slow consumers, or consumers that do not process messages fast enough While messages are waiting to be processed, they time out see the Message Expiration pattern and are sent to the Dead Letter Channel The excessive number of expired market data messages in the dead letter queue is a clear indication that the message flow is too great messages expire before the target application can consume them We need to fix the message flow and we turn to patterns for help slowing down the message flow. A reasonable first step is to explore solving this problem with the Aggregator as we recently used this pattern to solve the similar flashing market data control rate problem The system design relies on the client application to immediately forward market data update messages to the trading venues This means the system cannot wait to collect messages and aggregate them So the Aggregator must be abandoned. There are two other patterns that deal with the problem of consuming messages concurrently Competing Consumers and Message Dispatcher Starting with Competing Consumers the benefit of this pattern is the parallel processing of incoming messages This is accomplished using several consumers on the same channel Only one consumer processes each incoming message leaving the others to process successive messages Competing Consumers however, will not work for us since we are using Publish-Subscribe Channel s in server-to-client communication Competing Consumers on a Publish-Subscribe Channel channel means that all consumers process the same incoming message This results in mo re work without any gain and completely misses the goal of the pattern This approach also has to be abandoned. On the other hand, the Message Dispatcher describes an approach whereby you add several consumers to a pool Each consumer can run its own execution thread One main Message Consumer listens to the Channel and delegates the message on to an unoccupied Message Consumer in the pool and immediately returns to listening on the Message Channel This achieves the parallel processing benefit of Competing Consumers but works on Publish-Subscribe Channel s. The Message Dispatcher in context. Implementing this in our system is simple We create a single JMSListener called the Dispatcher, which contains a collection of other JMSListener s called Performers When the onMessage method of the Dispatcher is called, it in turn picks a Performer out of the collection to actually process the message The result of which is a Message Listener the Dispatcher that always returns immediately This guarantee s a steady flow of message processing regardless of the message flow rate Additionally, this works equally well on a Publish-Subscribe Channel s as it does on a Point-to-Point Channel s With this infrastructure, messages can be received by the client application at almost any rate If the client application is still slow to process the message after receiving them, the client application can deal with the delayed processing and potentially outdated market data rather than the messages expiring in the JMS Message Channel. The crash discussed in this section and the fix using the Message Dispatcher is an excellent example of the limits of applying patterns We encountered a performance problem based on a design flaw not allowing the client to process messages in parallel This greatly improved the problem, but did not completely fix it This is because the real problem was the client becoming a bottleneck This couldn t be fixed with a thousand patterns We later addressed this problem by refac toring the message flow architecture to route messages directly from the Pricing Gateway to the Contribution Gateway So patterns can help design and maintain a system, but don t necessarily make up for poor upfront design. Throughout this chapter, we have applied patterns to several different aspects of a bond trading system including solving initial upfront design problems and fixing a nearly job threatening production crash with patterns We also saw these patterns as they already exist in third party product, legacy components, and our JMS and TIBCO messaging systems Most importantly, these are real problems with the same types of architectural, technical and business problems we experience as we design and maintain our own systems Hopefully reading about applying patterns to this system helps give you a better understanding of the patterns as well as how to apply them to your own systems. Want to keep up-to-date Follow My Blog. Want to read more in depth Check out My Articles. Want to s ee me live See where I am speaking next. Find the full description of this pattern in Enterprise Integration Patterns Gregor Hohpe and Bobby Woolf ISBN 0321200683 650 pages Addison-Wesley. From Enterprise Integration to Enterprise Transformation. My new book describes how architects can play a critical role in IT transformation by applying their technical, communication, and organizational skills with 37 episodes from large-scale enterprise IT. Parts of this page are made available under the Creative Commons Attribution license You can reuse the pattern icon, the pattern name, the problem and solution statements in bold , and the sketch under this license Other portions of the text, such as text chapters or the full pattern text, are protected by copyright. Messaging Patterns Integration Patterns in Practice Case Study Bond Trading System.
Comments
Post a Comment