Saturday 18 November 2017

Enterprise Trading System


LETS er revitaliserende lokalsamfunn over hele Storbritannia. Som grdsrotsinitiativer er de åpne for alle - folk i alle aldre, ferdigheter og evner lokale klubber og foreninger frivillige grupper, veldedige organisasjoner, samfunnsinitiativer boliger, små bedrifter og lokale tjenester - hjelper alle å gi og ta, koble til nye ressurser, og finn en ekte communityidentitet. LETS tilbyr like muligheter for alle - enten ansatt eller arbeidsledig, økonomisk trygg eller med lav inntekt, svart eller hvitt, i stand til eller deaktivert. LETS bruker et system med fellesskapskreditter, slik at Direkte utvekslinger behøver ikke å bli gjort Folk tjener LETS-kreditter ved å tilby en tjeneste, og kan deretter bruke kreditter på hva som tilbys av andre på ordningen for eksempel barnepass, transport, mat, reparasjoner på hjemmet eller leie av verktøy og utstyr. Forskning i midten av nittitallet viste at minst 40 000 mennesker var involvert i noen 450 LETS-ordninger, de fleste av dem ble etablert i henhold til den demokratiske og samarbeide - operativ LETS-modell utviklet i Storbritannia av LETSLINK UK, som begynte å jobbe i 1991 Vår nåværende kontaktliste på over 300 indikerer at de har vært litt krympe - hvis vi sier at medlemskapet er gjennomsnittlig 100 per skjema, betyr dette om lag 30.000 eller færre medlemmer i Storbritannia . Dette har imidlertid blitt ledsaget av en økning i relaterte tiltak, for eksempel Timebanks, Freecycle, Commercial Barter, Fairtrade-kampanjer og Fellesskapsnettverk av alle slag, som vitner for den fortsatte interessen for folk som får ting til å skje i sitt fellesskap. pågående forskningsprosjekt, lansert i september 2003, har som mål å etablere den nåværende tilstanden til LETS i Storbritannia og LETS-organisatørens behov. Vi søker nå store midler for å gjenopplive og støtte vår organisasjon slik at vi kan gi bedre ressurser til vår medlemmer, og vil rapportere fremgang på denne siden - se på dette rommet. Messaging Patterns Integration Patterns i Practice Case Study Bond 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 handlerbase, og 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 handelssteder. 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 blir stadig publisert, og enkelte klienter er bare interessert i bestemte data, slik at det kan være vanskelig å få relevante data til de riktige kundene på en riktig måte. Klienten kan kollidere 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 alltid 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 Men siden vi 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. Som følge derav 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 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 markedet data 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 henvises kanaler til et hierarkisk sett med emneavn som kalles emner. 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 meldingskanaler. 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. Per-bond-tilnærmingen bruker for eksempel mye 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 i en innholdsbasert ruter for å implementere tilpasset rutingslogikk for applikasjonen. Etter å ha meldt bussen 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 meldingskanaloppsett 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 har gått med den næringsdrivende tilnærmingen og implementert en overordnet enklere tilnærming med mange mindre kanaler. Valg av en meldingskanal. Nå vet vi mekanikken til kommunikasjonen mellom Java JMS-komponentene og C TIBCO-komponentene, og vi har sett noen Melding Kanalstrukturering, vi må bestemme hvilken type JMS Meldingskanal som Java-komponentene skal bruke til å kommunisere Før vi kan velge mellom de forskjellige Meldingskanaler av ailable i JMS, la oss se på høyt nivå meldingsflyten i systemet Vi har to gateways Prissetting og bidrag kommuniserer med klienten Markedsdata flyter til klienten fra Pricing Gateway som sender den ut til Bidrag Gateway Klientprogrammet sender melding til prisportalen for å endre analysen som blir brukt på hvert obligasjon. Bidrags Gateway sender også meldinger til klientprogrammet som omdiriger statusen til prisoppdateringene til de forskjellige handelsstedene. Systemmeldingsflyten. JMS-spesifikasjonen beskriver to Message Channel-typer, JMS-punkt og punkt-til-punkt-kanal JMS-emne Husk at saken for bruk av publiseringsabonnement er å gjøre det mulig for alle interesserte forbrukere å motta en melding mens saken for å bruke punkt-til-punkt er å sikre at bare én kvalifisert forbruker mottar en bestemt melding. Mange systemer vil ganske enkelt sende meldinger til alle klientprogrammer, og etterlate hver enkelt klientprogram å bestemme seg selv for å behandle en bestemt melding eller ikke. Dette vil ikke fungere for vår søknad, siden det sendes et stort antall markedsdata meldinger til hvert klientprogram. Hvis vi sender markedsdataoppdateringer til uinteressert næringsdrivende, vil vi unødvendig kaste bort klientprosessor-sykluser bestemmer om det skal behandles eller ikke, for å behandle markedsdataoppdatering. Point-to-Point-kanalen s høres opprinnelig som et godt valg siden klientene sender meldinger til unike servere og visumversikt. Men det var et forretningskrav at forhandlere kan logges inn på flere maskiner samtidig. Hvis vi har en forhandler logget inn på to arbeidsstasjoner samtidig og en pris-til-punkt-prisoppdatering sendes, vil bare en av de to klientprogrammene få meldingen. Dette skyldes at bare en forbruker på en Punkt-til-punkt-kanal kan motta en bestemt melding Legg merke til at kun den første av hver gruppe av en kundes klientprogrammer mottar meldingen. Point-to-Point Messaging for Pri ce-oppdateringer. Vi kunne løse dette ved hjelp av mottakerlistemønsteret, som publiserer meldinger til en liste over mottakere som mottar, og garanterer at kun klienter i mottakerlisten mottar meldinger. Ved hjelp av dette mønsteret kan systemet opprette mottakerlister med alle klientapplikasjonsinstanser relatert til hver handler Sending av en melding relatert til en bestemt handelsmann vil i sin tur sende meldingen til hver søknad i mottakerlisten Dette garanterer at alle klientapplikasjonsinstanser knyttet til en bestemt handelsmann vil motta meldingen. Ulempen ved denne tilnærmingen er at det krever ganske litt implementeringslogikk for å administrere mottakerne og sende meldinger. Reparasjonsliste for prisoppdateringer. Selv om punkt-til-punkt kan gjøres for å arbeide, la oss se om det er en bedre måte å bruke Publiser-Abonner kanal s, kan systemet kringkaste meldinger på trader-spesifikke kanaler i stedet for klientprogram-spesifikke kanaler På denne måten behandler alle klientprogrammer meldinger for en enkelt forhandler vil motta og behandle meldingen. Publiser-Abonner Meldinger for prisoppdateringer. Ulempen med å bruke Publiser-Abonner Channel s er at unikt meldingsprosessering ikke er garantert med serverkomponentene. Det ville være mulig for flere forekomster av en server komponent som skal instansieres og hver enkelt instans behandler samme melding, muligens sender ut ugyldige priser. Når det gjelder systemmeldingsflyten, er det bare en enkelt kommunikasjonsretning som er tilfredsstillende når hver kommunikasjonskommunikasjon mellom kommunikasjonskanaler mellom server og klient med publiseringsabonnement er tilfredsstillende mens klient - til-server-kommunikasjon er ikke og klient-serverkommunikasjon med punkt-til-punkt er tilfredsstillende mens serverklienten ikke er Siden det ikke er behov for å bruke samme meldingskanal i begge retninger, kan vi bare bruke hver meldingskanal i én retning Client til-server-kommunikasjon vil bli implementert med punkt-til-punkt, mens server-til-klientkommunikasjon vil bli implementert med publiseringsabonnement Ved hjelp av denne kombinasjonen av Message Channel s, har systemet fordeler fra direkte kommunikasjon med serverkomponentene ved hjelp av punkt-til-punkt-meldinger og multicast-naturen til publiseringsabonnement uten noen av ulempene. Message-strømning med kanaltyper. Problemløsning med mønstre. Mønster er verktøy og samlinger av mønstre er verktøykasser. De hjelper med å løse problemer. Noen tror at mønstre bare er nyttige under design. Etter verktøykasseanalogen er dette som å si at verktøy bare er nyttige når du bygger et hus, ikke når du fikser det. Faktum er at mønstre er et nyttig verktøy gjennom et prosjekt når det brukes bra I de følgende avsnittene vil vi bruke samme mønsterprospekteringsprosess som vi brukte i forrige seksjon for å løse problemer i vårt nåværende system. Blant markedsdataoppdateringer. Tradere vil at tabellceller skal blinke når nye markedsdata mottas for et obligasjonslån, tydelig viser endringer Java-klienten mottar meldinger med nye data som utløser klientdata ca che oppdaterer og til slutt blinker i tabellen Problemet er at oppdateringene kommer ganske ofte GUI-trådstakken blir overbelastet og til slutt fryser klienten, siden den ikke kan svare på brukerinteraksjon. Vi antar at blinkingen er optimalisert og konsentrert om datastrømmen av meldinger gjennom oppdateringsprosessen En undersøkelse av ytelsesdata viser at klientprogrammet mottar flere oppdateringer hvert sekund. Noen oppdateringer skjedde mindre enn en millisekund fra hverandre. To mønstre som virker som om de kan bidra til å redusere meldingsflyten, er Aggregator og Message Filter. A første Tanken er å implementere et meldingsfilter for å kontrollere hastigheten på meldingsflyten ved å kaste ut oppdateringer mottatt en liten stund etter referansemeldingen. Som et eksempel, kan vi si at vi skal ignorere meldinger innen 5 millisekunder av hverandre Meldingen Filteret kan cache tidspunktet for den siste akseptable meldingen og kaste ut noe mottatt innen de neste 5 millisekoene nds Mens andre programmer kanskje ikke klarer å tåle datatap i en slik grad, er dette helt akseptabelt i vårt system på grunn av frekvensen av prisoppdateringer. Tidbasert Meldingsfilter. Problemet med denne tilnærmingen er at ikke alle datafeltene er oppdatert på samme tid Hver obligasjon har omtrent 50 datafelter som vises til brukeren, inkludert pris. Vi skjønner at ikke alle feltene er oppdatert i hver melding. Hvis systemet ignorerer påfølgende meldinger, kan det meget vel være å kaste ut viktige data. Det andre mønsteret av interesse er Aggregatoren Aggregatoren brukes til å håndtere avstemningen av flere relaterte meldinger til en enkelt melding, som potensielt reduserer meldingsflyten. Aggregatoren kan beholde en kopi av bondedata fra den første aggregerte meldingen, og oppdater deretter bare nye eller endrede felt etter hverandre meldinger Til slutt vil de aggregerte obligasjonsdataene sendes i en melding til klienten. For nå antar vi at Aggregatoren sender en melding hver 5. mil liseconds som Message Filter Later, vil vi utforske et annet alternativ. Aggregator med delvis suksessive oppdateringer. Aggregatoren som et hvilket som helst annet mønster, er ikke en sølvkule, den har sine plusser og minuser som må utforskes. En potensiell minus er at implementering av en aggregator ville redusere meldingen trafikk med en stor mengde i vårt tilfelle bare hvis mange meldinger kommer inn innen relativt kort tid om samme obligasjon På den annen side ville vi oppnå ingenting hvis Java-klienten bare mottar oppdateringer for ett felt på tvers av alle handelsforbindelsene For eksempel, hvis vi mottar 1000 meldinger i en angitt tidsramme med 4 obligasjoner av interesse, ville vi redusere meldingsflyten fra 1000 til 4 meldinger over den tidsrammen. Alternativt, hvis vi mottar 1000 meldinger i samme tidsramme med 750 obligasjoner av 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. Imagine Trading System. Since 1993, Imagine Software has been a leading provider of investment management solutions for the global financial industry Its a ward-winning enterprise product, the Imagine Trading System and its on-demand cloud-based ASP version, is a real-time integrated trading, portfolio, and risk management solution employed by thousands of buy-side and sell-side end-users across the globe. Imagine Software s reputation of delivering competitive advantage is based upon its long track record of delivering institutional-grade functionality, broad cross-asset instrument support, and the ability to handle any trading strategy The firm consistently satisfies the diverse portfolio and risk processing, market data, regulatory, and reporting requirements of the largest global hedge funds, fund-of-funds, pension funds, asset management companies, and major brokerage firms and banks Imagine provides users with everything they need for their day-to-day operations advanced software functionality, comprehensive data management consisting of the myriad live market, credit, static data, and other elements necessary for real-time trading i n today s global markets , and end-of-day and start-of-day processing services. Maximizing Investment Returns and Managing Risk Investment decision-makers reap immediate benefits with Imagine s robust, real-time portfolio and risk management functionality, which supports their activities across all trading strategies and asset classes Key portfolio functionality includes unlimited portfolio drilldowns, real-time pricing, limits monitoring and control, plus live views of P L values and greeks, and securities tracking Risk functionality spans stress testing and historical Monte Carlo, plus intra-day portfolio VaR, factor analysis, and much more Users can easily examine exposure to shifting market prices, interest rates, volatility, yield-curve assumptions and other risks. Achieve Transparency Imagine s status as a trusted industry-standard provider of risk and portfolio reporting capabilities make it a must have resource for a wide array of financial businesses ranging from institutional i nvestment firms to start-up hedge funds Superior reporting capabilities plus complete historical data archiving enables the transparency today s investors and regulator agencies demand. Gain Operational Efficiencies clients concentrate solely on managing assets because the critical components underpinning their business processes software, market data, global security masters, corporate actions, etc are managed efficiently at Imagine s secure, high-performance data center The operational risk and cost benefits of fast implementation, automation of manual processes, seamless integration with other third-party systems, and elimination of IT support requirements are undeniable. Appears on these sections. Product and service specifications.

No comments:

Post a Comment