Online Trading System Projekt Spezifikationen
Slideshare verwendet Cookies, um Funktionalität und Leistung zu verbessern und Ihnen relevante Werbung zu bieten. Wenn Sie die Seite weiter durchsuchen, stimmen Sie der Verwendung von Cookies auf dieser Website zu. Siehe unsere Benutzervereinbarung und Datenschutzbestimmungen. Slideshare verwendet Cookies, um Funktionalität und Leistung zu verbessern und Ihnen relevante Werbung zu bieten. Wenn Sie die Seite weiter durchsuchen, stimmen Sie der Verwendung von Cookies auf dieser Website zu. Weitere Informationen finden Sie in unserer Datenschutzerklärung und Benutzervereinbarung. Entdecken Sie alle Ihre Lieblingsthemen in der SlideShare App Holen Sie sich die SlideShare App, um für später auch offline zu speichern Weiter zur mobilen Website Upload Login Signup Doppelter Tipp zum Verkleinern Ein Projektbericht zum Online-Handel Teilen Sie diese SlideShare LinkedIn Corporation Kopie 2017Online Trading System Projekt Spezifikationen LESEN MORE MFG - Offizielle Website Trader Log Online Trading Community für Aktien Futures und Forex Traders. Home Primäre Navigation. Home Market News Die Zukunft der Äpfel Auto Projekt LESEN SIE MEHR Alabama interChange Projekt Alabama interChange System Autor Thema: UL Online Trading System Projekt Spezifikationen (Gelesen 7735 mal) LESEN SIE MEHR BÜRO DER KARRIERE DIENSTLEISTUNGEN - sipa. columbia. edu Warum hat das Taurus Projekt von LSE LSE Batch Trading System, Aktienregistrierung und Transfersystem. Die Spezifikationen wurden von einem READ MEHR TSYS - Offizielle Seite an einem Webinar Online (Instant Join App) angetrieben. Verbinden Sie mit Audiosystemanforderungen für Teilnehmer. Sie können problemlos an einer Sitzung von überall teilnehmen, Schreiben eines Anforderungsdokuments - CDL TSYS macht es möglich, dass Millionen von Käufern und Verkäufern um Geld umschalten Umschalten Navigation Projektname Login. Home 169 2016 Gesamtsystem LESEN SIE MEHR Standards Australien - Offizielle Seite Odoo Projekt nimmt keine Zeit, um Ihr Lager mit dem intelligenten Doppeleintrags-Inventarsystem einfach zu optimieren. Eine Weinstange implementiert Odoo Online zwei LESEN SIE MEHR 0 Depotgeb252hren ING-DiBa. de Erfahren Sie mehr über Die Senior Project Manager Rolle in Auckland bei BP und gelten Online-Engineering-Spezifikationen, Handel und Vertrieb von READ MORE HR Open Standards Consortium, Inc. SEITE DIMENSION UND BINDEN SPEZIFIKATIONEN: Die Dimension des Projekts Bericht sollte in A4 Größe. 337 Online Trading System 338 Online Degree LESEN SIE MEHR Softwareanforderungsspezifikation - Online-Handelssystem DIESE BERATUNGSVEREINBARUNG, DASS der Kunde ein Forex Trading System oder Spezifikationen für eine benutzerdefinierte Software andere Online-Vereinbarungen entwickelt hat und MEHR Trader Log-Trading und Investing Guide Futures, Optionen auf Futures und Devisenhandel beinhaltet erhebliches Risiko und Online-Trading hat inhärentes Risiko aufgrund der System-System-Performance LESEN SIE MEHR Warum hat das Taurus-Projekt von LSE Strat. In-A für Online-Handel in Devisentermingeschäften und Edelmetallen unter den Bedingungen des Margin Trading. Die Gründung der Projekte Trading System passt zu Odoo - Offizielle Site InstaForex Kunden nutzen modernste Technologien im Online-Handel. Projekt im ForexCopy-System mit InstaForex. Sergey Usanov Ukraine. System LESEN SIE MEHR Der MFG-Vertrag Fertigungsmarkt ermöglicht Beschaffung MFG ist ein nahtloses Online-System für die Anforderung von Fertigungszitaten aus READ MORE Zahlungen - Algorithmische und mechanische Forex Strategien Neu und nur bei der ING-DiBa: 220ber 5000 Fonds amp ETFs geb252hrenfrei LESEN SIE MEHR Broker Systems SA Gt Home-Trading-System Menschen waren Erics-Projekt und gab Martin Portfolio Spezifikation Abbildung 1. Mit Spezifikationen zu beschreiben, die READ MORE Senior Project Manager Job bei BP in Auckland Karriere Spezifikationen Bestell-Typen Online-Bewerbung Download Formulare FUTURESONLINE IST NICHT MIT DEN NICHT BEDEUTET ES EINEN HANDEL SYSTEM LESEN MEHR Online-Trading-System Projekt-Spezifikationen Neu und nur bei der ING-DiBa: 220ber 5000 Fonds amp ETFs geb252hrenfrei LESEN MEHR Prime Progression - Trading 17.12.2008 018332Dokumentation von quotONLINE BANKINGWot Projekt Das Net Banking System befasst sich mit SOFTWARE UND HARDWARE SPEZIFIKATIONEN Net Banking System LESEN SIE MEHR Systemanforderungen Spezifikationen (SRS) Online Trading System Projektspezifikationen Verteilte Objekte CSPP 51024. Das Online-Handelssystem hat eine Reihe von primären funktionalen Anforderungen: LESEN Sie mehr Projektformat - scribd Futures Trading. TradeStation hat eine praktische Überprüfung der einzelnen Unternehmen Online-Brokerage-Produkte und System-Zugang und Handel Platzierung und lesen Sie mehr Forex Online Forex Trading Währung Trading Forex Broker Systems SA. Wendet ein Management-System und eindeutige Spezifikationen an. XRHMA-Derivate, angereichert mit Online-Trading-Funktionalität LESEN SIE MEHR Produktspezifikationen - CBOE Online-Kurse Seminare XEO-Optionen Produktspezifikationen Ein Punkt entspricht 100. Minimum Tick für Serienhandel unter 3 ist 0,05 (5,00) LESEN SIE MEHR Trade Futures Online mit den TradeStation Platform Standards Australia und MarkLogic Partner in der Entwicklung von Digital Repository Nächste Runde der Projekt Priorisierung und Auswahl Verdrahtungsregeln LESEN MEHR Online-Handelssystem Projekt-Spezifikationen nairobi Smartsheet ist ein Online-Projekt-Management von Projektzeichnungen, Spezifikationen und andere Ein online anpassbare Projekt-Management-System fürOnline Trading System Projekt Spezifikationen Distributed Objects CSPP 51024 Transkription 1 Online Trading System Projektspezifikationen Verteilte Objekte CSPP Überblick Ein Online-Handelssystem bezieht sich auf einen elektronischen Marktplatz, in dem Kunden Anschließen und Aufträge zum Kauf und Verkauf bestimmter Produkte anbieten können. Für die Zwecke dieser Spezifikation ist das Handelssystem erforderlich, um ein einzelnes Produkt zum Austausch zu unterstützen. Das Handelssystem entfaltet ein Gateway für Clients, um eine Verbindung zum Handel herzustellen und Nachrichten zu senden und zu empfangen. Die Handels - oder Handels-Engine ist für die Bearbeitung neuer Aufträge zuständig, stellt sie in ein Orderbuch und führt eine Matching-Funktion im Orderbuch durch. Diese Funktionen treten immer dann auf, wenn der Handel eine neue Bestellung erhält. Das Handelssystem akzeptiert Aufträge von Clients, Senden von Quittungen, ACKs oder negativen Quittungen NACKs als Antwort auf den Empfang des Auftrags oder die Ablehnung des Auftrags an einen bestimmten Kunden. Wenn die Match-Funktion zu tatsächlichen Spielen von Käufern und Verkäufern führt, wird die Trading-Engine Fülle-Nachrichten an die an der Transaktion beteiligten Parteien weitergeben. Normalerweise wäre dies eine sichere Kommunikation zwischen den und den einzelnen Kunden, die an der Transaktion beteiligt sind, aber diese Spezifikation erfordert nur, dass die Fill-Nachricht eindeutige Identifikatoren für den Käufer und Verkäufer enthält (und dass die Käufer - und Verkäufer-Client-Programme nur die Fill-Informationen verarbeiten Bezieht sich auf ihre einzigartige Identität). Immer wenn Informationen in die Trading Engine übergehen, die zu einer materiellen Veränderung im Zustand des Orderbuchs führt, veröffentlicht die Trading Engine Marktdatennachrichten. Diese Nachrichten sind anonym und repräsentieren aggregierte Daten. Die letzte Nachricht enthält den Preis, die Menge und die Zeit einer Füllung oder des Handels, die Buchnachricht enthält bis zu den Top drei kaufen und verkaufen Preisniveaus (nachdem alle Matching gelöst hat). Trading-Systeme verfügen über umfangreiche Audit-Funktionalität, für diese Spezifikation ist die einzige erforderliche Audit-Fähigkeit zwei administrative Webseiten, die 1) alle gesendeten und empfangenen Nachrichten nach Art und 2) alle Trades (Fills), die während der Sitzung ausgeführt wurden, und einige aggregierte Maßnahmen zeigen. Der Trading-Client soll entweder eine grafische Benutzeroberfläche (GUI) sein, die die Form einer Webseite, einer Java-Swing-Anwendung, einer Konsolenanwendung (in einer Shell) oder eines Applets oder eines automatisierten Handelssystems (ATS) annehmen kann Bestehen aus einer Konsolenanwendung, die den Status auf den Bildschirm druckt. Der Client hat einige Audit-Anforderungen, eine Webseite, die die Informationen in Bezug auf Nachrichten, die der Client gesendet und empfangen hat, und Informationen über Fills (Trades), die der Client auf dem Markt ausgeführt hat, anzeigen kann. Diese Spezifikation enthält auch eine Reihe von optionalen Funktionen. Diese sind nicht erforderlich, können aber ihre Funktionalität erhöhen und der endgültigen Bewertung des gelieferten Produkts einen Mehrwert verleihen. Sie sind vielfältig in der Natur bieten Möglichkeiten, um das Projekt in Bereichen der Stärke hinzufügen, wenn dies gewünscht wird. Optionale Anforderungen werden am Ende jedes Abschnitts beschrieben, und natürlich kann der Entwickler seine eigenen optionalen Funktionen mit Dokumentationen hinzufügen, um die Leistung zu verbessern oder die Funktionalität zu verbessern. 2 Client Gateway Das Client Gateway ist verantwortlich für die Verwaltung von Verbindungen mit Clients. Clients senden Nachrichten an das Gateway, wo sie für die korrekte Syntax ausgewertet und an die Trading Engine weitergegeben werden. Das Gateway hat die primäre Funktion, Nachrichten zu überprüfen, die das richtige Format haben, aber das Gateway kann auch feststellen, ob der Inhalt der Nachricht legal ist und die ACKs oder NACKs im Zusammenhang mit den Ergebnissen des Prozesses erzeugen können. Die andere Option, die ein Entwickler machen kann, besteht darin, dem Gateway zu erlauben, einfach das Format zu überprüfen und NACKs an Clients zu senden, wenn sie fehlerhafte Nachrichten senden, während sie die Inhaltsanalyse und die Erzeugung von ACKs und der inhaltsbezogenen NACKs an die Handelsmaschine übergeben. Eine optionale Funktion, die das Gateway haben kann, besteht darin, Clientverbindungen mit einem PINGPONG-Nachrichtenschema zu überprüfen. Der Client würde eine PING-Nachricht senden, die Inhalte enthält, die das Gateway verwenden würde, um festzustellen, ob der Client identifiziert wurde, bereits verbunden ist und wenn der Client über die entsprechende Berechtigung (Kennwort) verfügt, um die Authentizität der Verbindung zu überprüfen. Beispiel: a. Ein Client sendet in einer Limit-Order, um 10 bei 100 zu kaufen. Die Client-Zeit fehlt: LIMIT clientid 1 clseqid 1 Anzahl 10 Preis 100 Das Gateway generiert ein NACK: NACK clientid 1 clseqid 1 Anzahl 10 Preis 100 cltime mktime Grund keine Client-Zeit Trading Motor Eine Reihe von Funktionen wird mit jedem neuen Auftrag ausgeführt, der in den Markt eingegeben wird. Die Aufträge werden nach dem Bestellbuch aus einem Kaufauftrag und einem Verkaufsauftragsbuch sortiert. Das sortierte Buch führt dann einen passenden Prozess durch, der einen First-in-First-Out (FIFO) Matching Algorithmus verwendet, um Aufträge zu entsprechen. Schließlich werden alle Spiele sowohl als Fills und Änderungen im Orderbuch gemeldet, werden als anonyme Marktdaten gemeldet. Die Trading-Engine unterhält ein Orderbuch, das die Kundenaufträge sortiert durch Käufe und verkauft, die Sortierung der Käufe zuerst durch absteigenden Preis, dann durch die Zeit der Auftrag wurde in den Markt (der Markt Zeitstempel) eingegeben. Die Verkäufe werden zuerst durch den aufsteigenden Preis sortiert, dann, wenn der Auftrag in den Markt eingegeben wurde. Der Match-Prozess funktioniert wie folgt: 1. Nehmen Sie das Höchstgebot und das niedrigste Angebot und vergleichen Sie, a. Wenn Sie bitten, fragen Sie, nichts und melden Sie alle Änderungen im Buch durch Marktdaten. B. Wenn das Gebot gefragt ist, erfolgt eine Übereinstimmung im LOWER des Gebots und fragt die Menge, jede Bestellung auf dem passenden Preisniveau wird einzeln abgestimmt, wenn eine 3 Menge von 10 verkauft wird, wird gegen 10, Anzahl von 1 Käufen, dann gibt es 10 Trades Generiert (10 füllen Nachrichten, 10 Marktdaten letzte Meldungen). C. Wenn bid gt fragen, dann finden Sie den Markt Zeitstempel der höchsten Gebot Preis und niedrigste Frage Preis, wenn die fragen hat die spätere Zeitstempel, dann passen Sie zum Gebot Preis, sonst passend zum fragen Preis bis das höchste Gebot lt niedrigste fragen . Die Übereinstimmung verwendet einen FIFO-Algorithmus, dh das Auftragsbuch wird in der Zeitpriorität sortiert und dann wird das oberste Gebot mit niedrigeren oder gleichen Preispreisen abgestimmt, bis die Menge des Angebots erschöpft ist und sich dann in den nächsten Gebotsauftrag in der Bestellung bewegt Buchprioritätswarteschlange buchen Ebenso ist die Top-Frage gegen Gebote abgestimmt, die einen größeren oder gleichen Preis haben, bis ihre Menge erschöpft ist, und so weiter. Jeder Auftragsabgleich wird in einer Füllnachricht gemeldet, die über dieselben Kanäle wie Marktdaten veröffentlicht wird. Kunden werden erwartet, dass sie ihre eindeutige ID verwenden, wie sie von der festgelegt wird, um festzustellen, ob sie Vertragspartner sind. Eine optionale Funktion wäre, eine CLOSE-Nachricht zu veröffentlichen, wenn die Trading Engine angehalten (geschlossen) ist. Diese Nachricht wird über dieselbe Marktdatenfunktion wie Fills veröffentlicht. Es wäre zu erwarten, dass jeder Kunde diese Nachricht nutzen könnte, um anmutig aufzuhören. Beispiele a. Ein Kunde stellt einen Auftrag zum Kauf von 10 bei 100 LIMIT clientid 1 clseqid 1 Anzahl 10 Preis 100 cltime b. Ergebnisse in einem ACK aus dem ACK clientid 1 clseqid 1 mktseqid 11 cltime mkttime 4 c. Der Auftrag, 10 bei 100 zu kaufen, geht in das Buch und ein Match-Prozess startet: Buch Buch nach Auftrag zu kaufen 10 bei 100 Gebote Preis Fragen Gebote Preis Ask Nehmen wir an, dass es zwei Aufträge gibt, um bei 100 eins für 5 und eins für 2 Matching zu verkaufen Tritt die Bestellung von 2 wurde platziert zuerst Matching tritt auf, Teil 2 Match the 2 erste Jetzt ist der Verkauf Bestellung für 5 ist abgestimmt Gebote Preis Fragen Gebote Preis Ask MATCH 2 bei 100 MATCH 5 bei 100 Send FILL Nachricht senden FILL Nachricht Drucken Sie Marktdaten für Handel drucken Marktdaten für den Handel drucken d. Nehmen Sie an, Clientid 2 hat die Bestellung zu verkaufen 2, mrkseqid 4 und clientid 3 hat die Bestellung zu verkaufen 5, mrkseqid 6, die FILL Nachrichten aussehen wie folgt: FILL buyerid 1 Verkäufer 3 Menge 2 Preis 100 buyermrkseqid 11 sellermrkseqid 4 mrktime FILL buyerid 1 sellerid 3 Menge 5 Preis 100 buyermrkseqid 11 sellermrkseqid 6 mrktime e. Eine Buchmarkt-Datennachricht wird nach Abschluss des Matchprozesses veröffentlicht. (Nachricht wird im folgenden Abschnitt beschrieben). Marktdaten Marktdaten sind die anonymen Nachrichten, die für den allgemeinen Verbrauch veröffentlicht werden. Es gibt zwei benötigte Nachrichten, die letzte Nachricht und die Buchnachricht. Die letzte Nachricht wird veröffentlicht, sobald ein Auftragsabgleich vorliegt. Die letzte Nachricht hat auch das Gesamtvolumen gehandelt und die Gesamtzahl der Trades. Die Buchmeldung wird immer dann veröffentlicht, wenn eine neue Bestellung verarbeitet wird und eine Übereinstimmungsfunktion auftritt. Die Buchnachricht besteht aus einer sich wiederholenden optionalen Struktur, die nur das erste Gebot mit Gesamtmenge erfordert und zuerst mit Gesamtmenge anfängt, die weitergegeben werden soll, aber bis zu den Top 5 Geboten mit entsprechender Gesamtmenge und Top 5 mit entsprechender Gesamtmenge zulassen kann . Die Gesamtmenge bezieht sich auf die Gesamtmenge, die mit Geboten verbunden ist, oder fragt zu einem bestimmten Preisniveau. 5 Beispiele a. Erinnern an das Beispiel im letzten Abschnitt, hier sind die beiden Handelsmarkt-Datennachrichten: Der Handel von 2 bei 100 (übernehmen den Handel ist der erste der Sitzung): letzter Preis 100 Menge 2 mkttime mktvolume 2 mkttrades 1 Der Handel von 5 at 100 (vorausgesetzt, der Handel ist der zweite der Sitzung): letzter Preis 100 Menge 5 mkttime mktvolume 7 mkttrades 2 b. Wieder bezug auf das Beispiel im letzten Abschnitt hier sind zwei Buchmeldungen: Vor dem Spiel aufgetreten: Buch bid1 99 bqty1 6 ask1 100 aqty1 7 bid2 98 bqty2 55 ask2 101 aqty2 100 ask3 102 aqty3 11 Nach dem Spiel aufgetreten: book bid1 100 bqty1 3 Ask1 101 aqty1 100 bid2 99 bqty2 6 ask2 102 aqty2 11 bid3 98 bqty3 55 Beachten Sie, dass die Buchmitteilung bis zu 5 Preisniveaus pro Nachrichten-Spezifikation haben kann, aber die übergebene Nachricht darf nur die Nicht-Null-Preisniveaus definiert haben. System-Audit Die System-Audit-Funktion muss in der Lage sein, Meldungen zu senden, die von der Sortierung nach interner Identifizierungssequenznummer und Nachrichtentyp gesendet und empfangen werden. Eine weitere Liste wird gezeigt, Trades einschließlich der Käufer und Verkäufer System ID s, Menge, Preis, Zeit und eine laufende Summe von Volumen und Trades für jeden Handel, die getan wird. Die Struktur der Seiten bleibt dem Entwickler überlassen. Anforderungszusammenfassung Die Online-Trading-Engine () verfügt über eine Reihe von primären funktionalen Anforderungen: Verwalten der Client-Konnektivität zum Austausch und Organisieren von Kundenaufträgen in einem Orderbuch. Ausführen eines First-in-First-Out-Matching-Algorithmus, wenn neue Aufträge in den Markt gelangen. Die Übermittlung der Bestellung an Kunden und die Ausstrahlung von Marktdaten an Kunden. Aufzeichnung aller eingehenden und ausgehenden Nachrichten und Bereitstellung einer Schnittstelle, die die Daten auf organisierte Weise mit wichtigen Marktstatistiken anzeigen kann. 6 Der Online-Trading-Client hat auch eine Reihe von primären funktionalen Anforderungen: Herstellen einer Verbindung mit der Trading Engine (). Umgang mit Auftragsbestätigungen, negativen Bestätigungen und füllen (Handel). Nachrichten von der Trading Engine (). Umgang mit Marktdaten aus der Handelsmaschine (). Es gibt eine Reihe von optionalen Funktionen, die implementiert werden können in Bezug auf: Auf der Trading Engine, o Client-Konnektivität, die Implementierung eines Authentifizierungsprozesses, wenn ein Client zuerst verbindet. O Elegantes Handling von mehreren Clients, zum Beispiel eine Implementierung, bei der keine zwei Clients Aufträge mit derselben Identifikationsunterschrift eingeben können. O Verbesserte statistische Informationen gespeichert oder gemeldet. O Ein Prozess, der Kunden des Marktes schließt. Auf dem Trading Client, o Eine gut gestaltete GUI für Auftragseingang. O Ein gut entworfenes intelligentes automatisiertes Handelssystem (ATS). O Erfassung und Zugriff auf relevante Daten in Bezug auf Aufträge, die auf den Markt geschickt werden, und füllt (Handel) auf dem Markt. Abschliessende Tipps Es gibt viele Möglichkeiten, die Lösung zu entwerfen und zu entwickeln, es gibt keine erwartete Codierung oder Technologie für jede Komponente. Am Ende des Tages muss der Kunde entscheiden, ob Sie die geforderte Funktionalität kennengelernt haben und wie Sie es erreicht haben. Implementieren Sie das System mit der Technologie, mit der Sie am bequemsten sind, oder zumindest die Teile des Systems mit vertrauten Technik fertig zuerst erhalten. Sie können immer Verbesserungen hinzufügen, also konzentrieren Sie sich auf die erforderliche Funktionalität im Entwicklungsprozess, während Sie sich Raum lassen, um das optionale Zeug hinzuzufügen, wenn Sie Zeit haben. 7 Anhang Meldungsspezifikation Auftragseingabe TAG Tag Wert Bemerkung Typ Typ LIMIT Header Keine Kopfzeile für Limitauftragsnachricht ClSeqID Data Long Int Angenommene eindeutige Sequenznummer für Client-Nachrichten, die an Mengen-Daten übergeben werden Integer Nicht-Null-Integer-Wert positiv gibt Gebot an, negativ fragen Preisdaten Integer Nicht-Null-Integer-Wert positiv gibt neue Reihenfolge an, negativer Abbruch eines bestehenden Auftrags ACK-Header Keine ClSeqID Data Long Int Angenommene eindeutige Sequenznummer für Client-Nachrichten, die an MktSeqID Daten gesendet werden Long Int Sequenznummer, die dem Auftrag zugeordnet ist, um die Bestellung am 8 zu identifizieren NACK-Header Keine ClSeqID-Daten Long Int Angenommene eindeutige Sequenznummer für Client-Nachrichten, die an Mengen-Daten übergeben werden Integer Nicht-Null-Integer-Wert positiv zeigt Bid, negative fragen Preis Daten Integer Nicht-Null-Integer-Wert positiv zeigt neue Reihenfolge, negative Abbruch einer bestehenden Bestellung Grund Text String Grund für die Ablehnung FILL Header Keine BuyerID Data Long Int Angenommene eindeutige Kennung SellerID Data Long Int Angenommene eindeutige Kennung Menge Daten Integer Nicht ganzzahliger Ganzzahlwert positiv gibt Bid an, negativ fragen Preis Daten Integer Nicht ganzzahliger Ganzzahlwert positiv gibt neue Ordnung an, negativ Abbruch einer bestehenden Bestellung BuyerMktSeqID Data Long Int Sequenznummer, die der Bestellung zugeordnet ist, um den Auftrag zu identifizieren an der VerkäuferMktSeqID Daten Long Int Sequenznummer, die der Bestellung zugeordnet ist, um die Bestellung bei den 9 Marktdaten zu identifizieren TAG Tag Wert Bemerkung Typ Typ letzter Header Keine Preis Data Integer Preis des Handels Anzahl Daten Integer Menge des Handels MktVolume Data Long Int Gesamtmenge, die in der Sitzung gehandelt wird MktTrades Data Integer Gesamtzahl der Trades im Sessionbuch Header Keine Bid1 Data Integer Top Bid Price BQty1 Data Integer Aggregat Anzahl zum Top Bid Preis Ask1 Data Integer Top Fragen Sie den Preis AQty1 Daten Integer Aggregat Anzahl an der Spitze Fragen Preis Bid2 Daten Integer Optional BQty2 Daten Integer Optional, Aggregat Menge Ask2 Daten Integer Optional AQty2 Daten Integer Optional, Aggregat Anzahl Bid3 Daten Integer Optional BQty3 Daten Integer Optional, Aggregat Menge Ask3 Daten Integer Optional AQty3 Data Integer Optional, Aggregat Anzahl Bid4 Daten Integer Optional BQty4 Daten Integer Optional, Aggregat Anzahl Ask4 Daten Integer Optional AQty4 Daten Integer Optional, Aggregat Anzahl Bid5 Daten Integer Optional BQty5 Daten Integer Optional, Aggregat Menge Ask5 Daten Integer Optional AQty5 Daten Integer Optional, Aggregat Menge 10 Optionale Meldungen Marktstatus TAG Tag Wert Typ Typ PING Header Keine Bemerkung PONG Header Keine NPONG Header Keine Grund Text String Grund für die Ablehnung CLOSE Header NoneMessaging Patterns 187 Integrationsmuster in der Praxis 187 Fallstudie: Bond Trading System (von Jonathan Simon) Es ist einfach Um sich von einer großen Sammlung von Mustern oder einer Mustersprache zu distanzieren. 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, um zu helfen, Muster zu verstehen, ein echtes Weltbeispiel. Nicht ein konstruiertes Szenario dessen, was passieren könnte, aber was tatsächlich passiert und was passieren wird. Dieses Kapitel verwendet Muster, um Probleme mit einem Entdeckungsprozess zu lösen. Das System, das wir diskutieren werden, ist ein Bond-Handelssystem, mit dem ich seit zwei Jahren von der Erstausbildung über die Produktion gearbeitet habe. Wir werden Szenarien und Probleme erforschen, die aufgetreten sind und wie man sie mit Mustern lösen kann. Hierbei handelt es sich um den Entscheidungsprozess der Auswahl eines Musters, sowie die Kombination und Anpassung der Muster an die Bedürfnisse des Systems. Und dies geschieht unter Berücksichtigung der Kräfte, die in realen Systemen, einschließlich Geschäftsanforderungen, Kundenentscheidungen, architektonischen und technischen Anforderungen, sowie Legacy-System-Integration angetroffen werden. Die Absicht dieses Ansatzes ist es, ein klareres Verständnis der Muster selbst durch praktische Anwendung zu ermöglichen. Aufbau eines Systems Eine große Wall Street Investment Bank setzt sich dafür ein, ein Anleihe-Preissystem aufzubauen, um den Workflow ihres Bond-Trading-Desk zu rationalisieren. Derzeit müssen Anleihehändler die Preise für eine Vielzahl von Anleihen an verschiedene Handelsplätze senden, jeweils mit eigener Benutzeroberfläche. Das Ziel für das System ist es, die Minutien der Preisgestaltung alle ihre Anleihen in Kombination mit fortschrittlichen analytischen Funktionalität, die für den Rentenmarkt in einer einzigen gekapselten Benutzeroberfläche. Dies bedeutet Integration und Kommunikation mit mehreren Komponenten über verschiedene Kommunikationsprotokolle. Der High-Level-Flow des Systems sieht so aus: Zuerst kommen Marktdaten ins System. Marktdaten sind Daten über den Preis und andere Eigenschaften der Anleihe, die vertreten, was die Leute bereit sind, die Anleihe für den freien Markt zu kaufen und zu verkaufen. Die Marktdaten werden sofort an die Analytik-Engine gesendet, die die Daten verändert. Analytics bezieht sich auf mathematische Funktionen für Finanzanwendungen, die die Preise und andere Attribute von Anleihen verändern. Dies sind generische Funktionen, die Eingabevariablen verwenden, 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 einer pro Trader-Basis und steuert die Besonderheiten der Analytics für jede Bindung, die der Händler pricing ist. Sobald die Analytik auf die Marktdaten angewendet wird, werden die geänderten Daten an verschiedene Handelsplätze verschickt, in denen Händler anderer Firmen die Anleihen kaufen oder verkaufen können. Architektur mit Patterns Mit diesem Überblick über den Workflow des Systems können wir uns einige der architektonischen Probleme, die wir während des Designprozesses antreffen, ansprechen. Lass uns einen Blick darauf werfen, was wir bis heute wissen Händler benötigen eine sehr ansprechende Anwendung auf Windows NT und Solaris Workstations. Deshalb haben wir uns entschlossen, die Client-Applikation als Java-Dick-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: Marktdaten Price Feed Server. Veröffentlicht eingehende Marktdaten an die TIB. Analytics Engine Führt Analysen zu eingehenden Marktdaten durch und überträgt die geänderten Marktdaten an die TIB. Beitragsserver. Führt alle Kommunikation mit Handelsplätzen durch. Die Handelsplätze sind Drittanbieterkomponenten, 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) kommunizieren werden. Wir könnten den dicken Client direkt mit den Legacy-Servern kommunizieren, aber das würde zu viel Geschäftslogik auf dem Client erfordern. Stattdessen bauen Sie 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 der Geschäftslogik in Bezug auf diese Bereiche zu erreichen. Die aktuellen Komponenten im System sind nachfolgend dargestellt. Die Verbindungen markiert als. Dass wir uns noch nicht sicher sind, wie einige der Komponenten kommunizieren werden. Das System und seine Komponenten Die erste Kommunikationsfrage ist, wie man den Java-dicken Client und die beiden Java-Server-Komponenten integriert, um Daten auszutauschen. Schauen wir uns die vier in diesem Buch vorgeschlagenen Integrationsstile an: File Transfer. Gemeinsame Datenbank. Remote-Prozedur Aufruf. Und Messaging. Wir können Shared Database sofort ausschließen, weil wir eine Ebene der Abstraktion zwischen dem Client und der Datenbank erstellen möchten und nicht möchten, dass der Datenbankzugriffscode im Client vorliegt. File Transfer kann gleichermaßen ausgeschlossen werden, da eine minimale Latenzzeit erforderlich ist, um sicherzustellen, dass aktuelle Preise an die Handelsplätze versandt werden. Damit haben wir die Wahl zwischen Remote Procedure Invocation oder Messaging. Die Java-Plattform bietet eine integrierte Unterstützung sowohl für Remote Procedure Invocation als auch für Messaging. Die RPC-Stil-Integration kann mit Remote Method Invocation (RMI), CORBA oder Enterprise Java Beans (EJB) erreicht werden. Der Java Messaging Service (JMS) ist die gemeinsame API für die Integration von Messaging-Stil. So sind beide Integrationsstile in Java einfach zu implementieren. Also, was wird besser 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 meist viele Thick Clients verbinden sich gleichzeitig mit diesen Services (eine für jeden Bond-Trader, der zu einem bestimmten Zeitpunkt eingeloggt ist). Darüber hinaus möchte die Bank dies ein generisches Preissystem sein, das in anderen Anwendungen genutzt werden kann. So neben einer unbekannten Anzahl von Think Clients, kann es eine unbekannte Anzahl von anderen Anwendungen mit den Preisdaten, die aus den Gateways kommen. Ein Thick Client (oder eine andere Anwendung, die die Preisdaten verwendet) kann ziemlich einfach RPC verwenden, um Anrufe an die Gateways zu tätigen, um Preisdaten zu erhalten und die Verarbeitung aufzurufen. 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 Clients könnten die Gateways abfragen, aber das wird eine Menge Overhead schaffen. Es wäre besser für die Gateways, die Daten den Kunden zur Verfügung zu stellen, sobald sie verfügbar sind. Dies erfordert jedoch, dass jedes Gateway beherrscht, welche Clients derzeit aktiv sind und welche wollen, welche Daten dann verfügbar sind, wenn ein neues Datenstück verfügbar wird (was mehrmals pro Sekunde passieren wird), muss das Gateway machen Ein RPC an jeden interessierten Client, um die Daten an den Client weiterzugeben. 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 sehr kompliziert. Messaging vereinfacht dieses Problem erheblich. Mit Messaging. Wir können separate Kanäle für die verschiedenen Arten von Preisdaten definieren. Dann, wenn ein Gateway bekommt ein neues Stück von Daten, wird es eine Nachricht, die diese Daten, um die Publish-Abonnement-Kanal für diesen Datentyp. Mittlerweile werden alle Kunden, die sich für eine bestimmte Art von Daten interessieren, auf den Kanal für diesen Typ hören. Auf diese Weise können die Gateways problemlos neue Daten an wen, was interessiert ist, aussenden, ohne dass man wissen muss, wie viele Höreranwendungen es gibt oder was sie sind. Die Klienten müssen noch in der Lage sein, Verhalten in den Gateways auch aufzurufen. Da es immer nur zwei Gateways gibt und der Client vermutlich blockieren kann, während die Methode synchron aufgerufen wird, können diese Client-to-Gateway-Aufrufe einfach mit RPC implementiert werden. Da wir aber bereits Messaging für Gateway-to-Client-Kommunikation verwenden, sind die Meldungen wohl genauso gut, um auch die Client-to-Gateway-Kommunikation zu implementieren. Daher wird die gesamte Kommunikation zwischen den Gateways und den Clients durch Messaging durchgeführt. Da alle Komponenten in Java geschrieben sind, bietet JMS eine einfache Wahl für das Messaging-System. Dies schafft effektiv einen Message Bus oder eine Architektur, die es ermöglicht, dass zukünftige Systeme mit dem aktuellen System mit wenig oder gar keiner Änderung der Messaging-Infrastruktur integrieren können. Auf diese Weise kann die Geschäftsfunktionalität der Anwendung leicht von anderen Anwendungen genutzt werden, die die Bank entwickelt. Java-Komponenten Die Kommunikation mit JMS JMS ist einfach eine Spezifikation und wir müssen uns für ein JMS-kompatibles Messaging-System entscheiden. Wir haben beschlossen, IBM MQSeries JMS zu verwenden, weil die Bank ein IBM-Shop ist, mit WebSphere-Anwendungsservern und vielen anderen IBM-Produkten. Als Ergebnis werden wir MQSeries verwenden, da wir bereits eine Support-Infrastruktur und eine Website-Lizenz des Produkts haben. 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, um Zugang zu den TIB-Nachrichten zu haben. 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. Es würde die Unabhängigkeit des JMS-Servers beeinträchtigen. Und obwohl TIBCO eine Java API hat, haben der Kunden Architekt und Manager es abgelehnt. Infolgedessen muss der Message Translator-Ansatz aufgegeben werden. Die Brücke vom TIB-Server zum MQSeries-Server erfordert die Kommunikation zwischen C und Java. Wir könnten CORBA verwenden, aber dann was ist mit dem Messaging Ein genauerer Blick auf das Message Translator-Muster zeigt, dass es mit dem Channel-Adapter in seiner Verwendung von Kommunikationsprotokollen verwandt ist. Das Herz eines Channel-Adapters besteht darin, 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. Das ist genau das, was wir mit der zusätzlichen Komplexität der intra-language Java to C Kommunikation machen. Wir können die Cross Language Messaging Bridge mit einer Kombination aus Channel Adapter s und CORBA implementieren. Wir bauen zwei leichte Channel-Adapter-Server, eine in C, die die Kommunikation mit dem TIB verwaltet, und eine in Java, die die Kommunikation mit JMS verwaltet. Diese beiden Kanaladapter. 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 Nachrichtenübersetzung zwischen scheinbar inkompatiblen Messaging-Systemen und verschiedenen Sprachen. Meldungs-Übersetzer mit Kanaladaptern Das nächste Diagramm zeigt das aktuelle Systemdesign einschließlich der Gateways und anderer Komponenten. Dies ist ein gutes Beispiel für Musteranwendung. Wir kombinierten zwei Kanaladapter s mit einem Nicht-Messaging-Protokoll, um das Message Translator-Muster zu implementieren, wobei wir effektiv ein Muster verwenden, um ein anderes Muster zu implementieren. Additionally, we changed the Channel Adapter s context to link two messaging systems with a non-messaging cross language translation protocol rather than connecting a messaging system to a non-messaging system. The current system with the Channel Adapters Structuring Channels A key to working with patterns is not only knowing when to use which pattern, but also how to most effectively use it. Each pattern implementation has to take into account specifics of the technology platform as well as other design criteria. This section applies the same discovery process to find the most efficient use of the Publish-Subscribe Channel in the context of the market data server communicating with the analytics engine. Real time market data originates with market data feed, a C server that broadcasts market data on the TIB. The market data feed uses a separate Publish-Subscribe Channel for each bond it is publishing prices for. This may seem a little extreme since each new bond needs its own new channel. But this is not so severe since you do not actually need to create channels in TIBCO. Rather, channels are referenced by a hierarchical set of topic names called subjects. The TIBCO server then filters a single message flow by subject, sending each unique subject to a single virtual channel. The result of which is a very lightweight message channel. We could create a system that publishes on a few channels and subscribers could listen only for prices they are interested in. This would require subscribers to use a Message Filter or Selective Consumer to filter the entire data flow for interesting bond prices, deciding whether each message should be processed as it is received. Given that the market data is published on bond-dedicated channels, subscribers can register for updates on a series of bonds. This effectively allows subscribers to filter by selectively subscribing to channels and only receiving updates of interest rather than deciding after the message is received. It is important to note that using multiple channels to avoid filtering is a nonstandard use of messaging channels. In context of the TIBCO technology however, we are really deciding whether to implement or own filters or utilize the channel filtering built into TIBCO -- rather than whether to use so many channels. The next component we need to design is the analytics engine, another CTIB server that will modify the market data and rebroadcast it to the TIB. Although it is out of the scope of our JavaJMS development, we are working closely with the C team to design it since we are the analytics engines primary customer. The problem at hand is to find the channel structure that most efficiently rebroadcast the newly modified market data. Since we already have one dedicated Message Channel per bond inherited from the market data price feed, it would be logical to modify the market data and rebroadcast the modified market data on the bond dedicated Message Channel . But this will not 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 dont 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 approach 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 dont want the client application running on the traders 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 CTIB 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 JMSallowing us to create a much smaller number of channels in the order of one per trader. The Pricing Gateway registers itself through the CTIB 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 benefit 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 isnt 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 JavaJMS 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 available in JMS, lets 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 traders client applications receives the message. Point-to-Point Messaging for Price 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, lets 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 cache 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 cant 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 milliseconds. 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 milliseconds like the Message Filter . Later, well 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 that the Java client receives many messages updating fields of the same bond, and therefore related messages. So, Aggregator is in fact a good decision. Whats 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 continuously 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 more 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 guarantees 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 couldnt be fixed with a thousand patterns. We later addressed this problem by refactoring 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 dont 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 see 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 187 Integration Patterns in Practice 187 Case Study: Bond Trading SystemOnline trading system project specifications READ MORE MFG - Official Site Traders Log Online Trading Community for Stocks Futures and Forex Traders. Home Primary Navigation. Home Market News The Future of Apples Car Project READ MORE Alabama interChange Project Alabama interChange System Author Topic: UL Online Trading System Project Specifications (Read 7735 times) READ MORE OFFICE OF CAREER SERVICES - sipa. columbia. edu Why did the Taurus project of LSE LSE batch trading system, share registration and transfer system. Specifications were driven by a READ MORE TSYS - Official Site Join a Webinar Online (Instant Join App) Connect to Audio System Requirements for Attendees. You can easily attend a session from anywhere, Writing a Requirements Document - CDL TSYS makes it possible for millions of buyers and sellers to move money around Toggle navigation Project name Login. Home 169 2016 Total System READ MORE Standards Australia - Official Site Odoo Project takes no time to Easily optimize your warehouse with the smart double entry inventory system, A wine bar implemented Odoo Online two READ MORE 0 Depotgeb252hren ING-DiBa. de Find out more about the Senior Project Manager role in Auckland at BP and apply online engineering specifications, trading and distribution of READ MORE HR Open Standards Consortium, Inc PAGE DIMENSION AND BINDING SPECIFICATIONS: The dimension of the project report should be in A4 size. 337 Online Trading System 338 Online Degree READ MORE software requirement specification - online trading system THIS CONSULTING AGREEMENT WHEREAS, Client has developed a Forex trading system or specifications for a custom software other online agreements, and READ MORE Traders Log - Trading and Investing Guide Futures, options on futures and forex trading involves substantial risk and Online trading has inherent risk due to system system performance READ MORE Why did the Taurus project of LSE fail Strat. In - A for online trading in currency contracts and precious metals on conditions of Margin Trading. The foundation of the projects trading system suits Odoo - Official Site InstaForex clients use cutting-edge technologies in online trading. project in the ForexCopy system, with InstaForex. Sergey Usanov Ukraine. System READ MORE The MFG contract manufacturing marketplace lets procurement MFG is a seamless online system for requesting manufacturing quotes from READ MORE Payments - Algorithmic and Mechanical Forex Strategies Neu und nur bei der ING-DiBa: 220ber 5000 Fonds amp ETFs geb252hrenfrei READ MORE Broker Systems SA gt Home trading system people were Erics project and gave Martin Portfolio Specification Figure 1. Using specifications to describe the READ MORE Senior Project Manager job at BP in Auckland Careers Specifications Order Types Online Application Download Forms FUTURESONLINE IS NOT AFFILIATED WITH NOR DOES IT ENDORSE ANY TRADING SYSTEM READ MORE Online trading system project specifications Neu und nur bei der ING-DiBa: 220ber 5000 Fonds amp ETFs geb252hrenfrei READ MORE Prime Progression - Trading 17.12.2008 018332Documentation of quotONLINE BANKINGquot Project The Net Banking system deals with SOFTWARE AND HARDWARE SPECIFICATIONS Net Banking System READ MORE System Requirement Specifications (SRS) Online Trading System Project Specifications Distributed Objects CSPP 51024. The online trading system has a set of primary functional requirements: READ MORE Project Format - scribd Futures Trading. TradeStation has one a hands-on review of each companys online brokerage products and System access and trade placement and READ MORE Forex Online Forex Trading Currency Trading Forex Broker Systems SA. applies a managemenet system and unambiguous specifications. XRHMA Derivatives enriched with Online Trading functionality READ MORE Product Specifications - CBOE Online Courses Seminars XEO Options Product Specifications one point equals 100. Minimum tick for series trading below 3 is 0.05 (5.00) READ MORE Trade Futures Online with the TradeStation Platform Standards Australia and MarkLogic Partner in Development of Digital Repository Next Round of Project Prioritisation and Selection Wiring Rules READ MORE Online trading system project specifications nairobi Smartsheet is an online project management of project drawings, specifications and other An online customizable project management system forSlideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising. Wenn Sie die Seite weiter durchsuchen, stimmen Sie der Verwendung von Cookies auf dieser Website zu. Siehe unsere Benutzervereinbarung und Datenschutzbestimmungen. Slideshare verwendet Cookies, um Funktionalität und Leistung zu verbessern und Ihnen relevante Werbung zu bieten. Wenn Sie die Seite weiter durchsuchen, stimmen Sie der Verwendung von Cookies auf dieser Website zu. Weitere Informationen finden Sie in unserer Datenschutzerklärung und Benutzervereinbarung. Explore all your favorite topics in the SlideShare app Get the SlideShare app to Save for Later even offline Continue to the mobile site Upload Login Signup Double tap to zoom out A project report on online trading Share this SlideShare LinkedIn Corporation copy 2017Name of the Project: Online Trading System Project with Source Code Software Requirements: Work Flow Management System Project with Source Code The comprehensive study of on Online Trading System at Inter Subscribe to 1000 Projects: preeti on Hostel Management System Visual Basic Project 21-03-2013 i want project report on online boutique management system 1 year ago i want online share trading project wit source code plz response soon Project Report On ONLINE SHARE TRADING Online Share Trading Simulation Project 2000 is a full-featured relational database management system Readymade Projects. Readymade-Projekte. Diese Seite durchsuchen Krankenhaus-Management-System Online-Diskussionsforum Online-Prüfung Petrol Bunk Ein Projektbericht über Online Trading Amp-Börsenmakler von Sharekhan. Hochladen. Bereitstellung von Management-Informationssystem, ein Projektbericht über Online Trading Online Trading Project Report Zusammenfassung - Das Online-Trading-Projekt enthält Informationen über den Benutzer, der Java Library Management System Online Professional Grade Trading Analysis Software angemeldet hat. Es ist wirklich ein Trading Management System. Bringt man Broker die Trading Performance Berichte Online Share Trading Aspnet Project Kostenlose Download Codes und Scripts Downloads Kostenlos. College-Management Aspnet-Projekt Kostenlose Online-Share-Trading-System-Projekt Die Hauptfunktion des Online-Medical-Management-System-Projekt in Java ist eine Distributed Topology Control für Share Trading Portal Advertisement. Keine Kommentare Slideshare verwendet Cookies, um Funktionalität und Leistung zu verbessern und Ihnen relevante Werbung zu bieten. Wenn Sie die Seite weiter durchsuchen, stimmen Sie der Verwendung von Cookies auf dieser Website zu. Siehe unsere Benutzervereinbarung und Datenschutzbestimmungen. Slideshare verwendet Cookies, um Funktionalität und Leistung zu verbessern und Ihnen relevante Werbung zu bieten. Wenn Sie die Seite weiter durchsuchen, stimmen Sie der Verwendung von Cookies auf dieser Website zu. Weitere Informationen finden Sie in unserer Datenschutzerklärung und Benutzervereinbarung. Entdecken Sie alle Ihre Lieblingsthemen in der SlideShare App Holen Sie sich die SlideShare App zum Sparen für später auch offline Weiter zur mobilen Seite Upload Login Signup Double tippen, um zu verkleinern 33059297 a-project-report-on-online-trading-stock-broker-of - sharekhan Teilen Sie diese SlideShare LinkedIn Corporation Kopie 2017
Comments
Post a Comment