Bond Trading System Architecture
Sistemas de negociação O que é um sistema de negociação Um sistema de negociação é simplesmente um grupo de regras específicas, ou parâmetros, que determinam os pontos de entrada e saída para um determinado patrimônio Esses pontos, conhecidos como sinais, são freqüentemente marcados em um gráfico em tempo real e prompt A execução imediata de um trade. Here são algumas das ferramentas de análise técnicas mais comuns utilizados para construir os parâmetros de sistemas de negociação. Moving médias MA. Relative strength. Bollinger Bands. Often, duas ou mais destas formas de indicadores serão combinados em A criação de uma regra Por exemplo, o sistema de crossover MA usa dois parâmetros de média móvel, a longo prazo ea curto prazo, para criar uma regra comprar quando o curto prazo cruza acima do longo prazo, e vender quando o oposto é Por exemplo, um sistema pode ter uma regra que proíbe qualquer compra a menos que a força relativa esteja acima de um certo nível. Mas é uma combinação de todos esses tipos de regras que fazem um sistema de negociação. MSFT Moving Average Cross-Over System Usando 5 e 20 Médias Móveis. Porque o sucesso do sistema global depende de quão bem as regras executam, os comerciantes do sistema gastam tempo otimizando a fim de gerenciar o risco aumentar a quantidade ganha por comércio e alcançar a estabilidade a longo prazo Isso é feito modificando diferentes parâmetros dentro de cada regra Por exemplo, para otimizar o sistema de crossover MA, um comerciante iria testar para ver quais médias móveis 10 dias, 30 dias, etc funcionam melhor e, em seguida, implementá-los Mas a otimização pode melhorar os resultados Por apenas uma pequena margem - é a combinação de parâmetros usados que, em última análise, determinará o sucesso de um sistema. Vantagens Então, por que você pode querer adotar um sistema de negociação. Toma toda a emoção fora do comércio - A emoção é frequentemente citada como um Das maiores falhas dos investidores individuais Os investidores que são incapazes de lidar com as perdas segundo adivinhar suas decisões e acabam perdendo dinheiro Seguindo rigorosamente um sistema pré-desenvolvido, os comerciantes sistema pode renunciar a necessidade Para fazer qualquer decisão, uma vez que o sistema é desenvolvido e estabelecido, a negociação não é empírica, porque é automatizado por reduzir as ineficiências humanas, comerciantes do sistema pode aumentar os lucros. Pode economizar muito tempo - uma vez que um sistema eficaz é desenvolvido e otimizado pouco Para nenhum esforço é exigido pelo comerciante Computadores são frequentemente utilizados para automatizar não só a geração de sinal, mas também a negociação real, de modo que o comerciante é liberado de gastar tempo na análise e fazer trades. It s fácil se você deixar que outros fazê-lo para Você - Precisa de todo o trabalho feito para você Algumas empresas vendem sistemas de negociação que desenvolveram Outras empresas irão dar-lhe os sinais gerados por seus sistemas de negociação interna para uma taxa mensal Tenha cuidado, porém - muitas dessas empresas são fraudulentas Tome um close Olhar para quando os resultados que se vangloriam foram tomadas Depois de tudo, é fácil de ganhar no passado Procure empresas que oferecem um julgamento, que permite testar o sistema em tempo real. Desvantagens Nós vimos as principais vantagens de trabalhar com um sistema de negociação, mas a abordagem também tem suas desvantagens. Sistemas de trituração são complexos - Esta é sua maior desvantagem Nos estágios de desenvolvimento, os sistemas de negociação exigem uma sólida compreensão da análise técnica, a capacidade de Tomar decisões empíricas e um conhecimento profundo de como os parâmetros funcionam. Mas mesmo se você não está desenvolvendo seu próprio sistema de negociação, é importante estar familiarizado com os parâmetros que compõem o que você está usando A aquisição de todas essas habilidades pode ser um desafio. Você deve ser capaz de fazer suposições realistas e efetivamente empregar o sistema - comerciantes do sistema deve fazer suposições realistas sobre os custos de transação Estes consistirão em mais de custos de comissão - a diferença entre o preço de execução eo preço de preenchimento é uma parte dos custos de transação Bear in Mente, muitas vezes é impossível testar os sistemas com precisão, causando um grau de incerteza ao trazer o sistema ao vivo Problemas que ocorrem quando Os resultados simulados diferem muito dos resultados reais são sabidos como o slippage Efetivamente lidar com o slippage pode ser um roadblock principal a desdobrar um system. Development bem sucedido pode ser uma tarefa time-consuming - muito tempo pode ir em desenvolver um sistema negociando para começá-lo funcionar E trabalhar corretamente Conceber um conceito de sistema e colocá-lo em prática envolve a abundância de testes, o que leva um tempo Backtesting histórico leva alguns minutos no entanto, o teste de volta sozinho não é suficiente Os sistemas também devem ser negociados em papel em tempo real, , O deslizamento pode fazer com que os comerciantes façam diversas revisões a seus sistemas mesmo após o deployment. Do que trabalham Há uns scams do Internet do número relacionados à troca do sistema, mas há também muitos sistemas legitimate, bem sucedidos Talvez o exemplo o mais famoso é esse desenvolvido e executado Por Richard Dennis e Bill Eckhardt, que são os comerciantes originais da tartaruga Em 1983, estes dois tiveram uma disputa sobre se um t Rader nasceu ou fez Assim, eles levaram algumas pessoas da rua e treinou-los com base no seu agora famoso sistema de comércio de tartaruga Eles reuniram 13 comerciantes e acabou fazendo 80 anualmente ao longo dos próximos quatro anos Bill Eckhardt disse uma vez, qualquer pessoa com inteligência média Pode aprender a negociar Isso não é ciência do foguete No entanto, é muito mais fácil aprender o que você deve fazer na negociação do que fazê-lo Sistemas de comércio estão se tornando cada vez mais popular entre os comerciantes profissionais, gestores de fundos e investidores individuais - Testamento para quão bem eles trabalham. Dealing com Scams Ao olhar para comprar um sistema comercial, pode ser difícil encontrar um negócio confiável Mas a maioria dos golpes podem ser manchados pelo senso comum Por exemplo, uma garantia de 2.500 anualmente é claramente ultrajante como promete Que com apenas 5.000 você poderia fazer 125.000 em um ano e, em seguida, através de composição por cinco anos, 48.828.125.000 Se isso fosse verdade, wouldn t o comércio criador seu caminho para se tornar um bi Llionaire. Other ofertas, no entanto, são mais difíceis de decodificar, mas uma maneira comum de evitar fraudes é procurar sistemas que oferecem um julgamento gratuito Que maneira você pode testar o sistema mesmo Nunca confie cegamente o negócio se orgulha É também um Uma boa idéia para entrar em contato com outros que usaram o sistema, para ver se eles podem afirmar a sua confiabilidade e rentabilidade. Conclusão Desenvolver um sistema de comércio eficaz não é de modo algum uma tarefa fácil Requer uma sólida compreensão dos muitos parâmetros disponíveis, a capacidade de fazer Pressupostos realistas e tempo e dedicação para desenvolver o sistema No entanto, se desenvolvido e implantado corretamente, um sistema de negociação pode render muitas vantagens Pode aumentar a eficiência, libertar tempo e, mais importante, aumentar os seus lucros. Trading Systems Designing Your System - Part 1. A seção anterior deste tutorial olhou para os elementos que compõem um sistema de negociação e discutiu as vantagens e desvantagens de usar tal sistema em um tr Ading ambiente Nesta seção, vamos construir sobre esse conhecimento, examinando quais os mercados são especialmente adequados para o sistema de negociação Vamos então ter um olhar mais aprofundado sobre os diferentes gêneros de trading systems. Trading em diferentes mercados. Mercado é provavelmente o mercado mais comum para o comércio, especialmente entre os novatos Nesta arena, grandes jogadores como Warren Buffett e Merrill Lynch dominar, e valor tradicional e estratégias de investimento de crescimento são de longe o mais comum. No entanto, muitas instituições investiram significativamente em A concepção, desenvolvimento e implementação de sistemas de negociação investidores individuais estão se juntando a esta tendência, embora lentamente. Aqui estão alguns fatores-chave para se manter em mente quando se utilizam sistemas de negociação em equity markets. The grande quantidade de ações disponíveis permite que os comerciantes para testar sistemas em muitos diferentes Tipos de acções - tudo, desde stocks de balcão extra-balcão extremamente voláteis até balanços azuis não voláteis. Os sistemas negociando podem ser limitados pela baixa liquidez de algumas equidades, especialmente OTC e folhas cor-de-rosa emissões podem comer nos lucros gerados por comércios bem sucedidos, e podem aumentar as perdas OTC e as partes cor-de-rosa da folha incorrem frequentemente taxas de comissão adicionais. Que buscam valor - ou seja, sistemas que usam parâmetros diferentes para determinar se uma segurança é subvalorizada em comparação com seu desempenho passado, seus pares ou o mercado em geral. Mercados de câmbio estrangeiros O mercado de câmbio, ou forex é o maior e mais Mercado líquido no mundo Os governos do mundo, os bancos e outras grandes instituições comércio trilhões de dólares no mercado cambial todos os dias A maioria dos comerciantes institucionais no forex dependem de sistemas de negociação O mesmo se aplica para os indivíduos no forex, Em relatórios econômicos ou payouts. Here do interesse são alguns fatores chaves a manter-se na mente ao usar sistemas negociando no mercado do forex. A liquidez mim N este mercado - devido ao enorme volume - torna os sistemas de negociação mais precisos e eficazes. Não há comissões neste mercado, apenas spreads Portanto, é muito mais fácil fazer muitas transações sem aumentar costspared para a quantidade de ações ou commodities disponíveis, O número de moedas para o comércio é limitado Mas por causa da disponibilidade de pares de moedas exóticas - ou seja, as moedas de países menores - a gama em termos de volatilidade não é necessariamente limitado. Os principais sistemas de negociação utilizados no forex são aqueles que seguem tendências a Popular dizendo no mercado é a tendência é o seu amigo, ou sistemas que compram ou vendem em breakouts Isso ocorre porque os indicadores econômicos muitas vezes causam grandes movimentos de preços ao mesmo tempo. Futuras Equity, forex e mercados de commodities todos oferecem negociação de futuros Este é um popular Veículo para o sistema de negociação por causa da maior quantidade de alavancagem disponível eo aumento da liquidez e volatilidade No entanto, esses fatores podem cortar as duas maneiras que ca N ou amplificar seus ganhos ou amplificar suas perdas Por esta razão, o uso de futuros é normalmente reservado para avançados individuais e institucionais comerciantes do sistema Isso ocorre porque os sistemas de negociação capazes de capitalizar no mercado de futuros exigem personalização muito maior, use indicadores mais avançados e tomar Muito mais para desenvolver Então, o que é melhor É até o investidor individual para decidir qual mercado é mais adequado para o sistema de negociação - cada um tem suas próprias vantagens e desvantagens A maioria das pessoas estão mais familiarizados com os mercados de ações, e esta familiaridade torna o desenvolvimento de um Sistema de negociação mais fácil No entanto, forex é comumente pensado para ser a plataforma superior para executar sistemas de negociação - especialmente entre os comerciantes mais experientes Além disso, se um comerciante decide capitalizar sobre o aumento da alavancagem e volatilidade, a alternativa de futuros é sempre aberto Em última análise, As mãos do sistema developer. Types de Trading Systems. Trend-Seguindo Sistemas O método mais comum Do sistema de negociação é a tendência de seguir o sistema Em sua forma mais fundamental, este sistema simplesmente espera por um movimento de preços significativos, em seguida, compra ou vende nessa direção Este tipo de bancos de sistema na esperança de que esses movimentos de preços irá manter a tendência. Média de Sistemas Freqüentemente utilizado na análise técnica uma média móvel é um indicador que simplesmente mostra o preço médio de um estoque durante um período de tempo A essência das tendências é derivado desta medida A maneira mais comum de determinar a entrada ea saída é um crossover A lógica Por trás disso é simples uma nova tendência é estabelecida quando o preço cai acima ou abaixo de sua tendência média de preço histórico Aqui está um gráfico que traça tanto a linha de preço azul ea linha vermelha MA de 20 dias de IBM. Breakout Systems O conceito fundamental por trás deste tipo Do sistema é semelhante ao de um sistema de média móvel A idéia é que, quando um novo alto ou baixo é estabelecido, o movimento de preços é mais provável que continue na direção da br Eakout Um indicador que pode ser usado na determinação de fugas é uma simples faixa de Bollinger Bollinger Bands mostrar médias de preços altos e baixos e breakouts ocorrem quando o preço encontra as bordas das bandas Aqui está um gráfico que traça linha de preço azul e Bollinger Bands cinza As tendências, há sempre um elemento empírico para considerar a duração da tendência histórica Por exemplo, a média móvel poderia ser para os últimos 20 dias ou para Os últimos cinco anos, de modo que o desenvolvedor deve determinar qual é o melhor para o sistema Outros fatores a serem determinados são os altos e baixos médios em breakout systems. Lagging Nature - médias móveis e sistemas breakout será sempre atrasado Em outras palavras, eles podem Nunca atingiu o topo exato ou inferior de uma tendência Isso inevitavelmente resulta em uma perda de lucros potenciais, o que às vezes pode ser significativo. Efeito Whipsaw - Entre o mercado O efeito whipsaw ocorre quando a média móvel gera um sinal falso - ou seja, quando a média cai apenas no intervalo, em seguida, repentinamente inverte a direção Isso pode afetar o sucesso dos sistemas de tendência seguinte, este é um dos mais comuns. Levam a perdas maciças, a menos que sejam utilizadas eficazes stop-loss e técnicas de gestão de risco. Mercados laterais - Os sistemas que seguem tendências são, por natureza, capazes de ganhar dinheiro apenas em mercados que realmente tendem. No entanto, os mercados também se mantêm dentro de um certo intervalo Por um longo período de tempo. Pode ocorrer uma volatilidade extrema - Ocasionalmente, os sistemas que seguem tendências podem experimentar alguma volatilidade extrema, mas o comerciante deve ficar com seu sistema. A incapacidade de fazê-lo resultará em falha garantida. Objetivo com o sistema de contra-tendência é comprar no mais baixo baixo e vender no mais alto alto A principal diferença entre este eo sistema de tendência seguinte é que o co O sistema untertrend não é auto-correto Em outras palavras, não há tempo definido para sair de posições, e isso resulta em um potencial downside ilimitado Tipos de Sistemas Countertrend Muitos tipos diferentes de sistemas são considerados sistemas countertrend A idéia aqui é comprar quando momentum em Por exemplo, um sinal pode ser gerado quando os estocásticos ou outros indicadores de força relativa caem abaixo de certos pontos. Existem outros tipos de sistemas de negociação de contra-tendência, mas todos eles compartilham o mesmo objetivo fundamental: Por exemplo, um dos fatores que o desenvolvedor do sistema deve decidir sobre os pontos em que os indicadores de força relativa fade. Extreme volatilidade pode ocorrer - Esses sistemas Pode também experimentar alguma volatilidade extrema, e uma incapacidade de ficar com o sistema apesar desta volatilidade resultará em Garantida falha. Descanso ilimitado - Como mencionado anteriormente, há potencial downside ilimitado porque o sistema não é auto-corrigir não há tempo definido para sair positions. Conclusion Os principais mercados para os quais os sistemas de negociação são adequados são os mercados de ações, forex e futuros Cada um desses mercados tem suas vantagens e desvantagens. Os dois principais gêneros de sistemas de negociação são os sistemas de tendência e contra-tendência. Apesar de suas diferenças, ambos os tipos de sistemas, em seus estágios de desenvolvimento, requerem tomada de decisão empírica por parte do desenvolvedor. , Esses sistemas estão sujeitos a extrema volatilidade e isso pode exigir alguma resistência - é essencial que o comerciante do sistema ficar com o seu sistema durante estes tempos Na próxima parcela, vamos dar uma olhada em como criar um sistema de comércio e Discutir alguns dos softwares que os comerciantes do sistema usam para tornar suas vidas mais fáceis. Padrões de Mensagens Padrões de Integração na Prática Estudo de Caso Bon D Sistema de Negociação. Por Jonathan Simon. É fácil distanciar-se de uma grande coleção de padrões ou de uma linguagem padrão Os padrões são a abstração de uma idéia em uma forma reutilizável Muitas vezes, a natureza muito genérica de padrões que os torna tão úteis também os torna difíceis de entender Às vezes, a melhor coisa para ajudar a compreender padrões é um exemplo do mundo real Não um cenário artificial do que poderia acontecer, mas o que realmente acontece eo que vai acontecer. Este capítulo aplica padrões para resolver problemas usando um processo de descoberta O sistema que vamos discutir é um comércio de títulos Com o qual eu trabalhei durante dois anos, desde o projeto inicial até a produção. Exploraremos cenários e problemas que foram encontrados e como resolvê-los com padrões. Isso envolve o processo de decisão de escolher um padrão, bem como a forma de combinar e ajustar padrões para atender As necessidades do sistema E tudo isto é feito tendo em conta as forças encontradas em sistemas reais, incluindo requisitos de negócio, decisões de clientes, Arquitetura e requisitos técnicos, bem como a integração do sistema legado A intenção desta abordagem é fornecer uma compreensão mais clara dos próprios padrões através da aplicação prática. Construir um sistema. Um grande banco de investimento Wall Street estabelece a construir um sistema de precificação de obrigações em um Esforço para agilizar o fluxo de trabalho de sua mesa de negociação de títulos Atualmente, os comerciantes de títulos têm de enviar os preços de um grande número de títulos para vários locais de negociação diferentes, cada um com sua própria interface de usuário O objetivo do sistema é minimizar as minúcias de preços de todos os Suas ligações combinadas com funcionalidade analítica avançada específica para o mercado de títulos em uma única interface de usuário encapsulada Isso significa integração e comunicação com vários componentes sobre vários protocolos de comunicação O fluxo de alto nível do sistema se parece com isto. Primeiro, os dados de mercado entra no mercado de sistema Os dados são dados sobre o preço e outras propriedades do vínculo representando o que as pessoas estão indo G para comprar e vender a ligação para no mercado livre Os dados de mercado é imediatamente enviado para o mecanismo de análise que altera os dados Analytics refere-se a funções matemáticas para aplicações financeiras que alteram os preços e outros atributos de títulos Estas são funções genéricas que utilizam a entrada Variáveis para adaptar os resultados da função a um determinado vínculo O aplicativo cliente que será executado em cada desktop comerciante irá configurar o mecanismo de análise em uma base por comerciante, controlando as especificidades da análise para cada ligação o comerciante está a preços Uma vez que a análise são Aplicada aos dados de mercado, os dados modificados são enviados para vários locais de negociação onde os comerciantes de outras empresas podem comprar ou vender os títulos. Arquitetura com Patterns. With esta visão geral do fluxo de trabalho do sistema, podemos abordar alguns dos problemas arquitetônicos Que encontramos durante o processo de design Vamos dar uma olhada no que sabemos até a data Os comerciantes precisam de um aplicativo muito ágil em Windows NT um D Estações de trabalho do Solaris Portanto, decidimos implementar o aplicativo cliente como um cliente de espessura Java por causa de sua independência de plataforma e sua capacidade de responder rapidamente aos dados de entrada e de dados do usuário No lado do servidor, estamos herdando legado componentes C que nosso sistema utilizará Os componentes de dados de mercado comunicam-se com a infraestrutura de mensagens TIBCO TIB de informação. Estamos herdando os seguintes componentes. Mercado de dados Price Feed Server Publica os dados de mercado de entrada para o TIB. Analytics Engine Executa analítica em dados de mercado de entrada e transmite os dados de mercado modificados para o TIB. Contribution Server Executa toda a comunicação com os locais de negociação Os locais de negociação são componentes de terceiros não controlados pelo banco. Legacy Market Data Subsystem. Legacy Contribuição Subsystem. We necessidade de decidir como os subsistemas separados Java cliente espessa, dados de mercado e contribuição são Indo para comunicar Poderíamos ter o cliente de espessura comunicar diretamente com o le Mas que exigiria muita lógica de negócios no cliente Em vez disso, vamos construir um par de gateways Java para se comunicar com os servidores legados O Gateway de Preços para dados de mercado um Gateway de contribuição para enviar os preços para locais de negociação Isso vai conseguir encapsulamento agradável Da lógica de negócios relacionada a estas áreas Os componentes atuais no sistema são mostrados abaixo As conexões marcadas como indicam que ainda estamos inseguros como alguns dos componentes se comunicarão. O sistema e seus componentes. A primeira questão de comunicação é como integrar o Java thick cliente e os dois componentes do servidor Java, a fim de trocar dados Vamos olhar para os quatro estilos de integração sugeridos neste livro Transferência de arquivos Shared Database Remoto Procedimento Invocação e mensagens Podemos descartar banco de dados compartilhado imediatamente porque queríamos criar uma camada de Abstração entre o cliente eo banco de dados e don t querem ter código de acesso ao banco de dados no cliente File Transfe R pode igualmente ser descartado desde latência mínima é necessária para garantir os preços atuais são enviados para os locais de negociação Isso deixa-nos com uma escolha entre Remote Procedure Invocation ou Messaging. The plataforma Java fornece suporte interno para tanto Remote Procedure Invocation e Messaging A integração de estilo RPC pode ser alcançada usando Remote Method Invocation RMI, CORBA ou Enterprise Java Beans EJB O Java Messaging Service JMS é a API comum para a integração de estilo de mensagens Assim, ambos os estilos de integração são fáceis de implementar em Java. So qual funcionará melhor Para este projeto, Invocação de Procedimento Remoto ou Mensagens Há somente uma instância do Gateway de Preços e uma instância do Gateway de Contribuição no sistema, mas normalmente muitos Clientes Grosso se conectam simultaneamente a esses serviços um para cada operador de bônus que acontece de estar conectado Em um momento particular Além disso, o banco gostaria que este seja um sistema de preços genérico que pode ser utilizado em outras aplicações Então Além de um número desconhecido de Think Clients, pode haver um número desconhecido de outros aplicativos usando os dados de preços saindo do Gateways. A Thick Client ou outro aplicativo usando os dados de preços pode bastante facilmente usar RPC para fazer chamadas para os Gateways para obter Os dados de preços e invocar o processamento No entanto, os dados de preços serão constantemente publicados, e alguns clientes só estão interessados em determinados dados, por isso obter os dados relevantes para os clientes adequados em tempo hábil poderia ser difícil Os clientes poderiam pesquisar os Gateways, mas que Criar um monte de overhead Seria melhor para os Gateways para tornar os dados disponíveis para os clientes, logo que esteja disponível Isso, no entanto, vai exigir que cada Gateway para acompanhar os clientes que estão atualmente ativos, e que querem que os dados particulares Então, quando um novo pedaço de dados se torna disponível que acontecerá várias vezes por segundo, o Gateway terá que fazer um RPC para cada cliente interessado para passar os dados para o clie Nt Idealmente, todos os clientes devem ser notificados simultaneamente, para que cada RPC precisa ser feito em seu próprio segmento concorrente Isso pode funcionar, mas está ficando muito complicado muito rápido. Mensagens simplifica muito este problema Com Messaging podemos definir canais separados para os diferentes tipos De dados de preços Então, quando um Gateway recebe um novo pedaço de dados, ele irá adicionar uma mensagem contendo esses dados para o Canal de Publicação-Assinatura para esse tipo de dados Enquanto isso, todos os clientes interessados em um determinado tipo de dados escutarão no canal para Desse tipo, desta forma, os Gateways podem facilmente enviar novos dados para quem estiver interessado, sem precisar saber quantos aplicativos ouvintes existem ou quais são. Os clientes ainda precisam ser capazes de invocar o comportamento nos Gateways também. Há sempre apenas dois Gateways, e o cliente provavelmente pode bloquear enquanto o método é invocado de forma síncrona, essas invocações de cliente para Gateway podem ser implementadas com bastante facilidade usando RPC. Já estão usando mensagens para a comunicação do Gateway-para-cliente, as mensagens são provavelmente uma maneira tão boa de implementar a comunicação do cliente-à-Gateway também. Conseqüentemente, toda a comunicação entre os Gateways e os clientes será realizada através do messaging Porque todo o Os componentes são escritos em Java, o JMS apresenta uma escolha fácil para o sistema de mensagens Isto está criando efetivamente um Message Bus ou uma arquitetura que tornará possível para sistemas futuros se integrarem com o sistema atual com poucas ou nenhuma mudança na infra-estrutura de mensagens. Maneira, a funcionalidade de negócios do aplicativo pode ser facilmente usado por outro aplicativo o banco desenvolve. Java Componentes Comunicação com JMS. JMS é simplesmente uma especificação e nós precisamos decidir sobre um sistema de mensagens JMS compatível Nós decidimos usar IBM MQSeries JMS porque O banco é uma loja da IBM, usando servidores de aplicativos WebSphere e muitos outros produtos da IBM. Como resultado, usaremos MQSeries já que já Ave uma infra-estrutura de suporte no local e uma licença de site do produto. A próxima questão é como conectar o sistema de mensagens MQSeries com o servidor C Contribution autônomo e TIBCO baseado Market Data e servidores do Google Analytics Engine Precisamos de uma maneira para os consumidores MQSeries Têm acesso às mensagens TIB Mas como Talvez possamos usar o padrão Message Translator para traduzir mensagens TIB em mensagens MQSeries Embora o cliente C para MQSeries serve como um Message Translator usando ele sacrificaria a independência do servidor JMS E embora TIBCO tenha uma API Java, O arquiteto e gerente do cliente o rejeitaram. Como resultado, a abordagem do Message Translator deve ser abandonada. A ponte do servidor TIB para o servidor MQSeries requer comunicação entre C e Java Poderíamos usar o CORBA, mas então o que acontece com a mensagem A close Olhar para o padrão Message Translator mostra que está relacionado com o adaptador de canal em seu uso de protocolos de comunicação O coração de um canal O adaptador é conectar sistemas sem mensagens a sistemas de mensagens Um par de adaptadores de canal que conecta dois sistemas de mensagens é um Messaging Bridge. O propósito de um Messaging Bridge é transferir mensagens de um sistema de mensagens para outro. Isso é exatamente o que estamos fazendo com A complexidade adicionada da comunicação intra-linguagem Java para C Podemos implementar a linguagem cruzada Messaging Bridge usando uma combinação de Adaptadores de Canal e CORBA Vamos construir dois servidores de adaptador de canal leves, um em C gerenciando a comunicação com o TIB e um em Java gerenciando a comunicação com o JMS Estes dois Channel Adapter que são Message Endpoint s se comunicarão uns com os outros via CORBA Como nossa escolha para o MQSeries, usaremos o CORBA ao invés do JNI, uma vez que é um padrão da empresa A ponte de mensagens implementa a mensagem efetivamente simulada Tradução entre sistemas de mensagens aparentemente incompatíveis e linguagens diferentes. Message Translator usando o Channel Adapte O próximo diagrama mostra o projeto atual do sistema, incluindo os Gateways e outros componentes. Este é um bom exemplo de aplicação de padrão. Combinamos dois Adaptadores de Canal com um protocolo de não-mensagens para implementar o padrão Message Translator, usando um padrão para implementar outro Além disso, alteramos o contexto do Adaptador de Canal para ligar dois sistemas de mensagens com um protocolo de tradução de linguagem cruzada sem mensagens, em vez de conectar um sistema de mensagens a um sistema sem mensagens. O sistema atual com os Adaptadores de Canal. Para trabalhar com padrões não é apenas saber quando usar o padrão, mas também como usá-lo mais eficazmente Cada implementação padrão tem que levar em conta especificidades da plataforma de tecnologia, bem como outros critérios de design Esta seção aplica o mesmo processo de descoberta para encontrar O uso mais eficiente do Canal Publish-Subscribe no contexto do servidor de dados de mercado se comunicando com t O mecanismo de análise. Dados de mercado de tempo real se origina com o feed de dados de mercado, um servidor C que difunde dados de mercado no TIB O feed de dados de mercado usa um Canal de Publicação-Inscrição separado para cada vínculo que está publicando preços para Isto pode parecer um pouco extremo desde Cada novo vínculo precisa de seu próprio canal novo Mas isso não é tão grave, uma vez que você realmente não precisa criar canais no TIBCO Em vez disso, os canais são referenciados por um conjunto hierárquico de tópicos chamados temas O servidor TIBCO, em seguida, filtra um único fluxo de mensagens por assunto , Enviando cada assunto único para um canal virtual único O resultado do que é um canal de mensagem muito leve. Nós poderia criar um sistema que publica em alguns canais e os assinantes poderiam ouvir apenas os preços que estão interessados em Isto exigiria assinantes para usar um canal Filtro de Mensagens ou Consumidor Selectivo para filtrar todo o fluxo de dados para preços de obrigações interessantes, decidindo se cada mensagem deve ser processada à medida que é recebida Dado que th E os dados de mercado são publicados em canais dedicados a obrigações, os assinantes podem registar actualizações numa série de obrigações. Isto permite aos assinantes filtrar subscrevendo selectivamente a canais e apenas receber actualizações de interesse, em vez de decidir depois da recepção da mensagem. Observe que o uso de vários canais para evitar a filtragem é um uso não padrão de canais de mensagens No contexto da tecnologia TIBCO no entanto, estamos realmente decidir se implementar ou possuir filtros ou utilizar a filtragem de canal construído em TIBCO - em vez de usar tantos O próximo componente que precisamos projetar é o mecanismo de análise, outro servidor C TIB que irá modificar os dados de mercado e retransmiti-lo para o TIB Embora esteja fora do escopo do nosso desenvolvimento JMS Java, estamos trabalhando em estreita colaboração com o C Equipe para projetá-lo desde que nós somos o motor principal de análise s cliente principal O problema em questão é encontrar a estrutura de canal que mais eficientemente rebroadcas T os dados de mercado recém-modificados. Já que já temos um Canal de Mensagem dedicado por título herdado do feed de preços de dados de mercado, seria lógico modificar os dados de mercado e retransmitir os dados de mercado modificados sobre o canal de mensagem dedicado Message But this will not Trabalho desde que o analytics que modifica os preços de ligações são comerciante específico Se nós rebroadcast os dados modificados no Bond Message Channel nós destruiremos a integridade de dados substituindo dados de mercado genéricos com dados específicos de comerciante Por outro lado, poderíamos ter um tipo de mensagem diferente para trader specific market data that we publish on the same channel allowing subscribers to decide which message they are interested in to avoid destroying the data integrity But then clients will have to implement their own filters to separate out messages for other traders Additionally, there will a substantial increase in messages received by subscribers, placing an unnecessary burden on them. There are two options. One Channel per Trader Each trader has a designated channel for the modified market data This way, the original market data remains intact and each trader application can listen to its specific traders Message Channel for the modified price updates. One Channel per trader per Bond Create one Message Channel per-trader per-bond solely for the modified market data of that bond For example, the market data for bond ABC would be published on channel Bond ABC while the modified market data for trader A would be published on Message Channel Trader A, Bond ABC , modified market data for trader B on Trader B, Bond ABC, and so on. One channel per trader. One channel per bond per trader. There are advantages and disadvantages to each approach The per-bond approach, for example, uses a lot more Message Channel In the worst-case scenario, the number of Message Channel will be the number of bonds total multiplied by the number of traders We can put upper bounds on the number of channels that will be created since we know that there are only around 20 traders and they never price more than a couple hundred bonds This puts the upper limit below the 10,000 range, which is not so outlandish compared to the nearly 100,000 Message Channel the market data price feed is using Also, since we are using the TIB and Message Channel are quite inexpensive, the number of Message Channel s is not a severe issue On the other hand, the sheer number of Message Channel s could be a problem from a management perspective Every time a bond is added a channel for each trader must be maintained This could be severe in a very dynamic system Our system, however, is essentially static It also has an infrastructure for automatically managing Message Channel s This combined with the inherited architecture of a legacy component using a similar approach minimizes the downside This is not to say we should make an unnecessarily excessive number of Message Channel s Rather, we can implement an architectural approach that uses a large number of Message Channel s when there is a reason. And there is a reason in this case that comes down to the location of logic If we implement the per trader approach, the Analytics Engine needs logic to group input and output channels This is because the input channels from the Analytics Engine are per bond and the output Message Channel s would be per trader, requiring the Analytics Engine to route all analytics input from multiple bonds for a particular trader to a trader specific output Message Channel This effectively turns the analytics engine into a Content-Based Router to implement custom routing logic for our application. Following the Message Bus structure, the Analytics Engine is a generic server that could be used by several other systems in the So we don t want to cloud it with system specific functionality On the other hand, the per-bond approach works since the idea of a trader owning the analytics output of bond prices is a company accepted practice The per-bond a pproach keeps the Message Channel separation of the market data feed intact, while adding several more Message Channel s Before we reach the client, we want a Content-Based Router to combine these several channels into a manageable number of channels We don t want the client application running on the trader s desktop to be listening to thousands or tens of thousands of Message Channel s Now the question becomes where to put the Content-Based Router We could simply have the C TIB Channel Adapter forward all of the messages to the Pricing Gateway on a single Message Channel This is bad for two reasons we would be splitting up the business logic between C and Java, and we would lose the benefit of the separate Message Channel s on the TIB side allowing us to avoid filtering later in the data flow Looking at our Java components, we could either place it in the Pricing Gateway or create an intermediary component between the Pricing Gateway and the client. In theory, if we persisted the bond - based separation of Message Channel s all the way to the client, the Pricing Gateway would rebroadcast pricing information with the same channel structure as the Pricing Gateway and Analytics Engine This means a duplication of all of the bond dedicated TIB channels in JMS Even if we create an intermediary component between the Pricing Gateway and the client, the Pricing Gateway will still have to duplicate all of the channels in JMS On the other hand, implementing logic directly in the Pricing Gateway allows us to avoid duplicating the large number of channels in JMS allowing us to create a much smaller number of channels in the order of one per trader The Pricing Gateway registers itself through the C TIB Channel Adapter as a consumer for each bond of every trader in the system Then the Pricing Gateway will forward each specific client only the messages related to that particular trader This way, we only use a small number of Message Channel s on the JMS end, while maximizing the ben efit of the separation on the TIB end. The complete Market Data Flow to the client. The Message Channel layout discussion is a good example of how integrating patterns is important The goal here was to figure out how to effectively use the Message Channel s Saying you use a pattern isn t enough You need to figure out how to best implement it and incorporate into your system to solve the problems at hand Additionally, this example shows business forces in action If we could implement business logic in any of our components, we could have gone with the per trader approach and implemented an overall more simple approach with many less channels. Selecting a Message Channel. Now that we know the mechanics of the communication between the Java JMS components and the C TIBCO components, and we have seen some Message Channel structuring, we need to decide which type of JMS Message Channel s the Java components should use to communicate Before we can choose between the different Message Channels av ailable in JMS, let s look at the high level message flow of the system We have two gateways Pricing and Contribution communicating with the client Market data flows to the client from the Pricing Gateway which sends it out to the Contribution Gateway The client application sends message to the Pricing Gateway to alter the analytics being applied to each bond The Contribution Gateway also sends messages to the Client application relaying the status of the price updates to the different trading venues. The system message flow. The JMS specification describes two Message Channel types, Point-to-Point Channel JMS Queue and Publish-Subscribe Channel JMS Topic Recall that the case for using publish-subscribe is to enable all interested consumers to receive a message while the case for using point-to-point is to ensure that only one eligible consumer receives a particular message. Many systems would simply broadcast messages to all client applications, leaving each individual client application to decide for itself whether or not to process a particular message This will not work for our application since there are a large number of market data messages being sent to each client application If we broadcast market data updates to uninterested trader, we will be unnecessarily wasting client processor cycles deciding whether or not to process a market data update. Point-to-Point Channel s initially sound like a good choice since the clients are sending messages to unique servers and visa versa But it was a business requirement that traders may be logged in to multiple machines at the same time If we have a trader logged in at two workstations simultaneously and a point-to-point price update is sent, only one of the two client applications will get the message This is because only one consumer on a Point-to-Point Channel can receive a particular message Notice that only the first of each group of a trader s client applications receives the message. Point-to-Point Messaging for Pri ce Updates. We could solve this using the Recipient List pattern, which publishes messages to a list of intended recipients, guaranteeing that only clients in the recipient list will receive messages Using this pattern, the system could create recipient lists with all client application instances related to each trader Sending a message related to a particular trader would in turn send the message to each application in the recipient list This guarantees all client application instances related to a particular trader would receive the message The downside of this approach is that it requires quite a bit of implementation logic to manage the recipients and dispatch messages. Recipient List for Price Updates. Even though point-to-point could be made to work, let s see if there is a better way Using Publish-Subscribe Channel s, the system could broadcast messages on trader specific channels rather than client application specific channels This way, all client applications processing messages for a single trader would receive and process the message. Publish-Subscribe Messaging for Price Updates. The downside of using Publish-Subscribe Channel s is that unique message processing is not guaranteed with the server components It would be possible for multiple instances of a server component to be instantiated and each instance process the same message, possibly sending out invalid prices. Recalling the system message flow, only a single communication direction is satisfactory with each Message Channel Server-to-client communication with publish-subscribe is satisfactory while client-to-server communication is not and client-server communication with point-to-point is satisfactory while server-client is not Since there is no need to use the same Message Channel in both directions, we can use each Message Channel only one direction Client-to-server communication will be implemented with point-to-point while server-to-client communication will be implemented with publish-subscribe Using this combination of Message Channel s, the system benefits from direct communication with the server components using point-to-point messaging and the multicast nature of publish-subscribe without either of the drawbacks. Message flow with Channel Types. Problem Solving With Patterns. Patterns are tools and collections of patterns are toolboxes They help solve problems Some think that patterns are only useful during design Following the toolbox analogy, this is like saying that tools are only useful when you build a house, not when you fix it The fact is that patterns are a useful tool throughout a project when applied well In the following sections we will use the same pattern exploration process we used in the previous section to solve problems in our now working system. Flashing Market Data Updates. Traders want table cells to flash when new market data is received for a bond, clearly indicating changes The Java client receives messages with new data which triggers a client data ca che update and eventually flashing in the table The problem is that updates come quite frequently The GUI thread stack is becoming overloaded and eventually freezing the client since it can t respond to user interaction We will assume that the flashing is optimized and concentrate on the data flow of messages through the updating process An examination of performance data shows the client application is receiving several updates a second some updates occurred less than a millisecond apart Two patterns that seem like they could help slow down the message flow are Aggregator and Message Filter. A first thought is to implement a Message Filter to control the speed of the message flow by throwing out updates received a small amount of time after the reference message As an example, lets say that we are going to ignore messages within 5 milliseconds of each other The Message Filter could cache the time of the last acceptable message and throw out anything received within the next 5 milliseco nds While other applications may not be able to withstand data loss to such an extent, this is perfectly acceptable in our system due to the frequency of price updates. Time based Message Filter. The problem with this approach is that not all data fields are updated at the same time Each bond has approximately 50 data fields displayed to the user including price We realize that not every field is updated in every message If the system ignores consecutive messages, it may very well be throwing out important data. The other pattern of interest is the Aggregator The Aggregator is used to manage the reconciliation of multiple, related messages into a single message, potentially reducing the message flow The Aggregator could keep a copy of the bond data from the first aggregated message, then update only new or changed fields successive messages Eventually the aggregated bond data will be passed in a message to the client For now, lets assume that the Aggregator will send a message every 5 mil liseconds like the Message Filter Later, we ll explore another alternative. Aggregator with partial successive updates. The Aggregator like any other pattern, is not a silver bullet it has its pluses and minuses that need to be explored One potential minus is that implementing an Aggregator would reduce the message traffic by a great amount in our case only if many messages are coming in within a relatively short time regarding the same bond On the other hand, we would accomplish nothing if the Java client only receives updates for one field across all of the traders bonds For example, if we receive 1000 messages in a specified timeframe with 4 bonds of interest, we would reduce the message flow from 1000 to 4 messages over that timeframe Alternatively, if we receive 1000 messages in the same timeframe with 750 bonds of interest, we will have reduced the message flow from 1000 to 750 messages relatively little gain for the amount of effort A quick analysis of the message updates proves t hat the Java client receives many messages updating fields of the same bond, and therefore related messages So, Aggregator is in fact a good decision. What s left is to determine how the Aggregator will know when to send a message it has been aggregating The pattern describes a few algorithms for the Aggregator to know when to send the message These include algorithms to cause the aggregator to send out its contents after a certain amount of time has elapsed, after all required fields in a data set have been completed, and others The problem with all of these approaches is that the aggregator is controlling the message flow, not the client And the client is the major bottleneck in this case, not the message flow. This is because the Aggregator is assuming the consumers of its purged messages the client application in this case are Event-Driven Consumer s, or consumers that rely on events from an external source We need to turn the client into a Polling Consumer or a consumer that continu ously checks for messages, so the client application can control the message flow We can do this by creating a background thread that continuously cycles through the set of bonds and updates and flashes any changes that have occurred since the last iteration This way, the client controls when messages are received and as a result, guarantees that it will never become overloaded with messages during high update periods We can easily implement this by sending a Command Message to the Aggregator initiating an update The Aggregator will respond with a Document Message containing the set of updated fields that the client will process. The choice of Aggregator over Message Filter is clearly a decision based solely on the business requirements of our system Each could help us solve our performance problems, but using the Message Filter would solve the problem at cost of the system data integrity. Major Production Crash. With the performance of the flashing fixed, we are now in production One day the entire system goes down MQSeries crashes, bringing several components down with it We struggle with the problem for a while and finally trace it back to the MQSeries dead letter queue an implementation of the Dead Letter Channel The queue grows so large that it brings down the entire server After exploring the messages in the dead letter queue we find they are all expired market data messages This is caused by slow consumers, or consumers that do not process messages fast enough While messages are waiting to be processed, they time out see the Message Expiration pattern and are sent to the Dead Letter Channel The excessive number of expired market data messages in the dead letter queue is a clear indication that the message flow is too great messages expire before the target application can consume them We need to fix the message flow and we turn to patterns for help slowing down the message flow. A reasonable first step is to explore solving this problem with the Aggregator as we recently used this pattern to solve the similar flashing market data control rate problem The system design relies on the client application to immediately forward market data update messages to the trading venues This means the system cannot wait to collect messages and aggregate them So the Aggregator must be abandoned. There are two other patterns that deal with the problem of consuming messages concurrently Competing Consumers and Message Dispatcher Starting with Competing Consumers the benefit of this pattern is the parallel processing of incoming messages This is accomplished using several consumers on the same channel Only one consumer processes each incoming message leaving the others to process successive messages Competing Consumers however, will not work for us since we are using Publish-Subscribe Channel s in server-to-client communication Competing Consumers on a Publish-Subscribe Channel channel means that all consumers process the same incoming message This results in mo re work without any gain and completely misses the goal of the pattern This approach also has to be abandoned. On the other hand, the Message Dispatcher describes an approach whereby you add several consumers to a pool Each consumer can run its own execution thread One main Message Consumer listens to the Channel and delegates the message on to an unoccupied Message Consumer in the pool and immediately returns to listening on the Message Channel This achieves the parallel processing benefit of Competing Consumers but works on Publish-Subscribe Channel s. The Message Dispatcher in context. Implementing this in our system is simple We create a single JMSListener called the Dispatcher, which contains a collection of other JMSListener s called Performers When the onMessage method of the Dispatcher is called, it in turn picks a Performer out of the collection to actually process the message The result of which is a Message Listener the Dispatcher that always returns immediately This guarantee s a steady flow of message processing regardless of the message flow rate Additionally, this works equally well on a Publish-Subscribe Channel s as it does on a Point-to-Point Channel s With this infrastructure, messages can be received by the client application at almost any rate If the client application is still slow to process the message after receiving them, the client application can deal with the delayed processing and potentially outdated market data rather than the messages expiring in the JMS Message Channel. The crash discussed in this section and the fix using the Message Dispatcher is an excellent example of the limits of applying patterns We encountered a performance problem based on a design flaw not allowing the client to process messages in parallel This greatly improved the problem, but did not completely fix it This is because the real problem was the client becoming a bottleneck This couldn t be fixed with a thousand patterns We later addressed this problem by refac toring the message flow architecture to route messages directly from the Pricing Gateway to the Contribution Gateway So patterns can help design and maintain a system, but don t necessarily make up for poor upfront design. Throughout this chapter, we have applied patterns to several different aspects of a bond trading system including solving initial upfront design problems and fixing a nearly job threatening production crash with patterns We also saw these patterns as they already exist in third party product, legacy components, and our JMS and TIBCO messaging systems Most importantly, these are real problems with the same types of architectural, technical and business problems we experience as we design and maintain our own systems Hopefully reading about applying patterns to this system helps give you a better understanding of the patterns as well as how to apply them to your own systems. Want to keep up-to-date Follow My Blog. Want to read more in depth Check out My Articles. Want to s ee me live See where I am speaking next. Find the full description of this pattern in Enterprise Integration Patterns Gregor Hohpe and Bobby Woolf ISBN 0321200683 650 pages Addison-Wesley. From Enterprise Integration to Enterprise Transformation. My new book describes how architects can play a critical role in IT transformation by applying their technical, communication, and organizational skills with 37 episodes from large-scale enterprise IT. Parts of this page are made available under the Creative Commons Attribution license You can reuse the pattern icon, the pattern name, the problem and solution statements in bold , and the sketch under this license Other portions of the text, such as text chapters or the full pattern text, are protected by copyright. Messaging Patterns Integration Patterns in Practice Case Study Bond Trading System.
Comments
Post a Comment