Thursday 28 December 2017

V8 options trading review


Ajustando o WebSphere Application Server V7 e V8 para desempenho O IBM WebSphere Application Server é um servidor de aplicativos de classe corporativa robusto que fornece um conjunto básico de componentes, recursos e serviços que os desenvolvedores podem utilizar em suas aplicações. Cada aplicativo possui um conjunto único de requisitos e geralmente usa recursos de servidores de aplicativos de maneiras muito diferentes. A fim de fornecer um alto grau de flexibilidade e suporte para esta grande variedade de aplicações, WebSphere Application Server oferece uma extensa lista de botões de ajuste e parâmetros que você pode usar para melhorar o desempenho das aplicações. Os valores padrão para os parâmetros de sintonia mais utilizados no servidor de aplicativos são configurados para garantir um desempenho adequado fora da caixa para a mais ampla gama de aplicativos. No entanto, porque não há duas aplicações são iguais ou usar o servidor de aplicativos exatamente da mesma forma, não há garantia de que qualquer conjunto de parâmetros de ajuste será perfeitamente adequado para cada aplicação. Esta realidade realça a importância de você realizar testes de desempenho focados e afinar suas aplicações. Este artigo discute vários dos parâmetros mais utilizados no WebSphere Application Server V7 e V8 (e versões anteriores) e as metodologias usadas para sintonizá-los. Ao contrário de muitas recomendações de sintonização documentadas, este artigo usa o aplicativo Apache DayTrader Performance Benchmark Sample como um estudo de caso para fornecer contexto à discussão. Com o aplicativo DayTrader, você será capaz de identificar claramente os principais componentes de servidor em uso, executar o ajuste focado nessas áreas, e testemunhar o benefício associado com cada mudança de afinação. As informações contidas neste artigo se aplicam às versões 7 e 8 do WebSphere Application Server, exceto quando indicado. Antes de prosseguir, aqui estão algumas coisas adicionais para manter em mente ao ajustar seu servidor de aplicativos para o desempenho: Aumento de desempenho pode muitas vezes envolvem sacrificar um certo nível de recurso ou função no aplicativo ou o servidor de aplicativos. A troca entre o desempenho e o recurso deve ser ponderada cuidadosamente ao avaliar as alterações de ajuste de desempenho. Vários fatores além do servidor de aplicativos podem afetar o desempenho, incluindo a configuração de hardware e SO, outros processos em execução no sistema, desempenho de recursos de banco de dados de back-end, latência de rede e assim por diante. Você deve avaliar esses itens ao realizar suas próprias avaliações de desempenho. As melhorias de desempenho detalhadas aqui são específicas para o aplicativo DayTrader, mix de carga de trabalho e a pilha de hardware e software de suporte descrita aqui. Quaisquer ganhos de desempenho para o seu aplicativo resultantes das mudanças de afinação detalhadas neste artigo certamente variam e devem ser avaliados com seus próprios testes de desempenho. O aplicativo DayTrader Da idéia à produção em minutos Não deixe a integração limitada diminuir sua velocidade. Entregue consistentemente software de alta qualidade mais rápido usando serviços DevOps para IBM Bluemix uma solução de ponta a ponta com os serviços que você precisa para oferecer suas idéias inovadoras rapidamente. O aplicativo Referência de Desempenho Amostra Apache DayTrader simula um aplicativo de negociação de ações simples que permite aos usuários loginlogout, ver sua carteira, olhar para cima as cotações de ações, comprar e vender parcela do estoque e gerenciar informações da conta. O DayTrader não serve apenas como um excelente aplicativo para testes funcionais, mas também fornece um conjunto padrão de carga de trabalho para caracterizar e medir o desempenho do servidor de aplicativos e do nível de componente. DayTrader (e o aplicativo Trade Performance Benchmark Sample da IBM no qual o DayTrader foi originalmente baseado) não foi escrito para fornecer o melhor desempenho. Em vez disso, os aplicativos destinam-se a realizar comparações de desempenho relativo entre versões do servidor de aplicativos e estilos e padrões de implementação alternativos. O DayTrader é construído em um conjunto básico de tecnologias Java Java 800 (Java EE) que incluem servlets Java e JavaServer8482 Pages (JSPs) para a camada de apresentação e conectividade de banco de dados Java (JDBC), Java Message Service (JMS), Enterprise JavaBeans8482 (EJBs ) E feixes orientados por mensagem (MDBs) para a lógica de negócios back-end e a camada de persistência. A Figura 1 mostra uma visão geral de alto nível da arquitetura do aplicativo. Figura 1. Visão geral do aplicativo DayTrader Para que você avalie alguns padrões comuns de persistência e gerenciamento de transações do Java EE, o DayTrader fornece três implementações diferentes dos serviços empresariais. Essas implementações (ou modos de tempo de execução) são mostradas na Tabela 1. Tabela 1. Implementações do DayTrader As configurações do pool de threads podem ser alteradas no console administrativo, navegando para Servidores gt Servidores de Aplicativos gt servername gt Thread Pool. Você também pode usar o Performance Advisors para obter recomendações sobre tamanhos de pool de threads e outras configurações. O IBM Tivoli174 Performance Viewer é uma ferramenta incorporada no console administrativo que permite visualizar os dados do PMI (Performance Monitoring Infrastructure) associados a quase todos os componentes do servidor. O visualizador fornece conselhos para ajudar a ajustar sistemas para um desempenho ideal e recomenda alternativas para configurações ineficientes. Consulte o Centro de Informações do WebSphere Application Server para obter instruções sobre como ativar e visualizar dados PMI com o Tivoli Performance Viewer. A Figura 9 mostra os dados do PMI para o grupo de discussão do contêiner da Web enquanto o aplicativo DayTrader foi aumentado e executado sob carga de pico no estado estacionário. O tamanho do pool (laranja) é o número médio de threads no pool e a contagem ativa (vermelho) é o número de threads simultaneamente ativos. Este gráfico mostra que a configuração padrão de 50 threads de contêiner da Web máxima funciona bem neste caso, pois todos os 50 segmentos não foram alocados e a carga de trabalho concorrente média está usando cerca de 18 threads. Como o dimensionamento padrão do pool de threads foi suficiente, não foram feitas modificações no dimensionamento do conjunto de threads. Figura 9. Dados do PMI para o conjunto de threads do contêiner da Web Antes do WebSphere Application Server V6.x, existia um mapeamento um-para-um entre o número de conexões de cliente simultâneas e os segmentos no grupo de threads do contêiner da Web. Em outras palavras, se 40 clientes acessassem um aplicativo, foram necessários 40 tópicos para atender os pedidos. No WebSphere Application Server V6.0 e 6.1, foram introduzidos IO Nativo (NIO) e IO assíncrono (AIO), fornecendo a capacidade de dimensionar milhares de conexões de clientes usando um número relativamente pequeno de threads. Isso explica por que, na Figura 9, uma média de 18 threads foram usados ​​para atender 50 conexões de clientes simultâneas do driver de carga HTTP. Com base nessas informações, o tamanho do pool de threads pode ser reduzido para reduzir os custos indiretos envolvidos com o gerenciamento de um pool de threads maior que o necessário. No entanto, isso diminui a capacidade do servidor para responder a picos de carga em que um grande número de threads realmente eram necessários. Deve-se considerar cuidadosamente a determinação dos tamanhos do pool de threads, incluindo o que a média esperada e a carga de trabalho máxima podem ser. C. Tamanho do pool de conexão Cada vez que um aplicativo tenta acessar uma loja back-end (como um banco de dados), ele requer recursos para criar, manter e liberar uma conexão para esse armazenamento de dados. Para mitigar a tensão que este processo pode colocar nos recursos globais do aplicativo, o servidor de aplicativos permite que você estabeleça um conjunto de conexões de back-end que os aplicativos podem compartilhar em um servidor de aplicativos. O pool de conexões espalha a sobrecarga de conexão em várias solicitações de usuários, conservando recursos de aplicativos para pedidos futuros. As importantes opções ajustáveis ​​associadas aos pools de conexão são mostradas na Tabela 4. Tabela 4. Opções de sintonização do pool de conexão O número mínimo de conexões físicas a serem mantidas. Se o tamanho do pool de conexão for igual ou inferior ao tamanho mínimo do pool de conexão, um thread de tempo limite não utilizado não descartará as conexões físicas. No entanto, o pool não cria conexões apenas para garantir que o tamanho mínimo do pool de conexão seja mantido. O número máximo de conexões físicas que podem ser criadas neste grupo. Estas são as conexões físicas para o armazenamento de dados back-end. Quando este número é alcançado, nenhuma conexão física nova é criada. Os solicitantes devem aguardar até que uma conexão física que esteja atualmente em uso seja retornada ao pool, ou até que um ConnectionWaitTimeoutException seja lançado, com base na configuração de tempo limite de conexão. Definir um alto valor máximo de conexões pode resultar em uma carga de solicitações de conexão que supera seu recurso back-end. Tempo limite de inatividade do thread Especifica a quantidade de inatividade (em milissegundos) que deve decorrer antes de um processo ser recuperado. Um valor de 0 indica não esperar, e um valor negativo (menos de 0) significa esperar para sempre. O objetivo de afinar o pool de conexão é garantir que cada segmento que precisa de uma conexão com o banco de dados tenha um, e esses pedidos não estão pendurados esperando para acessar o banco de dados. Para o aplicativo DayTrader, cada tarefa executa uma consulta contra o banco de dados. Como cada thread executa uma tarefa, cada thread simultâneo precisa de uma conexão de banco de dados. Normalmente, todos os pedidos são enviados por HTTP e são executados em um segmento de contêiner da Web. Portanto, o tamanho máximo do pool de conexão deve ser pelo menos tão grande quanto o tamanho máximo do pool de threads do contêiner da Web. Esteja ciente, no entanto, não é uma prática recomendada para todos os cenários. O uso de um pool de conexão grande ou maior do que o pool de contatos do contêiner da Web garante que não há threads na espera de uma conexão e fornece o desempenho máximo para um único servidor. No entanto, para um ambiente que possui vários servidores de aplicativos, todos conectados ao mesmo banco de dados de back-end, uma consideração cuidadosa deve ser colocada no tamanho do pool de conexão. Se, por exemplo, há dez servidores de aplicativos acessando um banco de dados com 50 conexões no pool de conexão, o que significa que até 500 conexões podem ser solicitadas ao mesmo tempo no banco de dados. Este tipo de carga poderia facilmente causar problemas no banco de dados. Uma melhor abordagem aqui é usar o método de funil, em que o número de threads de contêiner da Web é maior do que o número de conexões no pool de conexão. Isso garante que sob carga extrema, nem todos os tópicos ativos estão recebendo uma conexão com o banco de dados em um único momento. Isso produzirá tempos de resposta mais longos, mas tornará o ambiente muito mais estável. Em geral, a melhor prática geral é determinar quais threads agrupam tarefas de serviço que requerem uma conexão DataSource e dimensionam os pools de acordo. Nesse caso, uma vez que estamos focados em alcançar o melhor desempenho para um único servidor, o tamanho máximo do pool de conexão foi definido como a soma do tamanho máximo dos conjuntos de threads padrão do contêiner da Web (70). As configurações do pool de conexão podem ser alteradas no console administrativo, navegando para Recursos gt JDBC gt Fontes de dados gt fonte de dados gt Propriedades do pool de conexão. Tenha em mente que todas as aplicações podem não ser tão bem comportadas como DayTrader a partir de uma perspectiva de gerenciamento de conexão e, portanto, podem usar mais de uma conexão por thread. A Figura 10 mostra os dados PMI para o pool de conexão enquanto o aplicativo DayTrader estava sendo executado sob carga de pico no estado estacionário com os tamanhos de pool de conexão padrão de 1 mínimo10 máximo. FreePoolSize (orange) é o número de conexões gratuitas no pool e UseTime (verde) é o tempo médio (em ms) que uma conexão é usada. Este gráfico mostra que todas as 10 conexões foram sempre utilizadas. Além das métricas de gráficos, a tabela também mostra algumas outras métricas de chave: WaitingThreadCount mostra 33 threads esperando por uma conexão com o banco de dados com um WaitTime médio de 8,25 ms, e o pool global é 100 ocupado, como mostrado pela métrica PercentUsed. Figura 10. Métricas PMI antes de sintonizar o pool de conexão A Figura 11 mostra o mesmo gráfico depois de ajustar o pool de conexão a um tamanho de 10 mínimo70 máximo. Isso mostra que havia muitas conexões gratuitas disponíveis e que nenhum segmento estava esperando por uma conexão, o que produz tempos de resposta muito mais rápidos. Figura 11. Métricas PMI após o ajuste do conjunto de conexões Figura 12. Benefício de desempenho dos tamanhos de pool de conexão sintonizada Para obter mais informações: d. O tamanho do cache da indicação da fonte de dados O tamanho do cache da indicação da fonte de dados especifica o número de instruções JDBC preparadas que podem ser armazenadas em cache por conexão. A fonte de dados do WebSphere Application Server otimiza o processamento de instruções preparadas e declarações chamativas ao armazenar em cache as instruções que não estão sendo usadas em uma conexão ativa. Se o seu aplicativo utilizar muitas declarações, como DayTrader, então, aumentar esse parâmetro pode melhorar o desempenho do aplicativo. O tamanho do cache da indicação pode ser configurado navegando para Recursos gt JDBC gt Fontes de dados gt fonte de dados gt Propriedades da fonte de dados do WebSphere Application Server. O tamanho do cache da indicação da fonte de dados pode ser ajustado usando alguns métodos diferentes. Uma técnica é rever o código do aplicativo (ou um rastreamento SQL obtido do banco de dados ou driver de banco de dados) para todas as declarações preparadas únicas e garantir que o tamanho do cache seja maior que esse valor. A outra opção é aumentar iterativamente o tamanho do cache e executar o aplicativo sob o pico de carga estável até que as métricas PMI informem que não há mais descartas de cache. A Figura 13 mostra o mesmo gráfico PMI do pool de conexão, desta vez com o tamanho do cache da indicação da fonte de dados aumentado do tamanho padrão (que é 10) para 60. A métrica PrepStmtCacheDiscardCount (vermelho) é o número de declarações descartadas porque o O cache está cheio. Olhando para trás no gráfico na Figura 11, antes de ajustar o tamanho do cache da indicação da fonte de dados, o número de instruções descartadas foi de mais de 1,7 milhões. O gráfico na Figura 13 mostra que não houve nenhuma declaração descartada depois de ajustar o tamanho do cache. Figura 13. Métricas PMI após ajustar o tamanho do cache da indicação da fonte de dados Figura 14. Benefício de desempenho do tamanho aumentado do cache da indicação da fonte de dados Para obter mais informações: e. Passo ORB por referência A opção Passe by Reference da Broker Request Request (ORB) determina se a passagem por referência ou a semântica de passagem por valor devem ser usadas ao manusear objetos de parâmetros envolvidos em uma solicitação de EJB. Esta opção pode ser encontrada no console administrativo navegando para Servidores gt Servidores de Aplicativos gt servername gt Object Request Broker (ORB). Por padrão, esta opção está desativada e uma cópia de cada objeto de parâmetro é feita e passada para o método invocado EJB. Isso é consideravelmente mais caro do que passar uma referência simples ao objeto de parâmetro existente. Para resumir, a opção ORB pass by reference trata basicamente o método EJB invocado como uma chamada local (mesmo para EJBs com interfaces remotas) e evita a cópia do objeto requerido. Se as interfaces remotas não são absolutamente necessárias, uma alternativa ligeiramente mais simples que não requer ajuste é usar EJBs com interfaces locais. No entanto, ao usar interfaces locais em vez de remoto, você perde os benefícios comumente associados às interfaces remotas, a transparência de localização em ambientes distribuídos e os recursos de gerenciamento de carga de trabalho. A opção ORB pass by reference só proporcionará um benefício quando o cliente EJB (isto é, servlet) e o módulo EJB invocado estiverem localizados dentro do mesmo classloader. Este requisito significa que tanto o cliente EJB como o módulo EJB devem ser implantados no mesmo arquivo EAR e executados na mesma instância do servidor de aplicativos. Se o cliente EJB e os módulos EJB forem mapeados para diferentes instâncias do servidor de aplicativos (muitas vezes designados como nível dividido), os módulos EJB devem ser invocados remotamente usando a semântica de passagem por valor. Como o aplicativo DayTrader contém módulos WEB e EJB no mesmo EAR, e ambos são implantados na mesma instância do servidor de aplicativos, a opção ORB pass by reference pode ser usada para obter um ganho de desempenho. Conforme indicado pelas medidas mostradas na Figura 15, esta opção é extremamente benéfica para o DayTrader, onde todas as solicitações dos servlets são passadas para os beans de sessão sem estado em uma interface remota - exceto no modo direto, onde o contêiner EJB é ignorado em vez de JDBC direto e transações manuais. Figura 15. Benefício de desempenho da passagem ORB por referência Para mais informações: Sintonização avançada Discutida nesta seção: a. Armazenamento de servlets O WebSphere Application Servers DynaCache fornece um serviço geral de armazenamento em memória para objetos e fragmentos de página gerados pelo servidor. As interfaces DistributedMap e DistributedObjectCache podem ser usadas em um aplicativo para armazenar em cache e compartilhar objetos Java armazenando referências a esses objetos no cache para uso posterior. O armazenamento em cache de servlets, por outro lado, permite que os fragmentos de resposta servlet e JSP sejam armazenados e gerenciados por um conjunto customizável de regras de cache. No aplicativo DayTrader, um Resumo do Mercado é exibido em todos os acessos de uma página inicial de usuários. Este resumo contém uma lista das cinco principais ações de ganho e perda, bem como o atual índice de ações e volume de negociação. Esta atividade requer a execução de várias pesquisas de banco de dados e, portanto, atrasa significativamente o carregamento da página inicial dos usuários. Com o cache de servlets, o marketSummary. jsp pode ser armazenado em cache, eliminando praticamente essas consultas de banco de dados caras para melhorar o tempo de resposta para a página inicial do usuário. O intervalo de atualização para o objeto em cache pode ser configurado e é definido como 60 segundos no exemplo mostrado na Listagem 1. O Dynacache também pode ser usado para armazenar outros fragmentos e dados do servletJSP no DayTrader. Este exemplo demonstra a melhoria que você pode alcançar através do armazenamento em cache para evitar operações complexas do servidor. O cache do Servlet pode ser ativado no console administrativo, navegando para Servidores gt Servidores de aplicativos gt servername gt Configurações do contêiner da Web gt Contentor da Web. O caminho URI para o servlet ou JSP a ser armazenado em cache deve ser definido em um arquivo cachespec. xml, que é colocado dentro do diretório WEB-INF dos módulos da Web. Para o marketSummary. jsp no DayTrader, o cachespec. xml parece semelhante ao Listado 1. Listagem 1. cachespec. xml Figura 16. Benefício de desempenho do cache de servlet Para obter mais informações: b. Conexões persistentes de transporte HTTP As conexões persistentes especificam que uma resposta HTTP de saída deve usar uma conexão persistente (manter-viva) em vez de uma conexão que fecha após uma solicitação ou troca de resposta ocorrer. Em muitos casos, um aumento de desempenho pode ser alcançado aumentando o número máximo de solicitações persistentes que são permitidas em uma única conexão HTTP. As conexões SSL podem ver um ganho significativo de desempenho, permitindo solicitações persistentes ilimitadas por conexão porque as conexões SSL incorrem na sobrecarga onerosa da troca de chaves e dos protocolos de negociação para completar o processo de handshake SSL. Maximizar o número de pedidos que podem ser manipulados por conexão minimiza o impacto desta sobrecarga. Além disso, aplicações de alto rendimento com tempos de resposta rápidos podem realizar um ganho de desempenho ao manter as conexões abertas, em vez de aumentar e fechar a conexão em cada solicitação. Quando esta propriedade é definida como 0 (zero), a conexão permanece aberta enquanto o servidor do aplicativo estiver sendo executado. No entanto, se a segurança for uma preocupação, uma consideração cuidadosa deve ser colocada nesta configuração, pois esse parâmetro pode ajudar a evitar ataques de negação de serviço quando um cliente tenta manter uma conexão keep-alive. As configurações de conexões persistentes de transporte HTTP podem ser definidas no console administrativo, navegando para Servidores gt Servidores de aplicativos gt servername gt Ports. Uma vez lá, clique em Visualizar transportes associados para a porta associada às configurações do canal de transporte HTTP que deseja alterar. Durante o teste do DayTrader, as solicitações persistentes máximas por valor de conexão foram alteradas de 100 (o padrão) para ilimitado. Os gráficos da Figura 17 mostram os resultados da transferência de acesso a um servlet Hello World simples em relação ao HTTP padrão (não SSL) e HTTPS (SSL), tanto antes quanto depois de permitir solicitações persistentes ilimitadas por conexão. Figura 17. Benefícios de desempenho de solicitações persistentes ilimitadas por conexão Para obter mais informações: c. Suporte de página grande Várias plataformas oferecem a capacidade de estabelecer uma grande seção contígua de memória usando páginas de memória que são maiores que o tamanho da página de memória padrão. Dependendo da plataforma, grandes tamanhos de página de memória podem variar de 4 MB (Windows) a 16 MB (AIX) versus o tamanho de página padrão de 4KB. Muitas aplicações (incluindo aplicativos baseados em Java) geralmente se beneficiam de páginas grandes devido a uma redução na sobrecarga da CPU associada ao gerenciamento de números menores de páginas grandes. Para usar páginas de memória grandes, você deve primeiro definí-las e habilitá-las dentro do sistema operacional. Cada plataforma possui requisitos de sistema diferentes que devem ser configurados antes que suporte de página grande possa ser ativado. O Centro de Informações do WebSphere Application Server documenta cada uma dessas etapas pela plataforma: uma vez configurado no sistema de operação, o suporte de página grande dentro da JVM pode ser habilitado especificando - Xlp nas configurações de Argumentos JVM Genéricos no console administrativo em Servidores gt Servidores de Aplicativos gt Nome do servidor gt Definição do processo gt Java Virtual Machine. Esteja ciente de que, se páginas grandes estiverem ativadas, o sistema operacional reservará um grande pedaço contínuo de memória para uso pela JVM. Se a quantidade de memória restante não for suficiente para lidar com os outros aplicativos que estão sendo executados, a paginação (troca de páginas na memória para páginas no disco rígido) pode ocorrer, o que reduzirá significativamente o desempenho do sistema. Figura 18. Benefícios de desempenho de páginas grandes Para obter mais informações: d. Desabilitando os serviços não utilizados Desativar os serviços não utilizados que um aplicativo não precisa pode melhorar o desempenho. Um exemplo desse tipo é PMI. É importante notar que o PMI deve estar habilitado para visualizar as métricas documentadas anteriormente neste artigo e receber aconselhamento dos assessores de desempenho. Ao desabilitar o PMI remove a capacidade de ver essa informação, também fornece um pequeno ganho de desempenho. O PMI pode ser desativado em uma base de servidor de aplicativos individual no console administrativo, navegando para Monitoramento e Ajuste de Infraestrutura de Monitoramento de Desempenho (PMI) do Gt. Figura 19. Benefícios de desempenho da desativação do PMI Para obter mais informações: e. Localização do servidor Web Os servidores da Web, como o IBM HTTP Server, geralmente são usados ​​na frente das implantações do WebSphere Application Server para lidar com o conteúdo estático ou para fornecer recursos de gerenciamento de carga de trabalho (WLM). Nas versões do WebSphere Application Server anteriores ao V6, os servidores da Web também eram necessários para efetivamente lidar com milhares de conexões de clientes recebidas, devido ao mapeamento um-para-um entre as conexões do cliente e os tópicos do contêiner da Web (discutidos anteriormente). No WebSphere Application Server V6 e posterior, isso não é mais necessário com a introdução de NIO e AIO. Para ambientes que utilizam servidores da Web, as instâncias do servidor Web devem ser colocadas em sistemas dedicados separados das instâncias do WebSphere Application Server. Se um servidor Web for colocado em um sistema com uma instância do WebSphere Application Server, eles efetivamente compartilharão recursos de processador valiosos, reduzindo o throughput global para a configuração. Um teste DayTrader foi conduzido com o IBM HTTP Server colocado localmente na mesma máquina que o WebSphere Application Server e um segundo teste foi conduzido com o servidor da Web localizado remotamente em uma máquina dedicada separada. A Tabela 5 mostra a porcentagem de ciclos de CPU consumidos por cada processo quando o servidor da Web e o servidor de aplicativos foram colocados no mesmo sistema. Como você pode ver nos resultados, aproximadamente 25 da CPU foram consumidos pelo processo HTTP Server que corresponde a uma única CPU no sistema de quatro CPU que foi usado para este teste. Tabela 5. Utilização da CPU com o servidor HTTP Figura 20. Taxa de transferência com e sem um servidor Web Sintonia de mensagens assíncronas A maioria deste artigo focou até agora os principais aspectos de atendimento e persistência da Web do aplicativo DayTrader e do WebSphere Application Server. Agora, mudaremos o foco para como o DayTrader usa componentes JMS para executar o processamento assíncrono de ordens Buysell e para monitorar as mudanças nas cotações. O aplicativo de benchmark DayTrader contém dois recursos de mensagens que podem ser ativados ou desativados de forma independente: processamento de pedidos assíncronos: o processo de compra e venda assíncrono é tratado por uma fila JMS e um MDB. Rastreamento de consistência de preço de cotação: um tópico JMS e MDB são usados ​​para monitorar alterações de preços de cotação associadas a ordens de compra e venda de ações. Existem duas opções principais de sintonia associadas à configuração de mensagens que terá um impacto significativo no desempenho: o tipo de armazenamento de mensagens e a confiabilidade da mensagem. Além disso, uma técnica de afinação mais avançada que renderá ganhos de desempenho adicionais é colocar os registros de transações e a loja de arquivos (se aplicável) em um disco rápido. Cada um desses tópicos e seus ganhos de desempenho correspondentes são discutidos em detalhes abaixo. Discutido nesta seção: a. Tipo de loja de mensagens O provedor de mensagens interno do WebSphere Application Servers mantém o conceito de um armazenamento de dados do mecanismo de mensagens. O armazenamento de dados serve como o repositório persistente de mensagens manipuladas pelo motor. Quando um mecanismo de mensagens é criado em um ambiente de servidor único, uma loja baseada em arquivo é criada para usar como armazenamento de dados padrão. No WebSphere Application Server V6.0.x, o armazenamento de dados padrão foi fornecido por um banco de dados Derby local em processo. O arquivo e as lojas de dados baseadas em Derby são convenientes para cenários de servidor único, mas não fornecem o mais alto nível de desempenho, escalabilidade, capacidade de gerenciamento ou alta disponibilidade. Para atender a esses requisitos, você pode usar um armazenamento de dados de banco de dados remoto: armazenamento de dados do banco de dados local Derby: Com esta opção, um banco de dados Derby local, em processo, é usado para armazenar as informações operacionais e as mensagens associadas ao mecanismo de mensagens. Embora conveniente para fins de desenvolvimento, esta configuração usou ciclos e memória valiosos dentro do servidor de aplicativos para gerenciar as mensagens armazenadas. Armazenamento de dados baseado em arquivo: (padrão) Se o mecanismo de mensagem estiver configurado para usar um armazenamento de dados baseado em arquivo, as informações e mensagens operacionais serão mantidas no sistema de arquivos em vez de um banco de dados. Isso funciona mais rápido do que o banco de dados Derby local e, quando um disco rápido, como uma matriz redundante de discos independentes (RAID) é usado, pode executar o mesmo que um banco de dados remoto. Os resultados do teste mostrados abaixo não usaram um dispositivo RAID para o armazenamento de dados baseado em arquivo e não refletem essa melhoria adicional. Loja de dados do banco de dados remoto: nesta configuração, um banco de dados residente em um sistema remoto é configurado para atuar como o armazenamento de dados do mecanismo de mensagens. Isso liberta ciclos para o processo JVM do servidor de aplicativos que foram usados ​​anteriormente para gerenciar o banco de dados Derby ou lojas baseadas em arquivos, permitindo que um servidor de banco de dados de nível de produção mais performante (como IBM DB2174 Enterprise Server) fosse usado. Uma vantagem técnica de usar um banco de dados para o armazenamento de dados é que alguns aplicativos J2EE8482 podem compartilhar conexões JDBC para se beneficiar da otimização de confirmação em uma fase. Para obter mais informações, consulte informações sobre o compartilhamento de conexões para se beneficiar da otimização de confirmação em uma fase. A loja de arquivos não suporta esta otimização. DayTrader foi executado no modo assíncrono EJB com esses três diferentes tipos de armazenamento de mensagens. Durante essas corridas, a especificação de rastreamento org. apache. geronimo. samples. daytrader. util. Logall foi habilitada para capturar o tempo para receber mensagens para o TradeBrokerMDB. Ao medir o desempenho de mensagens assíncronas, é sempre importante basear as medidas nos tempos de resposta do MDB que são assíncronos - e não os tempos reais de resposta da página, que são síncronos. Os resultados na Figura 21 mostram que uma loja de dados de banco de dados remota produz o melhor desempenho, pois fornece o tempo de resposta MDB mais rápido e a maior taxa de transferência. Figura 21. Comparação de desempenho dos tipos de armazenamento de mensagens Para obter mais informações: b. Nível de confiabilidade da mensagem A confiabilidade da mensagem é um componente importante para qualquer sistema de mensagens e o provedor de mensagens do WebSphere Application Server fornece cinco diferentes níveis de confiabilidade: Melhor esforço não persistente Express não persistente Confiável não persistente Confiável persistente Garantizado persistente. As mensagens persistentes são sempre armazenadas em alguma forma de armazenamento de dados persistente, enquanto as mensagens não persistentes geralmente são armazenadas em memória volátil. Existe um trade-off aqui entre a confiabilidade da entrega da mensagem e a velocidade com que as mensagens são entregues. A Figura 22 mostra os resultados para duas corridas de teste usando uma loja de arquivos com diferentes níveis de confiabilidade: assegurada persistente e expressa não persistente. Os resultados ilustram claramente que à medida que o nível de confiabilidade diminui, mais rápido as mensagens podem ser processadas. Figura 22. Comparação de desempenho dos níveis de confiabilidade da mensagem Para mais informações: c. Movendo o log de transações e o armazenamento de arquivos em um disco rápido Como as operações de disco IO são dispendiosas, o armazenamento de arquivos de log em discos rápidos, como um RAID, pode melhorar consideravelmente o desempenho. Na maioria das configurações RAID, a tarefa de escrever dados na mídia física é compartilhada entre as várias unidades. Essa técnica produz mais acesso simultâneo ao armazenamento para informações de transações persistentes e acesso mais rápido a esses dados dos logs. O diretório de log de transações pode ser configurado no console administrativo, navegando para Servidores gt Servidores de Aplicativos gt servername gt Container Services gt Transaction Service. O diretório de log de armazenamento de arquivo pode ser especificado durante a criação de um membro do SIBus usando a opção - logDirectory no comando AdminTask addSIBusMember ou através dos painéis de criação do SIBus Member do console de administração. A Figura 23 mostra os resultados para duas corridas de teste: uma com os logs de transações e armazenamento de arquivos armazenados localmente no disco rígido e outro com eles armazenados em um RAMDisk (que essencialmente trata uma seção de memória como um disco rígido para leituras mais rápidas e Escreve). Para essas corridas, utilizou-se um nível de confiabilidade de express-non-persistent. Os resultados mostram que os tempos de resposta e a taxa de transferência são ligeiramente mais rápidos quando os logs são armazenados em um disco rápido. Figura 23. Benefícios de desempenho do uso de um disco rápido Para obter mais informações: o IBM WebSphere Application Server foi projetado para hospedar uma gama cada vez maior de aplicativos, cada um com seu próprio conjunto exclusivo de recursos, requisitos e serviços. Essa flexibilidade afirma a realidade de que nenhum dos dois aplicativos usará o servidor de aplicativos exatamente da mesma maneira, e nenhum conjunto de parâmetros de sintonia proporcionará o melhor desempenho para duas aplicações diferentes. Even though DayTrader might not resemble your application, the methodology for figuring out what to tune and how to go about tuning it is the same. The key is to identify and focus in on the major server components and resources used by your application, based on the application architecture. In general, a large number of applications will realize some improvement from tuning in three core areas: the JVM, thread pools, and connection pools. Other tunables might yield just as much bang for the buck however, these will typically be tied to a specific WebSphere Application Server feature used by the application. This article discussed this core set of tunables plus other options that benefit the DayTrader application. For each of the options, you were given information on where to find the tunable, general recommendations or cautions about any trade-offs, and pointers to related tools, if any. Figure 24 shows the overall performance improvement for each DayTrader run time mode after these tuning options were applied: JVM heap size Thread pool size Connection pool size Data source statement cache size ORB pass by reference Servlet caching Unlimited persistent HTTP connections Large page support Disabling PMI. Figure 24. Overall performance improvements after tuning options applied As you can clearly see from the figure, the described tuning yielded 169 improvement for EJB mode, 207 improvement for Session Direct mode, and 171 improvement for Direct mode. These are fairly sizable improvements and similar improvements can be realized in other applications however, you must keep in mind that your results will vary based on the factors discussed earlier, and on other factors that are beyond the scope of this article. Hopefully, the information and tools discussed here have provided you with some key insights that will help make the task of tuning your application server for your specific applications less daunting and even less intimidating. Downloadable resources Related topicsAston Martins 2017 Vantage GTS May Be the Last Truly Fun Car: Review You will now receive the Game Plan newsletter McLaren. Mercedes. Audi, xA0and Porsche all make excellent competitors to this Vantage. But each uses a paddle-shifting transmission. On the other hand, Andy Palmer, xA0Aston Martinaposs chief executive officer, has gone on record xA0saying he wants the companyxA0to be the last manufacturer on earth still offering a manual sports cars. As the first journalist to test drive thexA0Vantage, I can safely say it offers strong evidence that Palmer means what he says. The V8 Vantage is the only manual-drive V8 Aston sells. Source: Aston Martin If you are in need of a daily driver sports car that will give you hours of stick-shift delight, call Aston and buy this one. Ix2019d get on that right away, too. Fewer than 10 are left unsold. A Driverx2019s Drive The dawn of thexA0Aston Martin DB11. coming later this summer, has overshadowed this new V8 a bit. Thatx2019s a shame because the Vantage GTS is the most aggressively playful thing Ix2019ve driven all year. It has the same 430-horsepower mid-mounted engine set on a six-speed rear-wheel drive. Itx2019ll take you to 60 miles per hour in 4.6 seconds. Thataposs not the fastest sprint time ever, but this is a clear case of qualitative excellence vs. on-paper specs. (The 361 pound-feet of torque does help.) Top speed is 190mph. Driving this Vantage through Santa Monica streets and up the 405 before the morning rush hour felt as if Iaposd taken a vacation from my problems. Later, the curves on Mulholland Drive were the perfect match for its sport suspension and dynamic stability control it took them with the elegance of a manta ray. The 2017 V8 Vantage GTS Coupe hits 60 miles per hour in 4.6 seconds and has a top speed of 190mph. Photographer: Hannah ElliottBloomberg Aston has given us a thick sport wheel and tight rack-and-pinion power-assisted steering here the turning radius is something to love. The gear box is comfortable to shift through, and the clutch is easy. (Hill-start assist comes standard.) The steel disc brakes respond well when you need them. Itx2019s also welcome to note that the Vantage is just over 172 inches long, a full 10 inches shorter than, say, the Ferrari F12 Berlinetta. and five inches shorter than even a base Porsche 911. You feel the difference: The Vantage gathers itself closer and tighter than they do, and itsxA0steering radius puts all others to shame. Ix2019m not going to make the tired clichxE9 James Bond comparison that unfailingly accompanies every Aston Martin review. Ix2019ll just say that driving this car putsxA0pep in your step when you alight from it. The Vantage has an all-alloy, quad overhead camshaft, 4735-cc V8 engine. xA0 Source: Aston Martin Perfect Proportions As expected, the 2017 Vantage GTS Sport Edition I drove got plenty of attention from the police. (Not to issue a ticket, luckily.) They liked toxA0come over, ask about the engine, and snap a few selfies on the hood. They also wanted to hear the stainless steel sports exhaust system roar awake a few times. I was happy to oblige. On the Vantage GTS Sport Edition, 19-inch five-spoke alloy wheels come standard. Source: Aston Martin Theyx2019re not wrong. Similar to those of the Porsche 911 and Jaguar E-Type, the classic Aston Martin body looks so good because of its proportions. The ratio between the length of the hood, angle of the roofline, stacked rear haunches, and tight back end unlocks the pleasure center of the brain. There is such a thing as absolute beautyx2017a topic for a different columnx2017so suffice it to say that with its sleek body, halogen projector headlamps, and five-spoke alloy wheels, the Vantage GTS is an objectively beautiful machine. xA0xA0 The cobalt blue paint and 19-inch rimsxA0I had come standard you can personalize other wheel optionsxA0for a price rangingxA0from 2,690 to 3,785. There are also plenty of carbon fiber options for the mirrors, handles, and headlamps to match the standard front splitter and diffusers. Do it. You might as well go all-in. Smart Options, No Clutter Inside the Vantage GTS, the differences between this edition and the regular models are mostly cosmetic. Aston gives us special GTS badging on the doorsills, cool indented detailing on the cockpit seats, and suede-like Alcantara on the steering wheel and roof. The gearshift is surrounded by carbon fiber. Heated sport seats, black Alcantara trim, and rear parking sensors, among other luxury accoutrements, come standard. Source: Aston Martin The slight blind spots right at the tip of each shoulder arexA0to be expected. And youx2019ll find yourself stopping for gas a lot: Combined mileage on this thing is only 15 miles per gallon. But the generous ledge for stashingxA0a valise behind you and the ample seating area make you forget the inconvenience. The Vantage has plenty of headroom, shoulder-room, and legroom for tall folks like us. Want more options You can buy a custom umbrella that matches the car (295), a special glass key (750), and a 1,000-watt Bang amp Olufsen sound system (8,330). I like that there isnx2019t too much else on offer here to clutter up the interior. You will be focused on the driving, anyway. The car is a six-speed manual on a short, quick gearbox, with rear-wheel drive. Carbon fiber surrounds the gearshift. Source: Aston Martin The Choice forxA0Manual Fun The V8 Vantage GTS Sport Edition I drove cost 139,000, which includes some options and the destination charges (MSRP: 137,820). Thatx2019s a little less than a Porsche 911 Turbo, which is about 160,000, and itaposs a lot less than a McLaren 570S, which costs around 185,000. Those are great cars. And yes, you might get some side-eyes from ignoramixA0who wonder why you didnx2019t choose the Vantage V12. Ix2019m willing to bet that most people who do that havenx2019t driven this . If you want a real manual driving experience in a high-end daily driver, buy the 2017 Vantage GTS Coupe. After all, youxA0worked at those skills. Donx2019t let them go to waste. The body on the Vantage is made of aluminum, magnesium alloy, composites, and steel it comes with high intensity discharge headlamps and LED rear fog lamps. Source: Aston Martin The manual version of the Vantage GTS Coupe gets 13 miles per gallon in the city and 19mpg on the highway. Source: Aston Martin

No comments:

Post a Comment