Du märker ibland att en investerare eller näringsidkare kan använda ordet köp medan andra använder ordet långt. Vissa kan säga sälja och andra säger korta. Vad är skillnaden Det kan vara väldigt lite, eller mycket, allt på samma gång. En obligationsfond placerar i skuldinstrument utfärdade av regeringar och organsammanslutningar. De flesta av dessa medel är utformade för att ge ränteintäkter för aktieägarna i form av utdelningar som representerar de totala räntebetalningarna som gjorts av alla obligationer i fondportföljen. Grundläggande analys utgör grunden för en solid investering. Det hjälper dig att bestämma företagets underliggande hälsa genom att granska företagets kärnnummer: dess resultaträkningar, dess vinstutgivningar, dess balansräkning och andra indikatorer på ekonomisk hälsa. Utifrån dessa grunder utvärderar investerare om ett lager är under - eller övervärderat. Grundläggande analys börjar Du märker ibland att en investerare eller näringsidkare kan använda ordet köp medan andra använder ordet långt. Vissa kan säga sälja och andra säger korta. Vad är skillnaden Det kan vara väldigt lite, eller mycket, allt på samma gång. Du kan kalla dig en Veteran Bond Investor om du är en marknadsaktör med mellanliggande färdigheter. Du har aktivt bibehållit din egen obligationsportfölj i minst ett år eller två. Veteraner har en konservativ investeringsstrategi för de pengar som de har tilldelats obligationer, men de undersöker noggrant en obligationsinvestering i stället. Om du fruktar att räkna upp skatteeffekterna av din handel, så är det bra att få tag på dessa problem. Med några få grunder under ditt bälte kommer du att vara redo att samarbeta med din skattrevisor och hantera dina handelsskatter. Utvalda Obligationsstrategi Köp Företagsobligation Strategin Som namnet antyder är företagsobligationer emitterade av företag - vanligtvis stora, börsnoterade . Företaget lånar pengar från investerare för att finansiera affärsinitiativ. Mer Bond Strategies Köp Corporate Bond Strategin Som namnet antyder utgives företagsobligationer av företag - vanligtvis stora, börsnoterade. Företaget lånar pengar från investerare för att finansiera affärsinitiativ. Köp kommunala obligationerMunicipalobligationer (kallas munis) utfärdas av stater, städer, län och andra statliga enheter under federal nivå för att samla in pengar för offentliga förbättringar. Bond Tools Trader Network Forums Tala om dig om de värdepapper du är handel och koppla med andra handlare i vårt nätverk. Research ReportsScour marknaden för nya investeringsideer med MarketGrader forskning. Fast Income CenterFind din idealränta strategi, vare sig på kort eller lång sikt. Trader Network BlogsSpela ditt sinne om de värdepapper du är handel och koppla med andra handlare i vårt nätverk. Alternativ innebär risk och är inte lämpliga för alla investerare. För mer information, kolla egenskaper och risker i standardalternativbroschyr som finns tillgängliga på tradekingODD innan du börjar tradingalternativ. Optionsinvesterare kan förlora hela beloppet av sin investering på en relativt kort tid. Onlinehandel har inneboende risker på grund av systemrespons och åtkomsttider som varierar beroende på marknadsförhållanden, systemprestanda och andra faktorer. En investerare bör förstå dessa och ytterligare risker före handel. 4,95 för online equity och option trades, lägg till 65 cent per option kontrakt. TradeKing tar ut ytterligare 0,35 per kontrakt på vissa indexprodukter där växelkurserna avgifter. Se vår FAQ för detaljer. TradeKing lägger till 0,01 per aktie på hela ordern för aktier som är lägre än 2,00. Se sidan Provisioner och avgifter för provisioner på mäklareassisterade affärer, lågprislagret, optionsspridningar och andra värdepapper. Citat är försenade minst 15 minuter, om inte annat anges. Marknadsdata drivs och implementeras av SunGard. Företagets grundläggande data från Factset. Resultatuppskattningar tillhandahållna av Zacks. Ömsesidig fond och ETF-data tillhandahållen av Lipper och Dow Jones Company. Kommissionsfritt köp för att stänga erbjudandet gäller inte multi-leghandel. Alternativstrategier för flera ben innebär ytterligare risker och flera provisioner. och kan resultera i komplexa skattbehandlingar. Vänligen kontakta din skatterådgivare. Implicerad volatilitet representerar konsensus om marknadsplatsen för den framtida nivån på aktiekursvolatiliteten eller sannolikheten att nå en viss prispunkt. Grekerna representerar konsensus på marknaden om hur alternativet kommer att reagera på förändringar i vissa variabler i samband med prissättningen av ett optionsavtal. Det finns ingen garanti för att prognoserna för underförstådd volatilitet eller grekerna kommer att vara korrekta. Investerare bör noggrant överväga investeringsmålen, riskerna, kostnaderna och utgifterna för fonder eller börshandlade fonder (ETF) noga innan de investeras. Prospektet för en fond eller ETF innehåller denna och annan information, och kan erhållas genom att maila servicetradeking. Investeringsavkastningen fluktuerar och är föremål för volatilitet på marknaden, så att investerare, när de löses in eller säljs, kan vara värda mer eller mindre än deras ursprungliga kostnad. ETF: er är föremål för risker som liknar aktiernas. Vissa specialiserade börshandlade fonder kan vara föremål för ytterligare marknadsrisker. TradeKings Fixed Income-plattform tillhandahålls av Knight BondPoint, Inc. Alla bud (erbjudanden) som skickas på Knight BondPoint-plattformen är gränsvärden och om de körs kommer de endast att utföras mot erbjudanden (bud) på Knight BondPoint-plattformen. Knight BondPoint ringer inte order till någon annan plats för orderhantering och utförande. Informationen erhålls från källor som tros vara tillförlitliga, men dess noggrannhet eller fullständighet är inte garanterad. Information och produkter tillhandahålls endast på grundval av bästa ansträngningar. Vänligen läs hela Villkor för fast inkomst. Ränteplaceringar är föremål för olika risker, inklusive ränteförändringar, kreditkvalitet, marknadsvärderingar, likviditet, förskott, tidig inlösen, företagshändelser, skatteförändringar och andra faktorer. Innehåll, forskning, verktyg och lager - eller optionssymboler är endast för pedagogiska och illustrativa ändamål och innebär inte en rekommendation eller uppmaning att köpa eller sälja en viss säkerhet eller att engagera sig i någon särskild investeringsstrategi. Prognoser eller annan information om sannolikheten för olika investeringsresultat är hypotetisk, garanteras inte för noggrannhet eller fullständighet, återspeglar inte faktiska investeringsresultat och är inte garantier för framtida resultat. Eventuellt innehåll från tredje part, inklusive bloggar, handelsnoteringar, foruminlägg och kommentarer återspeglar inte TradeKings synpunkter och kan inte ha granskats av TradeKing. All-Stars är tredje part, representerar inte TradeKing, och kan upprätthålla ett oberoende affärsförhållande med TradeKing. Testimonials kanske inte är representativa för erfarenheter från andra kunder och är inte en indikation på framtida prestation eller framgång. Inga vederlag betalades för några visade visningar. Stöddokumentation för eventuella fordringar (inklusive eventuella påståenden på uppdrag av optionsprogram eller alternativkompetens), jämförelse, rekommendationer, statistik eller annan teknisk data kommer att lämnas på begäran. Alla investeringar medför risker, förluster kan överstiga den investerade kapitalen, och det förflutna resultatet av en säkerhet, industri, sektor, marknad eller finansiell produkt garanterar inte framtida resultat eller avkastning. TradeKing ger självinriktade investerare rabattmäklartjänster, och gör inga rekommendationer eller erbjuder investeringar, finansiella, juridiska eller skattemässiga råd. Du ensam ansvarar för att utvärdera meriterna och riskerna i samband med användningen av TradeKings system, tjänster eller produkter. För en fullständig förteckning över avslöjanden relaterade till innehåll på nätet, gå till TradeKeyDesklosures. Valutahandel (Forex) erbjuds självstyrda investerare genom TradeKing Forex. TradeKing Forex, Inc och TradeKing Securities, LLC är separata, men anknutna företag. Forex konton skyddas inte av Securities Investor Protection Corp. (SIPC). Forexhandel innebär betydande risk för förlust och är inte lämplig för alla investerare. Ökad hävstång ökar risken. Innan du bestämmer dig för handel med forex bör du noga överväga dina ekonomiska mål, investeringsnivå och förmåga att ta ekonomisk risk. Eventuella åsikter, nyheter, undersökningar, analyser, priser eller annan information utgör inte investeringsrådgivning. Läs hela beskrivningen. Observera att spot guld och silver kontrakt inte är föremål för reglering enligt U. S. Commodity Exchange Act. TradeKing Forex, Inc fungerar som en introducerande mäklare till GAIN Capital Group, LLC (GAIN Capital). Ditt forex konto hålls och underhålls hos GAIN Capital som fungerar som clearing agent och motpart till dina affärer. GAIN Capital är registrerat hos Commodity Futures Trading Commission (CFTC) och är medlem i National Futures Association (NFA) (ID 0339826). TradeKing Forex, Inc. är medlem av National Futures Association (ID 0408077). kopiera 2017 TradeKing Group, Inc. Alla rättigheter förbehållna. TradeKing Group, Inc. är ett helägt dotterbolag till Ally Financial, Inc. Värdepapper som erbjuds genom TradeKing Securities, LLC, medlem FINRA och SIPC. Forex erbjuds via TradeKing Forex, LLC, medlem NFA. Traderingssystem: Vad är ett handelssystem 13 Ett handelssystem är helt enkelt en grupp specifika regler eller parametrar som bestämmer inmatnings - och utgångspunkter för en given kapitalandel. Dessa punkter, som kallas signaler, markeras ofta på ett diagram i realtid och uppmanar omedelbar exekvering av en handel. Här är några av de vanligaste tekniska analysverktygen som används för att konstruera parametrarna för handelssystem: Flytta medelvärden (MA) 13 Stokastiska 13 Oscillatorer 13 Relativ styrka 13 Bollinger Bands Ofta kommer två eller flera av dessa indikatorer att kombineras i skapandet av en regel. MA crossover-systemet använder till exempel två glidande medelparametrar, på lång sikt och på kort sikt, för att skapa en regel: köp när kortsiktiga kors över lång sikt, och sälja när motsatt är sant. I andra fall använder en regel endast en indikator. Ett system kan till exempel ha en regel som förbjuder köp, såvida inte den relativa styrkan överstiger en viss nivå. Men det är en kombination av alla dessa typer av regler som gör ett handelssystem. MSFT Moving Average Crossover System med 5 och 20 rörliga medelvärden Eftersom framgången för det övergripande systemet beror på hur väl reglerna utför, spenderar systemhandlare tiden optimering för att hantera risken. öka beloppet som uppnåtts per handel och uppnå långsiktig stabilitet. Detta görs genom att ändra olika parametrar inom varje regel. Till exempel, för att optimera MA crossover-systemet, skulle en näringsidkare testa för att se vilka rörliga medelvärden (10 dagar, 30 dagar etc.) fungerar bäst och sedan implementera dem. Men optimering kan förbättra resultatet med endast en liten marginal - det är kombinationen av parametrar som används som i slutändan kommer att avgöra framgången för ett system. Fördelar Så, varför skulle du vilja anta ett handelssystem Det tar alla känslor ur handel - Emotion är ofta citerat som en av de största bristerna hos enskilda investerare. Investerare som inte klarar av förluster andra gissar sina beslut och slutar förlora pengar. Genom att strikt följa ett förutvecklat system kan systemhandlare avstå från att behöva fatta beslut när systemet är utvecklat och etablerat. Handel är inte empirisk eftersom den är automatiserad. Genom att minska mänskliga ineffektiviteter kan systemhandlare öka vinsten. Det kan spara mycket tid - En gång ett effektivt system är utvecklat och optimerat. liten eller ingen ansträngning krävs av näringsidkaren. Datorer används ofta för att automatisera inte bara signalgenerationen utan också den faktiska handeln, så att näringsidkaren befrias från att spendera tid på analys och göra affärer. Det är enkelt om du låter andra göra det åt dig - Behöver du allt arbete för du Vissa företag säljer handelssystem som de har utvecklat. Andra företag kommer att ge dig de signaler som genereras av sina interna handelssystem för en månadsavgift. Var försiktig, men många av dessa företag är bedrägliga. Ta en närmare titt på när resultaten som de pratar om togs. Det är trots allt lätt att vinna tidigare. Leta efter företag som erbjuder en rättegång som låter dig testa systemet i realtid. Nackdelar Weve tittade på de främsta fördelarna med att arbeta med ett handelssystem, men tillvägagångssättet har också sina nackdelar. Handelssystem är komplexa - det här är deras största nackdel. I utvecklingsstadiet kräver handelssystemen en solid förståelse av teknisk analys, förmågan att fatta empiriska beslut och en grundlig kunskap om hur parametrar fungerar. Men även om du inte utvecklar ditt eget handelssystem är det viktigt att känna till de parametrar som utgör den du använder. Att förvärva alla dessa färdigheter kan vara en utmaning. Du måste kunna göra realistiska antaganden och använda systemet effektivt. Systemhandlare måste göra realistiska antaganden om transaktionskostnader. Dessa kommer att bestå av mer än provisionskostnader - skillnaden mellan genomförandepriset och påfyllningspriset är en del av transaktionskostnaderna. Tänk på att det ofta är omöjligt att testa systemen noggrant, vilket medför en viss osäkerhet när systemet lever. Problem som uppstår när simulerade resultat skiljer sig mycket från det faktiska resultatet kallas glidning. Effektiv hantering av glidning kan vara ett viktigt vägspärr för att implementera ett framgångsrikt system. Utveckling kan vara en tidskrävande uppgift - Mycket tid kan gå in i att utveckla ett handelssystem för att få det att fungera och fungera ordentligt. Att avgöra ett systemkoncept och sätta det i praktiken innebär gott om test, vilket tar ett tag. Historisk backtesting tar några minuter men det är inte tillräckligt med backtestning. System måste också handlas i realtid för att säkerställa tillförlitlighet. Slutligen kan glidning leda till att näringsidkare gör flera ändringar av sina system även efter implementeringen. Fungerar de Det finns ett antal internet-bedrägerier relaterade till systemhandel, men det finns också många legitima, framgångsrika system. Kanske är det mest kända exemplet det som utvecklats och implementerats av Richard Dennis och Bill Eckhardt, som är Original Turtle Traders. 1983 hade de två tvivel om huruvida en bra näringsidkare är född eller tillverkad. Så tog de några människor utanför gatan och tränade dem utifrån deras nu kända Turtle Trading System. De samlade 13 handlare och slutade göra 80 årligen de närmaste fyra åren. Bill Eckhardt sa en gång, vem som helst med genomsnittlig intelligens kan lära sig att handla. Detta är inte raketvetenskap. Det är dock mycket lättare att lära dig vad du ska göra i handel än att göra det. Handelssystemen blir alltmer populära bland professionella handlare, fondförvaltare och enskilda investerare - kanske det här är ett testamente för hur bra de jobbar. Att handla med bedrägerier När man vill köpa ett handelssystem kan det vara svårt att hitta ett pålitligt företag . Men de flesta bedrägerier kan ses av sunt förnuft. Till exempel är en garanti på 2500 årligen klart skandalöst, eftersom det lovar att med bara 5000 kunde du göra 125 000 på ett år. och sedan genom sammansättning i fem år, 48.828.15.000 Om detta var sant, skulle inte skaparen handla sin väg till att bli miljardär. Andra erbjudanden är dock svårare att avkoda, men en vanlig metod att undvika bedrägerier är att söka efter system som erbjuda en gratis provperiod. På det sättet kan du själv testa systemet. Aldrig lita på det som affären skryter om Det är också en bra idé att kontakta andra som har använt systemet för att se om de kan bekräfta sin tillförlitlighet och lönsamhet. Slutsats Att utveckla ett effektivt handelssystem är inte på något sätt en lätt uppgift. Det kräver en solid förståelse av de många tillgängliga parametrarna, förmågan att göra realistiska antaganden och tid och dedikation att utveckla systemet. Om det emellertid utvecklas och distribueras på rätt sätt kan ett handelssystem ge många fördelar. Det kan öka effektiviteten, frigöra tiden och, viktigast, öka din vinst. Handelssystem: Design av ditt system - Del 1Trading Systems: Designing Your System - Del 1 13 Den föregående delen av denna handledning tittade på de delar som utgör ett handelssystem och diskuterade fördelarna och nackdelarna med att använda ett sådant system i en levande handelsmiljö . I detta avsnitt bygger vi vidare på den kunskapen genom att undersöka vilka marknader som är särskilt lämpade för systemhandel. Vi kommer då att ta en djupare titt på de olika handelssystemens genrer. Handel på olika marknader Aktiemarknader Aktiemarknaden är förmodligen den vanligaste marknaden för handel, särskilt bland nybörjare. I denna arena dominerar stora spelare som Warren Buffett och Merrill Lynch, och traditionella värde - och tillväxtinvesteringsstrategier är överlägset vanligast. Trots detta har många institutioner investerat betydligt i design, utveckling och genomförande av handelssystem. Enskilda investerare går med i denna trend, men långsamt. Här är några viktiga faktorer att komma ihåg när man använder handelssystem på aktiemarknaderna: 13 Den stora mängden tillgängliga aktier gör det möjligt för aktörer att testa system på många olika typer av aktier - allt från extremt volatila OTC-lager till icke-flyktiga blå marker. Effektiviteten i handelssystemen kan begränsas av vissa aktiers låga likviditet, särskilt OTC - och rosa arkproblem. Provisioner kan äta i vinster som genereras av framgångsrika affärer och kan öka förlusterna. OTC - och rosa arkaktier uppstår ofta extra provisionskostnader. De viktigaste handelssystemen är de som söker värde - det vill säga system som använder olika parametrar för att avgöra om en säkerhet är undervärderad jämfört med tidigare prestanda, dess jämställdhetsgrupper eller marknaden i allmänhet. Valutamarknader Valutamarknaden eller valutakurser. är den största och mest likvida marknaden i världen. Världens regeringar, banker och andra stora institutioner handlar med tusen dollar på valutamarknaden varje dag. Majoriteten av institutionella handlare på valutan är beroende av handelssystem. Detsamma gäller för individer i valutan, men viss handel baserad på ekonomiska rapporter eller ränteutbetalningar. Här är några viktiga faktorer att komma ihåg när man använder handelssystem på valutamarknaden: Likviditeten på denna marknad - på grund av den stora volymen - gör handelssystemen mer exakta och effektiva. Det finns inga provisioner på denna marknad, bara sprider sig. Därför är det mycket lättare att göra många transaktioner utan att öka kostnaderna. Jämfört med mängden aktier eller råvaror som är tillgängliga är antalet valutor att handla begränsat. Men på grund av tillgången på exotiska valutapar - det vill säga valutor från mindre länder - är volatilitetsintervallet inte nödvändigtvis begränsat. De viktigaste handelssystemen som används i forex är de som följer trender (ett populärt ord på marknaden är trenden är din vän), eller system som köper eller säljer på breakouts. Detta beror på att ekonomiska indikatorer ofta orsakar stora prisrörelser på en gång. Futures Equity, Forex och råvarumarknader erbjuder alla futureshandel. Detta är ett populärt fordon för systemhandel på grund av den högre hävstångseffekten som finns och ökad likviditet och volatilitet. Men dessa faktorer kan skära båda sätten: de kan antingen förstärka dina vinster eller förstärka dina förluster. Av denna anledning är användningen av terminer vanligtvis reserverad för avancerade enskilda och institutionella systemhandlare. Detta beror på att handelssystem som kan kapitalisera på terminsmarknaden kräver mycket större anpassning, använder mer avancerade indikatorer och tar mycket längre tid att utveckla. Så, vilket är bäst Det är upp till den enskilda investeraren att bestämma vilken marknad som passar bäst för systemhandel - var och en har sina egna fördelar och nackdelar. De flesta människor är mer bekanta med aktiemarknaderna, och denna förtrogenhet gör det lättare att utveckla ett handelssystem. Men forex anses allmänt vara överlägsen plattform för att driva handelssystem - särskilt bland mer erfarna handlare. Om en näringsidkare bestämmer sig för att kapitalisera på ökad hävstångseffekt och volatilitet är framtidsalternativet alltid öppet. I slutändan ligger valet i systemutvecklarens händer. Typ av Trading Systems Trend-Following Systems Den vanligaste metoden för systemhandel är det trend-efterföljande systemet. I sin mest grundläggande form väntar detta system helt enkelt på en betydande prisrörelse, då köper eller säljs i den riktningen. Denna typ av system bankar på hoppet att dessa prisrörelser kommer att behålla trenden. Flytta genomsnittliga system Används ofta i teknisk analys. ett glidande medelvärde är en indikator som helt enkelt visar genomsnittspriset på ett lager över en tidsperiod. Kärnan i trender är härledd från denna mätning. Det vanligaste sättet att bestämma inresa och utresa är en crossover. Logiken bakom detta är enkel: en ny trend är etablerad när priset faller över eller under det historiska prisgenomsnittet (trend). Här är ett diagram som visar både priset (blå linje) och IBMs 20-dagars röda linje: Breakout Systems Det grundläggande konceptet bakom denna typ av system liknar det för ett glidande genomsnittssystem. Tanken är att när en ny hög eller låg är etablerad, är prisrörelsen sannolikt att fortsätta i riktning mot breakouten. En indikator som kan användas vid bestämning av breakouts är ett enkelt Bollinger Band-överlägg. Bollinger Bands visar medelvärden av höga och låga priser, och breakouts uppstår när priset möter bandets kanter. Här är ett diagram som prissätter pris (blå linje) och Bollinger Bands (gråa linjer) i Microsoft: Nackdelar med Trend-Following Systems: Empirisk beslutsfattande krävs - Vid fastställande av trender finns det alltid ett empiriskt element att överväga: Varaktigheten av den historiska trenden. Till exempel kan det rörliga genomsnittet vara de senaste 20 dagarna eller de senaste fem åren, så utvecklaren måste bestämma vilken som är bäst för systemet. Andra faktorer som ska bestämmas är de genomsnittliga höjderna och nedgångarna i brytningssystemen. Lagging Nature - Flyttande medelvärden och breakout-system kommer alltid att ligga kvar. Med andra ord kan de aldrig träffa den exakta toppen eller botten av en trend. Detta leder oundvikligen till förverkande av potentiella vinster, vilket ibland kan vara betydande. Whipsaw Effect - Bland de marknadskrafter som är skadliga för framgången med trend-följande system är detta en av de vanligaste. Whipsaw-effekten uppträder när det rörliga genomsnittsvärdet genererar en falsk signal - det vill säga när genomsnittet sjunker precis i intervallet, vänder det plötsligt riktningen. Detta kan leda till stora förluster om inte effektiva stoppförluster och riskhanteringstekniker används. Sideways Markets - Trend-efter-system är av naturen kapabla att tjäna pengar bara på marknader som faktiskt tränar. Marknaderna rör sig emellertid också i sidled. stanna inom ett visst område under en längre tid. Extreme Volatility May Occur - Ibland kan trend-efterföljande system uppleva viss extrem volatilitet, men näringsidkaren måste hålla sig i sitt system. Oförmågan att göra det kommer att leda till ett försäkrat misslyckande. Countertrend Systems I grund och botten är målet med countertrend-systemet att köpa till lägst lågt och sälja högst högt. Huvudskillnaden mellan detta och det trendföljande systemet är att motverkningssystemet inte är självkorrigerande. Det är med andra ord ingen bestämd tid för att gå ur positioner, vilket leder till en obegränsad nackdel. Typer av motverkningssystem Många olika typer av system betraktas som motströmsystem. Tanken här är att köpa när momentum i en riktning börjar blekna. Detta beräknas oftast med hjälp av oscillatorer. Till exempel kan en signal genereras när stokastik eller andra relativa hållfasthetsindikatorer faller under vissa punkter. Det finns andra typer av motstridshandelssystem, men alla delar samma grundläggande mål - att köpa låga och sälja höga. Nackdelar med att motverka följande system: E mpirisk beslutsfattande krävs - Till exempel, en av de faktorer som systemutvecklaren måste bestämma är punkterna där relativa styrindikatorer bleknade. Extreme Volatility May Occur - Dessa system kan också uppleva viss extrem volatilitet, och en oförmåga att hålla fast vid systemet trots att denna volatilitet kommer att leda till ett försäkrat misslyckande. Obegränsad nackdel - Som tidigare nämnts finns det obegränsad nackdel, eftersom systemet inte är självkorrigerande (det finns ingen bestämd tid för att avsluta positioner). Slutsats De viktigaste marknaderna för vilka handelssystem är lämpliga är aktie-, valutamarknaden och valutamarknaden. Var och en av dessa marknader har sina fördelar och nackdelar. De två viktigaste genren av handelssystem är trend-following och countertrend-systemen. Trots deras skillnader kräver båda typerna av system i utvecklingsstadiet empirisk beslutsfattande från utvecklarens sida. Även dessa system är föremål för extrem volatilitet och det kan kräva lite uthållighet - det är viktigt att systemhandlaren håller fast vid sitt system under dessa tider. I den följande avdelningen, ta en närmare titt på hur man utformar ett handelssystem och diskutera några av programvaran som systemhandlare använder för att göra sina liv enklare. Trading Systems: Design Your System - Del 2Messaging Patterns 187 Integrationsmönster i praktiken 187 Fallstudie: Bond Trading System (Av Jonathan Simon) Det är lätt att avstå från en stor samling av mönster eller ett mönsterspråk. Mönster är abstraktionen av en idé i en återanvändbar form. Ofta gör den mycket generiska karaktären hos mönster som gör dem så användbara, också svårt att förstå. Ibland är det bästa för att förstå mönster ett verkligt världsexempel. Inte ett konstruerat scenario av vad som kan hända men vad som faktiskt händer och vad som händer. I det här kapitlet tillämpas mönster för att lösa problem med en upptäcktsprocess. Det system vi kommer att diskutera är ett obligationshandelssystem som jag arbetade med i två år från inledande design genom produktion. Vi kommer att undersöka scenarier och problem som uppstod och hur man löser dem med mönster. Detta innebär beslutsprocessen för att välja ett mönster, samt hur man kombinerar och anpassar mönster för att passa systemets behov. Och allt detta görs med hänsyn till krafterna i reala system, inklusive affärsbehov, kundbeslut, arkitektoniska och tekniska krav, samt äldre systemintegration. Syftet med detta tillvägagångssätt är att ge en tydligare förståelse för mönstren själva genom praktisk tillämpning. Bygga ett system En stor Wall Street investeringsbank utser att bygga ett obligationsprissättningssystem i ett försök att effektivisera arbetsflödet i deras obligationshandelskort. För närvarande måste obligationshandlare skicka priser för ett stort antal obligationer till flera olika handelsplatser, var och en med sitt eget användargränssnitt. Syftet med systemet är att minimera minutiae av prissättning av alla sina obligationer i kombination med avancerad analytisk funktionalitet som är specifik för obligationsmarknaden i ett enda inkapslat användargränssnitt. Detta innebär integration och kommunikation med flera komponenter över olika kommunikationsprotokoll. Systemets höga nivåflöde ser ut så här: Först kommer marknadsdata i systemet. Marknadsdata är uppgifter om pris och andra egenskaper hos obligationen som representerar vad folk är villiga att köpa och sälja obligationen för på den fria marknaden. Marknadsdata skickas omedelbart till analysmotorn som ändrar data. Analytics avser matematiska funktioner för finansiella applikationer som förändrar priser och andra attribut på obligationer. Dessa är generiska funktioner som använder inmatningsvariabler för att skräddarsy resultaten av funktionen till ett visst bindning. Klientprogrammet som kommer att köras på varje traderbordsskrivare konfigurerar analysmotorn på en näringsidkare basis och kontrollerar specifika uppgifterna för analysen för varje obligation som näringsidkaren prissätter. När analyserna tillämpas på marknadsdata skickas de modifierade uppgifterna till olika handelsplatser där handlare från andra företag kan köpa eller sälja obligationerna. Arkitektur med mönster Med denna översikt över systemets arbetsflöde kan vi närma oss några av de arkitektoniska problem som vi möter under designprocessen. Låt oss ta en titt på vad vi vet hittills. Traders behöver en mycket lyhörd applikation på både Windows NT och Solaris-arbetsstationer. Därför bestämde vi oss för att implementera klientapplikationen som en Java tjock klient på grund av dess plattformsoberoende och dess förmåga att snabbt svara på användarinmatning och marknadsdata. På serverns sida förvärvar vi äldre C-komponenter som vårt system kommer att använda. Marknadsdata komponenterna kommunicerar med TIBCO Information Bus (TIB) messaging infrastruktur. Vi ärverar följande komponenter: Market Data Price Feed Server. Publicerar inkommande marknadsdata till TIB. Analytics Engine. Utför analys på inkommande marknadsdata och sänder de modifierade marknadsdata till TIB. Bidragsserver. Utför all kommunikation med handelsplatser. Handelsplatserna är komponenter från tredje part som inte kontrolleras av banken. Vi måste bestämma hur separata delsystem (Java tjock klient, marknadsdata och bidrag) kommer att kommunicera. Vi kunde få den tjocka klienten att kommunicera direkt med de gamla servrarna, men det skulle kräva för mycket affärslogik på klienten. Bygg i stället ett par Java-gatewayar för att kommunicera med de gamla servrarna. Prissättning Gateway för marknadsdata En Bidrags Gateway för att skicka priser till handelsplatser. Detta kommer att uppnå en bra inkapsling av affärslogiken relaterad till dessa områden. De nuvarande komponenterna i systemet visas nedan. Anslutningarna markerade som. ange att vi fortfarande är osäkra hur några av komponenterna kommer att kommunicera. Systemet och dess komponenter Den första kommunikationsfrågan är hur man integrerar Java-tjock klient och de två Java-serverkomponenterna för att utbyta data. Låt oss titta på de fyra integrationsstilarna som föreslås i den här boken: Filöverföring. Delad databas. Remote Procedure Invocation. och meddelanden. Vi kan utesluta delad databas omedelbart eftersom vi ville skapa ett lager av abstraktion mellan klienten och databasen och inte vill ha databasåtkomstkod i klienten. Filöverföring kan på samma sätt uteslutas eftersom minimal latens krävs för att se till att nuvarande priser skickas ut till handelsplatserna. Detta ger oss möjlighet att välja mellan Remote Procedure Invocation eller Messaging. Java-plattformen erbjuder inbyggt stöd för både Remote Procedure Invocation och Messaging. Integration av RPC-stil kan uppnås med hjälp av Remote Method Invocation (RMI), CORBA eller Enterprise Java Beans (EJB). Java Messaging Service (JMS) är det gemensamma API för meddelandeformatintegration. Så båda integrationsstilarna är lätta att implementera i Java. Så vilket kommer att fungera bättre för detta projekt, Remote Procedure Invocation eller Messaging. Det finns bara en förekomst av prissättningsporten och en instans av bidragsporten i systemet, men oftast ansluter många tjocka klienter till dessa tjänster (en för varje obligationshandlare som råkar vara inloggad vid en viss tidpunkt). Vidare vill banken att detta är ett generellt prissystem som kan användas i andra applikationer. Så förutom ett okänt antal Think Clients kan det finnas ett okänt antal andra applikationer med hjälp av prisuppgifterna som kommer ut från Gateways. En tjock klient (eller annan applikation som använder prissättningsdata) kan ganska enkelt använda RPC för att ringa till Gateways för att få prissättning och åberopa bearbetning. Däremot kommer prisuppgifterna ständigt att publiceras, och vissa kunder är bara intresserade av vissa uppgifter, så det kan vara svårt att få relevanta uppgifter till rätt kunder i tid. Klienterna kunde kolla Gateways, men det kommer att skapa en hel del overhead. Det skulle vara bättre för Gateways att göra data tillgängliga för kunderna så snart det är tillgängligt. Detta kommer emellertid att kräva att varje Gateway ska hålla reda på vilka klienter som för närvarande är aktiva och vilka vill ha vilken speciell data då när en ny bit data blir tillgänglig (vilket kommer att hända flera gånger per sekund), måste Gateway göra en RPC till varje intresserad klient för att överföra data till klienten. Helst bör alla kunder meddelas samtidigt, så varje RPC måste göras i sin egen samtidiga tråd. Detta kan fungera, men blir väldigt komplicerat mycket snabbt. Meddelanden förenklar det här problemet mycket. Med Meddelanden. Vi kan definiera separata kanaler för olika typer av prisuppgifter. Då, när en Gateway får en ny data, lägger den till ett meddelande som innehåller den data till Public-Subscribe Channel för den datatypen. Under tiden kommer alla kunder intresserade av en viss typ av data att lyssna på kanalen för den typen. På så sätt kan Gateways enkelt skicka ut nya data till vem som helst är intresserad, utan att behöva veta hur många lyssnarapplikationer det finns eller vad de är. Klienterna måste fortfarande kunna påverka beteenden i Gateways också. Eftersom det bara finns två Gateways, och klienten kan förmodligen blockera medan metoden är påkallad synkront, kan dessa klient-till-gateway-invokationer ganska enkelt implementeras med hjälp av RPC. Men eftersom vi redan använder meddelanden för gateway-till-klientkommunikation är meddelanden förmodligen lika bra för att implementera Client-to-Gateway-kommunikation också. Därför kommer all kommunikation mellan Gateways och klienterna att uppnås genom meddelanden. Eftersom alla komponenter är skrivna i Java, presenterar JMS ett enkelt val för meddelandesystemet. Detta skapar effektivt en Message Bus eller en arkitektur som gör det möjligt för framtida system att integrera med det nuvarande systemet med liten eller ingen förändringar i meddelandets infrastruktur. På så sätt kan affärsfunktionaliteten i applikationen enkelt användas av annan applikation som banken utvecklar. Java-komponenter Kommunicera med JMS JMS är helt enkelt en specifikation och vi måste bestämma oss för ett JMS-kompatibelt meddelandesystem. Vi bestämde oss för att använda IBM MQSeries JMS eftersom banken är en IBM-butik, som använder WebSphere-applikationsservrar och många andra IBM-produkter. Som ett resultat kommer vi att använda MQSeries eftersom vi redan har en stödinfrastruktur på plats och en webbplatslicens för produkten. Nästa fråga är hur du kopplar MQSeries meddelandesystem med den fristående C-bidragsservern och de TIBCO-baserade marknadsdata - och analysmotorservrarna. Vi behöver ett sätt för MQSeries konsumenter att få tillgång till TIB-meddelandena. Men hur kan vi kanske använda Message Translator-mönstret för att översätta TIB-meddelanden till MQSeries-meddelanden. Även om C-klienten för MQSeries fungerar som Message Translator. använda det skulle offra JMS server oberoende. Och även om TIBCO har ett Java API, har kundarkitekten och chefen avvisat den. Som ett resultat måste inställningen för meddelande översättare överges. Broen från TIB-servern till MQSeries-servern kräver kommunikation mellan C och Java. Vi kan använda CORBA, men hur är det med meddelandet? En närmare titt på Message Translator-mönstret visar att den är relaterad till kanaladaptern vid användningen av kommunikationsprotokoll. Hjärtat i en kanaladapter är att ansluta icke-meddelandesystem till meddelandesystem. Ett par kanaladaptrar som ansluter två meddelandesystem är en Messaging Bridge. Syftet med en Messaging Bridge är att överföra meddelanden från ett meddelandesystem till ett annat. Det här är precis vad vi gör med den extra komplexiteten hos den språket Java-C-kommunikation inom språket. Vi kan implementera meddelandebroen på tvärspråk med hjälp av en kombination av kanaladapter s och CORBA. Vi kommer att bygga två lätta kanaladapter servrar, en i C hantera kommunikation med TIB, och en i Java hantera kommunikation med JMS. Dessa två kanaladapter. som är Message Endpoint s själva, kommer att kommunicera med varandra via CORBA. Liksom vårt val för MQSeries, kommer vi att använda CORBA snarare än JNI eftersom det är en företagsstandard. Meddelandebroen implementerar den effektivt simulerade budskapsöversättningen mellan till synes inkompatibla meddelandesystem och olika språk. Meddelande Översättare med Kanal Adaptrar Nästa diagram visar den aktuella systemdesignen inklusive Gateways och andra komponenter. Detta är ett bra exempel på mönsterapplikation. Vi kombinerade två kanaladapter s med ett icke-meddelandeprotokoll för att implementera Message Translator-mönstret, effektivt med ett mönster för att implementera ett annat mönster. Dessutom ändrade vi kanaladapterns sammanhang för att länka två meddelandesystem med ett icke-meddelande språköverföringsprotokoll snarare än att ansluta ett meddelandesystem till ett icke-meddelandesystem. Det nuvarande systemet med kanaladaptrarna Strukturerade kanaler En nyckel för att arbeta med mönster är inte bara att veta när man ska använda vilket mönster, utan också hur man använder det mest effektivt. Varje mönsterimplementering måste ta hänsyn till specifikationerna för teknologiplattformen liksom andra designkriterier. Det här avsnittet gäller samma funktionsprocess för att hitta den mest effektiva användningen av Public-Subscribe-kanalen i samband med marknadsdataservern som kommunicerar med analysmotorn. Realtidsmarknadsdata härstammar från marknadsdata, en C-server som sänder marknadsdata på TIB. Marknadsdataflödet använder en separat Public-Subscribe-kanal för varje obligation som publicerar priser för. Det kan tyckas lite extremt eftersom varje nytt band behöver sin egen nya kanal. Men det här är inte så allvarligt eftersom du inte behöver skapa kanaler i TIBCO. Snarare refereras kanaler av en hierarkisk uppsättning av ämnesnamn som kallas ämnen. TIBCO-servern filtrerar sedan ett enda meddelandeflöde per ämne, och skickar varje unikt ämne till en enda virtuell kanal. Resultatet är en mycket lätt meddelandekanal. Vi kan skapa ett system som publicerar på några kanaler och abonnenter kan bara lyssna på priser de är intresserade av. Detta skulle kräva att abonnenter använder ett meddelandefilter eller selektiv konsument för att filtrera hela dataflödet för intressanta obligationspriser och bestämmer om varje meddelande bör behandlas som det är mottaget. Med tanke på att marknadsdata publiceras på obligatoriska kanaler kan abonnenter registrera sig för uppdateringar på en serie obligationer. Detta tillåter effektivt abonnenter att filtrera genom att selektivt abonnera på kanaler och endast mottaga uppdateringar av intresse snarare än att bestämma efter att meddelandet har tagits emot. Det är viktigt att notera att användandet av flera kanaler för att undvika filtrering är en icke-standard användning av meddelandekanaler. Inom ramen för TIBCO-tekniken bestämmer vi emellertid verkligen huruvida vi ska implementera eller äga filter eller använda kanalfiltrering som är inbyggd i TIBCO - istället för att använda så många kanaler. Nästa komponent vi behöver designa är analysmotorn, en annan CTIB-server som kommer att modifiera marknadsdata och vidarebefordra den till TIB. Även om det inte ligger inom ramen för vår JavaJMS-utveckling, jobbar vi nära med C-laget för att designa det eftersom vi är den primära kunden för analyticsmotorer. Problemet för hand är att hitta kanalstrukturen som mest effektivt återfördelade de nymodifierade marknadsdata. Eftersom vi redan har en dedikerad meddelandekanal per bindning som ärverts från marknadsdataprismatningen, skulle det vara logiskt att ändra marknadsdata och omfördela den modifierade marknadsdata på den obligatoriska meddelandekanalen. Men det här kommer inte fungera eftersom analysen ändrar obligationerna priserna är näringsidkare specifika. Om vi omfördelade de ändrade data på obligationsmeddelandekanalen. Vi kommer att förstöra dataintegriteten genom att ersätta generiska marknadsdata med näringsidkars specifika data. Å andra sidan kan vi ha en annan meddelandetyp för näringsidkarspecifika marknadsdata som vi publicerar på samma kanal, så att abonnenter kan bestämma vilket meddelande de är intresserade av för att undvika att förstöra dataintegriteten. Men då måste klienterna genomföra sina egna filter för att skilja ut meddelanden för andra handlare. Dessutom kommer det att bli en väsentlig ökning av meddelanden som mottagits av abonnenter, vilket innebär en onödig börda för dem. Det finns två alternativ: En kanal per handlare: Varje handlare har en angiven kanal för den modifierade marknadsdata. På så sätt förblir de ursprungliga marknadsuppgifterna intakta och varje näringsansökan kan lyssna på sin specifika återförsäljare Message Channel för de modifierade prisuppdateringarna. En kanal per näringsidkare per obligation: Skapa en meddelandekanal per-näringsidkare per bindning enbart för den modifierade marknadsdata för det obligationen. Marknadsdata för obligationer ABC skulle till exempel publiceras på kanalen Bond ABC medan den modifierade marknadsdata för näringsidkare A skulle publiceras på Message Channel Trader A, Bond ABC, modifierad marknadsdata för näringsidkare B på Trader B, Bond ABC och så vidare. En kanal per näringsidkare En kanal per obligation per näringsidkare Det finns fördelar och nackdelar för varje tillvägagångssätt. Tillvägagångssättet per bindning, till exempel, använder mycket mer Message Channel. I värsta fallet kommer antalet meddelandekanaler att vara antalet obligationer totalt multiplicerat med antalet handlare. Vi kan sätta gränser på antalet kanaler som kommer att skapas eftersom vi vet att det bara finns cirka 20 handlare och de prissätter aldrig mer än ett par hundra obligationer. Detta sätter den övre gränsen under 10 000-serien, vilket inte är så outlandish jämfört med den nästan 100 000 meddelandekanalen som marknadsdataprismatningen använder. Eftersom vi använder TIB och Message Channel, är det också ganska billigt att antalet meddelandekanal s inte är en allvarlig fråga. Å andra sidan kan det stora antalet Message Channel s vara ett problem från ett ledningsperspektiv. Varje gång ett band läggs till måste en kanal för varje näringsidkare bibehållas. Detta kan vara svårt i ett mycket dynamiskt system. Vårt system är dock väsentligen statiskt. Det har också en infrastruktur för att automatiskt hantera meddelandekanal s. Detta kombineras med den arvade arkitekturen hos en äldre komponent med ett liknande tillvägagångssätt minimerar nackdelen. Detta betyder inte att vi ska göra ett onödigt stort antal meddelandekanaler s. Snarare kan vi genomföra ett arkitektoniskt tillvägagångssätt som använder ett stort antal Message Channel s när det finns anledning. Och det finns en anledning i detta fall som kommer ner till logikens läge. Om vi implementerar per näringsidkarbeteende behöver Analytics Engine logik för att gruppera inmatnings - och utmatningskanaler. Detta beror på att ingångskanalerna från Analytics-motorn är per bindning och utmatningskommunikationskanalen s skulle vara per näringsidkare och kräver att Analytics-motorn strömmar all analysinmatning från flera obligationer för en viss näringsidkare till en näringsidkarspecifik utmatningskommunikationskanal. Detta gör att analysmotorn effektivt blir till en innehållsbaserad router för att implementera anpassad routinglogik för vår applikation. Efter Message Bus-strukturen är Analytics Engine en generisk server som kan användas av flera andra system i. Så vi vill inte molna det med systemspecifik funktionalitet. Å andra sidan fungerar per-bond-tillvägagångssättet eftersom idén om en näringsidkare som äger analystillgången i obligationspriserna är en företagsacceptad praxis. Per-bond-tillvägagångssättet håller meddelandekanalseparationen av marknadsdataflödet intakt, samtidigt som flera adderingskanaler sätts till. Innan vi når kunden vill vi ha en innehållsbaserad router för att kombinera dessa flera kanaler till ett hanterbart antal kanaler. Vi vill inte att klientprogrammet körs på handlarens skrivbord för att lyssna på tusentals eller tiotusentals Message Channel s. Nu blir frågan var man ska sätta innehållsbaserad router. Vi kan helt enkelt få CTIB-kanaladaptern att vidarebefordra alla meddelanden till prissättningsparoten på en enda meddelandekanal. Det här är dåligt av två anledningar att vi skulle dela upp affärslogiken mellan C och Java och vi skulle förlora fördelen med den separata Message Channel s på TIB-sidan, så att vi undviker filtrering senare i dataflödet. Om vi tittar på våra Java-komponenter kan vi antingen placera den i prissättningspartongen eller skapa en mellanliggande komponent mellan prissättningspartén och klienten. I teorin, om vi fortsatte den obligationsbaserade avskiljningen av Message Channel s hela vägen till klienten, skulle prissättning Gateway återupplösta prisinformation med samma kanalstruktur som Pricing Gateway och Analytics Engine. Detta innebär en dubblering av alla obligatoriska TIB-kanaler i JMS. Även om vi skapar en mellanliggande komponent mellan prissättningspartén och klienten, måste prissättningsporten fortfarande duplicera alla kanaler i JMS. Å andra sidan tillåter implementeringslogiken direkt i prissättningsporten att vi undviker att duplicera det stora antalet kanaler i JMS, vilket gör att vi kan skapa ett mycket mindre antal kanaler i storleksordningen av en per näringsidkare. Prissättningsporten registrerar sig via CTIB-kanaladaptern som konsument för varje bindning av varje näringsidkare i systemet. Då skickar prissättningsporten varje enskild klient endast meddelanden som är relaterade till den specifika näringsidkaren. På detta sätt använder vi endast ett litet antal meddelandekanal s på JMS-änden, samtidigt som vi maximerar fördelarna med separationen på TIB-änden. Den fullständiga marknadsdataflödet till kunden Meddelandekanalens layoutdiskussion är ett bra exempel på hur integrering av mönster är viktigt. Målet här var att ta reda på hur man effektivt använder Message Channel s. Att säga att du använder ett mönster är inte tillräckligt. Du måste räkna ut hur du bäst implementerar det och införlivar i ditt system för att lösa problemen vid handen. Dessutom visar detta exempel företagskrafter i åtgärd. Om vi skulle kunna genomföra affärslogik i någon av våra komponenter kunde vi ha gått med per näringsidkare och implementera en övergripande enklare strategi med många mindre kanaler. Välja en meddelandekanal Nu när vi känner till kommunikationsmekanismerna mellan JavaJMS-komponenterna och C TIBCO-komponenterna, och vi har sett en del meddelandekanalstrukturering, måste vi bestämma vilken typ av JMS-meddelandekanal som Java-komponenterna ska använda för att kommunicera . Innan vi kan välja mellan de olika meddelandekanalerna som finns i JMS, kan vi titta på systemets höga meddelandeflöde. Vi har två gateways (Pricing and Contribution) kommunicera med kunden. Marknadsdata strömmar till klienten från prissättningsporten som skickar ut den till bidragsporten. Klientapplikationen skickar meddelande till prissättningsporten för att ändra analysen som tillämpas på varje bindning. Bidragsporten skickar också meddelanden till klientprogrammet som återställer statusen för prisuppdateringarna till de olika handelsplatserna. Systemmeddelandeströmmen JMS-specifikationen beskriver två meddelandekanaltyper, punkt-till-punkt-kanal (JMS Queue) och Publicera-Subscribe Channel (JMS-ämne). Minns att fallet för att använda public-subscribe är att möjliggöra för alla intresserade konsumenter att få ett meddelande medan fallet för att använda punkt-till-punkt är att se till att endast en berättigad konsument mottar ett visst meddelande. Många system skulle helt enkelt sända meddelanden till alla klientprogram och låta varje enskild klientprogram bestämma sig själv huruvida ett visst meddelande ska behandlas eller ej. Detta fungerar inte för vår ansökan eftersom det finns ett stort antal marknadsdatameddelanden som skickas till varje klientprogram. Om vi sänder marknadsdatauppdateringar till ointresserad näringsidkare kommer vi att behöva slösa bort processorns processer för att klara av huruvida en marknadsdatauppdatering ska behandlas eller inte. Point-to-Point-kanal s låter ursprungligen som ett bra val eftersom klienterna skickar meddelanden till unika servrar och visad versa. Men det var ett företags krav att handlare kan vara inloggade på flera maskiner samtidigt. Om vi har en näringsidkare inloggad på två arbetsstationer samtidigt och en pris-till-punkt-prisuppdatering skickas, kommer bara en av de två klientapplikationerna att få meddelandet. Detta beror på att endast en konsument på en Point-to-Point-kanal kan få ett visst meddelande. Observera att endast den första av varje grupp av en handlare klient applikationer får meddelandet. Punkt-till-punkt-meddelanden för prisuppdateringar Vi kan lösa detta med hjälp av mönstret Mottagarlista, som publicerar meddelanden till en lista över avsedda mottagare, vilket garanterar att endast klienter i mottagarlistan kommer att få meddelanden. Med hjälp av detta mönster kan systemet skapa mottagarlistor med alla applikationer för klientapplikationer relaterade till varje näringsidkare. Att skicka ett meddelande relaterat till en viss näringsidkare skulle i sin tur skicka meddelandet till varje applikation i mottagarlistan. Detta garanterar att alla klientapplikationer som är relaterade till en viss näringsidkare skulle få meddelandet. Nackdelen med detta tillvägagångssätt är att det kräver en hel del implementeringslogik för att hantera mottagarna och skicka meddelanden. Mottagarlista för prisuppdateringar Även om punkt-till-punkt kan göras till jobbet, kan vi se om det finns ett bättre sätt. Med hjälp av Public-Subscribe Channel s kan systemet sända meddelanden på specifika kanaler för näringsidkare i stället för klientprogramspecifika kanaler. På så sätt skulle alla klientprogram som behandlar meddelanden för en enda näringsidkare ta emot och bearbeta meddelandet. Publicera-Prenumerera Meddelanden för prisuppdateringar Nackdelen med att använda Public-Subscribe Channel s är att unik meddelandebehandling inte garanteras med serverkomponenterna. Det skulle vara möjligt att inställa flera instanser av en serverkomponent och varje instans behandlar samma meddelande, eventuellt sänder ut ogiltiga priser. Minns systemmeddelandeströmmen är endast en enda kommunikationsriktning tillfredsställande med varje meddelandekanal. Server-till-klient kommunikation med publicera-prenumerera är tillfredsställande medan kund-till-serverkommunikation inte är och klient-server kommunikation med punkt-till-punkt är tillfredsställande medan servern klienten inte är. Eftersom det inte finns något behov av att använda samma meddelandekanal i båda riktningarna, kan vi använda varje meddelandekanal endast en riktning. Klient-till-server kommunikation kommer att implementeras med punkt-till-punkt medan kommunikation mellan server och kund kommer att implementeras med publicera-prenumerera. Med hjälp av denna kombination av Message Channel s, har systemet fördelar från direktkommunikation med serverkomponenterna med hjälp av punkt-till-punkt-meddelanden och multicast-naturen av publicera-prenumerera utan någon av nackdelarna. Meddelandeflöde med kanaltyper Problemlösning med mönster Mönster är verktyg och samlingar av mönster är verktygslådor. De hjälper till att lösa problem. Vissa tror att mönster endast är användbara under design. Efter verktygslådans analogi är det som att säga att verktyg bara är användbara när du bygger ett hus, inte när du fixar det. Faktum är att mönster är ett användbart verktyg under ett projekt när de tillämpas bra. I följande avsnitt använder vi samma prospekteringsprocess som vi använde i föregående avsnitt för att lösa problem i vårt nuvarande system. Blinkande marknadsdatauppdateringar Traders vill att bordsceller ska blinka när ny marknadsdata tas emot för ett obligationer, vilket tydligt visar förändringar. Java-klienten mottar meddelanden med ny data som utlöser en uppdatering av klientdatabasen och så småningom blinkar i tabellen. Problemet är att uppdateringar kommer ganska ofta. GUI-trådstacken blir överbelastad och fryser slutligen kunden eftersom den inte kan svara på användarens interaktion. Vi antar att blinkningen optimeras och koncentreras på dataflödet av meddelanden genom uppdateringsprocessen. En granskning av prestandadata visar att klientapplikationen mottar flera uppdateringar en sekund, några uppdateringar inträffade mindre än en millisekund från varandra. Two patterns that seem like they could help slow down the message flow are Aggregator and Message Filter. A first thought is to implement a Message Filter to control the speed of the message flow by throwing out updates received a small amount of time after the reference message. As an example, lets say that we are going to ignore messages within 5 milliseconds of each other. The Message Filter could cache the time of the last acceptable message and throw out anything received within the next 5 milliseconds. While other applications may not be able to withstand data loss to such an extent, this is perfectly acceptable in our system due to the frequency of price updates. Time based Message Filter The problem with this approach is that not all data fields are updated at the same time. Each bond has approximately 50 data fields displayed to the user including price. We realize that not every field is updated in every message. If the system ignores consecutive messages, it may very well be throwing out important data. The other pattern of interest is the Aggregator . The Aggregator is used to manage the reconciliation of multiple, related messages into a single message, potentially reducing the message flow. The Aggregator could keep a copy of the bond data from the first aggregated message, then update only new or changed fields successive messages. Eventually the aggregated bond data will be passed in a message to the client. For now, lets assume that the Aggregator will send a message every 5 milliseconds like the Message Filter . Later, well explore another alternative. Aggregator with partial successive updates The Aggregator . like any other pattern, is not a silver bullet it has its pluses and minuses that need to be explored. One potential minus is that implementing an Aggregator would reduce the message traffic by a great amount in our case only if many messages are coming in within a relatively short time regarding the same bond. On the other hand, we would accomplish nothing if the Java client only receives updates for one field across all of the traders bonds. For example, if we receive 1000 messages in a specified timeframe with 4 bonds of interest, we would reduce the message flow from 1000 to 4 messages over that timeframe. Alternatively, if we receive 1000 messages in the same timeframe with 750 bonds of interest, we will have reduced the message flow from 1000 to 750 messages relatively little gain for the amount of effort. A quick analysis of the message updates proves that the Java client receives many messages updating fields of the same bond, and therefore related messages. So, Aggregator is in fact a good decision. Whats left is to determine how the Aggregator will know when to send a message it has been aggregating. The pattern describes a few algorithms for the Aggregator to know when to send the message. These include algorithms to cause the aggregator to send out its contents after a certain amount of time has elapsed, after all required fields in a data set have been completed, and others. The problem with all of these approaches is that the aggregator is controlling the message flow, not the client. And the client is the major bottleneck in this case, not the message flow. This is because the Aggregator is assuming the consumers of its purged messages (the client application in this case) are Event-Driven Consumer s, or consumers that rely on events from an external source. We need to turn the client into a Polling Consumer . or a consumer that continuously checks for messages, so the client application can control the message flow. We can do this by creating a background thread that continuously cycles through the set of bonds and updates and flashes any changes that have occurred since the last iteration. This way, the client controls when messages are received and as a result, guarantees that it will never become overloaded with messages during high update periods. We can easily implement this by sending a Command Message to the Aggregator initiating an update. The Aggregator will respond with a Document Message containing the set of updated fields that the client will process. The choice of Aggregator over Message Filter is clearly a decision based solely on the business requirements of our system. Each could help us solve our performance problems, but using the Message Filter would solve the problem at cost of the system data integrity. Major Production Crash With the performance of the flashing fixed, we are now in production. One day the entire system goes down. MQSeries crashes, bringing several components down with it. We struggle with the problem for a while and finally trace it back to the MQSeries dead letter queue (an implementation of the Dead Letter Channel ). The queue grows so large that it brings down the entire server. After exploring the messages in the dead letter queue we find they are all expired market data messages. This is caused by slow consumers, or consumers that do not process messages fast enough. While messages are waiting to be processed, they time out (see the Message Expiration pattern) and are sent to the Dead Letter Channel . The excessive number of expired market data messages in the dead letter queue is a clear indication that the message flow is too great messages expire before the target application can consume them. We need to fix the message flow and we turn to patterns for help slowing down the message flow. A reasonable first step is to explore solving this problem with the Aggregator as we recently used this pattern to solve the similar flashing market data control rate problem. The system design relies on the client application to immediately forward market data update messages to the trading venues. This means the system cannot wait to collect messages and aggregate them. So the Aggregator must be abandoned. There are two other patterns that deal with the problem of consuming messages concurrently: Competing Consumers and Message Dispatcher . Starting with Competing Consumers . the benefit of this pattern is the parallel processing of incoming messages. This is accomplished using several consumers on the same channel. Only one consumer processes each incoming message leaving the others to process successive messages. Competing Consumers . however, will not work for us since we are using Publish-Subscribe Channel s in server-to-client communication. Competing Consumers on a Publish-Subscribe Channel channel means that all consumers process the same incoming message. This results in more work without any gain and completely misses the goal of the pattern. This approach also has to be abandoned. On the other hand, the Message Dispatcher describes an approach whereby you add several consumers to a pool. Each consumer can run its own execution thread. One main Message Consumer listens to the Channel and delegates the message on to an unoccupied Message Consumer in the pool and immediately returns to listening on the Message Channel . This achieves the parallel processing benefit of Competing Consumers . but works on Publish-Subscribe Channel s. The Message Dispatcher in context Implementing this in our system is simple. We create a single JMSListener called the Dispatcher, which contains a collection of other JMSListener s called Performers. When the onMessage method of the Dispatcher is called, it in turn picks a Performer out of the collection to actually process the message. The result of which is a Message Listener (the Dispatcher) that always returns immediately. This guarantees a steady flow of message processing regardless of the message flow rate. Additionally, this works equally well on a Publish-Subscribe Channel s as it does on a Point-to-Point Channel s. With this infrastructure, messages can be received by the client application at almost any rate. If the client application is still slow to process the message after receiving them, the client application can deal with the delayed processing and potentially outdated market data rather than the messages expiring in the JMS Message Channel . The crash discussed in this section and the fix using the Message Dispatcher is an excellent example of the limits of applying patterns. We encountered a performance problem based on a design flaw not allowing the client to process messages in parallel. This greatly improved the problem, but did not completely fix it. This is because the real problem was the client becoming a bottleneck. This couldnt be fixed with a thousand patterns. We later addressed this problem by refactoring the message flow architecture to route messages directly from the Pricing Gateway to the Contribution Gateway. So patterns can help design and maintain a system, but dont necessarily make up for poor upfront design. Throughout this chapter, we have applied patterns to several different aspects of a bond trading system including solving initial upfront design problems and fixing a nearly job threatening production crash with patterns. We also saw these patterns as they already exist in third party product, legacy components, and our JMS and TIBCO messaging systems. Most importantly, these are real problems with the same types of architectural, technical and business problems we experience as we design and maintain our own systems. Hopefully reading about applying patterns to this system helps give you a better understanding of the patterns as well as how to apply them to your own systems. Want to keep up-to-date Follow My Blog . Want to read more in depth Check out My Articles . Want to see me live See where I am speaking next . Find the full description of this pattern in: Enterprise Integration Patterns Gregor Hohpe and Bobby Woolf ISBN 0321200683 650 pages Addison-Wesley From Enterprise Integration to Enterprise Transformation: My new book describes how architects can play a critical role in IT transformation by applying their technical, communication, and organizational skills with 37 episodes from large-scale enterprise IT. Parts of this page are made available under the Creative Commons Attribution license. You can reuse the pattern icon, the pattern name, the problem and solution statements (in bold), and the sketch under this license. Other portions of the text, such as text chapters or the full pattern text, are protected by copyright. Messaging Patterns 187 Integration Patterns in Practice 187 Case Study: Bond Trading System
No comments:
Post a Comment