Wednesday 20 September 2017

Bond Trading Sistema Architettura


Trading Systems che cosa è un sistema di trading Trading system. A è semplicemente un insieme di regole specifiche, o parametri, che determinano i punti di ingresso e di uscita per un dato equità Questi punti, noti come segnali, sono spesso segnati su un grafico in tempo reale e tempestiva l'esecuzione immediata di un trade. Here sono alcuni degli strumenti di analisi tecnica più comunemente utilizzati per costruire i parametri di medie commerciali systems. Moving MA. Relative strength. Bollinger Bands. Often, due o più di queste forme di indicatori sarà combinato in la creazione di una regola, ad esempio, il sistema MA di crossover utilizza due mobili parametri medi, a lungo termine e breve termine, per creare una regola di comprare quando il breve termine attraversa sopra il lungo termine, e vendere quando il contrario true In altri casi, una regola utilizza solo indicatore Ad esempio, un sistema può avere una regola che vieta qualsiasi acquisto meno che la forza relativa è sopra un certo livello Ma è una combinazione di tutti questi tipi di regole che rende un sistema commerciale. MSFT media mobile Cross-Over del sistema con 5 e 20 Spostamento Averages. Because il successo del sistema nel suo complesso dipende da come eseguono le regole, i commercianti di sistema trascorrere del tempo ottimizzando al fine di gestire il rischio aumentare la quantità acquisita per il commercio e raggiungere a lungo termine stabilità Questo viene fatto modificando i parametri differenti all'interno di ogni regola, ad esempio, per ottimizzare il sistema MA di crossover, un commerciante avrebbe test per vedere che le medie mobili di 10 giorni, 30 giorni, ecc funzionano meglio, e poi implementare, ma l'ottimizzazione può migliorare risultati per solo un piccolo margine - E la combinazione di parametri utilizzati che in ultima analisi, determinare il successo di un system. Advantages Quindi, perché si potrebbe desiderare di adottare un system. It commerciale prende tutte le emozioni di negoziazione - Emotion è spesso citato come uno dei più grandi difetti di investitori singoli investitori che sono in grado di far fronte alle perdite secondo indovinare le loro decisioni e finiscono per perdere soldi rigorosamente a seguito di un sistema di pre-sviluppo, gli operatori di sistema possono rinunciare alla necessità di prendere decisioni una volta che il sistema è stato sviluppato e stabilito, il commercio non è empirica perché è automatizzato riducendo le inefficienze umane, gli operatori di sistema possono aumentare profits. It può risparmiare un sacco di tempo - una volta che un sistema efficace è sviluppato e ottimizzato poco o nessun sforzo richiesto dai computer commerciante sono spesso utilizzato per automatizzare non solo la generazione del segnale, ma anche il trading reale, in modo che il commerciante è libero di spendere il tempo su analisi e rendendo trades. It s facile se si lascia che gli altri fanno per voi - hanno bisogno di tutto il lavoro fatto per voi alcune aziende vendono sistemi di trading che hanno sviluppato Altre aziende vi darà i segnali generati dai loro sistemi di trading interni per un canone mensile attenzione, però - molte di queste aziende sono fraudolenti Date un'occhiata da vicino quando i risultati si vantano circa sono state prese dopo tutto, è facile vincere in passato cercare le aziende che offrono una prova, che consente di testare il sistema in real-time. Disadvantages Noi ve guardato i principali vantaggi di lavorare con un sistema di negoziazione, ma l'approccio anche ha i suoi sistemi sono complessi drawbacks. Trading - Questo è il loro più grande svantaggio Nelle fasi di sviluppo, sistemi di trading richiedono una solida conoscenza di analisi tecnica, la capacità di prendere decisioni empirici e una conoscenza approfondita di come i parametri di lavoro, ma anche se non si stanno sviluppando il sistema di trading proprio, è importante per avere familiarità con i parametri che compongono quello che si sta utilizzando acquisizione di tutte queste competenze può essere un challenge. You deve essere in grado di fare ipotesi realistiche ed efficace impiegare il sistema - gli operatori di sistema devono fare ipotesi realistiche sulle transazioni costi Questi saranno costituite da più di spese di commissione - la differenza tra il prezzo di esecuzione e il prezzo di riempimento è una parte dei costi di transazione Tenete a mente, è spesso impossibile per testare i sistemi di precisione, provocando un certo grado di incertezza quando portando i problemi in tempo reale del sistema che si verificano quando i risultati simulati sono molto diverse da risultati effettivi sono noti come lo slittamento efficacemente a che fare con lo slittamento può essere un ostacolo importante per la distribuzione di un system. Development di successo può essere un compito che richiede tempo - un sacco di tempo può andare in via di sviluppo un sistema di negoziazione per farlo funzionare e funziona correttamente L'elaborazione di un concetto di sistema e la messa in pratica comporta un sacco di test, che prende un po 'di backtesting storico richiede pochi minuti però, back testing da sola non è Sistemi sufficienti devono essere di carta scambiati in tempo reale tempo al fine di garantire l'affidabilità, infine, lo slittamento può causare agli operatori di rendere diverse revisioni ai loro sistemi anche dopo deployment. Do funzionano ci sono un numero di internet truffe legate alla negoziazione del sistema, ma ci sono anche molti legittimi, sistemi di successo Forse il più famoso esempio è quello sviluppato e realizzato da Richard Dennis e Bill Eckhardt, che sono la tartaruga commercianti originali nel 1983, questi due hanno avuto una disputa se un buon commerciante si nasce o si diventa Quindi, hanno preso alcune persone fuori strada e li ha addestrati based sul loro ormai famoso sistema Turtle Trading si sono riuniti 13 commercianti e finito per fare 80 all'anno per i prossimi quattro anni, Bill Eckhardt ha detto una volta, chiunque con intelligenza media può imparare a scambi Questa non è scienza missilistica Tuttavia, è molto più facile da imparare che cosa si dovrebbe fare nel trading di farlo sistemi di trading stanno diventando sempre più popolare tra gli operatori professionali, gestori di fondi e investitori individuali allo stesso modo - forse questa è una testimonianza di quanto bene work. Dealing con truffe Quando si cerca di acquistare un sistema di negoziazione, può essere difficile trovare un business degno di fiducia, ma la maggior parte delle truffe può essere individuato dal buon senso, ad esempio, una garanzia di 2500 è annualmente chiaramente scandaloso in quanto promette che con solo 5.000 si potrebbe fare 125.000 in un anno e poi attraverso compounding per cinque anni , 48.828.125 mila Se questo fosse vero, wouldn t il commercio creatore la sua strada per diventare un offerta billionaire. Other, tuttavia, sono più difficili da decodificare, ma un modo comune per evitare truffe è quello di cercare sistemi che offrono una prova gratuita che modo è possibile testare il sistema da soli mai fidarsi ciecamente il business si vanta a questo proposito è anche una buona idea per contattare gli altri che hanno utilizzato il sistema, per vedere se possono affermare la propria affidabilità e profitability. Conclusion lo sviluppo di un sistema commerciale efficace è per nulla significa un compito facile richiede una solida conoscenza dei molti parametri disponibili, la capacità di fare ipotesi realistiche e il tempo e la dedizione per sviluppare il sistema Tuttavia, se sviluppato e implementato correttamente, un sistema di scambio può produrre molti vantaggi può aumentare l'efficienza, liberare tempo e, soprattutto, aumentare il profits. Trading Sistemi Progettazione del sistema - Parte 1. la sezione precedente di questa guida ha esaminato gli elementi che compongono un sistema commerciale e discusso i vantaggi e gli svantaggi di usare un tale sistema in un ambiente di trading dal vivo in questa sezione, si costruisce su quella conoscenza esaminando quali mercati sono particolarmente adatti alla negoziazione sistema Faremo poi dare un'occhiata più approfondita ai diversi generi di trading systems. Trading in diversi mercati Markets. Equity Il mercato azionario è probabilmente il mercato più comune al commercio, in particolare tra i novizi in questo campo, grandi giocatori come Warren Buffett e Merrill Lynch dominare, e le strategie di valore e di investimento di crescita tradizionali sono di gran lunga la più comune, tuttavia, molti istituti hanno investito in modo significativo nella progettazione, sviluppo e implementazione di sistemi di trading I singoli investitori si stanno unendo questa tendenza, anche se slowly. Here sono alcuni fattori chiave da tenere a mente quando si utilizzano sistemi di trading in azioni markets. The grande quantità di titoli disponibili consente agli operatori di testare i sistemi su molti diversi tipi di azioni - tutto, dalle scorte estremamente volatili over-the-counter OTC per non volatile chips. The efficacia blu di sistemi di trading possono essere limitati dalla scarsa liquidità di alcune azioni, in particolare OTC e issuesmissions foglio rosa può mangiare in profitti generati da operazioni di successo, e può aumentare le perdite OTC e titoli azionari foglio rosa spesso incorrere commissione aggiuntiva fees. the principali sistemi di trading utilizzati sono quelli che cercano valore - cioè i sistemi che utilizzano parametri diversi per determinare se un titolo è sottovalutato rispetto al suo passato prestazioni, suoi coetanei, o il mercato in mercati valutari general. Foreign il mercato dei cambi, o Forex è il più grande e liquido mercato del mondo i governi del mondo s, banche e altri grandi istituti commerciali trilioni di dollari sul mercato forex ogni giorno la maggior parte degli operatori istituzionali sul forex si basano su sistemi di trading lo stesso vale per gli individui sul forex, ma alcuni il commercio sulla base di rapporti economici o payouts. Here interesse sono alcuni fattori chiave da tenere a mente quando si utilizzano sistemi di trading nel mercato forex. il liquidità in questo mercato - a causa del volume enorme - rende i sistemi di negoziazione più accurato e effective. There sono commissioni in questo mercato, si diffonde solo Pertanto, è molto più facile per fare molte transazioni senza aumentare costspared alla quantità di azioni o materie prime disponibili, il numero di valute al commercio è limitato ma a causa della disponibilità di coppie di valute esotiche - vale a dire, le valute dei paesi più piccoli - la gamma in termini di volatilità non è necessariamente limited. The principali sistemi di trading utilizzati in forex sono quelli che seguire le tendenze un detto popolare nel mercato è il trend è tuo amico, o sistemi che acquistano o vendono su sblocchi Questo perché gli indicatori economici sono spesso causa di grandi movimenti di prezzo in uno time. Futures equity, forex e mercati delle materie prime tutte offrono Futures Trading Questo è un veicolo popolare per il sistema di scambio a causa della maggiore quantità di leva disponibili e l'aumento della liquidità e della volatilità Tuttavia, questi fattori possono tagliare entrambi i modi in cui possono o amplificare i vostri guadagni o amplificare le perdite per questo motivo, l'utilizzo di futures è di solito riservata per i singoli avanzato e commercianti sistema istituzionale Questo perché i sistemi di trading in grado di capitalizzare sul mercato a termine richiedono molto maggiore personalizzazione, utilizzano indicatori più avanzati e prendono molto più tempo per sviluppare Quindi, che è meglio e 's fino al singolo investitore per decidere quale mercato è più adatto a trading system - ognuno ha i suoi vantaggi e svantaggi la maggior parte delle persone sono più familiarità con i mercati azionari, e questa familiarità rende lo sviluppo di un sistema commerciale più facile Tuttavia, forex è comunemente pensato per essere la piattaforma superiore per eseguire sistemi di trading - in particolare tra gli operatori più esperti, inoltre, se un commerciante decide di capitalizzare su una maggiore leva finanziaria e la volatilità, il futuro alternativa è sempre aperto in definitiva, la scelta è nelle mani dei developer. Types sistema di scambio Systems. Trend-seguenti sistemi il metodo più comune del trading sistema è la tendenza del sistema - sui passi nella sua forma più fondamentale, questo sistema attende semplicemente per un significativo movimento dei prezzi, allora acquista o vende in quella direzione questo tipo di banche di sistema sulla speranza che questi movimenti di prezzo manterranno il trend. Moving Sistemi medio utilizzato frequentemente in analisi tecnica una media mobile è un indicatore che mostra semplicemente il prezzo medio di uno stock in un periodo di tempo l'essenza delle tendenze è derivato da questa misurazione il modo più comune per determinare entrata e di uscita è un crossover la logica alla base di questo è semplice una nuova tendenza viene stabilito quando il prezzo scende al di sopra o al di sotto del prezzo storico tendenza media Ecco un grafico che traccia sia la linea blu e il prezzo di 20 giorni MA linea rossa di IBM. Breakout Systems il concetto fondamentale alla base di questo tipo del sistema è simile a quello di un sistema di media mobile l'idea è che quando un nuovo alto o basso è stabilito, il movimento dei prezzi è più probabile che continui nella direzione dell'indicatore breakout uno che può essere utilizzato per determinare sblocchi è un semplice bande di Bollinger sovrapposizione Bollinger band mostrano le medie dei prezzi alti e bassi, e sblocchi si verificano quando il prezzo soddisfa i bordi delle bande Ecco un grafico che traccia prezzo linea blu e Bollinger band linee grigie di Microsoft. Disadvantages di Trend-a seguito della decisione Systems. Empirical - Fare richiesto - Nel determinare le tendenze, c'è sempre un elemento empirico di prendere in considerazione la durata del trend storico, ad esempio, la media mobile potrebbe essere per gli ultimi 20 giorni o per gli ultimi cinque anni, quindi lo sviluppatore deve determinare quale è migliore per il sistema altri fattori da definire sono le temperature medie e bassi in breakout systems. Lagging Natura - le medie mobili e sistemi di breakout saranno sempre in ritardo di altre parole, non potranno mai colpire la parte superiore o inferiore esatto di un trend Ciò si traduce inevitabilmente in una perdita di potenziali profitti, che a volte può essere significant. Whipsaw Effect - Tra le forze di mercato che sono dannose per il successo dei sistemi trend-following, questo è uno dei più comuni l'effetto whipsaw si verifica quando la media mobile genera un falso segnale - che è, quando scende la media solo in campo, poi inverte improvvisamente direzione Questo può portare a perdite enormi a meno efficaci stop loss e le tecniche di gestione del rischio sono employed. Sideways Markets - sistemi di trend-following sono, per natura, in grado di rendere soldi solo in mercati che in realtà fanno tendenza Tuttavia, i mercati si muovono anche lateralmente rimanere entro un certo intervallo per un lungo periodo di time. Extreme volatilità può verificarsi - di tanto in tanto, i sistemi di trend-following possono avvertire una certa volatilità estrema, ma il commerciante deve attaccare con il suo suo sistema l'incapacità di farlo si tradurrà in certi failure. Countertrend Sistemi Fondamentalmente, la porta con il sistema controtendenza è quella di acquistare al minor basso e vendere al più alto alto la differenza principale tra questo e il sistema di trend-following è che il sistema di controtendenza non è auto-correzione in altre parole, non c'è tempo impostato per uscire posizioni, e questo si traduce in un numero illimitato di potenziali tipi svantaggio di controtendenza sistemi a molti diversi tipi di sistemi sono considerati sistemi controtendenza l'idea è quella di acquistare quando slancio in una direzione inizia dissolvenza Questo è più spesso calcolato utilizzando oscillatori per esempio, un segnale può essere generato quando stocastico o altri indicatori di forza relativa scendono sotto certi punti ci sono altri tipi di sistemi controtendenza commerciali, ma tutti condividono lo stesso obiettivo fondamentale - per comprare basso e vendere high. Disadvantages di controtendenza seguito Systems. E mpirical decisionale richiesto - per esempio, uno dei fattori che lo sviluppatore del sistema deve decidere sono i punti in cui gli indicatori relativi resistenza fade. Extreme Volatilità può verificarsi - Questi sistemi possono anche sperimentare una certa volatilità estrema, e l'incapacità di rimanere con il sistema, nonostante questa volatilità si tradurrà in certi failure. Unlimited downside - Come detto in precedenza, non vi è illimitato potenziale lato negativo perché il sistema non è auto-correzione non c'è tempo insieme per uscire positions. Conclusion i principali mercati per i quali i sistemi di negoziazione sono adatti sono i azionari, mercati forex e future Ciascuno di questi mercati ha i suoi vantaggi e svantaggi i due generi principali di sistemi di trading sono i sistemi trend-following e la controtendenza Nonostante le loro differenze , entrambi i tipi di sistemi, nelle loro fasi di sviluppo, richiedono decisioni empirica da parte dello sviluppatore Inoltre, questi sistemi sono soggetti a estrema volatilità e questo può richiedere qualche resistenza - è essenziale che il bastone sistema dell'operatore con il suo sistema durante questi tempi Nell'esempio seguente puntata, ci prenderemo uno sguardo più da vicino a come progettare un sistema commerciale e discutere alcuni dei software che gli operatori di sistema utilizzare per rendere la loro vita easier. Messaging Patterns modelli di integrazione in Practice Case Study di Bond Trading system. Con Jonathan Simon. It è facile prendere le distanze da una vasta collezione di modelli o di un pattern lingua modello sono l'astrazione di un'idea in una forma riutilizzabile Spesso, la natura molto generico di modelli che li rende così utile li rende anche difficile da afferrare a volte la cosa migliore per aiutare a capire i modelli è un esempio reale mondo non è uno scenario artificioso di quello che potrebbe accadere, ma in realtà ciò che accade e ciò che happen. This capitolo si applica modelli per risolvere i problemi utilizzando un processo di scoperta il sistema si discuterà è un bond trading sistema che ho lavorato con per due anni dalla progettazione iniziale fino alla produzione esploreremo scenari e problemi che sono stati incontrati e come risolverli con i modelli Questo comporta il processo decisionale di scelta di un modello, così come il modo di combinare e modificare modelli per adattarsi le esigenze del sistema e questo è tutto fatto, tenendo conto delle forze incontrate in sistemi reali, tra cui i requisiti di business, le decisioni del cliente, i requisiti architettonici e tecnici, così come l'integrazione dei sistemi legacy l'intento di questo approccio è quello di fornire una più chiara comprensione del stessi modelli attraverso application. Building pratica una banca d'investimento system. A importante Wall Street si propone di costruire un sistema di tariffazione legame, nel tentativo di semplificare il flusso di lavoro della loro sala operativa legame Attualmente, i commercianti di obbligazioni devono inviare i prezzi per un gran numero di titoli a diverse sedi di negoziazione diversi, ciascuno con la propria interfaccia utente l'obiettivo per il sistema è quello di ridurre al minimo le minuzie di prezzi di tutti i loro legami in combinazione con funzionalità analitiche avanzate specifiche per il mercato obbligazionario in un'unica interfaccia utente incapsulato Ciò significa integrazione e comunicazione con diversi componenti su vari protocolli di comunicazione il flusso elevato livello del sistema si presenta come this. First, dati di mercato entra nel sistema di dati di mercato sono i dati per quanto riguarda il prezzo e le altre proprietà del legame rappresentando ciò che le persone sono disposte a comprare e vendere l'obbligazione per sul mercato libero i dati di mercato viene immediatamente inviato al motore di analisi che altera le analisi dei dati si riferisce a funzioni matematiche per applicazioni finanziarie che alterano i prezzi e altri attributi di obbligazioni si tratta di funzioni generiche che utilizzano le variabili di input per adattare i risultati della funzione ad un particolare legame l'applicazione client che verrà eseguito su ogni computer commerciante configurare il motore di analisi in base al commerciante, che controlla le specifiche delle analisi per ogni obbligazione il commerciante sta valutando una volta che le analisi vengono applicati ai dati di mercato, la modifica i dati vengono inviati a varie sedi di negoziazione dove i commercianti provenienti da altre aziende possono acquistare o vendere il bonds. Architecture con Patterns. With questa panoramica del flusso di lavoro del sistema, siamo in grado di affrontare alcuni dei problemi architettonici che incontriamo durante il processo di progettazione Let s dare un'occhiata a ciò che sappiamo la data di commercianti hanno bisogno di un applicazione molto reattivo su entrambe le workstation di Windows NT e Solaris Pertanto, abbiamo deciso di implementare l'applicazione client come una spessa client Java a causa della sua indipendenza dalla piattaforma e la sua capacità di rispondere rapidamente agli input dell'utente e dati di mercato sul lato server, stiamo ereditando componenti legacy C che il nostro sistema utilizzerà il mercato dei componenti di dati comunicano con i TIBCO Informazioni Bus TIB infrastructure. We messaggistica sono ereditare la seguente components. Market dati feed prezzo Server pubblica i dati di mercato in entrata a il motore TIB. Analytics Esegue analisi sui dati di mercato in entrata e trasmette i dati di mercato modificati al server TIB. Contribution Esegue tutte le comunicazioni con sedi di negoziazione le sedi di negoziazione sono componenti di terze parti, non inclusi nel contributo sottosistema bank. Legacy dati di mercato Subsystem. Legacy. Abbiamo bisogno di decidere come i sottosistemi separati Java client di spessore, dati di mercato, e di contribuzione si accingono a comunicare potremmo avere il client di spessore comunicare direttamente con il server legacy, ma che richiederebbe la logica di business troppo sul client, invece, abbiamo ll costruire un paio di gateway Java per comunicare con i server legacy il Pricing gateway per i dati di mercato di un contributo Gateway per l'invio di prezzi per le sedi di negoziazione Questo raggiungerà bella incapsulamento della logica di business relative a queste aree i componenti attuali del sistema di seguito sono riportati il connessioni contrassegnate come indicano che siamo ancora sicuri di come alcuni dei componenti sarà riusciamo a comunicare del sistema e la sua prima questione comunicazione components. The è come integrare il client di spessore Java e le due componenti server Java al fine di scambiare dati sia s un'occhiata a i quattro stili di integrazione suggerite in questo Transfer libro file di database condiviso Remote Procedure Invocazione e messaggistica possiamo escludere database condiviso immediatamente perché abbiamo voluto creare un livello di astrazione tra il client e il database e don t vogliono avere il codice di accesso al database in Trasferimento cliente file può allo stesso modo essere esclusa in quanto è necessario latenza minima per garantire prezzi correnti vengono inviati alle sedi di negoziazione Questo ci lascia con una scelta tra Remote Procedure Invocation o piattaforma Messaging. The Java fornisce un supporto integrato per entrambi Invocation Remote Procedure e l'integrazione in stile RPC Messaging può essere realizzato utilizzando Method Invocation RMI, CORBA, o Enterprise Java Beans remoti EJB Java Messaging Service JMS è l'API comune per l'integrazione di messaggistica in stile Così entrambi gli stili di integrazione sono facili da implementare in Java. So che sarà lavorare meglio per questo progetto, Remote Procedure Invocazione o Messaging C'è una sola istanza del gateway pricing e un'istanza del contributo Gateway nel sistema, ma di solito molti thick client connettersi contemporaneamente a questi servizi uno per ogni operatore legame che sembra essere registrato in un momento particolare, inoltre, la banca vorrebbe che questo è un sistema di prezzi generico che può essere utilizzato in altre applicazioni Quindi oltre ad un numero imprecisato di clienti pensano, ci può essere un numero imprecisato di altre applicazioni che utilizzano i dati dei prezzi in uscita del Gateways. A Spesso Cliente o altra applicazione che utilizza i dati dei prezzi possono abbastanza facilmente utilizzare RPC per effettuare chiamate ai gateway per ottenere dati sui prezzi e richiamare l'elaborazione Tuttavia, dati relativi ai prezzi verranno costantemente pubblicati, e di alcuni clienti sono interessati solo a determinati dati , in modo da ottenere i dati relativi ai clienti corretti in modo tempestivo potrebbe essere difficile i clienti potrebbero interrogare i gateway, ma che creerà un sacco di overhead sarebbe meglio per i gateway per rendere i dati disponibili per i clienti non appena è disponibile, tuttavia, richiederà ogni Gateway per tenere traccia di quali clienti sono attualmente attive, e che vogliono quali dati poi particolare, quando un nuovo pezzo di dati diventa disponibile che accadrà molte volte al secondo, il gateway dovrà fare un RPC ad ogni cliente interessato a passare i dati al client Idealmente, tutti i clienti devono essere notificate simultaneamente, in modo che ogni RPC deve essere fatta nel proprio thread simultaneo Questo può funzionare, ma è sempre molto complicato molto fast. Messaging semplifica notevolmente questo problema con la messaggistica possiamo definire canali separati per le diverse tipologie di dati relativi ai prezzi Poi, quando un Gateway ottiene un nuovo pezzo di dati, si aggiungerà un messaggio contenente i dati ai frattempo, tutti i clienti publish-subscribe Channel per quel tipo di dati interessati a un certo tipo di dati ascolterà sul canale per quel tipo in questo modo, i gateway possono facilmente inviare i nuovi dati a chi è interessato, senza la necessità di sapere quante applicazioni ascoltatore ci sono o quello che are. The clienti ancora devono essere in grado di richiamare comportamento nel gateway così poiché ci sono sempre solo due porte, e il cliente può probabilmente bloccare mentre il metodo viene richiamato in modo sincrono, queste invocazioni client-to-gateway possono abbastanza facilmente essere implementate utilizzando RPC Tuttavia, dal momento che stiamo già utilizzando la messaggistica per la comunicazione Gateway-to-client, i messaggi sono probabilmente solo un buon modo per implementare la comunicazione client-to-gateway come well. Therefore, tutte le comunicazioni tra i gateway ei clienti sarà realizzato attraverso la messaggistica poiché tutti i componenti sono scritti in Java, JMS presenta una scelta facile per il sistema di messaggistica Questo è effettivamente la creazione di un bus di messaggi o di un'architettura che renderà possibile per i sistemi futuri per l'integrazione con il sistema attuale con poco o nessun modifiche all'infrastruttura di messaggistica in questo modo, la funzionalità di business dell'applicazione può essere facilmente utilizzato da altre applicazioni della banca develops. Java Componenti Comunicare con JMS. JMS è semplicemente una specifica e abbiamo bisogno di decidere su un sistema di messaggistica JMS-compliant abbiamo deciso di utilizzare IBM MQSeries JMS perché la banca è un negozio IBM, utilizzando application server WebSphere e molti altri prodotti IBM come risultato, useremo MQSeries poiché abbiamo già una infrastruttura di supporto sul posto e una licenza di sito del product. The prossima domanda è come collegare il MQSeries sistema di messaggistica con il server contributo autonomo C e la TIBCO server basati su dati di mercato e Analytics motore abbiamo bisogno di un modo per i consumatori MQSeries per avere accesso ai messaggi TIB Ma come Forse potremmo usare il modello di messaggio traduttore per tradurre i messaggi TIB in MQ Series anche se i messaggi del client C per MQ Series funge da traduttore messaggio usando sarebbe sacrificare l'indipendenza del server JMS e anche se TIBCO ha una API Java, l'architetto del cliente e direttore hanno rifiutato di conseguenza, l'approccio Messaggio traduttore deve essere abandoned. The ponte dal server TIB al server MQSeries richiede la comunicazione tra C e Java potremmo usare CORBA, ma poi per quanto riguarda la messaggistica Uno sguardo più da vicino il modello di messaggio traduttore mostra è legato al Channel Adapter nel suo uso di protocolli di comunicazione il cuore di un adattatore di canale è quello di collegare i sistemi di messaggistica non per i sistemi di messaggistica una coppia di adattatori di canale che collega due sistemi di messaggistica è uno scopo di messaggistica Bridge. The di un ponte di messaggistica è quello di trasferire i messaggi da un sistema di messaggistica ad un altro Questo è esattamente quello che abbiamo stanno facendo con la complessità di Java intra-linguaggio per la comunicazione C possiamo implementare la lingua croce Messaging Bridge utilizzando una combinazione di canale adattatore s e CORBA costruiremo due server leggeri Channel Adapter, una in C gestire la comunicazione con il TIB, e uno in Java gestire la comunicazione con JMS Questi due Channel Adapter che sono Messaggio Endpoint s stessi, sarà di comunicare tra loro tramite CORBA come la nostra scelta per MQ Series, useremo CORBA piuttosto che JNI dal momento che è uno standard società il ponte di messaggistica implementa il traduzione messaggio efficacemente simulata tra i sistemi di messaggistica apparentemente incompatibili e diversi traduttore languages. Message utilizzando il canale Adapters. The prossimo diagramma mostra il design del sistema corrente, incluse le gateway e altri componenti Questo è un buon esempio di applicazione di decorazioni Abbiamo unito due canali adattatore s con un non - messaging protocollo per implementare il modello di messaggio traduttore, in modo efficace utilizzando uno schema per realizzare un altro modello Inoltre, abbiamo cambiato contesto, il Channel Adapter s per collegare due sistemi di messaggistica con un protocollo di traduzione non messaggistica lingua croce piuttosto che il collegamento di un sistema di messaggistica a un non - messaging attuale sistema system. The con la chiave del canale Adapters. Structuring Channels. A a lavorare con i modelli non è solo sapere quando usare quale modello, ma anche come utilizzare in modo più efficace che ogni implementazione modello deve tener conto della specificità della piattaforma tecnologica così come altri criteri di progettazione Questa sezione si applica lo stesso processo di scoperta per trovare l'uso più efficiente del Publish-Subscribe canale nel contesto del server dati di mercato la comunicazione con i dati di mercato di analisi engine. Real tempo nasce con feed di dati di mercato , un server C che trasmette dati di mercato sul TIB il feed di dati di mercato utilizza un separato publish-subscribe channel per ogni obbligazione che sta pubblicando i prezzi di questo può sembrare un po 'estrema dal momento che ogni nuovo legame bisogno di un proprio nuovo canale Ma non è così grave dal momento che in realtà non c'è bisogno di creare canali di TIBCO Piuttosto, i canali si fa riferimento da un insieme gerarchico di nomi degli argomenti chiamati soggetti Il server TIBCO filtra poi un singolo flusso di messaggi per argomento, l'invio di ogni soggetto unico per un unico canale virtuale Il risultato di che è un messaggio channel. We molto leggero potrebbe creare un sistema che pubblica su alcuni canali e gli abbonati possono ascoltare solo per prezzi che sono interessati a ciò richiederebbe agli abbonati di utilizzare un filtro messaggi o dei consumatori selettiva per filtrare l'intero flusso di dati per interessanti i prezzi delle obbligazioni, di decidere se ogni messaggio deve essere elaborato come viene ricevuto Dato che i dati di mercato è pubblicato sui canali di obbligazioni dedicate, gli abbonati possono registrarsi per gli aggiornamenti su una serie di obbligazioni Questo permette in modo efficace agli abbonati di filtrare selettivamente la sottoscrizione di canali e solo ricevere gli aggiornamenti di interesse piuttosto che decidere dopo aver ricevuto il messaggio e 'importante notare che l'utilizzo di più canali per evitare il filtraggio è un uso non standard di canali di messaggistica Nel contesto della tecnologia TIBCO però, siamo davvero decidere se implementare o filtri proprie o utilizzare il filtraggio del canale integrato in TIBCO - piuttosto che se utilizzare tanti componente channels. The successivo abbiamo bisogno di progettare è il motore di analisi, un altro server TIB C che modificare i dati di mercato e ritrasmettere al TIB anche se è fuori della portata del nostro sviluppo Java JMS, stiamo lavorando a stretto contatto con il team di C per la progettazione da quando noi siamo il motore di analisi s cliente primario il problema in questione è quello di trovare la struttura di canale che ritrasmesso in modo più efficiente il mercato data. Since appena modificato abbiamo già una Message Channel dedicata al legame ereditato dal feed prezzo di dati di mercato, sarebbe logico per modificare i dati di mercato e di ritrasmettere i dati di mercato modificati sul prestito obbligazionario dedicato Message Channel Ma questo non funzionerà in quanto le analisi modificando i prezzi delle obbligazioni sono trader specifica Se rebroadcast i dati modificati sul legame Message Channel distruggeremo l'integrità dei dati, sostituendo i dati di mercato generici con commerciante dati specifici D'altra parte, potremmo avere un tipo di messaggio diverso per trader specifica dati di mercato che pubblichiamo su the same channel allowing subscribers to decide which message they are interested in to avoid destroying the data integrity But then clients will have to implement their own filters to separate out messages for other traders Additionally, there will a substantial increase in messages received by subscribers, placing an unnecessary burden on them. There are two options. One Channel per Trader Each trader has a designated channel for the modified market data This way, the original market data remains intact and each trader application can listen to its specific traders Message Channel for the modified price updates. One Channel per trader per Bond Create one Message Channel per-trader per-bond solely for the modified market data of that bond For example, the market data for bond ABC would be published on channel Bond ABC while the modified market data for trader A would be published on Message Channel Trader A, Bond ABC , modified market data for trader B on Trader B, Bond ABC, and so on. One channel per trader. One channel per bond per trader. There are advantages and disadvantages to each approach The per-bond approach, for example, uses a lot more Message Channel In the worst-case scenario, the number of Message Channel will be the number of bonds total multiplied by the number of traders We can put upper bounds on the number of channels that will be created since we know that there are only around 20 traders and they never price more than a couple hundred bonds This puts the upper limit below the 10,000 range, which is not so outlandish compared to the nearly 100,000 Message Channel the market data price feed is using Also, since we are using the TIB and Message Channel are quite inexpensive, the number of Message Channel s is not a severe issue On the other hand, the sheer number of Message Channel s could be a problem from a management perspective Every time a bond is added a channel for each trader must be maintained This could be severe in a very dynamic system Our system, however, is essentially static It also has an infrastructure for automatically managing Message Channel s This combined with the inherited architecture of a legacy component using a similar approach minimizes the downside This is not to say we should make an unnecessarily excessive number of Message Channel s Rather, we can implement an architectural approach that uses a large number of Message Channel s when there is a reason. And there is a reason in this case that comes down to the location of logic If we implement the per trader approach, the Analytics Engine needs logic to group input and output channels This is because the input channels from the Analytics Engine are per bond and the output Message Channel s would be per trader, requiring the Analytics Engine to route all analytics input from multiple bonds for a particular trader to a trader specific output Message Channel This effectively turns the analytics engine into a Content-Based Router to implement custom routing logic for our application. Following the Message Bus structure, the Analytics Engine is a generic server that could be used by several other systems in the So we don t want to cloud it with system specific functionality On the other hand, the per-bond approach works since the idea of a trader owning the analytics output of bond prices is a company accepted practice The per-bond 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 don t want the client application running on the trader s desktop to be listening to thousands or tens of thousands of Message Channel s Now the question becomes where to put the Content-Based Router We could simply have the C TIB Channel Adapter forward all of the messages to the Pricing Gateway on a single Message Channel This is bad for two reasons we would be splitting up the business logic between C and Java, and we would lose the benefit of the separate Message Channel s on the TIB side allowing us to avoid filtering later in the data flow Looking at our Java components, we could either place it in the Pricing Gateway or create an intermediary component between the Pricing Gateway and the client. In theory, if we persisted the bond-based separation of Message Channel s all the way to the client, the Pricing Gateway would rebroadcast pricing information with the same channel structure as the Pricing Gateway and Analytics Engine This means a duplication of all of the bond dedicated TIB channels in JMS Even if we create an intermediary component between the Pricing Gateway and the client, the Pricing Gateway will still have to duplicate all of the channels in JMS On the other hand, implementing logic directly in the Pricing Gateway allows us to avoid duplicating the large number of channels in JMS allowing us to create a much smaller number of channels in the order of one per trader The Pricing Gateway registers itself through the C TIB Channel Adapter as a consumer for each bond of every trader in the system Then the Pricing Gateway will forward each specific client only the messages related to that particular trader This way, we only use a small number of Message Channel s on the JMS end, while maximizing the 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 isn t enough You need to figure out how to best implement it and incorporate into your system to solve the problems at hand Additionally, this example shows business forces in action If we could implement business logic in any of our components, we could have gone with the per trader approach and implemented an overall more simple approach with many less channels. Selecting a Message Channel. Now that we know the mechanics of the communication between the Java JMS components and the C TIBCO components, and we have seen some Message Channel structuring, we need to decide which type of JMS Message Channel s the Java components should use to communicate Before we can choose between the different Message Channels available in JMS, let s look at the high level message flow of the system We have two gateways Pricing and Contribution communicating with the client Market data flows to the client from the Pricing Gateway which sends it out to the Contribution Gateway The client application sends message to the Pricing Gateway to alter the analytics being applied to each bond The Contribution Gateway also sends messages to the Client application relaying the status of the price updates to the different trading venues. The system message flow. The JMS specification describes two Message Channel types, Point-to-Point Channel JMS Queue and Publish-Subscribe Channel JMS Topic Recall that the case for using publish-subscribe is to enable all interested consumers to receive a message while the case for using point-to-point is to ensure that only one eligible consumer receives a particular message. Many systems would simply broadcast messages to all client applications, leaving each individual client application to decide for itself whether or not to process a particular message This will not work for our application since there are a large number of market data messages being sent to each client application If we broadcast market data updates to uninterested trader, we will be unnecessarily wasting client processor cycles deciding whether or not to process a market data update. Point-to-Point Channel s initially sound like a good choice since the clients are sending messages to unique servers and visa versa But it was a business requirement that traders may be logged in to multiple machines at the same time If we have a trader logged in at two workstations simultaneously and a point-to-point price update is sent, only one of the two client applications will get the message This is because only one consumer on a Point-to-Point Channel can receive a particular message Notice that only the first of each group of a trader s client applications receives the message. Point-to-Point Messaging for 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, let s see if there is a better way Using Publish-Subscribe Channel s, the system could broadcast messages on trader specific channels rather than client application specific channels This way, all client applications processing messages for a single trader would receive and process the message. Publish-Subscribe Messaging for Price Updates. The downside of using Publish-Subscribe Channel s is that unique message processing is not guaranteed with the server components It would be possible for multiple instances of a server component to be instantiated and each instance process the same message, possibly sending out invalid prices. Recalling the system message flow, only a single communication direction is satisfactory with each Message Channel Server-to-client communication with publish-subscribe is satisfactory while client-to-server communication is not and client - server communication with point-to-point is satisfactory while server-client is not Since there is no need to use the same Message Channel in both directions, we can use each Message Channel only one direction Client-to-server communication will be implemented with point-to-point while server-to-client communication will be implemented with publish-subscribe Using this combination of Message Channel s, the system benefits from direct communication with the server components using point-to-point messaging and the multicast nature of publish-subscribe without either of the drawbacks. Message flow with Channel Types. Problem Solving With Patterns. Patterns are tools and collections of patterns are toolboxes They help solve problems Some think that patterns are only useful during design Following the toolbox analogy, this is like saying that tools are only useful when you build a house, not when you fix it The fact is that patterns are a useful tool throughout a project when applied well In the following sections we will use the same pattern exploration process we used in the previous section to solve problems in our now working system. Flashing Market Data Updates. Traders want table cells to flash when new market data is received for a bond, clearly indicating changes The Java client receives messages with new data which triggers a client data 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 can t respond to user interaction We will assume that the flashing is optimized and concentrate on the data flow of messages through the updating process An examination of performance data shows the client application is receiving several updates a second some updates occurred less than a millisecond apart Two patterns that seem like they could help slow down the message flow are Aggregator and Message Filter. A first thought is to implement a Message Filter to control the speed of the message flow by throwing out updates received a small amount of time after the reference message As an example, lets say that we are going to ignore messages within 5 milliseconds of each other The Message Filter could cache the time of the last acceptable message and throw out anything received within the next 5 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 , we ll explore another alternative. Aggregator with partial successive updates. The Aggregator like any other pattern, is not a silver bullet it has its pluses and minuses that need to be explored One potential minus is that implementing an Aggregator would reduce the message traffic by a great amount in our case only if many messages are coming in within a relatively short time regarding the same bond On the other hand, we would accomplish nothing if the Java client only receives updates for one field across all of the traders bonds For example, if we receive 1000 messages in a specified timeframe with 4 bonds of interest, we would reduce the message flow from 1000 to 4 messages over that timeframe Alternatively, if we receive 1000 messages in the same timeframe with 750 bonds of interest, we will have reduced the message flow from 1000 to 750 messages relatively little gain for the amount of effort A quick analysis of the message updates proves 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.

No comments:

Post a Comment