Sunday, 18 June 2017

Enterprise Trading System


LETS sind revitalisierende Gemeinden in ganz Großbritannien Als Graswurzel-Initiativen sind sie offen für alle - Menschen aller Altersstufen, Fähigkeiten und Fähigkeiten lokale Vereine und Verbände freiwillige Gruppen, Wohltätigkeitsorganisationen, Gemeinschaftsinitiativen, die Genossenschaften, kleine Unternehmen und lokale Dienstleistungen unterhalten - helfen jedem zu geben und Nehmen Sie sich an neue Ressourcen, und finden Sie eine echte Community Identity. LETS bieten Chancengleichheit für alle - ob beschäftigt oder arbeitslos, finanziell sicher oder auf niedrigem Einkommen, schwarz oder weiß, fähig oder behinderte LETS verwenden ein System von Community-Credits, so dass Direkten Austausch muss nicht gemacht werden Menschen verdienen LETS-Credits durch die Bereitstellung eines Dienstes, und können dann verbringen die Credits auf was auch immer von anderen angeboten wird auf dem Schema zum Beispiel Kinderbetreuung, Transport, Lebensmittel, Hausreparaturen oder die Vermietung von Werkzeugen und Ausrüstung. Die Forschung in der Mitte der neunziger Jahre zeigte an, dass mindestens 40.000 Menschen in rund 450 LETS-Systemen beteiligt waren, die meisten von ihnen nach dem demokratischen und kooperativen LETS-Modell, das in Großbritannien von LETSLINK UK entwickelt wurde, das 1991 begann. Unsere aktuelle Kontaktliste Von über 300 zeigt an, dass es sich um eine gewisse Schrumpfung handelt - wenn wir sagen, dass die Mitgliedschaft im Durchschnitt 100 pro Schema beträgt, bedeutet dies etwa 30.000 oder weniger Mitglieder im Vereinigten Königreich. Allerdings wurde dies von einer Zunahme der damit verbundenen Initiativen wie Timebanks, Freecycle begleitet , Commercial Barter, Fairtrade-Kampagnen und Community-Netzwerke aller Art, die das anhaltende Interesse der Menschen, die Dinge in ihrer Gemeinschaft passieren, belegen. Unser laufendes Forschungsprojekt, das im September 2003 ins Leben gerufen wurde, hat das Ziel, den aktuellen Stand der LETS zu etablieren In Großbritannien und die Bedürfnisse von LETS-Organisatoren Wir suchen nun eine große Finanzierung, um unsere Organisation neu zu beleben und zu unterstützen, damit wir unseren Mitgliedern bessere Ressourcen zur Verfügung stellen können und auf dieser Seite Fortschritte berichten werden. Sehen Sie sich diesen Raum an. 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 Geschäftsanforderungen, Kundenentscheidungen, architektonische und technische Anforderungen, sowie Legacy-System-Integration angetroffen werden. 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 zu bauen, um den Arbeitsablauf ihrer Bond-Trading-Desk zu rationalisieren Derzeit müssen Bond-Händler die Preise für eine große Anzahl von Anleihen zu senden Zu mehreren verschiedenen Handelsplätzen, jeweils mit eigener Benutzeroberfläche Das Ziel für das System ist es, die Minutien der Preisgestaltung alle ihre Bindungen in Kombination mit fortschrittlichen analytischen Funktionalität spezifisch für den Anleihemarkt in einer einzigen gekapselten Benutzeroberfläche zu minimieren Dies bedeutet Integration und Kommunikation mit Mehrere Komponenten über verschiedene Kommunikationsprotokolle Der High-Level-Flow des Systems sieht so aus. Erste Marktdaten kommen in das System Marktdaten sind Daten über den Preis und andere Eigenschaften der Anleihe, die das, was die Leute bereit sind, die Anleihe zu kaufen und zu verkaufen, Auf dem freien Markt Die Marktdaten werden sofort an die Analytik-Engine gesendet, die die Daten ä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 anzupassen Zu einer bestimmten Anleihe 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 auf die Marktdaten angewendet werden, Daten werden 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 uns an einige der architektonischen Probleme wenden, denen wir während des Designprozesses begegnen Werfen Sie einen Blick auf das, was wir bis heute wissen Trader brauchen eine sehr ansprechende Anwendung auf Windows NT und Solaris Workstations Daher haben wir beschlossen, die Client-Anwendung als Java-dicken Client aufgrund seiner Plattform Unabhängigkeit und seine Fähigkeit, schnell auf Benutzer-Eingabe zu reagieren implementieren Und Marktdaten 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 zu Die TIB. Analytics Engine führt Analysen auf eingehenden Marktdaten durch und überträgt die geänderten Marktdaten an den TIB. Contribution Server Führt die gesamte Kommunikation mit den 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 Business-Logik auf dem Client benötigen Stattdessen werden wir ll 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 nette Kapselung der Geschäftslogik in Bezug auf diese Bereiche erreichen Die aktuellen Komponenten im System sind unten gezeigt Verbindungen, die markiert sind, zeigen, 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 Die vier Integrationsstile, die in diesem Buch vorgeschlagen werden File Transfer Shared Database Remote Prozedur Invocation und Messaging Wir können Shared Database sofort ausschließen, weil wir eine Ebene der Abstraktion zwischen dem Client und der Datenbank erstellen wollen und don t wollen Datenbank Zugangscode in der Client File Transfer 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 eine integrierte Unterstützung für beide Remote Procedure Invocation Und Messaging RPC-Stil-Integration kann mit Remote-Methode Invocation RMI, CORBA oder Enterprise Java Beans EJB erreicht werden Die Java Messaging Service JMS ist die gemeinsame API für Messaging-Stil-Integration So beide Integrationsstile sind einfach zu implementieren in Java. So, die wird Arbeit 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 in der Regel viele Thick Clients verbinden sich gleichzeitig mit diesen Services für jeden Bond-Trader, der zufällig ist Eingeloggt zu einem bestimmten Zeitpunkt 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 mit den Preisdaten geben Der Gateways. Ein Thick Client oder eine andere Anwendung, die die Preisdaten verwendet, kann RPC leicht nutzen, um Anrufe an die Gateways zu tätigen, um Preisdaten zu erhalten und die Verarbeitung aufzurufen. Allerdings werden die Preisdaten ständig veröffentlicht und bestimmte Clients interessieren sich nur für bestimmte Daten , 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 zu schaffen Es wäre besser für die Gateways, um die Daten zur Verfügung zu stellen, um die Kunden so bald wie Es ist verfügbar Dies wird jedoch verlangen, dass jedes Gateway beizubehalten hat, welche Clients derzeit aktiv sind und welche gewünschten Daten dann, wenn ein neues Stück Daten verfügbar wird, das mehrmals pro Sekunde passieren wird, das Gateway haben muss Machen Sie einen RPC an jeden interessierten Klienten, 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 kompliziert Dieses Problem Mit Messaging können wir separate Kanäle für die verschiedenen Arten von Preisdaten definieren. Wenn ein Gateway ein neues Datenelement erhält, fügt es eine Nachricht hinzu, die diese Daten dem Publish-Abonnement-Kanal für diesen Datentyp enthält. Inzwischen sind alle Clients Interessiert an einer bestimmten Art von Daten wird auf den Kanal für diesen Typ zu hören Auf diese Weise können die Gateways leicht senden Sie neue Daten an wen interessiert, ohne zu wissen, wie viele Listener-Anwendungen gibt es oder was sie sind. Die Clients noch Müssen in der Lage sein, Verhalten in den Gateways auch aufrufen Da gibt es 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 Wir verwenden bereits Messaging für Gateway-to-Client-Kommunikation, Nachrichten sind wahrscheinlich genauso gut eine Möglichkeit, Client-to-Gateway-Kommunikation zu implementieren. Daher wird die gesamte Kommunikation zwischen den Gateways und den Clients durch Messaging durchgeführt Die 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 gar keine Änderungen an der Messaging-Infrastruktur zu integrieren Auf diese Weise kann die Business-Funktionalität der Anwendung leicht von anderen Anwendungen verwendet 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 uns entschlossen, 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 über eine Support-Infrastruktur verfügen und eine Website-Lizenz des Produkts haben. Die nächste Frage ist, wie man die Verbindung herstellt MQSeries Messaging-System mit dem eigenständigen C-Beitragsserver und den TIBCO-basierten Marktdaten - und Analytics-Engine-Servern Wir brauchen einen Weg für die MQSeries-Konsumenten, um Zugriff auf die TIB-Nachrichten zu haben. Aber wie könnten wir das Message Translator-Muster verwenden, um TIB-Nachrichten in MQSeries zu übersetzen Nachrichten Obwohl der C-Client für MQSeries als Message-Translator dient, würde er die JMS-Server-Unabhängigkeit opfern Und obwohl TIBCO eine Java-API hat, haben der Kundenarchitekt und - Manager es abgelehnt. Daher muss der Message-Translator-Ansatz aufgegeben werden Brücke vom TIB-Server zum MQSeries-Server erfordert 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 sich um den Channel-Adapter in seiner Verwendung von Kommunikationsprotokollen handelt Das Herz Eines Kanaladapters 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. Das ist genau das, was wir sind Mit der zusätzlichen Komplexität der intra-sprachigen Java-to-C-Kommunikation zu tun 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 verwalten Kommunikation mit dem TIB, Und eine in Java, die 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 Bridge implementiert die Effektiv simulierte Nachrichtenübersetzung zwischen scheinbar inkompatiblen Messaging-Systemen und verschiedenen Sprachen. Message Translator mit Kanaladaptern. Das nächste Diagramm zeigt die aktuelle System-Design einschließlich der Gateways und andere Komponenten Dies ist ein gutes Beispiel für Muster-Anwendung Wir kombinierten zwei Channel-Adapter s mit einem nicht - Messaging-Protokoll zur Implementierung des Message Translator-Musters, das effektiv ein Muster verwendet, um ein anderes Muster zu implementieren. Darüber hinaus haben wir den Channel-Adapter-Kontext geändert, um zwei Messaging-Systeme mit einem Nicht-Messaging-Cross-Language-Übersetzungsprotokoll zu verbinden, anstatt ein Messaging-System mit einem Nicht zu verbinden - Messaging-System. Das aktuelle System mit dem Channel Adapters. Structuring Channels. A Schlüssel für 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 Entdeckungsprozess an, um die effizienteste Nutzung des Publish-Abonnements-Kanals im Rahmen des Marktdatenservers zu finden, der mit der Analytics-Engine kommuniziert. Reale Zeit-Marktdaten entstehen mit Marktdaten-Feeds , Ein C-Server, der Marktdaten auf der TIB überträgt Der Marktdaten-Feed nutzt einen separaten Publish-Abonnement-Kanal für jede Bindung, die er die Preise veröffentlichen. Dies mag ein wenig extrem sein, da jede neue Bindung ihren eigenen neuen Kanal braucht. Aber das ist nicht so Schwerwiegend, da man eigentlich keine Kanäle in TIBCO erstellen muss, 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 Subjekt und sendet jedes einzelne Subjekt einem einzelnen virtuellen Kanal. Das Ergebnis von Das 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 es den Teilnehmern erlauben, einen Message Filter oder Selective Consumer zu verwenden, um den gesamten Datenfluss für interessant zu filtern Anleihe-Preise, die Entscheidung, ob jede Nachricht verarbeitet werden soll, wie sie empfangen wird. Da die Marktdaten auf Bond-dedizierten Kanälen veröffentlicht werden, können sich Abonnenten für Updates auf einer Reihe von Anleihen registrieren. Dies ermöglicht es den Teilnehmern, durch selektives Abonnieren von Kanälen zu filtern Empfangen von Updates von Interesse anstatt zu entscheiden, nachdem die Nachricht empfangen wurde Es ist wichtig zu beachten, dass mit mehreren Kanälen zu vermeiden Filterung ist eine nicht standardisierte Nutzung von Messaging-Kanäle Im Rahmen der TIBCO-Technologie jedoch sind wir wirklich entscheiden, ob zu implementieren oder eigene Filter oder Nutzen die in TIBCO integrierte Kanalfilterung - anstatt ob man so viele Kanäle einsetzt. Die nächste Komponente, die wir entwerfen müssen, ist die Analytics Engine, ein weiterer C TIB Server, der die Marktdaten modifiziert und an die TIB weiterverbreitet Des Umfangs unserer Java-JMS-Entwicklung arbeiten wir eng mit dem C-Team zusammen, um es zu entwerfen, da wir der Analytics-Engine-Primärkunde sind. Das Problem besteht darin, die Kanalstruktur zu finden, die die neu modifizierten Marktdaten effizienter wiedergibt Wir haben bereits einen dedizierten Message Channel pro Anleihe aus dem Marktdatenpreis Feed geerbt, 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 funktionieren, da die Analytics die Anleihenpreise ändern Sind traderspezifisch Wenn wir die geänderten Daten auf dem Bond Message Channel rebroadcastieren, werden wir die Datenintegrität zerstören, indem wir generische Marktdaten durch traderspezifische Daten ersetzen. Andererseits könnten wir einen anderen Nachrichtentyp für traderspezifische Marktdaten haben, die wir veröffentlichen Den gleichen Kanal, der es den Teilnehmern ermöglicht, zu entscheiden, welche Nachricht sie interessiert haben, um zu vermeiden, die Datenintegrität zu zerstören. Aber dann müssen die Kunden ihre eigenen Filter implementieren, um Nachrichten für andere Händler zu trennen. Darüber hinaus gibt es eine erhebliche Zunahme der Nachrichten, die von Abonnenten empfangen werden Eine unnötige Belastung für sie. Es gibt zwei Optionen. One Channel pro Trader Jeder Trader hat einen bestimmten Kanal für die modifizierten Marktdaten Auf diese Weise sind die ursprünglichen Marktdaten intakt und jede Trader-Anwendung kann auf ihre spezifischen Trader zu hören Message Channel für die modifizierte Preis-Updates. One Channel pro Trader pro Bond Erstellen Sie eine Message Channel per-Trader per-Bond nur für die modifizierten Marktdaten dieser Anleihe Zum Beispiel würden die Marktdaten für Anleihe ABC auf Channel Bond ABC veröffentlicht werden, während die modifizierten Marktdaten für Trader A würde auf Message Channel Trader A, Bond ABC, modifizierte Marktdaten für Trader B auf Trader B, Bond ABC und so weiter veröffentlicht werden. Ein Kanal pro Trader. One Kanal pro Bond pro Trader. Es gibt Vor - und Nachteile für jeden Ansatz Der Per-Bond-Ansatz, zum Beispiel, verwendet viel mehr Message Channel Im Worst-Case-Szenario wird die Anzahl der Message Channel die Anzahl der Anleihen insgesamt multipliziert mit der Anzahl der Trader Wir können Obergrenzen auf die Anzahl der Kanäle, die erstellt werden, da wir wissen, dass es nur rund 20 Händler gibt und sie nie mehr als ein paar hundert Bonds korrigieren. Damit ist die Obergrenze unterhalb der 10.000 Reichweite, die im Vergleich zu den fast 100.000 Message Channel die Marktdaten nicht so ausgefallen ist Preis-Feed ist auch verwendet, da wir mit dem TIB und Message Channel sind ziemlich billig, die Anzahl der Message Channel s ist nicht ein schweres Problem Auf der anderen Seite, die schiere Anzahl der Message Channel s könnte ein Problem aus einer Management-Perspektive sein Jedes Mal, wenn eine Bindung hinzugefügt wird, muss ein Kanal für jeden Trader gepflegt werden. Dies könnte in einem sehr dynamischen System schwer sein. Unser System ist jedoch im Wesentlichen statisch. Es verfügt auch über eine Infrastruktur zur automatischen Verwaltung von Message Channel s. Dies kombiniert mit der ererbten Architektur eines Legacy-Komponente mit einem ähnlichen Ansatz minimiert den Nachteil Dies ist nicht zu sagen, wir sollten eine unnötig übermäßige Anzahl von Message Channel s Vielmehr können wir einen architektonischen Ansatz, der eine große Anzahl von Message Channel s verwendet, wenn es einen Grund. Und dort Ist ein Grund in diesem Fall, der auf den Standort der Logik herunterkommt. Wenn wir den pro Trader-Ansatz implementieren, benötigt die Analytics Engine Logik, um Eingangs - und Ausgangskanäle zu gruppieren. Dies liegt daran, dass die Eingangskanäle der Analytics Engine pro Bond und die Ausgabemeldung sind Kanal s würde pro Händler sein, was die Analytics Engine benötigt, um alle Analytics-Eingaben von Mehrfachanleihen für einen bestimmten Trader an einen traderspezifischen Ausgang zu übergeben. Message Channel Dies macht die Analytics-Engine effektiv zu einem Content-Based Router, um eine benutzerdefinierte Routing-Logik für unsere Anwendung zu implementieren Nach der Message Bus-Struktur ist die Analytics Engine ein generischer Server, der von mehreren anderen Systemen genutzt werden kann. So wollen wir es nicht mit systemspezifischer Funktionalität bewältigen. Auf der anderen Seite arbeitet der per-bond-Ansatz seit der Idee Eines Händlers, der die analytische Ausgabe von Anleihepreisen besitzt, ist ein Unternehmen, das die Praxis akzeptiert. Der Per-Bond-Ansatz hält die Message Channel-Trennung des Marktdaten-Feeds intakt und fügt noch mehr Message Channel s hinzu. Bevor wir den Client erreichen, Basierten Router, um diese mehrere Kanäle zu einer überschaubaren Anzahl von Kanälen zu kombinieren Wir wollen nicht, dass die Client-Anwendung auf dem Trader-Desktop läuft, um Tausende oder Zehntausende von Message Channel zu hören. Jetzt wird die Frage, wo die Content-Based Router Wir könnten einfach den C TIB Channel Adapter alle Nachrichten an das Pricing Gateway auf einem einzigen Message Channel weiterleiten. Das ist aus zwei Gründen schlecht, wir würden die Geschäftslogik zwischen C und Java aufteilen und wir würden den Vorteil verlieren Der separate Message Channel s auf der TIB-Seite ermöglicht es uns, später im Datenfluss zu filtern. Wenn wir unsere Java-Komponenten betrachten, können wir sie entweder im Pricing Gateway platzieren oder eine Zwischenkomponente zwischen dem Pricing Gateway und dem Client erstellen. Wenn wir die Bond-basierte Trennung von Message Channel s bis hin zum Client beharrten, würde das Pricing Gateway die Preisinformationen mit der gleichen Kanalstruktur wie dem Pricing Gateway und der Analytics Engine erneut senden. Dies bedeutet eine Vervielfältigung aller BIB-dedizierten TIB-Kanäle In JMS Auch wenn wir eine Vermittlungskomponente zwischen dem Pricing Gateway und dem Client erstellen, muss das Pricing Gateway immer noch alle Kanäle in JMS duplizieren. Andererseits ermöglicht es uns, die Logik direkt im Pricing Gateway zu implementieren, um das Duplizieren der großen zu vermeiden Anzahl der Kanäle in JMS, die es uns erlauben, eine viel kleinere Anzahl von Kanälen in der Reihenfolge von einem pro Händler zu erstellen. Das Pricing Gateway registriert sich über den C TIB Channel Adapter als Verbraucher für jede Bindung jedes Traders im System. Dann wird das Pricing Gateway Weiterleiten Sie jedem einzelnen Client nur die Nachrichten, die mit diesem bestimmten Trader verknüpft sind. Auf diese Weise verwenden wir nur eine kleine Anzahl von Message Channel s am JMS-Ende und maximieren den Nutzen der Trennung am TIB-Ende. Der komplette Marktdatenfluss zum Client. Die Message Channel Layout Diskussion ist ein gutes Beispiel dafür, wie Integration von Mustern ist wichtig Das Ziel hier war, um herauszufinden, wie effektiv nutzen die Message Channel s Saying Sie verwenden ein Muster isn t genug Sie müssen herausfinden, wie man am besten implementieren und In das System integrieren, um die Probleme zu lösen. Darüber hinaus zeigt dieses Beispiel Geschäftskräfte in Aktion Wenn wir die Geschäftslogik in einer unserer Komponenten implementieren könnten, könnten wir mit dem pro Trader-Ansatz gegangen sein und einen insgesamt einfacheren Ansatz mit vielen weniger implementiert haben Kanäle. Wählen Sie einen Message Channel. Now, dass wir die Mechanik der Kommunikation zwischen den Java JMS Komponenten und den C TIBCO Komponenten kennen, und wir haben einige Message Channel Strukturierung gesehen, müssen wir entscheiden, welche Art von JMS Message Channel s die Java-Komponenten Verwenden Sie, um zu kommunizieren Bevor wir zwischen den verschiedenen Nachrichtenkanälen, die in JMS verfügbar sind, wählen können, schauen wir uns den High-Level-Nachrichtenfluss des Systems an Wir haben zwei Gateways Preise und Beitrag, die mit dem Client kommunizieren Marktdaten fließen zum Client vom Pricing Gateway Die es an das Contribution Gateway sendet Die Client-Anwendung sendet eine Nachricht an das Pricing Gateway, um die Analysen zu ändern, die auf jede Bindung angewendet werden. Der Contribution Gateway sendet auch Nachrichten an die Client-Anwendung, die den Status der Preisaktualisierungen an die verschiedenen Handelsplätze weiterleitet System-Nachrichtenfluss. Die JMS-Spezifikation beschreibt zwei Message-Channel-Typen, Point-to-Point-Kanal JMS-Warteschlange und Publish-Subscribe Channel JMS Topic Erinnern Sie sich, dass der Fall für die Verwendung von publish-subscribe ist es, alle interessierten Verbraucher zu erhalten, um eine Nachricht zu erhalten, während der Fall Für die Verwendung von Punkt-zu-Punkt ist, um sicherzustellen, dass nur ein berechtigter Verbraucher erhält eine bestimmte Nachricht. Many Systeme würde einfach Nachrichten an alle Client-Anwendungen, so dass jede einzelne Client-Anwendung zu entscheiden, ob oder nicht, um eine bestimmte Nachricht zu verarbeiten Dies wird Nicht für unsere Anwendung arbeiten, da es eine große Anzahl von Marktdatennachrichten gibt, die an jede Client-Anwendung gesendet werden. Wenn wir Marktdaten-Updates an uninteressierte Händler weitergeben, werden wir unnötigerweise Client-Prozessor-Zyklen verschwenden, um zu entscheiden, ob ein Marktdaten-Update verarbeitet werden soll oder nicht. Point-to-Point-Kanal stet zunächst wie eine gute Wahl, da die Clients Nachrichten an eindeutige Server und umgekehrt senden. Aber es war eine geschäftliche Anforderung, dass Händler gleichzeitig bei mehreren Maschinen angemeldet werden können. Wenn wir einen Händler angemeldet haben In an zwei Arbeitsplätzen gleichzeitig und ein Punkt-zu-Punkt-Preis-Update gesendet wird, wird nur eine der beiden Client-Anwendungen die Meldung bekommen Dies liegt daran, dass nur ein Verbraucher auf einem Point-to-Point-Kanal eine bestimmte Nachricht erhalten kann Die erste von jeder Gruppe von Trader-Client-Anwendungen empfängt die Nachricht. Point-to-Point Messaging für Preis-Updates. Wir könnten dies mit dem Empfänger Liste Muster, das Nachrichten veröffentlicht, um eine Liste der beabsichtigten Empfänger, garantiert, dass nur Clients in Die Empfängerliste wird Nachrichten empfangen Mit diesem Muster kann das System Empfängerlisten mit allen Client-Anwendungsinstanzen erstellen, die sich auf jeden Händler beziehen. Senden einer Nachricht, die sich auf einen bestimmten Händler bezieht, würde wiederum die Nachricht an jede Anwendung in der Empfängerliste senden. Dies garantiert allen Client Anwendungsinstanzen im Zusammenhang mit einem bestimmten Händler würde die Nachricht erhalten Der Nachteil dieses Ansatzes ist, dass es erfordert einiges an Implementierungslogik, um die Empfänger zu verwalten und Nachrichten zu versenden. Recipient Liste für Preis Updates. Even obwohl Punkt-zu-Punkt gemacht werden könnte Zu arbeiten, lassen Sie s sehen, ob es einen besseren Weg Mit Publish-Abonnement Channel s, könnte das System Nachrichten auf trader-spezifische Kanäle anstatt Client-Anwendung spezifische Kanäle Broadcast Diese Art und Weise, alle Client-Anwendungen verarbeiten Nachrichten für einen einzelnen Händler erhalten und verarbeiten würde Die Nachricht. Publish-Abonnieren von Messaging für Preisaktualisierungen. Der Nachteil der Verwendung von Publish-Subscribe Channel s ist, dass eine eindeutige Nachrichtenverarbeitung nicht mit den Server-Komponenten garantiert ist. Es wäre möglich, dass mehrere Instanzen einer Serverkomponente instanziiert und jede Instanz verarbeitet werden Die gleiche Meldung, die ggf. ungültige Preise aussendet. Wird die Systemmeldung abgeleitet werden, ist nur eine einzige Kommunikationsrichtung mit jeder Message Channel-Server-to-Client-Kommunikation mit publish-subscribe zufriedenstellend, während Client-to-Server-Kommunikation nicht und Client ist - server Kommunikation mit Punkt-zu-Punkt ist zufriedenstellend, während Server-Client nicht ist Da es keine Notwendigkeit, den gleichen Message Channel in beide Richtungen zu verwenden, können wir jeden Message Channel nur eine Richtung verwenden Client-to-Server-Kommunikation implementiert werden Mit Punkt-zu-Punkt, während Server-to-Client-Kommunikation mit publish-subscribe implementiert wird Mit dieser Kombination von Message Channel s profitiert das System von der direkten Kommunikation mit den Server-Komponenten über Punkt-zu-Punkt-Messaging und die Multicast-Natur Publish-abonnieren ohne irgendwelche der Nachteile. Message-Flow mit Channel-Typen. Problem-Lösung mit Patterns. Patterns sind Werkzeuge und Sammlungen von Mustern sind Toolboxes Sie helfen, Probleme zu lösen Einige denken, dass Muster sind nur nützlich während des Designs Nach der Toolbox-Analogie, das ist wie Sagen, dass Werkzeuge nur nützlich sind, wenn Sie ein Haus bauen, nicht wenn Sie es beheben Die Tatsache ist, dass Muster ein nützliches Werkzeug während eines Projektes sind, wenn es gut angewendet wird In den folgenden Abschnitten werden wir den gleichen Muster Explorationsprozess verwenden, den wir im vorherigen Abschnitt verwendet haben Um Probleme in unserem jetzt funktionierenden System zu lösen. Flashing Market Data Updates. Trader wollen Tabellenzellen zu blinken, wenn neue Marktdaten für eine Bindung empfangen werden, eindeutig zeigt Änderungen Der Java-Client empfängt Nachrichten mit neuen Daten, die ein Client-Daten-Cache-Update und schließlich auslöst Blinkt in der Tabelle Das Problem ist, dass Updates ziemlich häufig kommen Der GUI-Thread-Stack wird überladen und schließlich das Einfrieren des Clients, da er auf Benutzerinteraktion reagieren kann. Wir werden davon ausgehen, dass das Blinken optimiert ist und sich auf den Datenfluss von Nachrichten durch die Aktualisierungsprozess Eine Prüfung der Leistungsdaten zeigt, dass die Client-Anwendung mehrere Updates enthält, eine Sekunde einige Updates, die weniger als eine Millisekunde voneinander entfernt sind Zwei Muster, die scheinen, wie sie helfen könnten, den Nachrichtenfluss zu verlangsamen, sind Aggregator und Message Filter. Ein erster Gedanke ist zu implementieren Ein Meldungsfilter, um die Geschwindigkeit des Nachrichtenflusses zu steuern, indem du Updates bekommst, die eine kleine Zeit nach der Referenznachricht erhalten haben. Als Beispiel können wir sagen, dass wir Nachrichten innerhalb von 5 Millisekunden voneinander ignorieren werden. Der Nachrichtenfilter könnte den Cache cache Zeit der letzten akzeptablen Nachricht und werfen Sie etwas, das innerhalb der nächsten 5 Millisekunden empfangen wird. Während andere Anwendungen möglicherweise nicht in der Lage sind, Datenverlust in einem solchen Ausmaß zu widerstehen, ist dieses in unserem System aufgrund der Häufigkeit der Preisaktualisierungen völlig akzeptabel Filter. Das Problem mit diesem Ansatz ist, dass nicht alle Datenfelder zur gleichen Zeit aktualisiert werden Jede Bindung hat etwa 50 Datenfelder angezeigt, um den Benutzer einschließlich Preis Wir erkennen, dass nicht jedes Feld in jeder Nachricht aktualisiert wird Wenn das System aufeinanderfolgende Nachrichten ignoriert, Es kann sehr gut sein, wichtige Daten zu werfen. Das andere Merkmal von Interesse ist der Aggregator Der Aggregator wird verwendet, um die Abstimmung von mehreren, verwandten Nachrichten in einer einzigen Nachricht zu verwalten, wodurch der Nachrichtenfluss reduziert wird. Der Aggregator könnte eine Kopie der Bindung behalten Daten aus der ersten aggregierten Nachricht, dann nur neue oder geänderte Felder aufeinanderfolgende Meldungen aktualisieren Schließlich werden die aggregierten Bond-Daten in einer Nachricht an den Client übergeben. Jetzt können wir annehmen, dass der Aggregator eine Nachricht alle 5 Millisekunden wie den Message Filter Später senden wird , Wir erforschen eine andere Alternative. Aggregator mit teilweise aufeinanderfolgenden Updates. Der Aggregator wie jedes andere Muster, ist nicht eine silberne Kugel es hat seine Pluspunkte und Minus, die erforscht werden müssen Ein Potenzial Minus ist, dass die Implementierung eines Aggregators würde die Nachricht Verkehr durch reduzieren Eine große Menge in unserem Fall nur, wenn viele Nachrichten innerhalb einer relativ kurzen Zeit in Bezug auf die gleiche Bindung kommen In der anderen Seite würden wir nichts erreichen, wenn der Java-Client nur Updates für ein Feld über alle Trader-Anleihen erhält Zum Beispiel, 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. 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 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 couldn t 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 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 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 Integration Patterns in Practice Case Study Bond Trading System. Imagine Trading System. Since 1993, Imagine Software has been a leading provider of investment management solutions for the global financial industry Its award-winning enterprise product, the Imagine Trading System and its on-demand cloud-based ASP version, is a real-time integrated trading, portfolio, and risk management solution employed by thousands of buy-side and sell-side end-users across the globe. Imagine Software s reputation of delivering competitive advantage is based upon its long track record of delivering institutional-grade functionality, broad cross-asset instrument support, and the ability to handle any trading strategy The firm consistently satisfies the diverse portfolio and risk processing, market data, regulatory, and reporting requirements of the largest global hedge funds, fund-of-funds, pension funds, asset management companies, and major brokerage firms and banks Imagine provides users with everything they need for their day-to-day operations advanced software functionality, comprehensive data management consisting of the myriad live market, credit, static data, and other elements necessary for real-time trading in today s global markets , and end-of-day and start - of-day processing services. Maximizing Investment Returns and Managing Risk Investment decision-makers reap immediate benefits with Imagine s robust, real-time portfolio and risk management functionality, which supports their activities across all trading strategies and asset classes Key portfolio functionality includes unlimited portfolio drilldowns, real-time pricing, limits monitoring and control, plus live views of PL values and greeks, and securities tracking Risk functionality spans stress testing and historical Monte Carlo, plus intra-day portfolio VaR, factor analysis, and much more Users can easily examine exposure to shifting market prices, interest rates, volatility, yield-curve assumptions and other risks. Achieve Transparency Imagine s status as a trusted industry-standard provider of risk and portfolio reporting capabilities make it a must have resource for a wide array of financial businesses ranging from institutional investment firms to start-up hedge funds Superior reporting capabilities plus complete historical data archiving enables the transparency today s investors and regulator agencies demand. Gain Operational Efficiencies clients concentrate solely on managing assets because the critical components underpinning their business processes software, market data, global security masters, corporate actions, etc are managed efficiently at Imagine s secure, high-performance data center The operational risk and cost benefits of fast implementation, automation of manual processes, seamless integration with other third-party systems, and elimination of IT support requirements are undeniable. Appears on these sections. Product and service specifications.

No comments:

Post a Comment