Bond Trading System Arkitektur
Handelssystemer Hva er et handelssystem. Et handelssystem er ganske enkelt en gruppe av spesifikke regler eller parametere som bestemmer inn - og utgangspunkter for en gitt egenkapital. Disse punktene, kjent som signaler, blir ofte markert på et diagram i sanntid og ledetekst Den umiddelbare gjennomføringen av en handel. Her er noen av de vanligste tekniske analysverktøyene som brukes til å konstruere parametrene for handelssystemer. Gjennomsnittlig MA. Relativ styrke. Bollinger Bands. Often, to eller flere av disse indikatorene vil bli kombinert i Opprettelsen av en regel For eksempel bruker MA crossover systemet to bevegelige gjennomsnittlige parametere, langsiktige og kortsiktige, for å opprette en regelkjøp når kortsiktige kryss over lang sikt, og selger når motsatt er sant I andre tilfeller bruker en regel bare en indikator. For eksempel kan et system ha en regel som forbyr noe å kjøpe, med mindre den relative styrken er over et visst nivå. Men det er en kombinasjon av alle disse reglene som gjør et handelssystem. MSFT Moving Average Crossover System ved hjelp av 5 og 20 Moving Gjennomsnitt. Fordi suksessen til det totale systemet avhenger av hvor godt reglene utfører, bruker systemhandlere tid optimalisering for å håndtere risikoen, øke beløpet som oppnås per handel og oppnå langsiktig stabilitet Dette gjøres ved å endre forskjellige parametere innenfor hver regel. For eksempel for å optimalisere MA crossover-systemet, ville en forhandler teste for å se hvilke bevegelige gjennomsnitt 10-dagers, 30-dagers, osv. Fungerer best, og deretter implementere dem. Men optimalisering kan forbedre resultater med bare en liten margin - det er kombinasjonen av parametere som i det siste vil bestemme suksess for et system. Advantages Så hvorfor kan du ønsker å vedta et handelssystem. Det tar alle følelser ut av handel - Emotion blir ofte sitert som en av de største feilene til individuelle investorer Investorer som ikke klarer å takle tap andre gjette sine beslutninger og ende opp med å tape penger Ved å følge et forhåndsutviklet system, kan systemhandlere avstå fra behovet å ta noen beslutninger når systemet er utviklet og etablert, er handel ikke empirisk fordi den er automatisert. Ved å kutte ned på menneskelige ineffektiviteter, kan systemhandlere øke fortjenesten. Det kan spare mye tid - Når et effektivt system er utviklet og optimalisert lite Det er ikke nødvendig med noe arbeid fra handelsmannen. Datamaskiner brukes ofte til å automatisere ikke bare signalgenerering, men også den faktiske handelen, slik at næringsdrivende befri seg fra å bruke tid på analyse og handel. Det er enkelt hvis du lar andre gjøre det for du - Trenger alt arbeidet som er gjort for deg Noen selskaper selger handelssystemer som de har utviklet Andre selskaper vil gi deg signaler generert av deres interne handelssystemer for en månedlig avgift Vær forsiktig, skjønt - mange av disse selskapene er falske Ta en lukk se på når resultatene de skryter om, ble tatt. Tross alt er det lett å vinne i det siste. Se etter selskaper som tilbyr en prøveversjon, som lar deg teste systemet i sanntid. Ulemper Vi har sett på de viktigste fordelene ved å jobbe med et handelssystem, men tilnærmingen har også sine ulemper. Tradersystemene er komplekse - Dette er deres største ulempe I utviklingsstadiene krever handelssystemer en solid forståelse av teknisk analyse, evnen til å lage empiriske beslutninger og grundig kjennskap til hvordan parametere fungerer. Selv om du ikke utvikler ditt eget handelssystem, er det viktig å være kjent med parametrene som utgjør den du bruker. Å skaffe alle disse ferdighetene kan være en utfordring. Du må kunne realistiske antagelser og bruke systemet effektivt. Systemhandlere må gjøre realistiske antagelser om transaksjonskostnader. Disse vil bestå av mer enn provisjonskostnader. Forskjellen mellom eksekveringspris og påfyllingspris er en del av transaksjonskostnadene. Bear in tankene er det ofte umulig å teste systemene nøyaktig, noe som forårsaker en viss usikkerhet når systemet blir levende. Problemer som oppstår når simulerte resultater avviger sterkt fra faktiske resultater kalles slippe. Effektivt å håndtere slippe kan være en viktig veiblokke for å utnytte et vellykket system. Utviklingen kan være en tidkrevende oppgave - Mye tid kan gå inn i å utvikle et handelssystem for å få det til å løpe og fungerer på riktig måte Å skille ut et systemkonsept og sette det i praksis innebærer mye testing, noe som tar en stund. Historisk backtesting tar noen minutter, men tilbakestesting alene er ikke tilstrekkelig. Systemene må også handles i sanntid for å sikre pålitelighet. , kan slippe få handelsmenn til å gjøre flere revisjoner av systemene deres selv etter distribusjon. De jobber Det finnes en rekke internett-svindel knyttet til systemhandel, men det er også mange legitime, vellykkede systemer. Kanskje det mest kjente eksemplet er det som er utviklet og implementert av Richard Dennis og Bill Eckhardt, som er originale skilpaddehandlere i 1983, hadde disse to tvil om hvorvidt en god t rader er født eller laget Så tok de noen mennesker bort fra gaten og trente dem basert på deres nåkjente Turtle Trading System. De samle 13 handelsmenn og endte opp med å lage 80 årlig i løpet av de neste fire årene, Bill Eckhardt sa en gang, alle med gjennomsnittlig intelligens kan lære å handle Dette er ikke rakettvitenskap Det er imidlertid mye lettere å lære hva du bør gjøre i handel enn å gjøre det. Handelssystemer blir stadig mer populære blant profesjonelle handelsmenn, fondschefer og individuelle investorer alike - kanskje dette er en testamente for hvor godt de jobber. Beslutning med svindel Når man ser etter å kjøpe et handelssystem, kan det være vanskelig å finne en troverdig bedrift. Men de fleste svindel kan bli oppdaget av sunn fornuft. For eksempel er en garanti på 2500 årlig klart opprørende som det lover at med bare 5000 du kunne lage 125.000 på ett år og deretter gjennom sammensetning i fem år, 48.828.15.000 Hvis dette var sant, ville ikke skaperen handle hans eller hennes måte å bli bi lionaire. Andre tilbud er imidlertid vanskeligere å dekode, men en vanlig måte å unngå svindel på er å søke etter systemer som tilbyr en gratis prøveversjon. På den måten kan du teste systemet selv. Ikke blindt stol på virksomheten skryter om. Det er også en god ide å kontakte andre som har brukt systemet, for å se om de kan bekrefte sin pålitelighet og lønnsomhet. Konklusjon Å utvikle et effektivt handelssystem er på ingen måte en enkel oppgave. Det krever en solid forståelse av de mange tilgjengelige parametrene, evnen til å lage realistiske antagelser og tid og dedikasjon til å utvikle systemet. Men hvis det utvikles og distribueres på riktig måte, kan et handelssystem gi mange fordeler. Det kan øke effektiviteten, frigjøre tiden og, viktigst, øke fortjenesten. Opprettingssystemer Design ditt system - Del 1.Den foregående delen av denne opplæringen så på elementene som utgjør et handelssystem og diskuterte fordelene og ulempene med å bruke et slikt system i en live tr adingmiljø I denne delen bygger vi videre på den kunnskapen ved å undersøke hvilke markeder som er spesielt velegnet til systemhandel. Vi vil da ta en mer grundig titt på de ulike sjangrene av handelssystemer. Rangering i ulike markeder. Egenkapitalmarkeder Egenkapitalen markedet er trolig det vanligste markedet for handel, særlig blant nybegynnere. I denne arena dominerer store spillere som Warren Buffett og Merrill Lynch, og tradisjonelle verdier og vekstinvesteringsstrategier er langt de vanligste. Mange institusjoner har imidlertid investert betydelig i design, utvikling og implementering av handelssystemer Individuelle investorer er med i denne trenden, men sakte. Her er noen viktige faktorer å huske på når du bruker handelssystemer i aksjemarkedene. Det store antallet aksjer som er tilgjengelig, tillater handelsmenn å teste systemer på mange forskjellige typer aksjer - alt fra ekstremt volatile over-the-counter OTC-aksjer til ikke-flyktige blå sjetonger. Effektiviteten av handelssystemer kan begrenses av den lave likviditeten til enkelte aksjer, spesielt OTC og rosa arks utstedelser kan øke til fortjeneste generert av vellykkede bransjer, og kan øke tapene OTC og rosa ark aksjer ofte pådrar ytterligere provisjonsavgifter. De viktigste handelssystemene som brukes er de som ser etter verdi - det vil si systemer som bruker forskjellige parametere for å avgjøre om en sikkerhet er undervurdert i forhold til tidligere prestasjoner, sine jevnaldrende eller markedet generelt. Forex Exchange Markets Valutamarkedet eller forex er det største og mest flytende marked i verden Verdens regjeringer, banker og andre store institusjoner handler trillioner dollar på valutamarkedet hver dag De fleste institusjonelle handelsmenn på forexen stole på handelssystemer Det samme gjelder for enkeltpersoner på forexen, men noen handelsbaserte på økonomiske rapporter eller rentebetalinger. Her er noen viktige faktorer å huske på når du bruker handelssystemer i forexmarkedet. Likviditeten i På grunn av det store volumet gjør handelssystemene mer nøyaktige og effektive. Det er ingen provisjoner i dette markedet, bare sprer seg. Det er derfor mye lettere å foreta mange transaksjoner uten å øke kostnadsbesparende til mengden aksjer eller råvarer tilgjengelig, Antallet valutaer til handel er begrenset Men på grunn av tilgjengeligheten av eksotiske valutapar - det vil si valutaer fra mindre land - er volatilitetsintervallet ikke nødvendigvis begrenset. De viktigste handelssystemene som brukes i forex er de som følger trender en populært å si i markedet er trenden din venn eller systemer som kjøper eller selger på breakouts Dette skyldes at økonomiske indikatorer ofte forårsaker store prisbevegelser på en gang. Futures Equity, forex og råvaremarkeder tilbyr alle futures trading Dette er en populær kjøretøy for systemhandel på grunn av økt utnyttbar utnyttelse og økt likviditet og volatilitet. Disse faktorene kan imidlertid kutte begge veier de ca n enten forsterker gevinstene dine eller forsterk ditt tap Av denne grunn er bruken av futures vanligvis reservert for avanserte individuelle og institusjonelle systemhandlere. Dette skyldes at handelssystemer som er i stand til å kapitalisere på futures markedet krever mye større tilpasning, bruk mer avanserte indikatorer og ta mye lenger å utvikle Så det er best Det er opp til den enkelte investor å bestemme hvilket marked som passer best til systemhandel - hver har sine egne fordeler og ulemper. De fleste er mer kjent med aksjemarkedene, og denne kjennskapen gjør utviklingen av en handelssystem enklere Men forex er vanligvis ansett å være den overlegne plattformen for å drive handelssystemer - spesielt blant mer erfarne handelsfolk. Hvis en handelsmann bestemmer seg for å kapitalisere på økt løftestang og volatilitet, er futuresalternativet alltid åpent. Endelig ligger valget i hendene til systemutvikleren. Typer av Trading Systems. Trend-Following Systems Den vanligste metoden av systemhandel er trend-følgende system I sin mest grunnleggende form venter dette systemet bare en vesentlig prisbevegelse, kjøper eller selger i den retningen. Denne typen system banker på håp om at disse prisbevegelsene vil opprettholde trenden. Gjennomsnittlig Systemer Vanligvis brukt i teknisk analyse er et glidende gjennomsnitt en indikator som bare viser gjennomsnittsprisen på en aksje over en tidsperiode. Essensen av trender er avledet fra denne måling. Den vanligste måten å bestemme inngang og utgang er en crossover. Den logiske bak det er enkelt En ny trend er etablert når prisen faller over eller under sin historiske prisgods trend. Her er et diagram som viser både prisblå linjen og den 20-dagers MA-røde linjen i IBM. Breakout Systems. Det grunnleggende konseptet bak denne typen av systemet ligner på et flytende gjennomsnittssystem Ideen er at når en ny høy eller lav er etablert, er prisbevegelsen mest sannsynlig å fortsette i retning av brannen eakout En indikator som kan brukes til å bestemme breakouts er et enkelt Bollinger Band overlegg Bollinger Bands viser gjennomsnitt av høye og lave priser og breakouts oppstår når prisen møter kantene på bandene. Her er et diagram som plots pris blå linje og Bollinger Bands grå linjer av Microsoft. Ulemper med Trend-Følgende systemer. Ved å bestemme trender, er det alltid et empirisk element for å vurdere varigheten av den historiske trenden. For eksempel kan det bevegelige gjennomsnittet være de siste 20 dagene eller for de siste fem årene, så utvikleren må avgjøre hvilken som er best for systemet. Andre faktorer som skal fastslås er de gjennomsnittlige høyder og nedturer i breakout-systemer. Lagring av natur - Flytte gjennomsnitt og breakout-systemer vil alltid ligge. Med andre ord kan de aldri treffer eksakt toppen eller bunnen av en trend Dette resulterer uunngåelig i en fortabelse av potensiell fortjeneste, noe som noen ganger kan være signifikant. Alternativ effekt - Blant markedet krefter som er skadelige for suksess av trend-følgende systemer, er dette en av de vanligste. Whipsaw-effekten oppstår når det bevegelige gjennomsnittet genererer et falsk signal - det vil si når gjennomsnittet faller like i rekkevidde, så reverserer det plutselig retning. Dette kan føre til store tap, med mindre effektive stoppstopp og risikostyringsteknikker er ansatt. Slike markeder - Trend-etter-systemer er i sin natur i stand til kun å tjene penger på markeder som faktisk trender. Men markeder flytter også sidelengs innenfor et visst område i lengre tid. Ekstrem volatilitet kan forekomme - Noen ganger kan trend-følgende systemer oppleve ekstrem volatilitet, men næringsdrivende må holde seg til sitt system. Manglende evne til å gjøre det vil resultere i sikret feil. Countertrend Systems I utgangspunktet Målet med motgangssystemet er å kjøpe på lavest lavt og selge på høyeste høyde. Hovedforskjellen mellom dette og trend-etter-systemet er at co untertrend-systemet er ikke selvkorrigerende Med andre ord er det ikke satt tid for å gå ut av posisjoner, og dette resulterer i et ubegrenset ulemper potensielle Typer av motstrømsystemer Mange forskjellige typer systemer betraktes som motstrømsystemer Ideen her er å kjøpe når momentum i en retning begynner å falme Dette beregnes hyppigst ved hjelp av oscillatorer. For eksempel kan et signal genereres når stokastikk eller andre relative styrkeindikatorer faller under bestemte punkter. Det finnes andre typer motstridshandelssystemer, men alle deler det samme grunnleggende målet - til kjøpe lavt og selge høyt. Ulemper ved å motvirke følgende systemer. Ønsket beslutningsprosess er nødvendig. For eksempel er en av faktorene som systemutvikleren må bestemme seg for, hvilke punkter relativstyrkeindikatorene fades. Ekstremvolatilitet kan forekomme - Disse systemene kan også oppleve ekstrem volatilitet, og en manglende evne til å holde fast i systemet til tross for at volatiliteten vil resultere i sikret feil. Ubegrenset ulemper - Som tidligere nevnt er det ubegrenset ulemper, fordi systemet ikke er selvkorrigerende. Det er ikke satt tid til å gå ut av posisjoner. Konklusjon De viktigste markedene som handelssystemer egner seg for, er aksje-, valuta - og futuresmarkeder Hvert av disse markedene har sine fordeler og ulemper De to viktigste sjangrene av handelssystemer er trend-følgende og motvirkningssystemene Til tross for forskjellene, krever begge typer systemer i utviklingsstadiene deres empiriske beslutningsprosesser fra utviklerens side Også , disse systemene er utsatt for ekstreme volatilitet, og dette kan kreve noe utholdenhet - det er viktig at systemhandleren holder fast med systemet hans i disse tider. I følgende avtale vil vi se nærmere på hvordan man skal utforme et handelssystem og diskutere noe av programvaren som systemhandlere bruker for å gjøre livet enklere. Oppsummering Mønstre Integrasjonsmønstre i praksis Case Study Bon d Trading System. Av Jonathan Simon. Det er lett å avstå fra en stor samling av mønstre eller et mønster språk. Mønstre er abstraksjonen av en ide i en gjenbrukbar form Ofte er den svært generiske naturen til mønstre som gjør dem så nyttige, også vanskelig å forstå Noen ganger er det beste å forstå forståelsesmønstre, det er et ekte verdenseksempel. Ikke et opptatt scenario om hva som kan skje, men hva som faktisk skjer og hva som vil skje. Dette kapittelet gjelder mønstre for å løse problemer ved hjelp av en oppdagelsesprosess. Systemet vi skal diskutere er en obligasjonshandel system som jeg jobbet med i to år fra innledende design gjennom produksjon Vi vil undersøke scenarier og problemer som ble oppstått og hvordan de skal løses med mønstre. Dette innebærer beslutningsprosessen for å velge et mønster, samt hvordan man kan kombinere og justere mønstre som passer Systemets behov Og dette er alt gjort, med tanke på de kreftene som oppstår i virkelige systemer, inkludert forretningsbehov, klientbeslutninger, ar chitectural og tekniske krav, samt eldre systemintegrasjon Formålet med denne tilnærmingen er å gi en klarere forståelse av mønstrene selv gjennom praktisk anvendelse. Bygg et system. En stor Wall Street investeringsbank utarbeider å bygge et obligasjonsprissystem i en innsats for å strømlinjeforme arbeidsflyten i deres obligasjonshandelsskrivebord For tiden må obligasjonshandlere sende priser for et stort antall obligasjoner til flere forskjellige handelssteder, hver med sitt eget brukergrensesnitt. Målet for systemet er å minimere minutiae av prising alle deres obligasjoner kombinert med avansert analytisk funksjonalitet som er spesifikk for obligasjonsmarkedet i et enkelt innkapslet brukergrensesnitt Dette betyr integrasjon og kommunikasjon med flere komponenter over ulike kommunikasjonsprotokoller Systemets høye nivå strømmer slik ut. Først kommer markedsdata inn i systemet Market Data er data angående pris og andre egenskaper av obligasjonen som representerer hva folk er willin g for å kjøpe og selge obligasjonen for på det frie markedet Markedsdataene sendes umiddelbart til analysemotoren som endrer data Analytics refererer til matematiske funksjoner for økonomiske applikasjoner som endrer prisene og andre attributter av obligasjoner Dette er generiske funksjoner som bruker inngang variabler for å skreddersy resultatene av funksjonen til en bestemt binding Klientapplikasjonen som vil kjøre på hver traderbordsdisk, konfigurerer analysemotoren på en per handler basis, kontrollerer spesifikkene for analysen for hvert bånd som foretaket prissetter. Når analysene er Påført markedsdataene, blir de modifiserte dataene sendt ut til ulike handelssteder hvor handelsmenn fra andre bedrifter kan kjøpe eller selge obligasjonene. Arkitektur med mønstre. Med denne oversikten over systemets arbeidsflyt kan vi nærme noen av de arkitektoniske problemene vi møter under designprosessen La oss ta en titt på det vi kjenner til i dag Traders trenger et veldig responsivt program på begge Windows NT en d Solaris-arbeidsstasjoner Derfor bestemte vi oss for å implementere klientprogrammet som en Java tykk klient på grunn av plattformens uavhengighet og dets evne til å reagere raskt på brukerinngang og markedsdata. På server siden arver vi arv C-komponenter som vårt system vil benytte Markeddatakomponentene kommuniserer med TIBCO Informasjonsbuss TIB-meldingsinfrastruktur. Vi arver følgende komponenter. Markedsdataprismateserver Publiserer innkommende markedsdata til TIB. Analytics Engine Utfører analyser på innkommende markedsdata og sender de modifiserte markedsdataene til TIB. Contribution Server Utfører all kommunikasjon med handelssteder. Handelssteder er tredjepartskomponenter som ikke kontrolleres av banken. Statistikk for legitimitetsdata. Systemet for legitimitetsbidrag. Vi må bestemme hvordan de separate delsystemene Java tykk klient, markedsdata og bidrag er Kommer til å kommunisere Vi kunne ha den tykke klienten kommunisere direkte med le gacy-servere, men det ville kreve for mye forretningslogikk på klienten I stedet vil vi bygge et par Java-gateways for å kommunisere med de eldre serverne. Prissettingsgatewayen for markedsdata En bidragsportway for å sende priser til handelssteder Dette vil oppnå god innkapsling av forretningslogikken knyttet til disse områdene De nåværende komponentene i systemet er vist nedenfor Tilkoblingene som er markert, indikerer at vi fortsatt er usikre på hvordan noen av komponentene vil kommunisere. Systemet og dets komponenter. Det første kommunikasjonsspørsmålet er hvordan du integrerer Java-tykk klient og de to Java-serverkomponentene for å utveksle data La oss se på de fire integreringstypene som er foreslått i denne boken. Filoverføring Delt database Fjernprosedyre Invokasjon og meldinger Vi kan utelukke delt database umiddelbart fordi vi ønsket å lage et lag av abstraksjon mellom klienten og databasen og ikke ønsker å ha database tilgangskode i klienten File Transfe r kan også utelukkes siden minimal ventetid er nødvendig for å sikre at nåværende priser sendes ut til handelsstedene. Dette gir oss mulighet til å velge mellom Remote Procedure Invocation eller Messaging. Java-plattformen gir innebygd støtte for både Remote Procedure Invocation og Messaging Integrering av RPC-stil kan oppnås ved hjelp av Remote Method Invocation RMI, CORBA eller Enterprise Java-bønner. EJB Java Messaging Service JMS er den felles API for meldingsstil-integrering. Så begge integreringsstilene er enkle å implementere i Java. Så som vil fungere bedre for dette prosjektet, Remote Procedure Invocation eller Messaging There er bare én forekomst av prisgatewayen og en forekomst av bidragsporten i systemet, men vanligvis mange tyske klienter kobler samtidig til disse tjenestene en for hver obligasjonshandler som skjer for å være logget inn På et bestemt tidspunkt Videre ønsker banken at dette skal være et generisk prissystem som kan benyttes i andre applikasjoner foruten et ukjent antall Think Clients, kan det være et ukjent antall andre programmer som bruker prisdataene som kommer ut av Gateways. En tykk klient eller et annet program som bruker prisdataene, kan ganske enkelt bruke RPC til å ringe til Gateways for å få prisdata og påberope behandling Men prisdata vil stadig bli publisert, og enkelte klienter er bare interessert i visse data, slik at det kan være vanskelig å få relevante data til de riktige kundene på en riktig måte. Klienten kan avstemme Gateways, men det vil skape mye overhead Det ville være bedre for Gateways å gjøre dataene tilgjengelige for kundene så snart det er tilgjengelig. Det vil imidlertid kreve at hver Gateway holder styr på hvilke klienter som for øyeblikket er aktive, og som vil ha hvilke spesifikke data da, når et nytt stykke data blir tilgjengelig som vil skje mange ganger i sekundet, må Gateway gjøre en RPC til hver interessert klient for å sende dataene til Clie nt Ideelt sett bør alle kundene bli varslet samtidig, så hver RPC må gjøres i sin egen samtidige tråd. Dette kan fungere, men blir svært komplisert veldig raskt. Melding gjør det mye enklere for dette problemet Med Meldinger kan vi definere separate kanaler for de forskjellige typene av prisdata Så når en Gateway får et nytt dataopptak, vil det legge til en melding som inneholder dataene til Publiser-Abonner-kanalen for datatypen. I mellomtiden vil alle klienter som er interessert i en bestemt type data, høre på kanalen for den typen På denne måten kan Gateways enkelt sende ut nye data til hvem som er interessert, uten å måtte vite hvor mange lytterapplikasjoner det er eller hva de er. Klientene må fortsatt kunne påberope seg også i Gateways Siden det er bare to Gateways, og klienten kan sannsynligvis blokkere mens metoden er påkalt synkront. Disse klient-til-gateway-invokasjonene kan ganske enkelt implementeres ved hjelp av RPC. Siden vi imidlertid bruker allerede meldinger for Gateway-to-Client-kommunikasjon, meldinger er nok like god en måte å implementere klient-til-gateway-kommunikasjon også. Derfor vil all kommunikasjon mellom Gateways og klientene bli fullført gjennom meldinger. Fordi alle de Komponenter er skrevet i Java, JMS presenterer et enkelt valg for som meldingssystem. Dette skaper effektivt en meldingsbuss eller en arkitektur som gjør det mulig for fremtidige systemer å integrere med dagens system med liten eller ingen endringer i meldingsinfrastrukturen. Vei, forretningsfunksjonaliteten til applikasjonen kan enkelt brukes av et annet program som banken utvikler. Java-komponenter Kommuniserer med JMS. JMS er bare en spesifikasjon, og vi må bestemme et JMS-kompatibelt meldingssystem. Vi bestemte oss for å bruke IBM MQSeries JMS fordi Banken er en IBM-butikk, som bruker WebSphere-applikasjonsservere og mange andre IBM-produkter. Som et resultat vil vi bruke MQSeries siden vi allerede har ave en støtteinfrastruktur på plass og et nettstedslisens for produktet. Det neste spørsmålet er hvordan du kobler MQSeries messaging system med den frittstående C-bidragsserveren og TIBCO-baserte Market Data og Analytics Engine-servere. Vi trenger en måte for MQSeries-forbrukerne å har tilgang til TIB-meldingene Men hvordan kan vi kanskje bruke Message Translator-mønsteret til å oversette TIB-meldinger til MQSeries-meldinger Selv om C-klienten for MQSeries fungerer som en Meldingsoversetter ved hjelp av den, ville det ofre JMS-serverens uavhengighet og selv om TIBCO har en Java API, kundearkitekten og lederen har avvist det. Følgelig må Message Translator-tilnærmingen bli forlatt. Broen fra TIB-serveren til MQSeries-serveren krever kommunikasjon mellom C og Java. Vi kunne bruke CORBA, men da hva med meldingene A nærmere se på Message Translator-mønsteret viser at den er relatert til Kanaladapteren ved bruk av kommunikasjonsprotokoller. Hjertet til en kanal Adapter er å koble ikke-meldingssystemer til meldingssystemer Et par kanaladaptere som kobler til to meldingssystemer, er en Messaging Bridge. Formålet med en Messaging Bridge er å overføre meldinger fra ett meldingssystem til et annet. Dette er akkurat det vi gjør med Den ekstra kompleksiteten til den språket Java til C-kommunikasjon Vi kan implementere krysspråket Messaging Bridge ved hjelp av en kombinasjon av Channel Adapter s og CORBA. Vi skal bygge to lettvektige kanaladapter-servere, en i C som administrerer kommunikasjon med TIB og en i Java administrere kommunikasjon med JMS Disse to kanaladapteren som er Message Endpoint s, kommuniserer med hverandre via CORBA. Som vårt valg for MQSeries, vil vi bruke CORBA i stedet for JNI siden det er en standard for bedriften. Messaging Bridge implementerer den effektivt simulerte meldingen oversettelse mellom tilsynelatende inkompatible meldingssystemer og forskjellige språk. Bruk oversetter ved hjelp av Channel Adapte r. Det neste diagrammet viser dagens systemdesign, inkludert Gateways og andre komponenter. Dette er et godt eksempel på mønsterapplikasjon. Vi kombinerte to kanaladapter s med en ikke-meldingsprotokoll for å implementere Message Translator-mønsteret, effektivt ved å bruke ett mønster for å implementere en annen mønster I tillegg har vi endret kanaladapterens kontekst for å koble to meldingssystemer med en ikke-meldende kryssoversettelsesprotokoll i stedet for å koble et meldingssystem til et ikke-meldingssystem. Det nåværende systemet med kanaladapterene. Strukturkanaler. En nøkkel å arbeide med mønstre er ikke bare å vite når du skal bruke hvilket mønster, men også hvordan du mest effektivt skal bruke det. Hver mønsterimplementering må ta hensyn til spesifikasjoner av teknologiplattformen, samt andre designkriterier. Dette avsnittet gjelder samme oppdagingsprosess for å finne Den mest effektive bruken av Publiser-Abonner-kanalen i sammenheng med markedsdata-serveren som kommuniserer med t han analytics engine. Real tid markedsdata stammer fra markedsdata feed, en C-server som sender markedsdata på TIB Markedsdata feed bruker en separat Publiser-Abonner Channel for hvert obligasjon det publiserer priser for Dette kan virke litt ekstrem siden hvert nytt bånd trenger sin egen nye kanal. Men dette er ikke så alvorlig siden du ikke trenger å skape kanaler i TIBCO. I stedet er kanaler referert av et hierarkisk sett med emneavn som kalles fag. TIBCO-serveren filtrerer deretter en enkelt meldingstrøm etter emne , sender hvert unikt emne til en enkelt virtuell kanal. Resultatet av dette er en veldig lett meldingskanal. Vi kunne lage et system som publiserer på noen få kanaler, og abonnenter kan bare lytte til priser de er interessert i. Dette ville kreve at abonnenter bruker en Meldingsfilter eller Selektiv forbruker for å filtrere hele datastrømmen for interessante obligasjonspriser, og avgjøre om hver melding skal behandles etter hvert som den mottas. e markedsdata publiseres på obligasjons-dedikerte kanaler, abonnenter kan registrere for oppdateringer på en serie obligasjoner Dette gjør det mulig for abonnenter å filtrere ved å selektivt abonnere på kanaler og bare motta oppdateringer av interesse i stedet for å bestemme etter at meldingen er mottatt. Det er viktig å Vær oppmerksom på at bruk av flere kanaler for å unngå filtrering er en uavhengig bruk av meldings kanaler. I sammenheng med TIBCO-teknologien bestemmer vi imidlertid om å implementere eller eie filtre eller utnytte kanalfiltreringen som er innebygd i TIBCO - i stedet for å bruke så mange kanaler. Den neste komponenten vi trenger å designe er analysemotoren, en annen C TIB-server som vil modifisere markedsdataene og rebroadcast den til TIB. Selv om den ikke er innenfor rammen av vår Java JMS-utvikling, jobber vi nært med C team for å designe det siden vi er analytikkmotorens primære kunde Problemet ved hånden er å finne kanalstrukturen som mest effektivt rebroadcas t de nylig modifiserte markedsdataene. Siden vi allerede har en dedikert Message Channel per obligasjon arvet fra markedsdataprisen, ville det være logisk å endre markedsdataene og rebroadcast de modifiserte markedsdataene på obligasjons dedikert Message Channel, men dette vil ikke arbeid siden analysen som endrer obligasjonsprisene, er næringsdrivende spesifikk Hvis vi rebroadcast de endrede dataene på obligasjonsmeldingskanalen, vil vi ødelegge dataintegriteten ved å erstatte generiske markedsdata med leverandørens spesifikke data. På den annen side kunne vi ha en annen meldingstype for Trader-spesifikke markedsdata som vi publiserer på samme kanal, slik at abonnenter kan bestemme hvilken melding de er interessert i for å unngå å ødelegge dataintegriteten. Men da må kundene implementere egne filtre for å skille ut meldinger til andre handelsfolk. I tillegg vil det bli en betydelig økning i meldinger mottatt av abonnenter, og legger en unødvendig byrde på dem. Det er to alternativer. En kanal per handler Hver handler har en bestemt kanal for de modifiserte markedsdataene På denne måten forblir de opprinnelige markedsdataene intakte og hver handelsansvarlig kan lytte til sin spesifikke forhandler Message Channel for modifiserte prisoppdateringer. En kanal per handler per obligasjon Lag en meldingskanal per-handler per bånd utelukkende for de modifiserte markedsdataene for det obligasjonen For eksempel vil markedsdataene for obligasjon ABC bli publisert på kanalen Bond ABC mens de modifiserte markedsdataene for handelsmann A vil bli publisert på Message Channel Trader A, Bond ABC , endrede markedsdata for handelsmann B på Trader B, Bond ABC og så videre. En kanal per handler. En kanal per obligasjon per handler. Det er fordeler og ulemper for hver tilnærming. Mer meldingskanal I verste fall vil antall Message Channel være antall obligasjoner totalt multiplisert med antall handelsfolk. Vi kan sette overgrense på antall kanaler som vil bli opprettet siden Vi vet at det bare er rundt 20 handelsmenn, og de pris aldri mer enn et par hundre obligasjoner. Dette setter den øvre grensen under 10.000-serien, noe som ikke er så outlandish sammenlignet med nesten 100.000 Message Channel, som markedsdataprisen bruker, også. siden vi bruker TIB og Message Channel, er ganske rimelige, er antall Message Channel s ikke et alvorlig problem. På den annen side kan det store antallet Message Channel s være et problem fra et ledelsesperspektiv Hver gang et bånd legges til en kanal for hver forhandler må opprettholdes Dette kan være alvorlig i et veldig dynamisk system Vårt system er imidlertid i hovedsak statisk. Det har også en infrastruktur for automatisk styring av Message Channel s. Dette kombineres med den arvede arkitekturen til en eldre komponent ved hjelp av en lignende tilnærming minimerer ulemper Dette er ikke å si at vi burde gjøre et unødvendigt stort antall Message Channel s. Vi kan heller ikke implementere en arkitektonisk tilnærming som bruker en stort antall meldingskanaler s når det er en grunn. Og det er en grunn i dette tilfellet som kommer ned til logikkstedet. Hvis vi implementerer den per handlende tilnærming, trenger Analytics Engine logikk for å gruppere inngangs - og utgangskanaler. Dette skyldes at Inndatakanaler fra Analytics-motoren er per obligasjon, og utgående meldingskanal s vil være per handler, og krever at Analytics-motoren skal rute all analyseinngang fra flere obligasjoner til en bestemt handelsmann til en forhandlerspesifikk utdata Meldingskanal Dette aktiverer effektivt analysemotoren inn i en innholdsbasert ruter for å implementere tilpasset rutingslogikk for applikasjonen. Etter å ha stilt Message Bus-strukturen, er Analytics Engine en generisk server som kan brukes av flere andre systemer i det. Så vi vil ikke skyte den med systemspesifikk funksjonalitet På den annen side virker per-bond-tilnærmingen siden ideen om en næringsdrivende som eier analyseproduksjonen av obligasjonsprisene, er en akseptert praksis. Per-bond et pproach holder meldingskanalseparasjonen av markedsdatainngangen intakt, mens du legger til flere flere Message Channel s Før vi når kunden, vil vi ha en innholdsbasert ruter for å kombinere disse flere kanalene til et håndterbart antall kanaler. Vi vil ikke ha klienten applikasjon som kjører på traderens skrivebord for å høre på tusenvis eller titusenvis av Message Channel s Nå blir spørsmålet hvor du skal sette innholdsbasert ruteren. Vi kan ganske enkelt ha C TIB Channel Adapter videresende alle meldingene til prissettingsgatewayen på en enkelt meldingskanal Dette er dårlig av to grunner at vi ville dele opp virksomhetslogikken mellom C og Java, og vi ville miste fordelene ved den separate Meldingen Channel s på TIB-siden, slik at vi ikke kunne filtrere senere i datastrømmen Når vi ser på våre Java-komponenter, kan vi enten plassere den i prisgatewayen eller opprette en mellomkomponent mellom prissettingsgatewayen og klienten. I teorien, hvis vi vedvarende bindingen - basert separasjon av Message Channel s hele veien til klienten, vil Pricing Gateway rebroadcast prisinformasjon med samme kanalstruktur som Pricing Gateway og Analytics Engine Dette betyr en duplisering av alle obligasjons dedikert TIB-kanaler i JMS Selv om vi opprett en mellomkomponent mellom prissettingsgatewayen og klienten, vil prissettingsgatewayen fortsatt må duplisere alle kanalene i JMS. På den annen side tillater implementering av logikk direkte i Pricing Gateway oss å unngå duplisering av det store antallet kanaler i JMS slik at vi kan lage et mye mindre antall kanaler i rekkefølge av en per forhandler. Prissettingsgatewayen registrerer seg selv gjennom C TIB-kanaladapteren som forbruker for hvert obligasjonslån til hver forhandler i systemet. Da vil Pricing Gateway kun videresende hver enkelt klient meldingene relatert til den aktuelle forhandleren På denne måten bruker vi bare et lite antall Message Channel s på JMS-enden, mens du maksimerer benet evnen til separasjonen på TIB-slutten. Den komplette markedsdataflowen til klienten. Diskusjonen for meldingskanalens layout er et godt eksempel på hvordan integrering av mønstre er viktig. Målet her var å finne ut hvordan man effektivt bruker Message Channel s. bruk et mønster er ikke nok Du må finne ut hvordan du best kan implementere det og innlemme i systemet for å løse problemene ved hånden. I tillegg viser dette eksemplet forretningskrefter i handling Hvis vi kunne implementere forretningslogikk i noen av våre komponenter, kunne vi have gone with the per trader approach and implemented an overall more simple approach with many less channels. Selecting a Message Channel. Now that we know the mechanics of the communication between the Java JMS components and the C TIBCO components, and we have seen some Message Channel structuring, we need to decide which type of JMS Message Channel s the Java components should use to communicate Before we can choose between the different Message Channels av ailable in JMS, let s look at the high level message flow of the system We have two gateways Pricing and Contribution communicating with the client Market data flows to the client from the Pricing Gateway which sends it out to the Contribution Gateway The client application sends message to the Pricing Gateway to alter the analytics being applied to each bond The Contribution Gateway also sends messages to the Client application relaying the status of the price updates to the different trading venues. The system message flow. The JMS specification describes two Message Channel types, Point-to-Point Channel JMS Queue and Publish-Subscribe Channel JMS Topic Recall that the case for using publish-subscribe is to enable all interested consumers to receive a message while the case for using point-to-point is to ensure that only one eligible consumer receives a particular message. Many systems would simply broadcast messages to all client applications, leaving each individual client application to decide for itself whether or not to process a particular message This will not work for our application since there are a large number of market data messages being sent to each client application If we broadcast market data updates to uninterested trader, we will be unnecessarily wasting client processor cycles deciding whether or not to process a market data update. Point-to-Point Channel s initially sound like a good choice since the clients are sending messages to unique servers and visa versa But it was a business requirement that traders may be logged in to multiple machines at the same time If we have a trader logged in at two workstations simultaneously and a point-to-point price update is sent, only one of the two client applications will get the message This is because only one consumer on a Point-to-Point Channel can receive a particular message Notice that only the first of each group of a trader s client applications receives the message. Point-to-Point Messaging for Pri ce Updates. We could solve this using the Recipient List pattern, which publishes messages to a list of intended recipients, guaranteeing that only clients in the recipient list will receive messages Using this pattern, the system could create recipient lists with all client application instances related to each trader Sending a message related to a particular trader would in turn send the message to each application in the recipient list This guarantees all client application instances related to a particular trader would receive the message The downside of this approach is that it requires quite a bit of implementation logic to manage the recipients and dispatch messages. Recipient List for Price Updates. Even though point-to-point could be made to work, let s see if there is a better way Using Publish-Subscribe Channel s, the system could broadcast messages on trader specific channels rather than client application specific channels This way, all client applications processing messages for a single trader would receive and process the message. Publish-Subscribe Messaging for Price Updates. The downside of using Publish-Subscribe Channel s is that unique message processing is not guaranteed with the server components It would be possible for multiple instances of a server component to be instantiated and each instance process the same message, possibly sending out invalid prices. Recalling the system message flow, only a single communication direction is satisfactory with each Message Channel Server-to-client communication with publish-subscribe is satisfactory while client-to-server communication is not and client-server communication with point-to-point is satisfactory while server-client is not Since there is no need to use the same Message Channel in both directions, we can use each Message Channel only one direction Client-to-server communication will be implemented with point-to-point while server-to-client communication will be implemented with publish-subscribe Using this combination of Message Channel s, the system benefits from direct communication with the server components using point-to-point messaging and the multicast nature of publish-subscribe without either of the drawbacks. Message flow with Channel Types. Problem Solving With Patterns. Patterns are tools and collections of patterns are toolboxes They help solve problems Some think that patterns are only useful during design Following the toolbox analogy, this is like saying that tools are only useful when you build a house, not when you fix it The fact is that patterns are a useful tool throughout a project when applied well In the following sections we will use the same pattern exploration process we used in the previous section to solve problems in our now working system. Flashing Market Data Updates. Traders want table cells to flash when new market data is received for a bond, clearly indicating changes The Java client receives messages with new data which triggers a client data ca che update and eventually flashing in the table The problem is that updates come quite frequently The GUI thread stack is becoming overloaded and eventually freezing the client since it can t respond to user interaction We will assume that the flashing is optimized and concentrate on the data flow of messages through the updating process An examination of performance data shows the client application is receiving several updates a second some updates occurred less than a millisecond apart Two patterns that seem like they could help slow down the message flow are Aggregator and Message Filter. A first thought is to implement a Message Filter to control the speed of the message flow by throwing out updates received a small amount of time after the reference message As an example, lets say that we are going to ignore messages within 5 milliseconds of each other The Message Filter could cache the time of the last acceptable message and throw out anything received within the next 5 milliseco nds While other applications may not be able to withstand data loss to such an extent, this is perfectly acceptable in our system due to the frequency of price updates. Time based Message Filter. The problem with this approach is that not all data fields are updated at the same time Each bond has approximately 50 data fields displayed to the user including price We realize that not every field is updated in every message If the system ignores consecutive messages, it may very well be throwing out important data. The other pattern of interest is the Aggregator The Aggregator is used to manage the reconciliation of multiple, related messages into a single message, potentially reducing the message flow The Aggregator could keep a copy of the bond data from the first aggregated message, then update only new or changed fields successive messages Eventually the aggregated bond data will be passed in a message to the client For now, lets assume that the Aggregator will send a message every 5 mil liseconds like the Message Filter Later, we ll explore another alternative. Aggregator with partial successive updates. The Aggregator like any other pattern, is not a silver bullet it has its pluses and minuses that need to be explored One potential minus is that implementing an Aggregator would reduce the message traffic by a great amount in our case only if many messages are coming in within a relatively short time regarding the same bond On the other hand, we would accomplish nothing if the Java client only receives updates for one field across all of the traders bonds For example, if we receive 1000 messages in a specified timeframe with 4 bonds of interest, we would reduce the message flow from 1000 to 4 messages over that timeframe Alternatively, if we receive 1000 messages in the same timeframe with 750 bonds of interest, we will have reduced the message flow from 1000 to 750 messages relatively little gain for the amount of effort A quick analysis of the message updates proves t hat the Java client receives many messages updating fields of the same bond, and therefore related messages So, Aggregator is in fact a good decision. What s left is to determine how the Aggregator will know when to send a message it has been aggregating The pattern describes a few algorithms for the Aggregator to know when to send the message These include algorithms to cause the aggregator to send out its contents after a certain amount of time has elapsed, after all required fields in a data set have been completed, and others The problem with all of these approaches is that the aggregator is controlling the message flow, not the client And the client is the major bottleneck in this case, not the message flow. This is because the Aggregator is assuming the consumers of its purged messages the client application in this case are Event-Driven Consumer s, or consumers that rely on events from an external source We need to turn the client into a Polling Consumer or a consumer that continu ously checks for messages, so the client application can control the message flow We can do this by creating a background thread that continuously cycles through the set of bonds and updates and flashes any changes that have occurred since the last iteration This way, the client controls when messages are received and as a result, guarantees that it will never become overloaded with messages during high update periods We can easily implement this by sending a Command Message to the Aggregator initiating an update The Aggregator will respond with a Document Message containing the set of updated fields that the client will process. The choice of Aggregator over Message Filter is clearly a decision based solely on the business requirements of our system Each could help us solve our performance problems, but using the Message Filter would solve the problem at cost of the system data integrity. Major Production Crash. With the performance of the flashing fixed, we are now in production One day the entire system goes down MQSeries crashes, bringing several components down with it We struggle with the problem for a while and finally trace it back to the MQSeries dead letter queue an implementation of the Dead Letter Channel The queue grows so large that it brings down the entire server After exploring the messages in the dead letter queue we find they are all expired market data messages This is caused by slow consumers, or consumers that do not process messages fast enough While messages are waiting to be processed, they time out see the Message Expiration pattern and are sent to the Dead Letter Channel The excessive number of expired market data messages in the dead letter queue is a clear indication that the message flow is too great messages expire before the target application can consume them We need to fix the message flow and we turn to patterns for help slowing down the message flow. A reasonable first step is to explore solving this problem with the Aggregator as we recently used this pattern to solve the similar flashing market data control rate problem The system design relies on the client application to immediately forward market data update messages to the trading venues This means the system cannot wait to collect messages and aggregate them So the Aggregator must be abandoned. There are two other patterns that deal with the problem of consuming messages concurrently Competing Consumers and Message Dispatcher Starting with Competing Consumers the benefit of this pattern is the parallel processing of incoming messages This is accomplished using several consumers on the same channel Only one consumer processes each incoming message leaving the others to process successive messages Competing Consumers however, will not work for us since we are using Publish-Subscribe Channel s in server-to-client communication Competing Consumers on a Publish-Subscribe Channel channel means that all consumers process the same incoming message This results in mo re work without any gain and completely misses the goal of the pattern This approach also has to be abandoned. On the other hand, the Message Dispatcher describes an approach whereby you add several consumers to a pool Each consumer can run its own execution thread One main Message Consumer listens to the Channel and delegates the message on to an unoccupied Message Consumer in the pool and immediately returns to listening on the Message Channel This achieves the parallel processing benefit of Competing Consumers but works on Publish-Subscribe Channel s. The Message Dispatcher in context. Implementing this in our system is simple We create a single JMSListener called the Dispatcher, which contains a collection of other JMSListener s called Performers When the onMessage method of the Dispatcher is called, it in turn picks a Performer out of the collection to actually process the message The result of which is a Message Listener the Dispatcher that always returns immediately This guarantee s a steady flow of message processing regardless of the message flow rate Additionally, this works equally well on a Publish-Subscribe Channel s as it does on a Point-to-Point Channel s With this infrastructure, messages can be received by the client application at almost any rate If the client application is still slow to process the message after receiving them, the client application can deal with the delayed processing and potentially outdated market data rather than the messages expiring in the JMS Message Channel. The crash discussed in this section and the fix using the Message Dispatcher is an excellent example of the limits of applying patterns We encountered a performance problem based on a design flaw not allowing the client to process messages in parallel This greatly improved the problem, but did not completely fix it This is because the real problem was the client becoming a bottleneck This couldn t be fixed with a thousand patterns We later addressed this problem by refac toring the message flow architecture to route messages directly from the Pricing Gateway to the Contribution Gateway So patterns can help design and maintain a system, but don t necessarily make up for poor upfront design. Throughout this chapter, we have applied patterns to several different aspects of a bond trading system including solving initial upfront design problems and fixing a nearly job threatening production crash with patterns We also saw these patterns as they already exist in third party product, legacy components, and our JMS and TIBCO messaging systems Most importantly, these are real problems with the same types of architectural, technical and business problems we experience as we design and maintain our own systems Hopefully reading about applying patterns to this system helps give you a better understanding of the patterns as well as how to apply them to your own systems. Want to keep up-to-date Follow My Blog. Want to read more in depth Check out My Articles. Want to s ee me live See where I am speaking next. Find the full description of this pattern in Enterprise Integration Patterns Gregor Hohpe and Bobby Woolf ISBN 0321200683 650 pages Addison-Wesley. From Enterprise Integration to Enterprise Transformation. My new book describes how architects can play a critical role in IT transformation by applying their technical, communication, and organizational skills with 37 episodes from large-scale enterprise IT. Parts of this page are made available under the Creative Commons Attribution license You can reuse the pattern icon, the pattern name, the problem and solution statements in bold , and the sketch under this license Other portions of the text, such as text chapters or the full pattern text, are protected by copyright. Messaging Patterns Integration Patterns in Practice Case Study Bond Trading System.
Comments
Post a Comment