Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

28
Análise de frameworks de sockets em Java Luciano Macedo Rodrigues

Transcript of Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Page 1: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Análise de frameworks de sockets em Java

Luciano Macedo Rodrigues

Page 2: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Tópicos

Introdução Frameworks – SEDA Frameworks - Apache MINA Frameworks - QuickServer Análises Análises - Apache JMeter Análises - Problema Resultado das análises Conclusão Bibliografia e anexos

Page 3: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Introdução O objetivo do meu trabalho é apresentar uma comparação entre

diferentes frameworks em Java para comunicação TCP/IP que utilizam os pacotes da Sun para N/IO e Sockets

Para isso, foram escolhidos os frameworks que preenchiam os seguintes requisitos: Alta performance Alta escalabilidade Rapidez no desenvolvimento Open source

Neste trabalho analisaremos a performance de 3 diferentes frameworks: SEDA Apache MINA QuickServer

Page 4: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Frameworks - SEDA SEDA: stage event-driven architecture Matt Welsh, Harvard University Trabalho da tese de doutorado na universidade UC Berkley

visando o desenvolvimento de uma plataforma robusta e de alta performance para serviços de Internet

Utiliza uma arquitetura em estágios determinados por eventos e decompõe uma aplicação de eventos complexos em um conjunto de estágios conectados por filas. Este design evitaria o alto overhead associado aos modelos de concorrência baseados em threads, e desacopla o escalonamento de eventos e threads da lógica de aplicação

http://www.eecs.harvard.edu/~mdw/proj/seda/

Page 5: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Frameworks - SEDA (cont.)

Arquitetura organizada em estágios baseados em eventos

Modelo de um servidor determinado por eventos Cada FSM representa uma única requisição ou fluxo

através do sistema.

Um estágio no SEDAUm estágio é composto de uma fila de eventos, um

pool de threads e um gerenciador de eventos fornecido pela aplicação. A operação é gerenciada pelo Controller, que ajusta a alocação de recursos

dinamicamente

Page 6: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Frameworks - SEDA (cont.) Objetivos

Suportar alta concorrência para evitar perda de performance ocasianada pela criação de threads, o SEDA

utiliza a execução baseada em eventos sempre que possível. Isso também requer que o sistema forneça primitivas de I/O escaláveis e eficientes

utiliza código nativo para execução usando JNI (Java Native Interface) Simplificar a construção de serviços bem estruturados

para reduzir reduce a complexidade na construção de serviços de Internet, o SEDA esconde do programador detalhes de escalonamento e alocação de recursos. O design permite a construção de aplicações em módulos, facilitando a depuração e profiling.

Instrospecção as aplicações devem poder analisar o fluxo de requisições para adaptar seu

comportamento as condições atuais. Por exemplo, o sistema deve poder priorizar e filtrar requisições sob carga alta.

Suportar auto-ajuste e alocação de recursos dinâmica ao invés de impor um limite para aplicação de recursos, ajustar a aplicação de

acordo com o requerido pelos clientes e a performance desejada.

Page 7: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Frameworks - Apache MINA MINA: Multipurpose Infrastructure for Network Applications Framework de alta produtividade e com design “elegante”, e fácil

aprendizagem Alta performance:

Assíncrono Arquitetura baseada em eventos

Testes unitários para simulações sem necessidade de um cliente real

Extensível através da modificação em tempo real do comportamento da aplicação através do uso de filtros

Reusabilidade e manutenibilidade Separação do código de sockets (MINA), codec de protocolo e

lógica de aplicação http://directory.apache.org/subprojects/mina/

Page 8: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Frameworks - Apache MINA (cont.)

IoSessionManager Onde as operações de I/O

ocorrem IoFilters

Filtra eventos de I/O · requisições IoHandler

<Lógica de aplicação> IoSession

Representa uma conexão

Remote Peer

IoSessionManager

IoHandler

IoFilterChain

CoreExtension Point

Protocol Implementation

Legend

Filtered I/O Event I/

O Re

ques

t

I/O Event

Filte

red

I/O

Requ

est

Low-level

I/O

Low

-leve

l I/

O

IoFilter #1

IoFilter #2IoFilter #3

IoSession

Page 9: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Frameworks - Apache MINA (cont.)

IoAcceptor IoConnector

nio::DatagramConnector

nio::SocketConnector

vmpipe::VmPipeAcceptor vmpipe::VmPipeConnector

nio::DatagramAcceptor

nio::SocketAcceptor

IoSessionManagerServidor: aceita

clientesCliente: conecta-se ao servidor

E suas implementações

Page 10: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Frameworks - Apache MINA (cont.) IoFilters

Um interceptador de eventos e requisições Reusabilidade Utiliza um pool de threads Registro de eventos Hot-deployable Exemplo

SSL – TLS

Page 11: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Frameworks - Apache MINA (cont.)

IoAcceptor IoHandler

No thread pool: single thread setting for minimal latency

IoAcceptorThreadPoolFilter

CPU-intensive

jobs(IoFilter)

ThreadPoolFilter

IoHandler

More than one thread pool: special setting for CPU-intensive jobs

IoAcceptorThreadPoolFilter

IoHandler

One thread pool: general setting for high throughput

Page 12: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Frameworks - Apache MINA (cont.) IoFilters: ProtocolCodecFilter Separação explícita e reusabilidade

Lógica de negócio – IoHandler Codec de protocolo – ProtocolCodecFilter

Page 13: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Frameworks - Apache MINA (cont.)Remote Peer

IoSessionManager

IoHandler

IoFilterChain

CoreExtension Point

Protocol Implementation

Legend

Filtered I/O Event I/

O Re

ques

t

I/O Event Filte

red

I/O

Requ

est

Low-level I/O

Low-

level

I/

O

IoSession

ProtocolCodecFilter

Protocol Codec Factory

EncoderDecoder

Encode

Decode

POJO → ByteBuffer

Apenas lógica de negócio!

ByteBuffer → POJO

Page 14: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Frameworks - QuickServer Abstrai a classe java.net.ServerSocket, facilitando

a criação de servidores robustos O esforço fica concentrado na lógica de aplicação e

protocolos Desenvolvida e implementada por Akshathkumar

Shetty Configuração de serviços e alocação de recursos

em XML Provém uma interface de administração remota,

permitindo avaliar as condições reais do servidor http://www.quickserver.org/

Page 15: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Frameworks - QuickServer (cont.) Arquitetura e interfaces de serviços

Page 16: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Frameworks - QuickServer (cont.) QuickServer divide a lógica de aplicaçao em

4 classes ClientCommandHandler

Interação com o cliente - comandos em Strings ClientObjectHandler [Classe opcional]

Interação com o cliente - comandos em objetos Authenticator [Classe opcional]

Usada para autenticar um cliente ClientData [Classe opcional]

Usada para compôr os dados enviados por um cliente (classe de suporte)

Page 17: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Frameworks - QuickServer (cont.)

Page 18: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Análises Para análise dos frameworks foi implementado um servidor HTTP

em cada framework, rodando na porta 8080 Este servidor deverá fornecer uma resposta HTTP válida e um

conteúdo do tamanho de 1kb Serão analisados os seguintes casos de carga:

1. 10 usuários simultâneos, 100 requisições por usuário2. 100 usuários simultâneos, 100 requisições por usuário3. 1.000 usuários simultâneos, 100 requisições por

usuário Serão analisados o tempo de resposta, throughput, taxa de

transmissão alcançada e porcentagem de erros As análises serão realizadas usando a ferramenta JMeter, do

projeto Apache A infra-estrutura usará o Java 5 e sistema operacional Windows

Page 19: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Análises – Apache JMeter

Aplicação desktop 100% escrita em Java desenvolvida para testar o funcionamento, comportamento e performance de sites Web

Inicialmente tinha este objetivo, mas foi expandida para outras funcionalidades, podendo analisar diversos outros serviços

Altamente configurável e interface intuitiva http://jakarta.apache.org/jmeter/

Page 20: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Análises – Problema Apesar de ter sido estudado e implementado, o

servidor HTTP do framework SEDA não pode ser utilizado

Por usar código nativo, o framework exigia a compilação de uma biblioteca escrita em C/C++. O framework não vem acompanhado da biblioteca nativa para Windows

Existe uma extensão para Windows 2000 que acompanha código-fonte e a DLL necessária. A tentativa de usar a DLL fornecida e de outra obtida através da compilação do código-fonte falhou.

Logo, o framework SEDA não terá seu desempenho analisado!

Page 21: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Resultado das análises - Apache Mina

Samples 1.000 10.000 100.000

Média (ms) 20 33 237

Máximo (ms) 125 1015 5188

% Erros 0 35,9 80,5

Throughput (requisições/s) 378,6 433,3 263,7

KB/s 369,7 474,92 329,06

Page 22: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Resultado das análises - Apache MinaApache MINA

0

1000

2000

3000

4000

5000

6000

1.000 10.000 100.000

Média (ms) Máximo (ms) % Erros Throughput (requisições/s) KB/s

Page 23: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Resultado das análises - QuickServerSamples 1.000 10.000 100.000

Média (ms) 59 318 893

Máximo (ms) 953 1829 18297

% Erros 1 60,15 82,65

Throughput (requisições/s) 162,9 224,2 223,7

KB/s 159,58 262,88 278,75

Page 24: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Resultado das análises - QuickServer

QuickServer

0

2000

4000

6000

8000

10000

12000

14000

16000

18000

20000

1.000 10.000 100.000

Média (ms) Máximo (ms) % Erros Throughput (requisições/s) KB/s

Page 25: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Resultado das análises - combinado Combinado

0

2000

4000

6000

8000

10000

12000

14000

16000

18000

20000

1.000 10.000 100.000

Média (ms) - MINA Máximo (ms) - MINA% Erros - MINA Throughput (requisições/s) - MINAKB/s - MINA Média (ms) - QuickServerMáximo (ms) - QuickServer % Erros - QuickServerThroughput (requisições/s) - QuickServer KB/s - QuickServer

Page 26: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Conclusão

Melhor desempenho Apache MINA

Maior facilidade de desenvolvimento Ambos foram de fácil desenvolvimento

Maior número de funcionalidades QuickServer

Possui já suporte a parar/suspender o servidor e uma interface de administração

Ficou faltando o uso do SEDA para ver como se comportaria com o uso de código nativo Assim, poderia se ter um benchmark mais específico de

sistemas operacionais

Page 27: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Conclusão (cont.) Houve pouca alteração conforme a carga exigida no

Apache MINA Para garantir que não houvessem erros, foi

verificada se a carga de dados correspondia ao pacote enviado (1k) Esta taxa manteve-se muito alta no QuickServer

Os frameworks facilitam em muito a programação por permitirem manter o foco na lógica de aplicação

Porém, o desempenho verificado foi abaixo do esperado Alto índice de erros Throughput baixo

Page 28: Análise de frameworks de sockets em Java Luciano Macedo Rodrigues.

Bibliografia e anexos

Bibliografia A bibliografia deste trabalho baseia-se nas

apresentações de arquitetura dos frameworks disponíveis em PDF nos sites incluídos neste trabalho

Anexos Código-fonte das aplicações JAR necessários para compilação Projeto de teste do JMeter