monografia p2pmon final

73
Faculdade de Informática e Administração Paulista Bacharelado em Sistemas de Informação FIAP P2PMON: Um Sistema de monitoramento de servidores de rede baseado em comunicação P2P Geraldo Augusto de Oliveira Netto – RM 60173 São Paulo 2010

Upload: geraldo-netto

Post on 13-Jul-2015

365 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Monografia P2PMON final

Faculdade de Informática e Administração PaulistaBacharelado em Sistemas de Informação

FIAP

P2PMON: Um Sistema de monitoramento de servidores de rede baseado em comunicação P2P

Geraldo Augusto de Oliveira Netto – RM 60173

São Paulo2010

Page 2: Monografia P2PMON final

Faculdade de Informática e Administração PaulistaBacharelado em Sistemas de Informação

FIAP

P2PMON: Um Sistema de monitoramento de servidores de rede baseado em comunicação P2P

Monografia apresentada à Faculdade de Informática e Administração Paulista para obtenção do grau de bacharel em Sistemas de Informação.

Orientador: Prof. Dr. César da Costa Coorientador: Prof. Msc. Alexander Luz Sperandio

São Paulo2010

Page 3: Monografia P2PMON final

II

Este trabalho é dedicado à todas as pessoas

que passaram, estão passando e passarão pela

minha vida. Sem vocês, eu seria nada!

Page 4: Monografia P2PMON final

III

AGRADECIMENTOS

A minha família, em especial, minha mãe;

A Juli;

Ao meu valoroso amigo, Dom Venturini de Matos;

A todos os professores, em especial, os professores:

Alex, César da Costa, Drudi,

Goya, Gustavo, José do Carmo Rodrigues,

Nivaldo e Willian Peixoto.

Senhores, ASNF;

Aos meus amigos do 4SIA (turma 2009), Wesley, Flávio e Otávio;

Page 5: Monografia P2PMON final

IV

RESUMO

Atualmente (2010) a grande complexidade dos ambientes computacionais

tornam a tarefa dos administradores de sistemas e de redes difíceis. Esta

complexidade requer que o administrador utilize muitas ferramentas de software para

conseguir manter o ambiente sem falhas. Com o uso de sistemas de monitoramento,

este cenário torna-se mais complexo. A complexidade das tarefas dos

administradores também aumenta, já que cada ambiente de monitoramento, muitas

vezes, requer uma nova ferramenta específica para o ambiente.

Este trabalho propõe o desenvolvimento de um sistema de monitoramento de

servidores baseado em arquitetura de comunicação não hierárquica chamada Peer-to-

Peer ( P2P). A ferramenta de monitoramento desenvolvida foi chamada de P2PMON.

Ao decorrer do trabalho serão apresentados os componentes e estratégias que

tornaram a ferramenta P2PMON viável.

Uma avaliação da solução proposta é realizada em ambiente de testes. Os

resultados são apresentados em comparativos de tempo e utilização de rede para as

estratégias apresentadas. Além disso, um teste de escalabilidade é executado para

mostrar o comportamento da solução proposta.

Palavras-chave: redes, sistemas distribuídos, cliente-servidor, P2P, monitoramento

Page 6: Monografia P2PMON final

V

ABSTRACT

Currently (2010) the great complexity of computing environments make the

task of network and system administrators difficult. This complexity requires the

administrator to use many software tools in order to keep the environment without

failure. Through the use of monitoring systems, this scenario becomes more

complex. The complexity of the tasks of network and system administrators also

increase, once each monitored environment usually requires a new specific tool for

the environment.

This thesis proposes the development of a server monitoring system based on

a non-hierarchical communication architecture called Peer-to-Peer (P2P). The

monitoring tool developed is called herein P2PMON.

Along this thesis it is presented the components and strategies that make the

tool P2PMON viable.

An evaluation of the proposed solution is performed in a test environment.

The results are presented in comparative time and network utilization for the

strategies presented. In addition, a scalability test is performed to show the behavior

of the proposed solution.

Key words: networks, distributed systems, client-server, P2P, monitoring

Page 7: Monografia P2PMON final

VI

LISTA DE ILUSTRAÇÕES E GRÁFICOS

Figura 01 – Organização em árvore da SMI...............................................................18

Figura 02 – Ciclo de vida de um processo (máquina de estados finitos)....................20

Figura 03 – Grafo regular a esquerda e grafo completo a direita...............................25

Figura 04 – Árvore da dependabilidade......................................................................28

Figura 05 – Tipos de falhas de um sistema.................................................................29

Figura 06 – Configuração 1 para 1 assimétrica..........................................................29

Figura 07 – Configuração n para 1 assimétrica..........................................................30

Figura 08 – Configuração 1 para 1 simétrica..............................................................31

Figura 09 – Configuração round-robin com 4 servidores...........................................31

Figura 10 – Arquitetura do P2PMON e P2PMONWEB.............................................32

Figura 11 – Máquina de estados finitos do P2PMON................................................35

Figura 12 – P2PMON (P2P) x HQ Hyperic (cliente-servidor)...................................35

Figura 13 – Arquitetura do padrão de projeto MVC...................................................40

Figura 14 – Diagrama de Caso de Uso do P2PMON..................................................41

Figura 15 – Diagrama de Caso de Uso do P2PMONWEB.........................................42

Figura 16 – Modelo do banco de dados parte 1..........................................................42

Figura 17 – Modelo do banco de dados parte 2..........................................................43

Gráfico 01 – Porcentagem de CPU utilizada e RAM utilizada no P2PMON.............45

Gráfico 02 – Porcentagem de CPU utilizada e RAM utilizada no HQ Hyperic

agent/server.................................................................................................................45

Page 8: Monografia P2PMON final

VII

LISTA DE FÓRMULAS E TABELAS

Fórmula (1) – Taxa de reuso de classes......................................................................39

Tabela 01 – Contagem de saltos por tipo de técnica...................................................27

Tabela 02 – Comparação entre os dados gerados pelo P2PMON e HQ Hyperic

agent/server.................................................................................................................46

Tabela 03 – Requisitos de software, facilidade de instalação e características...........46

Page 9: Monografia P2PMON final

VIII

LISTA DE ABREVIATURAS E SIGLAS

AES Advanced Encryption Standard

ARM Advanced RISC Machine

ASN.1 Abstract Syntax Notation 1

BNF Backus-Naur Form

CAN Content Addressable Network

CSV Comma Separated values

CUPS Common Unix Printing System

DAO Data Access Object

DDOS Distributed Denial Of Service

DHCP Dynamic Host Configuration Protocol

DHT Distributed Hash Table

DNS Domain Name System

DoD Department of Defence

DOS Denial Of Service

DTO Data Transfer Object

GCJ GNU Compiler for Java

GNU GNU is Not Unix

GoF Gang of Four

GPL General Public License

HTML HyperText Markup Language

HTTP HyperText Transfer Protocol

IBM International Business Machines

IETF Internet Engineering Task Force

IIS Internet Information Services

IPC InterProcess Communication

IPMI Intelligent Platform Management Interface

ISO International Organization for Standardization

ITIL Information Technology Infrastructure Library

ITU International Telecommunication Union

Page 10: Monografia P2PMON final

IX

JDBC Java DataBase Connectivity

JDK Java Development Kit

JNI Java Native Interface

JSON JavaScript Object Notation

JSP JavaServer Pages

JvisualVM Java visual Virtual Machine

JVM Java Virtual Machine

MAC ADDRESS Media Access Control Address

MER Modelo Entidade-Relacionamento

MIB Management Information Base

MIPS Microprocessor without Interlocked Pipeline Stages

MITM Man In The Middle Attack

MTBF Mean Time Between Failure

MTRG Multi Router Traffic Grapher

MVC Model View Controller

NRPE Nagios Remote Plugin Executor

NSCA Nagios Service Check Acceptor

ODBC Open DataBase Connectivity

OID Object IDentifier

OPENNMS OPEN Network Management System

ORG Organization

OSI Open System Interconnection

P2P Peer-to-Peer

P2PMON Peer-to-Peer MONitor

POP3 Post Office Protocol versão 3

POSIX Portable Operating System Interface for uniX

RAM Random Access Memory

RFC Request For Comments

RSA Rivest, Shamir and Adleman

SHA-1 Secure Hash Algorithm 1

SLA Service Level Agreement

SMI Structure of Managed Information

Page 11: Monografia P2PMON final

X

SMTP Simple Mail Transfer Protocol

SNMP Simple Network Management Protocol

SQL Structured Query Language

TCP Transmission Control Protocol

TI Tecnologia da Informação

TO Transfer Object

UDP User Datagram Protocol

UML Unified Modelling Language

VO Value Object

XML Extensible Markup Language

XOR eXclusive OR

YUI Yahoo! User Interface

Page 12: Monografia P2PMON final

XI

SUMÁRIORESUMO...................................................................................................................IV

ABSTRACT................................................................................................................V

LISTA DE ILUSTRAÇÕES E GRÁFICOS...........................................................VI

LISTA DE FÓRMULAS E TABELAS..................................................................VII

LISTA DE ABREVIATURAS E SIGLAS...........................................................VIII

CAPÍTULO 1 – INTRODUÇÃO.............................................................................13

1.1 INTRODUÇÃO....................................................................................................13

1.2 CONTEXTUALIZAÇÃO.....................................................................................13

1.3 OBJETIVOS.........................................................................................................14

1.4 JUSTIFICATIVA..................................................................................................14

1.5 ORGANIZAÇÃO DO TRABALHO....................................................................15

CAPÍTULO 2 – REVISÃO BIBLIOGRÁFICA....................................................16

2.1 PROTOCOLO.......................................................................................................16

2.1.1 O Protocolo SNMP...........................................................................................16

2.2 PROCESSOS E THREADS.................................................................................20

2.3 SISTEMAS DISTRIBUÍDOS..............................................................................21

2.3.1 Sistemas Cliente-Servidor...............................................................................23

2.3.2 Sistemas Peer-to-Peer (P2P)............................................................................24

2.4 MÉTODOS DE ALTA DISPONIBILIDADE E TOLERÂNCIA A FALHAS.....27

CAPÍTULO 3 – MATERIAIS E MÉTODOS.........................................................32

3.1 SOLUÇÃO PROPOSTA......................................................................................32

3.2 COMPONENTE DE SOFTWARE UTILIZADOS..............................................36

3.3 HARDWARE UTILIZADOS...............................................................................38

3.4 TÉCNICAS DE ENGENHARIA DE SOFTWARE UTILIZADAS....................39

3.5 AMBIENTE DE TESTES.....................................................................................44

CAPÍTULO 4 – RESULTADOS E DISCUSSÕES................................................45

CAPÍTULO 5 – CONCLUSÕES.............................................................................49

5.1 CONSIDERAÇÕES FINAIS................................................................................49

5.2 CONCLUSÕES....................................................................................................49

5.2 TRABALHOS FUTUROS...................................................................................50

Page 13: Monografia P2PMON final

XII

BIBLIOGRAFIA.......................................................................................................52

APÊNDICE A – MANUAL DO P2PMON..............................................................55

Page 14: Monografia P2PMON final

13

CAPÍTULO 1 – INTRODUÇÃO

Neste capítulo são abordadas a introdução, a contextualização, os objetivos, as

dificuldades encontradas e por fim, a organização do trabalho. Tais tópicos visam a

contextualização para, portanto, facilitam a compreenssão das linhas gerais deste trabalho.

1.1 Introdução

Através do processo de monitoramento, processo este que consiste na obtenção de

informações sobre os elementos de um sistema computacional, as atuais soluções de

monitoramento de servidores (2010), apesar de permitirem aos administradores de ambientes

computacionais (administradores de redes e de sistemas) o gerenciamento de infra-estruturas

de tecnologia da informação mais robustas e flexíveis, implicam na quebra dos processos de

monitoramento empregados por sistemas de monitoramento populares, como, por exemplo, o

Nagios e Zabbix, já que trabalham utilizando o paradigma cliente-servidor e portanto, podem

apresentar dificuldade para lidar com as necessidades do ambiente computacional em

constante adaptação e crescente demanda.

Isto ocorre porque sistemas como esses possuem uma lista fixa de servidores para

contatar quando monitoram os serviços de um ambiente de rede, qualquer migração de um

servidor ou substituição de um hardware defeituoso gera problemas no sistema de

monitoramento sem prévia preparação (estratégia) contingencial. Diferente da solução

proposta, P2PMON que utiliza o paradigma Peer-to-Peer (P2P).

1.2 Contextualização

Com os atuais sistemas de monitoramento (2010), os administradores de redes e

sistemas precisam ajustar manualmente as ferramentas de monitoramento disponíveis para

refletir a situação atual do ambiente. Entretanto, a quantidade de equipamento e serviços sob

sua responsabilidade não permite que uma estratégia deste tipo seja adotada. Assim,

adaptações nas ferramentas de monitoramento são necessárias para tratar a dinâmica natural

dos novos ambientes computacionais.

Por causa das características dos sistemas cliente-servidor, que são utilizados nos

Page 15: Monografia P2PMON final

14

atuais sistemas de monitoramento (2010), são verificadas algumas dificuldades como: (i)

escalabilidade; (ii) alta disponibilidade; (iii) tolerância a falha. Sendo que usualmente

implementa-se métodos de alta disponibilidade e tolerância a falhas para contornar essas

dificuldades. (Marcus et al; 2000)

Com a abordagem Peer-to-Peer (P2P), as dificuldades em escalabilidade, alta

disponibilidade, tolerância a falha e mesmo segurança são reduzidas com um custo de projeto

de software mais complexo, em virtude de ser necessário implementar tanto a parte cliente,

quanto a parte servidor no mesmo software, eliminando desta forma, a hierarquia na

comunicação e por fim, dando flexibilidade ao software. (Coulouris et al, 2007)

1.3 Objetivos

Este trabalho tem como objetivo principal desenvolver um sistema de monitoramento

de servidores, baseado em uma arquitetura de comunicação chamada Peer-to-Peer (P2P).

Também tem como objetivo desenvolver técnicas para coletar, armazenar, disponibilizar estas

informações e alcançar escalabilidade, alta disponibilidade, tolerância a falha e segurança, de

forma transparente aos administradores de ambientes computacionais.

1.4 Justificativa

Redes Peer-to-Peer (P2P) tem como característica a escalabilidade, alta

disponibilidade, tolerância a falha e segurança distribuída de forma pervasiva pela rede e de

forma inerente, por que como cada host (servidor interconectado pela rede) é autônomo,

podendo fazer tanto o papel de cliente quanto o de servidor ao mesmo tempo. Enquanto redes

baseadas no modelo cliente-servidor, justamente pelo fato de cada host ter o seu papel

claramente delimitado, características como escalabilidade, alta disponibilidade, tolerância a

falha e segurança não são inerentes ao modelo cliente-servidor.

Desta forma, o trabalho proposto se mostra vantajoso, já que através de redes P2P, o

sistema de monitoramento proposto é mais robusto em termos de escalabilidade, alta

disponibilidade, tolerância a falha e segurança. Além disso, através da utilização da linguagem

de programação Java, também é obtida outra vantagem, a alta capacidade de portabilidade,

permitindo que diversos sistemas operacionais possam fazer uso do P2PMON.

Page 16: Monografia P2PMON final

15

1.5 Organização do trabalho

O trabalho está dividido em 5 capítulos:

▪ Capítulo 2 apresenta os fundamentos sobre redes de computadores, protocolos

de comunicação e processos. Também são apresentadas as características de

sistemas distribuídos e redes Peer-to-Peer.

▪ Capítulo 3 mostra a solução proposta para o monitoramento de servidores

denominada P2PMON, seus componentes empregados, bem como as

diferentes estratégias utilizando estes componentes.

▪ Capítulo 4 apresenta detalhes e resultados da implementação da solução

proposta em um ambiente de testes.

▪ Capítulo 5 apresenta as considerações finais e comentários sobre o trabalho.

Também são apresentadas propostas para trabalhos futuros.

Page 17: Monografia P2PMON final

16

CAPÍTULO 2 – REVISÃO BIBLIOGRÁFICA

Neste capítulo são abordados os conceitos e estratégias fundamentais para o correto

entendimento deste trabalho.

2.1 Protocolo

Um protocolo é uma especificação de regras e formatos para a realização da

comunicação entre sistemas. (Stallings, William, 2000) Desta forma, são definidos métodos

de troca de mensagens entre hosts (qualquer computador de qualquer porte conectado a uma

rede). De acordo com Stallings, os protocolos podem ser:

▪ Direto/Indireto;

▪ Monolítico/Estruturado;

▪ Simétrico/Assimétrico;

Os protocolos são diretos quando os hosts podem se comunicar diretamente, enquanto,

nos protocolos indiretos, os hosts dependem de outras conexões físicas para se comunicarem.

Os protocolos são monolíticos quando a arquitetura dos pacotes são fortemente acopladas e

por isso, a troca de uma parte da arquitetura do protocolo requer a reimplementação do

protocolo todo. Enquanto, em protocolos estruturados, a arquitetura é baseada em camadas

que podem ser muito facilmente modificadas como no modelo de referência OSI.

Os protocolos são simétricos quando há uma comunicação onde não há papéis ou

hierárquia entre os hosts, como, por exemplo, em um sistema Peer-to-Peer (P2P). Enquanto

nos protocolos assimétricos, há a definição clara de papéis ou hierarquia, como no caso dos

sistemas cliente-servidor e desta forma, a comunicação tem um ciclo bem estabelecido.

2.1.1 O Protocolo SNMP

O protocolo SNMP (Simple Netwrok Management Protocol), foi criado pelo IETF

(Internet Engineering Task Force) através das RFCs (Request For Comments) 1065, 1066,

1067 (versão 1), 1441, 1452 (versão 2) e 1157, 3411 e 3418 (versão 3).

Page 18: Monografia P2PMON final

17

O SNMP é um conjunto de especificações que tem por objetivo, oferecer um

framework para o monitoramento de redes (tanto hardware, quanto software) através dos

protocolos TCP e UDP nas portas 161 e 162 (Carvalho, 1993). O protocolo SNMP é composto

por três itens (adaptado de Stallings, 2000):

▪ Dispositivo gerenciado

▪ Agente SNMP

▪ Sistema de monitoramento de redes ou gerente SNMP

O dispositivo gerenciado é o hardware no qual o Agente SNMP é executado. O Agente

SNMP é o software no qual disponibiliza o estado do dispositivo gerenciado através do

protocolo SNMP, sendo que há dois tipos de agente SNMP: (i) sistemas com agente SNMP

standalone; (ii) sistemas sem agente SNMP standalone, também chamados de agentless.

Os agentes SNMP standalone são os sistemas tradicionais onde um software que

implementa uma, duas ou as três versões do protocolo SNMP é instalado a parte, já os

sistemas sem agente SNMP (agentless) dependem do sistema operacional fornecer o suporte

nativo e embutido ao protocolo SNMP para fazer o papel de agente SNMP.

O Sistema de monitoramento de redes ou gerente SNMP é o software que oferece uma

interface amigável ao administrador de redes para visualizar os dados previamente coletados

pelos agentes SNMP.

Para o funcionamento do Agente SNMP e do Sistema de monitoramento de redes, há o

SMI (Structure of Management Information) que é responsável pela organização lógica em

forma de árvore dos dados do agente SNMP.

Cada item (“folha”) dentro desta árvore (figura 01) é chamada de MIB (Management

Information Base). A MIB é um ou mais itens da SMI e através da MIB é possível consultar

(métodos get e getnext), modificar (método set) ou notificar (método trap) o sistema de

monitoramento de redes sobre algum problema de um agente SNMP em tempo real, já que o

protocolo SNMP atua na camada de aplicação (camada 7 do modelo de referência OSI),

funcionando assim, através da troca de mensagens.

Para acessar as MIBs, utiliza-se o OID que é uma sequência numérica e representa um

objeto da MIB. Por exemplo, a seqüência 1.3.6.1.4.1 representa a árvore padronizada

iso.org.dod.internet.private.enterprise.

Page 19: Monografia P2PMON final

18

Figura 01 – Organização em árvore da SMI

(Fonte: http://support.3com.com/infodeli/tools/netmgt/tncsunix/product/091500/c15snmp1.gif)

As informações contidas nas MIBs são descritas seguindo o padrão ASN.1

desenvolvidos pela ISO e ITU e são baseadas na Forma Normal de Backus Naur (do inglês

Backus-Naur Form – BNF) que permite estruturar uma gramática livre de contexto, dando

assim, mais flexibilidade para a descrição das MIBs. O agrupamento de agentes SNMP

(standalone ou agentless) e sistemas de monitoramento de redes ou gerente SNMP em uma

única rede, com o objetivo de monitorar os ativos de Tecnologia da Informação (TI) é

denominado comunidade SNMP. Desta forma, estabelece-se um ambiente de monitoramento

ou gerenciamento de rede. (Carvalho, 1993)

Assim como o protocolo SNMP, também existem padrões para se estruturar o

gerenciamento de rede. O modelo de referência OSI propõe cinco áreas funcionais para os

sistemas de monitoramento de redes: (i) gerenciamento de falhas; (ii) gerenciamento de

Page 20: Monografia P2PMON final

19

configuração; (iii) gerenciamento de desempenho; (iv) gerenciamento de segurança; (v)

gerenciamento de contabilização. (Carvalho, 1993)

O gerenciamento de falhas tem o objetivo de detectar, isolar e se possível, propor

correção para as possíveis falhas e faltas do ambiente em monitoramento. O gerenciamento de

configuração tem o objetivo de controlar os ativos da TI na forma de inventário. Assim, pode

dimensionar com mais precisão o ambiente monitorado, além de oferecer possíveis

perspectivas de planos de capacidade futuros. O gerenciamento de desempenho tem o objetivo

de coletar métricas para dimensionar o desempenho dos serviços no ambiente monitorado. O

gerenciamento de segurança tem o objetivo de monitorar e controlar os mecanismos de

segurança no ambiente monitorado. O gerenciamento de contabilização tem o objetivo de

contabilizar, principalmente de forma financeira todo o serviço de monitoramento do

ambiente. Desta forma, é possível, por exemplo, ajustar o SLA (Service Level Agreement).

Em (Miller, 1997) são abordados de forma mais aprofundada a arquitetura dos

sistemas de monitoramento de redes. Usualmente, estes sistemas trabalham com dois ou mais

protocolos, o já conhecido SNMP e um ou mais protocolos que poder ser utilizados para

funções diferentes, como trocar mensagens vindas dos coletores de dados ou executar

comandos remotamente.

Por exemplo, o sistema de monitoramento Nagios (Nagios, 2007), trabalha com o

protocolo SNMP e com outros dois protocolos sendo que cada protocolo tem um objetivo

específico, o NSCA (Nagios Service Check Acceptor) que é um protocolo de coleta de dados e

atua em nível de aplicação (camada sete do modelo de referência OSI) além de trabalhar na

porta 5667 e o NRPE (Nagios Remote Plugin Executor) que é um protocolo para execução de

comandos remotamente e também é um protocolo de aplicação (camada sete do modelo de

referência OSI) e trabalha na porta 5666.

Outros sistemas de monitoramento como o HQ Hyperic (HQ Hyperic, 2010), sistema

de monitoramento cliente-servidor, desenvolvido em Java e comparado com o P2PMON no

capítulo 3, utilizam cinco protocolos, o protocolo HTTP na porta 7080, o protocolo HTTPS na

porta 7443, o protocolo JNP na porta 2099, o protocolo Mbean na porta 9093, o protocolo do

agente HQ Hyperic na porta 2144 e ainda o protocolo do banco de dados PostgreSQL na porta

9432. O P2PMON se utiliza única e exclusivamente do protocolo do próprio banco de dados,

na configuração padrão, utiliza-se o protocolo do banco de dados MySQL na porta padrão

3306, sendo possível a utilização de outro banco de dados mediante configuração.

Page 21: Monografia P2PMON final

20

2.2 Processos e Threads

Um software é uma entidade estática que usualmente está alocada em algum

dispositivo de memória secundária como discos rígidos, entre outros, enquanto um processo, é

uma entidade dinâmica, ou seja, é a execução de um programa. (Tanenbaum, 2003) Todo

processo é composto por quatro partes: (i) área de código; (ii) área de dados; (iii) status do

processo; (iv) recursos requeridos para o processo.

A área de código contém todo código a ser executado (fluxo de execução). A área de

dados contém o conjunto de dados trabalhos pela área de código, parte destes dados podem

vir da interação com o usuário do software ou de um arquivo, por exemplo. O status do

processo é a variável que armazena o status do processo que pode ser novo, executando,

esperando, pronto e finalizado, como ilustra a figura 02.

Figura 02 – Ciclo de vida de um processo (máquina de estados finitos)

(Fonte: Operating System Concepts with Java, 7th ed.)

Um processo no estado “novo” ocorre quando o processo acabou de ser carregado para

a memória principal e entrou para a fila de processos do sistema operacional, o que não

necessariamente significa entrar para o estado “pronto” ou “executando” imediatamente. Um

processo no estado “executando” ocorre quando o processo ganha timeslice (tempo para

execução) do escalonador do sistema operacional e efetivamente entra em execução. Um

processo no estado “esperando” ocorre quando o processo necessita de algum recurso que está

bloqueado. Um processo no estado “pronto” ocorre quando o processo está pronto para ser

executado. Um processo no estado “finalizado” ocorre quando o processo é finalizado.

Uma das formas de paralelismo em processos ocorre através das threads. Uma thread

Novo Finalizado

Pronto Executando

Esperando

Page 22: Monografia P2PMON final

21

é um fluxo de execução, uma seqüência de instruções passíveis de escalonamento. Uma

thread consiste em quatro partes: (i) identificador da thread (Thread ID); (ii) contador do

programa (Program Counter – PC); (iii) registros; (iv) pilha.

Processos que se utilizam de várias threads para criar paralelismo são denominados

multithreaded e podem conter centenas de threads, como no caso do servidor WEB (protocolo

HTTP) Apache. (Apache Foundation, 2010) Processos que não utilizam threads são

denominados single threaded, por que a área de código de um processo também é uma thread

denominada thread primária.

Há três modelos de threads: o modelo M para 1, o modelo 1 para 1 e o modelo M para

N. (Silberchartz; Galvin; Gagne, 2007)

O modelo de threads M para 1 mapeia muitas threads em espaço de usuário para uma

thread em espaço de kernel. Isto implica em possível menor desempenho, já que uma thread

em espaço de usuário pode bloquear as demais threads. Já o modelo de threads 1 para 1

mapeia apenas uma thread em espaço de usuário para uma thread em espaço de kernel. Isto

implica em mais desempenho e paralelismo ao custo de uma sobrecarga cada vez que uma

thread em espaço de kernel é criada. E finalmente, o modelo de threads M para N mapeia M

threads em espaço de usuário para N ou menos threads em espaço de kernel, criando um

modelo de threads misto entre M para 1 e 1 para 1. Isto implica em mais desempenho que o

modelo de threads m para um, porém, menos desempenho que o modelo de threads 1 para 1 e

menos sobrecarga que o modelo 1 para 1, mas, mais sobrecarga que o modelo M para 1.

Os sistemas operacionais GNU/Linux e Microsoft Windows utilizam o modelo de

threads 1 para 1, enquanto a Java Virtual Machine (JVM) utiliza o mesmo modelo de thread

disponível nativamente no sistema operacional subjacente.

2.3 Sistemas Distribuídos

Um sistema distribuído é aquele no qual os componentes localizados em computadores

interligados em rede se comunicam e coordenam suas ações apenas passando mensagens.

(Coulouris et al, 2007)

Já para Tanenbaum e Steen (2008), um sistema distribuído é uma coleção de

computadores independentes que são utilizados conjuntamente para executar uma tarefa ou

serviço. Os sistemas distribuídos, em geral, são criados para atender a necessidade de

distribuição e compartilhamento de recursos, custo, desempenho, escalabilidade,

Page 23: Monografia P2PMON final

22

confiabilidade e segurança. (Heiser; Kuz, 2010) Além disso, há outras características

desejáveis para o sistema distribuído como a transparência, a interoperabilidade e a

portabilidade.

A distribuição e o compartilhamento de recursos pode ser aplicada de várias formas,

como através do acesso remoto a um sistema de arquivos ou através da paralelização de

software, entre outros. Ainda sobre distribuição e compartilhamento de recursos, uma técnica

muito utilizada é a replicação (cópia) de dados. Os dois tipos de replicações relevantes para o

presente trabalho são a replicação síncrona e a replicação assíncrona.

A replicação assíncrona faz a propagação de dados de forma assíncrona e oportunista

no sentido de apenas sincronizar os dados quando o sistema tiver baixa demanda, desta forma,

evita a perda de desempenho para a maioria dos casos, embora possa ser complicado manter a

propagação de atualizações. (Date, 2004) A replicação síncrona faz a propagação de dados de

forma síncrona, assim, para cada dado manipulado seja inserido, alterado ou removido, o

sistema deve ser capaz de sincronizar imediatamente os hosts ainda não sincronizados e por

isso, podem ocorrer problemas de desempenho já que é inconveniente sincronizar os dados a

todo instante, diferente da abordagem assíncrona. A transparência diz respeito a facilidade de

se utilizar o sistema distribuído de acordo com os seguintes critérios (Coulouris et al, 2007):

▪ Acesso: recursos locais ou remotos são acessados da mesma forma;

▪ Localização: recursos podem ser acessados sem se conhecer onde estão;

▪ Migração: recursos podem ser movidos sem afetar o sistema;

▪ Replicação: recursos são duplicados sem se conhecer, no intuito de aumentar

desempenho e disponibilidade;

▪ Concorrência: recursos são disponibilizados de forma adequada para evitar os

problemas relacionados a concorrência na utilização dos mesmo;

▪ Tolerância a falha: o sistema é capaz de ocultar e tratar a falha procurando

evitar qualquer impacto na utilização do mesmo pelos usuários finais;

O middleware é uma camada de software que faz interface entre dois ou mais

softwares permitindo assim, a transparência de manipulação de dados sem afetar a API. De

acordo com (Coulouris et al, 2007), os sistemas distribuídos tem as seguintes dificuldades

para sua correta implementação: (i) transparência (concorrência, falha, acesso, localização,

Page 24: Monografia P2PMON final

23

migração, replicação); (ii) escalabilidade (tamanho, geografia, administração); (iii)

dependabilidade; (iv) desempenho; (v) flexibilidade (extensibilidade, abertura,

interoperabilidade).

A interoperabilidade é o mecanismo que busca criar meios para facilitar a integração

de sistemas heterogêneos. Este mecanismo pode ser implementado de várias formas, seja pela

divisão do software em camadas, seja pela utilização de protocolos e etc. A portabilidade é a

capacidade que o sistema distribuído tem de se adaptar aos diversos ambientes heterogêneos.

Isto é, permitir que o sistema distribuído seja capaz de ser executado em arquiteturas de

hardware diferentes como ARM, MIPS, x86, entre outras e softwares diferentes como

Microsoft Windows, GNU/Linux, Oracle Solaris e etc. Ainda há duas formas de comunicação

para sistemas distribuídos: sistemas hierárquicos (cliente-servidor) e sistemas não-hierárquico

(Peer-to-Peer ou P2P). Ambas estão relacionados com a forma como o sistema distribuído é

estruturado em termos de comunicação e responsabilidades ou papéis.

2.3.1 Sistemas Cliente-Servidor

Sistemas cliente-servidor são caracterizados pela comunicação hierárquica onde há um

cliente, software que solicita algum tipo de recurso e um servidor, software que atende as

solicitações dos clientes. Assim, o usuário final tem o processamento da interface gráfica no

cliente e o gerenciamento e armazenamento de dados no servidor. Dependendo da aplicação e

do software usado, todo o processamento de dados podem ocorrer no servidor ou ser dividido

entre o cliente e o servidor. Os softwares servidores aceitam requisições dos softwares

clientes, fazem o processamento e retornam o resultado para os softwares clientes. O cliente

eventualmente pode manipular os dados e finalmente apresentar os resultados ao usuário final.

(Stallings, 1998; Renaud, 1994)

Para Stallings (1998), há 4 tipos de sistemas cliente-servidor:

▪ Processamento baseado em host central;

▪ Processamento baseado em servidor;

▪ Processamento baseado em cliente;

▪ Processamento cooperativo;

Page 25: Monografia P2PMON final

24

No Processamento baseado em host, todo o processamento é feito no host central, que

neste caso é tipicamente aplicados aos ambientes com mainframes. No processamento

baseado em servidor, normalmente é configurado um ambiente onde o cliente tem uma

interface gráfica para acessar os recursos, mas praticamente todo o processamento é feito no

servidor (que não seja um mainframe). No processamento baseado em cliente, o ambiente é

justamente o oposto do processamento baseado em servidor, ou seja, todo o processamento é

feito no cliente. No processamento cooperativo, o processamento é distribuído entre cliente e

servidor.

2.3.2 Sistemas Peer-to-Peer (P2P)

Sistemas Peer-to-Peer (P2P) são caracterizados pela estrutura não hierárquica como

citado anteriormente (item 2.3). Sendo assim, para alcançar tal objetivo, qualquer sistema P2P

deve ser cliente e servidor ao mesmo tempo e por isso, o host se torna autônomo. Esta

configuração de software onde cliente e servidor estão no mesmo software é denominada

servente. (Tanenbaum; Steen, 2007) Sistemas P2P tem as seguintes características gerais

(Buford et al. 2009):

▪ Auto-organização

▪ Comunicação simétrica

▪ Controle distribuídos

▪ Compartilhamento de recursos

▪ Escalabilidade

▪ Resiliência (tolerância a falha)

A auto-organização ocorre através da forma como as redes P2P são projetadas.

Geralmente, independente de uma rede P2P ser estruturada ou não, todo host que se conecta a

rede ganha um número de identificação único e em conjunto com outras características

especificadas pelo desenvolvedor de cada modelo de rede P2P, como agrupamento de hosts

por menor distância e outros parâmetros do tipo que em conjunto estabelecem a auto-

organização de uma rede P2P. Também através da auto-organização da rede P2P, a dinâmica

Page 26: Monografia P2PMON final

25

de entrada e saída de hosts na rede, denominada churn, é minimizada no intuito de não

dificultar os mecanismos de tolerância a falhas e escalabilidade. A comunicação simétrica é

predominante nas redes P2P por que os hosts de uma rede P2P trocam mensagens entre si

diretamente. O controle distribuído ocorre por que todo host é uma entidade autônoma, onde o

controle é totalmente granular, ou seja, cada host tem as mesmas capacidades e o controle

pode ser feito individualmente para cada host da rede P2P. O compartilhamento é outra

característica inerente aos sistemas P2P, já que todos os hosts cooperam mutuamente para o

sistema doando processamento, disponibilizando arquivos e etc. A escalabilidade também é,

em realidade, uma característica derivada do compartilhamento de recursos e da auto-

organização, uma vez que todos os hosts da rede colaboram com o sistema e assim, o sistema

todo se torna escalável. O desempenho de um sistema baseado em redes P2P está intimamente

relacionado com a escalabilidade e é condicionada a forma na qual a ligação (topologia) entre

os hosts é feita. Idealmente, um sistema P2P deveria ter seus hosts dispostos na forma de um

grafo (conjunto de objetos interconectados, neste caso, um conjunto de computadores

interconectados pela rede) misto com partes de um grafo completo ou grafo regular (figura

03) e um grafo totalmente aleatório em forma de anel (Oram, 2001), desta forma, são evitadas

as dificuldades de busca (seja ela qual for, largura ou profundidade), de roteamento e o churn

(dinâmica de entrada e saída de hosts de uma rede P2P). A resiliência ou tolerância a falhas

(abordada com mais profundidade no item 2.4) é uma conseqüência derivada da auto-

organização e do controle distribuído das redes P2P e procura diminuir todas as causas que

possam impactar na estabilidade da rede P2P.

Figura 03 – Grafo regular a esquerda e grafo completo a direita

Ainda sobre a resiliência, foram detectadas as seguintes vulnerabilidades em sistemas

Grafo regular(grau 1, 4 nós)

Grafo completo (k5)

Page 27: Monografia P2PMON final

26

P2P (Endle; Khan, 2006): (i) Distributed Denial Of Service (DDOS); (ii) Man in the Middle

Attack (MITM); (iii) ataque Racional; (iv) ataque Sibila (Sybil Attack); (v) ataque Eclipse.

O Distributed Denial Of Service (DDOS) é um tipo de ataque onde vários hosts tentam

acessar o mesmo servidor ao mesmo tempo, procurando assim derrubar o servidor e por isso

se chama Denial Of Service (Negação de serviço). Ressalta-se que apesar deste tipo de

comportamento ser considerado uma forma de ataque, em aplicações de grande porte, como

um grande portal na web, detectar este tipo de ataque é difícil, já que não há uma diferença

clara entre o ataque e uma sobrecarga sazonal devido a outras situações. O Man in the Middle

Attack (MITM) é um tipo de ataque onde alguém intercepta os dados de dois ou mais hosts se

mantendo invisível. Desta forma, os dados coletados podem ser utilizados para diversos fins.

O Ataque Racional é um ataque particular das redes P2P. Neste ataque, os participantes da

rede P2P procuram se utilizar ao máximo da rede P2P sem cooperar com o resto da rede. O

ataque Sibila, do inglês Sybil attack, é também um tipo de ataque particular das redes P2P.

Neste ataque, o atacante forja a identidade de N outros hosts, procurando ganhar uma parte da

rede. O ataque Eclipse é outro ataque típico de redes P2P. Nele, o atacante procura fragmentar

a rede em duas partes e controlar a troca de mensagens entre os lados.

A perspectiva histórica das redes P2P tem três fases (gerações) até o momento (2010),

como segue. A primeira geração de sistemas P2P surgiu com o Napster, primeiro software

baseado em redes P2P a ser utilizado em larga escala. A segunda geração de sistemas P2P

surgiu com a chegada dos softwares Kazaa, Gnutella e Freenet. A terceira geração de sistemas

P2P é caracterizada pela verificação formal das redes P2P através da modelagem por grafos e

a criação do conceito de DHT (Distributed Hash Table ou Tabela de Hash Distribuídas) e

também pelo desenvolvimento de middlewares na forma redes de sobreposição – overlay

networks. Seus principais expoentes são os middlewares Pastry, Chrod, CAN e Kademlia.

Os sistemas P2P estão classificados em duas formas de organização: Sistemas P2P não

estruturados e Sistemas P2P estruturados. Os sistemas P2P não estruturados não tem uma

arquitetura padrão de comunicação e comumente envolvem técnicas que criam uma solução

híbrida onde parte da comunicação entre hosts é Peer-to-Peer (comunicação simétrica) e outra

parte é cliente-servidor (comunicação assimétrica). Sendo que os hosts que fazem a parte

servidor desta comunicação cliente-servidor, são denominados superpeers. Nos sistemas

estruturados, há o que é considerado o estado da arte em termos de redes P2P denominado

DHT (Distributed Hash Table ou Tabelas de Hash Distribuídas). O Objetivo das DHTs é

Page 28: Monografia P2PMON final

27

procurar organizar a configuração da rede de forma ótima em termos de distribuição de hosts

através da modelagem de grafos e outros métodos matemáticos para alcançar a confiabilidade,

a escalabilidade, a tolerância a falhas, o balanceamento de carga e a sobreposição (overlay) de

rede. A sobreposição (overlay network) é uma rede virtual que funciona sobre outra rede

qualquer e pode ser gerenciada independentemente, nas DHT, a sobreposição é uma

característica da rede e provê meios para facilitar a busca, o roteamento e a distribuição de

recursos. A sobreposição pode ser criada de vários modos, o sistema P2P CAN – Content

Adrressable Network se utiliza do plano cartesiano, já o Chrod e o Pastry, utilizam um modelo

baseado em grafos regulares em forma de anel e o Kademlia utiliza o “ou exclusivo”. Outros

middlewares P2P se utilizam das mais variadas técnicas que vão desde o anel (grafo regular),

até modelagens híbridas (dois ou mais modelos misturados). Na tabela 01, é demonstrada a

eficiência em termos de busca de dados e encaminhamento de mensagens entre hosts através

da contagem de saltos pelo tipo de técnica.

Tabela 01 – Contagem de saltos por tipo de técnica

(Fonte: Distributed Hash Tables in P2P Systems – A literary survey)

Tipo de roteamento Média de salto (hop) Saltos intermediários

XOR (Kademlia) 7,7 8

Anel (Chrod) 7,4 7

Árvore (Tapestry) 7,7 8

Híbrida 7,7 8

2.4 Métodos de Alta Disponibilidade e Tolerância a falhas

A Alta disponibilidade procura minimizar a interrupção de serviços, enquanto a

tolerância a falhas procura contornar falhas através de uma série de conceitos e técnicas que

tem o intuído de minimizar o downtime e por conseguinte, melhorar a alta disponibilidade.

Ambos os termos fazem parte de um conjunto de conceitos e práticas denominada

dependabilidade. Dependabilidade é a propriedade do sistema que integra atributos como

confiabilidade, disponibilidade, segurança, sobrevivência e manutenção. Ainda de acordo com

Avizienis et al (2001), há a árvore da dependabilidade que prevê os atributos (attributes), os

meios (means) e ameaças (threats), como disposta na figura 04.

Page 29: Monografia P2PMON final

28

Os atributos (attributes) são características desejáveis em um sistema distribuído. São

previstos os seguintes atributos: (i) disponibilidade; (ii) confiabilidade; (iii) segurança; (iv)

confidencialidade; (v) integridade (vi) manutenção.

A disponibilidade diz respeito a prontidão do serviço de forma correta; a

confiabilidade diz respeito a continuidade do serviço de forma correta; a segurança diz

respeito as conseqüências catastróficas aos usuários e ao ambiente; a confidencialidade diz

respeito a proteção de informações; a integridade diz respeito ao estado do sistema, de forma

que o mesmo, não seja alterado; a manutenção diz respeito a capacidade de correção e

possível modificação do sistema mediante novas regras de negócios.

Os meios (means) abordam quatro itens: (i) prevenção de falta; (ii) tolerância a falta;

(iii) remoção de falta; (iv) previsão de falta.

A prevenção de falta diz respeito a ocorrência ou introdução de faltas; a tolerância a

falta está relacionada a entrega correta do serviço mesmo em caso de falta; a remoção de falta

diz respeito a redução do número ou severidade de faltas; a previsão de falta diz respeito a

estimativa de quando e como o sistema pode falhar (MTBF);

As ameaças cobrem três áreas: (i) as faltas; (ii) os erros; (iii) as falhas. A falta diz

respeito as situações que causam erro. O erro diz respeito a situações de não conformidade do

objetivo em relação ao software; A falha diz respeito a uma causa de erro.

Novamente, de acordo com Avizienis et al (2001), há os seguintes tipos de falhas: (i)

falhas de domínio; (ii) falhas relacionada a percepção de dois ou mais usuários; (iii) falhas

relacionadas a conseqüências no ambiente (figura 05).

Figura 04 – Árvore da dependabilidade

(Fonte: Fundamental Concepts of Computer System Dependability, 2001)

Page 30: Monografia P2PMON final

29

Figura 05 – Tipos de falhas de um sistema

(Fonte: Fundamental Concepts of Computer System Dependability, 2001)

Para evitar todas estas possíveis falhas, faltas e erros, deve-se explorar os seis atributos

propostos na árvore da dependabilidade.

A seguir, são apresentadas diversas configurações propostas em (Marcus; Stern, 2000)

para alcançar a disponibilidade e confiabilidade, duas das características mais relevantes para

sistemas P2P de larga escala.

Há dois tipos de configurações para alta disponibilidade e confiabilidade, as

configurações assimétricas, onde um ou mais hosts servem o ambiente de produção, enquanto,

um ou mais hosts estão em standby (estado de espera para entrar em operação quando algum

servidor cair), já na configuração simétrica, os hosts sempre trabalham em conjunto, ou seja,

há uma distribuição de carga entre os hosts. Além das configurações assimétricas e simétricas,

o software denominado heartbeat que troca mensagens entre os servidores e assim que um ou

mais servidores caiem, o heartbeat coloca os servidores que estavam em standby em

produção. A seguir, são apresentadas algumas das configurações mais utilizadas (Marcus;

Stern, 2000).

Figura 06 – Configuração 1 para 1 assimétrica

(Fonte: Blueprints for High Availability. 1st ed)

ServidorEm

Standby

Heartbeat

Rede

ServidorPrimário

Page 31: Monografia P2PMON final

30

Na configuração 1 para 1 assimétrica, conforme ilustrado na figura 06, o servidor

primário recebe todas as conexões da rede e o servidor em standby somente entra em

produção quando o servidor em standby detecta através do heartbeat que o servidor primário

parou de funcionar de alguma forma.

Na configuração n para 1 assimétrica apresentada na figura 07, há dois ou mais

servidores em produção enquanto um está em standby, todos os servidores em produção se

comunicam com o servidor em standby através do heartbeat, assim, quando qualquer um dos

n servidores parar, o servidor em standby entra em produção no lugar do servidor que parou.

Figura 07 – Configuração n para 1 assimétrica

(Fonte: Blueprints for High Availability. 1st ed)

Na configuração 1 para 1 simétrica, ilustrada na figura 08, o servidor primário divide a

carga com o servidor secundário, estabelecendo um mecanismo de balanceamento de carga

entre os servidores.

Servidorem

Standby

Heartbeat

Rede

Servidor1

Servidor2

Servidor3

Heartbeat

Heartbeat

Page 32: Monografia P2PMON final

31

Figura 08 – Configuração 1 para 1 simétrica

(Fonte: Blueprints for High Availability. 1st ed)

Na configuração round-robin de n servidores apresentada com quatro servidores na

figura 09, as requisições da rede são distribuídas uma por vez para cada um dos quatro

servidores.

Figura 09 – Configuração round-robin com 4 servidores

(Fonte: Blueprints for High Availability. 1st ed)

ServidorSecundário

Heartbeat

Rede

ServidorPrimário

Servidor2

Heartbeat

Rede

Servidor1

Servidor3

HeartbeatServidor4

Heartbeat Heartbeat

Page 33: Monografia P2PMON final

32

CAPÍTULO 3 – MATERIAIS E MÉTODOS

Neste capítulo é mostrada a solução proposta para o monitoramento de servidores,

seus componentes de software empregados, bem como o cenário estratégias utilizando estes

componentes.

3.1 Solução proposta

A solução P2PMON é composta por quatro softwares: P2PMON, o P2PMONWEB e

os coletores de dados para os sistemas operacionais Microsoft Windows e GNU/Linux.

O P2PMON é a parte do software que efetivamente implementa o monitoramento de

servidores utilizando a rede P2P não estruturada. Sendo que os coletores de dados para os

sistemas operacionais Microsoft Windows e GNU/Linux fazem a coleta de dados para o

P2PMON. Já o P2PMONWEB é a parte do software que fornece a interface WEB. A

arquitetura da solução P2PMON completa é demonstrada na figura 10.

Figura 10 – Arquitetura do P2PMON e P2PMONWEB

O P2PMON é composto pelos seguintes componentes: Coleta de Dados, Socket

Cliente, Serviço e Bando de Dados.

A coleta de Dados é executada através de uma thread lançada a cada x segundos, onde

x é um valor configurado no arquivo de propriedades config.txt.

Bancode

Dados

Interface WEBJSP + Servlet + YUI

P2PMONWEB

Serviço→ DB2JSON→ Coleta de Dados

P2PMON

Serviço→ DB2JSON→ Coleta de Dados

P2PMON

Page 34: Monografia P2PMON final

33

Após a coleta de dados, os mesmos são armazenados no banco de dados. Até o

momento, os seguintes coletores de dados estão implementados (coletores de dados que foram

criados tendo como critério a lista de serviços embutidos por padrão no sistema operacional):

▪ Processo – carga de CPU

▪ RAM/swap – quantidade de RAM/swap livre e utilizada

▪ Disco – localização física do disco, ponto de montagem, quantidade de espaço

em disco livre/ocupada

▪ ApacheHTTP – verifica se o servidor web apache está em execução, não está

em execução ou não está instalado

▪ MySQL – verifica se o servidor de banco de dados MySQL está em execução,

não está em execução ou não está instalado

▪ Oracle-xe – verifica se o servidor de banco de dados Oracle Express está em

execução, não está em execução ou não está instalado

▪ Cron – verifica se o sistema de agendamento de tarefas está em execução, não

está em execução ou não está instalado (somente GNU/Linux)

▪ CUPS – verifica se o servidor de impressão CUPS está em execução, não está

em execução ou não está instalado (somente GNU/Linux)

▪ Postfix – verifica se o servidor de e-mail Postfix está em execução, não está em

execução ou não está instalado (somente GNU/Linux)

▪ Rsync – verifica se o sistema de sincronização de dados está em execução, não

está em execução ou não está instalado

▪ DHCP – verifica se o servidor DHCP nativo do Microsoft Windows Server

está em execução, não está em execução ou não está instalado (somente

Microsoft Windows)

▪ DNS – verifica se o servidor DNS nativo do Microsoft Windows Server está

em execução, não está em execução ou não está instalado (somente Microsoft

Windows)

▪ IIS – verifica se o software de gerenciamento do servidor web IIS – Internet

Information System está em execução, não está em execução ou não está

instalado (somente Microsoft Windows)

Page 35: Monografia P2PMON final

34

▪ POP3 – verifica se o servidor pop3 (e-mail) nativo do Microsoft Windows

Server está em execução, não está em execução ou não está instalado (somente

Microsoft Windows)

▪ SMTP – verifica se o servidor SMTP (e-mail) nativo do Microsoft Windows

Server está em execução, não está em execução ou não está instalado (somente

Microsoft Windows)

▪ SNMP – verifica se o servidor SNMP nativo do Microsoft Windows Server

está em execução, não está em execução ou não está instalado (somente

Microsoft Windows)

▪ Terminal Service – verifica se o servidor Terminal Service nativo do Microsoft

Windows Server está em execução, não está em execução ou não está instalado

(somente Microsoft Windows)

O Gerenciamento de Serviço é uma thread que monitora possíveis ações do usuário

para iniciar, parar ou verificar o status do P2PMON.

O gerenciamento de serviço é baseado no mesmo conceito de serviço advindos dos

sistemas UNIX, onde cada serviço (software que provê algum tipo de recurso de forma

ininterrupta) são iniciados pelos comandos start, stop e status. Seguindo a mesma filosofia de

trabalho, o P2PMON portanto, funciona da mesma forma utilizando os parâmetros start, stop,

status e help. É importante ressaltar que também estão disponíveis alguns scripts wrapper que

facilitam a integração entre o P2PMON e o sistema operacional Microsoft Windows e

GNU/Linux, também estão em desenvolvimento scripts wrapper para outros sistemas

operacionais como IBM AIX, Oracle Solaris e FreeBSD). O Banco de dados é um

componente independendo o P2PMON que é responsável pela persistência de dados através

das operações de inserção, atualização, consulta e remoção de dados gerados pelo P2PMON

(estereótipo <<CRUD>> da UML).

O P2PMONWEB é composto pela interface WEB (YUI + JSP + Servlet) que

disponibiliza de forma amigável os dados coletados do P2PMON e a lista de

problemas/incidentes em cada servidor cadastrado bem como alguns detalhes dos recursos

destes servidores.

A seguir, são demonstras a máquina de estados finitos do P2PMON (figura 11) e a

rede do P2PMON (P2P) em comparação com a rede do HQ Hyperic (cliente-servidor) (figura

Page 36: Monografia P2PMON final

35

12). A máquina de estados finitos demonstra que o P2PMON é baseado na idéia de serviço,

sendo possível controlar o P2PMON em tempo de execução (software em execução) através

dos comandos start, stop, status e help (ou nulo que também exibe a tela de ajuda na linha de

comando). Mesmo em caso de erro, o comportamento do P2PMON é conhecido por se tratar

de uma transição de estado planejada, neste caso, o P2PMON lança a exceção, vai para o

estado stop e finalmente, é finalizado.

Figura 11 – Máquina de estados finitos do P2PMON

Figura 12 – P2PMON (P2P) x HQ Hyperic (cliente-servidor)

Na figura 12 é demonstrado um comparativo da topologia de rede P2P do P2PMON

P2PMON (P2P) HQ Hyperic (cliente-servidor)

Page 37: Monografia P2PMON final

36

(esquerda) com a topologia de rede cliente-servidor do HQ Hyperic (direita). Esta figura

mostra claramente que o modelo cliente-servidor sobrecarrega o nó central, enquanto, na

topologia proposta pelo P2PMON baseada em P2P, os nós distribuem a carga entre eles e

ainda podem repassar para um nó central, sendo que nesta situação seria interessante repassar

estes dados coletados para algum sistema de gerenciamento de chamados como o Open

Trouble Ticket System (http://otrs.org/).

3.2 Componentes de Software Utilizados

Foram utilizados os seguintes componentes de softwares para o desenvolvimento deste

trabalho:

• Sistema operacional GNU/Linux, distribuição Kubuntu 10.04

• Sistema operacional Microsoft Windows Server 2003

• Java Development Kit (JDK) 1.6

• Visual Basic 6

• Shell Script

• O ambiente de desenvolvimento Netbeans 6.9.1

• Ferramenta de modelagem de banco de dados MySQL WorkBench

• Banco de dados MySQL

• Java Server Pages (JSP) e Servlets

• Framework Yahoo! User Interface (YUI) 2.8

• Servidor de aplicações Web Tomcat 6

• Sistema de controle de versão Git

• Sistema de captura de pacotes de rede Wireshark

• Sistema de monitoramento de processos da JVM

• Sistema de monitoramento de servidores HQ Hyperic

O sistema operacional GNU/Linux (Kubuntu 10.04) foi escolhido para demonstrar as

possibilidades em termos de portabilidade dos softwares P2PMON, P2PMONWEB. Vale

adicionar que, devido às semelhanças técnicas entre o sistema operacional GNU/Linux e

Page 38: Monografia P2PMON final

37

outros sistemas operacionais totalmente aderentes ao padrão Portable Operating System

Interface for uniX (POSIX), os softwares P2PMON, P2PMONWEB e os coletores de dados

para o sistema operacional GNU/Linux devem funcionar sem qualquer problema, necessitam

de ajustes mínimos (path para os binários e o acesso ao PID) para funcionar adequadamente

em qualquer outro sistema totalmente aderente ao padrão POSIX.

O sistema operacional Microsoft Windows Server 2003 foi escolhido por que é o

sistema operacional mais utilizado mesmo em nível de servidores. (ZDNET, 2010) O Java

Development Kit 1.6 (JDK 1.6) e portanto, a linguagem Java é utilizada pela sua portabilidade

(filosofia Write Once, Run Anywhere), extensão (diversos recursos disponíveis no pacote

padrão), orientação a objetos, além da utilização em larga escala (TIOBE, 2010).

O Visual Basic 6 é um ambiente de desenvolvimento de software para o sistema

operacional Microsoft Windows e pelo fato de ser desenvolvido pela própria Microsoft, o

ambiente Visual Basic 6 permite fácil utilização e integração dos recursos do sistema

operacional Microsoft Windows e por isso, o Visual Basic 6 é utilizado para desenvolver os

coletores de dados para o sistema operacional Microsoft Windows.

O Shell Script é uma linguagem scripting que se utiliza dos próprios comandos

fornecidos pelo sistema operacional para resolver problemas. No caso do presente projeto,

foram desenvolvidos shell scripts para realizar a coleta de dados no sistema operacional

GNU/Linux (distribuição Kubuntu 10.04).

O Netbeans 6.9.1 é um ambiente de desenvolvimento de software que facilita o

desenvolvimento de softwares na linguagem de programação Java e, portanto, a ferramenta

foi utilizada para o desenvolvimento dos softwares P2PMON e P2PMONWEB.

O banco de dados MySQL foi escolhido pela facilidade e simplicidade, além de ter

uma grande base de usuários corporativos e desenvolvedores. Mais uma vez, ressalta-se que

os scripts desenvolvidos para o modelo do banco de dados podem ser carregados em outros

bancos de dados como Microsoft SQL Server ou Oracle Enterprise 11g, sendo necessárias

poucas modificações nos scripts SQL.

O Servlet é uma extensão da linguagem Java desenvolvida especificamente para

trabalhar com a WEB através do protocolo HTTP, permitindo assim, o desenvolvimento de

aplicações WEB dinâmicas. O JSP é uma extensão do Servlet que facilita o desenvolvimento

de aplicações WEB dinâmicas utilizando programação explícita Java dentro de páginas

HTML. Os Servlets e JSPs foram utilizados para desenvolver a aplicação WEB

Page 39: Monografia P2PMON final

38

P2PMONWEB que fornece um meio amigável para o monitoramento online de servidores.

O framework YUI foi utilizado em conjunto com JSP e Servlets para o

desenvolvimento da página web porque tem diversos componentes prontos para uso, testados

em larga escala (já que o próprio Yahoo o utiliza) e também por ser software livre (YUI2,

2006).

O servidor de aplicação Apache Tomcat 6 é uma plataforma na qual as

implementações do Servlet e JSP rodam, permitindo assim, que aplicações WEB dinâmicas

sejam desenvolvidas na linguagem Java. (Apache Foundation, 2010)

O Git é um software para controle de versões de software e está sendo utilizado em

conjunto com a plataforma de desenvolvimento colaborativo GitHUB, para o gerenciamento

de versões de software, permitindo um controle preciso do código-fonte produzido dos

softwares P2PMON, P2PMONWEB e coletores de dados para os sistemas operacionais

GNU/Linux e Microsoft Windows. (Git, 2010)

O Wireshark é um analisador de pacotes de rede livre (GNU GPL) e foi utilizado para

investigar a utilização de banda dos softwares P2PMON e HQ Hyperic. (Wireshark, 2010)

O JvisualVM é uma ferramenta que monitora a utilização de recursos do sistema para

softwares desenvolvidos exclusivamente em Java. A JvisualVM faz parte do JDK 1.6 da SUN

O HQ Hyperic é um sistema de monitoramento de servidores livre (licença GNU GPL,

a mesma do P2PMON) e foi utilizado para dar alguma referência de um sistema de

monitoramento real, utilizado em larga escala, além disso, outra característica importante é o

fato de o HQ Hyperic ser desenvolvido em Java, da mesma forma que o P2PMON. É

importante considerar que o HQ Hyperic é baseado no conceito de cliente-servidor (item 2.3.1

Sistemas cliente-servidor). (Hyperic, 2010)

3.3 Hardwares utilizados

Para o desenvolvimento e testes da ferramenta de monitoramento P2PMON, a

interface WEB P2PMONWEB e coletores de dados para os sistemas operacionais Microsoft

Windows e GNU/Linux utilizaram-se três microcomputadores com as seguintes

configurações:

▪ Intel Pentium 4, 1Gb de RAM, 100Gb de disco rígido, Windows Server 2003

▪ Intel Pentium Core 2 duo, 4Gb de RAM, 640Gb de disco rígido, GNU/Linux,

Page 40: Monografia P2PMON final

39

distribuição Linux Mint e Windows Server 2003

▪ AMD Phenom 9500 Quad-Core, 8Gb de RAM, 500Gb de disco rígido,

GNU/Linux, distribuição Kubuntu 10.04

▪ Hub D-link DES-1008D de 8 portas, 10/100mbps

Sendo que o microcomputador com o processador AMD Phenom foi utilizado para o

desenvolvimento dos softwares P2PMON, P2PMONWEB e os coletores de dados para o

sistema operacional GNU/Linux, enquanto o microcomputador com o processador Intel

Pentium 4 foi utilizado para o desenvolvimento dos coletores de dados para o sistema

operacional Microsoft Windows Server 2003.

3.4 Técnicas de engenharia de software utilizadas

Os quatro softwares gerados pelo presente trabalho (P2PMON, P2PMONWEB,

coletores de dados para o sistema operacional Microsoft Windows e GNU/Linux), foram

desenvolvidos de forma incremental (Pressman, 2006) e todo código gerado foi gerenciado

pelo sistema de controle de versões GIT. Como os componentes de softwares P2PMON e

P2PMONWEB foram desenvolvidos na linguagem Java, foi possível reutilizar diversas

classes. Assim, através da taxa de reuso de classes, fórmula (1), obtêm-se a porcentagem de

reuso das classes desenvolvidas para os softwares P2PMON e P2PMONWEB:

(1)

Fórmula (1) – Taxa de reuso de classes

Sendo que, a quantidade de classes em comum é a quantidade de classes

compartilhadas entre os softwares P2PMON e P2PMONWEB, 100 representa o espaço

amostral total (100%) e a quantidade total de classes representa a quantidade de classes que

perfazem 100%.

Além disso, todo o projeto está disponível no site http://exdev.sourceforge.net sob a

licença GNU GPL, que permite a redistribuição do software desde que toda e qualquer

modificação seja livre também (siga a licença GNU GPL).

% reuso=quantidade de classesem comum∗100

quantidade total de classes

% reuso=30∗100

37% reuso≈81.01

Page 41: Monografia P2PMON final

40

No intuito de melhorar a qualidade do software, foram utilizados alguns padrões de

projetos (do inglês design patterns). Os padrões de projetos são mecanismos conhecidos e

bem testados para resolver determinados problemas. Sua origem vem da arquitetura, através

dos livros The timeless way of building e A pattern language. (Freeman; Freeman, 2005)

O trabalho que efetivamente popularizou o conceito de padrões de projetos foi feito

pelo GoF (Gang of Four), um grupo de quatro pesquisadores em desenvolvimento de

software que escreveram o livro Design Patterns: Elements of Reusable Object-Oriented

Software. Há diversos tipos de padrões de projetos, entre os principais estão os padrões

criacionais, os padrões estruturais e os padrões comportamentais

Os padrões de projetos criacionais dizem respeito ao processo de criação de objetos, já

os padrões de projetos estruturais dizem respeito ao processo de composição de classes ou

objetos e finalmente, os padrões de projetos comportamentais dizem respeito a forma como

classes ou objetos interagem e distribuem responsabilidades. (Gamma et al, 1994)

Para o presente projeto, foram utilizados os padrões de projetos Model View

Controller – MVC, Data Access Object – DAO, Transfer Object – TO.

O padrão de projeto MVC (figura 13) é utilizado para separa o software em três

camadas principais: (i) Model, onde estão a modelagem e manipulação de dados; (ii) View,

onde está a visualização do software; (iii) Controller, que coordena o fluxo do software, desta

forma, o processo de alteração das interfaces do software é bastante facilitado já que assim, as

três partes do software podem ser modificadas de forma independes sem afetar ou quebrar o

comportamento das duas outras camadas. (Basham; Sierra; Bates, 2005)

Figura 13 – Arquitetura do padrão de projeto MVC

(Fonte: http://www.geekmantra.com/staticcontent/contentimages/Intro-to-MVC-

Struts3.gif)

Page 42: Monografia P2PMON final

41

O padrão de projeto Data Access Object – DAO é utilizado para abstrair e encapsular

o acesso e manipulação do banco de dados. Assim, o software tem um mecanismo claro,

simplificado e separado (camada) para acessar os dados sem necessitar de muitos detalhes o

que implica em melhor desacoplamento de componentes de software e portanto, facilitando

consideravelmente o reuso de componentes. O padrão de projeto DAO é utilizado no

P2PMON e no P2PMONWEB para acessar e manipular o banco de dados. (SDN, 2010)

O padrão de projeto Transfer Object – TO ou Value Object – VO ou ainda Data

Transfer Object – DTO é utilizado para facilitar a manipulação de dados em objetos. Desta

forma, ao invés de se acessar diretamente a propriedade ou utilizar os métodos acessórios

(getters e setters), o objeto é totalmente populado e então disponibilizado para leitura ou

escrita, permitindo assim que haja uma economia de chamadas ao objeto, já que ao invés de

chamar os métodos getters e setters ou acessar a propriedade diretamente, apenas uma

chamada é feita para acessar o objeto. (SDN, 2010) Na figura 14 é apresentado o diagrama de

caso de uso (UML) para o P2PMON, contendo cinco processos (atividades) do software

P2PMON, sendo que iniciar P2PMON, parar P2PMON, obter status P2PMON, obter ajuda

P2PMON estão relacionados com o ciclo de vida do P2PMON conforme a figura 11.

Figura 14 – Diagrama de Caso de Uso do P2PMON

Em seguida, na figura 15, apresenta-se o diagrama de caso de uso do software

P2PMONWEB, contendo oito processos (atividades). Todas estão relacionadas com a

utilização da interface WEB.

Page 43: Monografia P2PMON final

42

Figura 15 – Diagrama de Caso de Uso do P2PMONWEB

Nas figuras 16 e 17, é demonstrado o Modelo Entidade-Relacionamento utilizado para

a solução P2PMON e desenvolvido pelo MySQL Workbench.

Figura 16 – Modelo do banco de dados parte 1

Fig

ura

16 –

Mod

elo

do b

anco

de

dado

s pa

rte

1

Page 44: Monografia P2PMON final

43

Figura 17 – Modelo do banco de dados parte 2

Fig

ura

17 –

Mod

elo

do b

anco

de

dado

s pa

rte

2

Page 45: Monografia P2PMON final

44

3.5 Ambiente de testes

Para o ambiente de teste, foram utilizados os sistemas de monitoramento de servidores

P2PMON e HQ Hyperic. Ambos os sistemas de monitoramento foram testado utilizando suas

configurações padrões. No caso do sistema de monitoramento HQ Hyperic foi instalado tanto

o agente HQ Hyperic quanto o gerente (server) HQ Hyperic na mesma máquina por que esta

seria uma forma de igualar diferenças entre o P2PMON (P2P, servente) e o HQ Hyperic

(cliente-servidor).

A configuração do microcomputador utilizado para a coleta de dados foi AMD

Phenom 9500 Quad-Core, 8Gb de RAM, 500Gb de disco rígido, GNU/Linux, distribuição

Kubuntu 10.04 (descrito no item 3.2.2 Hardwares utilizados).

A coleta de dados da rede foi feita pelo analisador de pacotes de rede Wireshark com o

filtro tcp.port eq 7080 or tcp.port eq 7443 or tcp.port eq 2099 or tcp.port eq 9093 or tcp.port

eq 9432 or tcp.port eq 2144 para o HQ Hyperic agent e server e com o filtro tcp.port eq 3306

para o P2PMON por uma hora e meia de forma ininterrupta afim de se projetar a utilização

média de rede e possivelmente extrair um comportamento de ambos os sistemas de

monitoramento. Também foram coletados dados sobre a utilização de CPU e de RAM tanto

para o P2PMON quanto para o agente e o gerente HQ Hyperic através software JvisualVM

incluso no próprio JDK.

Tanto a utilização de CPU e RAM quanto o consumo de banda de rede são

fundamentais em termos de teste porque em uma rede monitorada, uma parte considerável da

banda de rede, de CPU e RAM pode ser utilizada de forma ineficiente se o sistema de

monitoramento não tiver o ajuste adequado do intervalo de coleta de dados.

Estima-se que entre cinco e dez minutos seja um tempo razoável para fazer a coleta de

dados de todos os hosts em monitoramento. Um tempo inferior a cinco minutos pode gerar

um consumo ineficiente de banda de rede, CPU e RAM, enquanto um tempo superior a dez

minutos pode ser tarde demais para a detecção de problemas. Para os testes, foram utilizados

cinco minutos entre cada coleta de dados.

Page 46: Monografia P2PMON final

45

CAPÍTULO 4 – RESULTADOS E DISCUSSÕES

Neste capítulo apresentam-se dados coletados via Wireshark (analisador de pacotes de

rede) e JvisualVM (monitor de processos da JVM). Constatou-se que o P2PMON utiliza em

média 14 megabytes de RAM e 0.2% de utilização de CPU durante uma hora e meia hora de

coleta de dados via JvisualVM (gráfico 01).

Gráfico 01 – Porcentagem de CPU utilizada e RAM utilizada no P2PMON

No grafico 02, pode-se constatar que o Hyperic server (gerente, superior esquerdo e

superior direito) tem consumo médio de 125 megabytes de RAM e utiliza 0.4% de CPU.

Ainda neste gráfico, o Hyperic agent (agente, inferior esquerdo e inferior direito) tem

consumo médio de 25 megabytes e utiliza 0.9% de CPU.

Gráfico 02 – Porcentagem de CPU utilizada e RAM utilizada no HQ Hyperic agent/server

A tabela 02 demonstra os dados coletados através do software Wireshark.

Page 47: Monografia P2PMON final

46

Tabela 02 – Comparação entre os dados gerados pelo P2PMON e HQ Hyperic agent/server

Total Capturado P2PMON Hyperic agent/server

Pacotes 242236 74990 85646

Média pacotes/s 33,66 10,809 11,91

Média tamanho pacote 344,88 461,285 186,34

Média bytes/s 11607,3 4986,19 2219,42

Média Mbit/s 0,09 0,040 0,018

Constatou-se que o P2PMON utiliza mais banda de rede que o Hyperic agent e

Hyperic server juntos. Sobre o fato dos dados do Hyperic agent e Hyperic server estarem

juntos, esta foi uma decisão tomada para procurar igualar as condições do teste uma vez que o

P2PMON enquanto software é agente e gerente ao mesmo tempo enquanto o HQ Hyperic tem

agente e servidor (gerente) separados.

Também avaliou-se a facilidade de instalação e os requisitos de software necessário

para a instalação tanto do P2PMON quanto do HQ Hyperic agent e server. A tabela a seguir

(tabela 03) aponta alguns dados desta investigação.

Tabela 03 – Requisitos de software, facilidade de instalação e características

P2PMON Hyperic agent Hyperic server

Tamanho do arquivo de

instalação em Mb2,6 129 399

Quantidade de comandos para

instalação2 3 3

Parâmetros no arquivo de

configuração13 23 17

Banco de dadosQualquer um com

driver JDBC-

Qualquer um com

driver JDBC

Suporte para plugins Não Sim Sim

Linguagem de programação dos

coletores de dadosQualquer uma

Java e C/C++

(JNI)-

Constatou-se que o P2PMON é muito mais econômico em utilização de CPU e RAM

se comparado com o HQ Hyperic sendo o P2PMON consome aproximadamente 9,33 vezes

Page 48: Monografia P2PMON final

47

menos RAM e aproximadamente 5,4 vezes menos CPU que o HQ Hyperic agent e server.

Mais uma deve-se reiterar que o P2PMON é funcionalmente equivalente ao HQ

Hyperic agent e server juntos e que mesmo que se o P2PMONWEB fosse incluído, a carga

gerada pelo servidor de aplicação Apache Tomcat 6, o consumo de RAM é de

aproximadamente 25 megabytes não é tão alto quanto o HQ Hyperic server.

De acordo com os dados coletados pelo Wireshark, constatou-se que o P2PMON gera

menos pacotes de rede, mas com mais dados que o HQ Hyperic agent e server. A diferença da

quantidade de pacotes entre o P2PMON e o HQ Hyperic é de 10,656 pacotes. Já a diferença

da média de pacotes por segundo é de 1,10. A diferença de tamanho entre os pacotes é de

274,945. A diferença da média de bytes por segundo é de 2766,77. A diferença da média de

megabits por segundo é de 0,022.

Nos requisitos de software, facilidade de instalação e características, observa-se que há

uma grande diferença no arquivo de instalação que no P2PMON é de apenas 2,6 Mb,

enquanto no HQ Hyperic agent é de 129 Mb e no HQ Hyperic server é de 399 Mb. Após uma

análise nos arquivos de instalação do HQ Hyperic agent e server constatou-se que o HQ

Hyperic agent e server tem tamanho maior por que vem com diversos outros softwares como

o JBoss, a JRE (máquina virtual do Java) e o PostgreSQL embutidos na instalação.

A quantidade de comandos utilizado para a instalação e os parâmetros no arquivo de

configuração são dois itens importantes no processo de instalação e configuração, já que

quanto mais complexo ou quanto mais parâmetros, a possibilidade de o usuário configurar de

forma incorreta aumenta, além de dificultar a instalação em larga escala (por exemplo, instalar

8.000 instâncias do P2PMON é mais rápido e mais simples que instalar 8.000 instâncias do

HQ Hyperic para o mesmo ambiente). Foi verificado que em ambas as categorias, o P2PMON

é mais vantajoso, demonstrando simplicidade o processo de instalação e configuração.

O item banco de dados aborda quais bancos de dados podem ser utilizados pelos

softwares P2PMON e HQ Hyperic agent e server. Em ambos os casos, o driver JDBC

determina que banco de dados será utilizado mediante prévia configuração. Sendo importante

colocar que o P2PMON utiliza por padrão o banco de dados MySQL enquanto o HQ Hyperic

utiliza por padrão o banco de dados PostgreSQL.

O quesito suporte para plugins diz respeito a formas de estender o software através do

baixo acoplamento entre o núcleo e as outras partes do software. Neste quesito, até o

momento, o P2PMON não oferece este recurso embora haja uma proposta de trabalho futuro

Page 49: Monografia P2PMON final

48

para implementação de uma arquitetura de plugins. Já o HQ Hyperic agent e server suportam

uma arquitetura de plugins, facilitando a agregação de novos recursos tanto ao HQ Hyperic

agent quanto ao HQ Hyperic server.

Finalmente, o item linguagem de programação dos coletores de dados diz respeito a

possibilidade de criação de coletores de dados em outras linguagens de programação. Neste

quesito, o P2PMON é novamente vantajoso por não tem restrições na utilização da linguagem

facilitando de forma considerável o desenvolvimento de novos coletores de dados. Já o HQ

Hyperic é restrito ao Java e C ou C++ porque trabalha exclusivamente com a JNI (Java Native

Interface), recurso que permite o Java ter acesso ao sistema operacional através de uma

espécie de mapeamento de API entre as linguagens C ou C++ e o Java.

Page 50: Monografia P2PMON final

49

CAPÍTULO 5 – CONCLUSÕES

Este capítulo apresenta as conclusões observadas no presente trabalho, além de se

demonstrar possíveis linhas futuras de pesquisa no intuito de aperfeiçoar a ferramenta de

monitoramento P2PMON e seus componentes.

5.1 Considerações finais

A partir dos resultados obtidos neste capítulo, pode-se concluir que o P2PMON é mais

eficiente que o HQ Hyperic em grande parte dos requisitos, exceto no requisito utilização de

rede e da arquitetura de plugins. Também deve-se constatar que os softwares HQ Hyperic

agent e HQ Hyperic server são tecnicamente mais maduros que o P2PMON e este pode ser

uma explicação para a sobrecarga de RAM e CPU do HQ Hyperic mediante o P2PMON.

Também através da análise feita com o software Wireshark, observou-se que ainda há

margem para grandes otimizações na forma de comunicação do P2PMON, entre elas está a

sugestão de comunicação por threshold (item 5.2, trabalhos futuros) e a diminuição de

instâncias de conexão com o banco de dados, sendo possível implementá-la através do design

pattern Singleton. Assim, seria possível ter um ganho em termos de economia de banda de

rede sensível. E ainda há possibilidade de economia de RAM através de otimizações nos

parâmetros do garbage collector e da utilização do JDK GNU GCJ que se mostrou mais

eficiente que o JDK oficial da SUN.

5.2 Conclusões

Demonstrou-se possível, desenvolver um Sistema de Monitoramento de Servidores

baseado na arquitetura de comunicação não hierárquica Peer-to-Peer (P2P), a partir da

ferramenta de software P2PMON e seus componentes, também foi possível esboçar a

eficiência da solução proposta através de testes realizados em ambiente real e resultados

satisfatórios obtidos.

Naturalmente, há diversas possibilidades de otimização (trabalhos futuros), mas de

forma geral o Sistema de Monitoramento P2PMON está de acordo com a proposta original de

fornecer uma solução de monitoramento que seja capaz de remover o servidor central,

Page 51: Monografia P2PMON final

50

também chamado gerente e distribuir o processamento entre os servidores em monitoramento.

Desta forma, podem-se diminuir os custos, uma vez que não é necessário manter um

servidor exclusivo como ocorria nas soluções cliente-servidor tradicional, oferecendo recursos

de forma reativa e proativa para correção de falhas em ambientes computacionais e minimizar

o MTBF da infraestrutura.

5.2 Trabalhos futuros

Dentre as linhas de pesquisas futuras, mostram-se úteis as seguintes:

• Otimização de desempenho utilizando outros JDKs e técnicas de paralelismo

• Suporte ao protocolo SNMP

• Suporte para plugins

• Suporte para thresholds

• Comunicação por threshold

• Suporte para ação automática pré-programada

A otimização de desempenho pode se dar através da utilização de outros JDKs, entre

eles, o GNU GCJ – Gnu Compiler for Java que possui técnicas de otimização pós-bytecode

(GCJ, 2009). Já no paralelismo, é possível criar uma thread para cada coletor de dados,

permitindo assim, mais paralelismo na execução da coleta de dados que na solução atual é

serial.

O suporte ao protocolo SNMP traria a possibilidade de coleta de dados em

equipamentos como roteadores, switches, firewalls e mesmo servidores que tenham o agente

SNMP e as MIBs configuradas corretamente. De fato, o protocolo SNMP é um padrão

adotado em grande parte das soluções de monitoramento de redes.

O suporte para plugins traria uma grande flexibilidade para o P2PMON. Na realidade,

algumas partes do código já são desacopladas. Ainda falta desacoplar as classes Java que

manipulam os dados gerados pelos coletores de dados.

O threshold é um recurso que permite que sejam pré-programados os limites inferiores

e superiores para um recurso monitorado, por exemplo, o coletor de dados da RAM/swap

poderia ser configurado para emitir um alerta quando houver muita memória disponível o que

Page 52: Monografia P2PMON final

51

poderia significar dizer que um serviço no servidor não entrou em produção por algum motivo

(má configuração, falha na instalação e etc) e também poderia emitir um alerta quando não

houver memória disponível, já que sistemas operacionais podem matar um ou mais serviços

para liberar RAM e swap.

A comunicação por threshold é uma forma de otimização da comunicação entre os

hosts, por que o P2PMON emitiria alerta somente se algum host tivesse algum problema ou o

usuário (administrador de sistemas) forçasse a atualização dos dados.

O suporte para ação automática pré-programada é um recurso correlato ao threshold.

Com a ação automática pré-programada seria possível configurar o coletor de dados para

quando algum threshold (limite) for atingido, seja o threshold inferior ou superior, uma ação

automática é executada no intuito de recuperar o sistema.

Page 53: Monografia P2PMON final

52

BIBLIOGRAFIA

MARCUS, EVAN; STERN, HAL. Blueprints for High Availability. 1st ed. John Wiley &

Sons, New York, 2000.

COULOURIS, GEORGE; DOLLIMORE, JEAN; KINDBERD, TIM. Sistemas Distribuídos:

Conceitos e projeto. 4ª ed. Bookman, São Paulo, 2007.

STALLINGS, WILLIAM. Data and Computer Communications. 6th ed. Prentice Hall, New

Jersey, 2000.

CARVALHO, TERESA C. DE M. DE BRITO. Gerenciamento de Redes – Uma abordagem

de sistemas abertos. 1ª ed. Makron Books, São Paulo, 1993.

MILLER, MARK A. Managing internetworks with SNMP. 2nd ed. M & T Books, Foster City,

1997.

NAGIOS, Nagios 3.x Documentation. 2007. Disponível em:

http://nagios.sourceforge.net/docs/3_0/toc.html Acesso em: 28 de outubro de 2010.

HQ Hyperic, Spring Source Hyperic QuickStart Installation. 2010. Disponível em:

http://support.hyperic.com/display/DOC/QuickStart+Installation Acesso em: 28 de outubro de

2010.

TANENBAUM S., ANDREW. Sistemas Operacionais Modernos. 2ª ed. Pearson Prentice

Hall, São Paulo, 2003.

APACHE FOUNDATION. Worker – Apache HTTP. 2010. Disponível em:

http://httpd.apache.org/docs/2.0/mod/worker.html Acesso em: 11 de outubro de 2010.

APACHE FOUNDATION. Apache Tomcat. 2010. Disponível em: http://tomcat.apache.org/

Acesso em: 11 de outubro de 2010.

SILBERCHARTZ, ABRAHAM; GALVIN, PETER BAER; GAGNE, GREG. Operating

System Concepts with Java. 7th ed. John Wiley & Sons. 2007.

TANENBAUM, ANDREW S.; STEEN, MAARTEN VAN. Sistemas Distribuídos –

princípios e paradigmas. 2ª ed. Pearson Prentice Hall, São Paulo, 2007.

HEISER, GERNOT; KUZ, IHOR. Distributed Systems Lectures. Disponível em:

http://www.cse.unsw.edu.au/~cs9243/lectures/ Acesso em: 11 de outubro de 2010.

DATE, Christopher J. Introdução a Sistemas de BANCOS de DADOS. 8ª ed. Editora Campus,

Rio de Janeiro, 2004.

Page 54: Monografia P2PMON final

53

STALLINGS, WILLIAM. Operating Systems. 3rd ed. Prentice Hall, New Jersey, 1998.

RENAUD, PAUL. Introdução aos Sistemas Cliente/Servidor. 2ª ed. IBPI Press, Rio de

Janeiro, 1994.

BUFORD, JOHN F.; YU, HEATHER; LUA, KEONG. P2P Networking and Applications. 1st

ed. Morgan Kaufmann, Burlington, 2009.

ORAM, ANDY. Peer-to-Peer: O poder transformador das redes ponto a ponto. 1ª ed.

Berkeley, São Paulo, 2001.

ENGLE, MARLING; KHAN, JAVED I. Vulnerabilities of P2P Systems and a Critical Look

at their Solutions. Disponível em: http://www.medianet.kent.edu/techreports/TR2006-11-01-

p2pvuln-EK.pdf Acesso em: 11 de outubro de 2010.

TANNER, TIMO. Distributed Hash Tables in P2P Systems – A literary survey. Disponível

em: http://www.tml.tkk.fi/Publications/C/18/tanner.pdf Acesso em: 11 de outubro de 2010.

AVIZIENIS, ALGIRDAS; LAPRIE, JEAN-CLAUDE; RANDELL, BRIAN, 2001.

Fundamental Concepts of Computer System Dependability. Disponível em:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.88.7354&rep=rep1&type=pdf

Acesso em: 11 de outubro de 2010.

ZDNET. IDC: Windows Server still rules the server roost. Disponível em:

http://www.zdnet.com/blog/microsoft/idc-windows-server-still-rules-the-server-roost/6424

Acesso em: 11 de outubro de 2010.

TIOBE. TIOBE Programming Community Index for October 2010. Disponível em:

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html Acesso em: 11 de outubro

de 2010.

YUI 2. Yahoo! User Interface Library 2. Disponível em: http://developer.yahoo.com/yui/2/

Acesso em: 11 de outubro de 2010.

GIT. GIT – Fast Version Control System. Disponível em: http://git-scm.com/ Acesso em: 11

de outubro de 2010.

WIRESHARK. Wireshark. Disponível em: http://www.wireshark.org/ Acesso em: 11 de

outubro de 2010.

HYPERIC. HQ Hyperic. Disponível em: http://www.hyperic.com/ Acesso em: 11 de outubro

de 2010.

PRESSMAN, ROGER S.. Engenharia de Software. 6ª ed. Mc Graw Hill, São Paulo, 2006.

FREEMAN, ERIC; FREEMAN, ELISABETH. Use a Cabeça! Padrões de Projetos (Design

Page 55: Monografia P2PMON final

54

Patterns). 1ª ed. Alta Books, Rio de Janeiro, 2005.

GAMMA, ERIC; HELM, RICHARD; JOHNSON, RALPH; VLISSIDES, JOHN. Design

Patterns Elements o Reusable Object-Oriented Software.1st ed. Addison Wesley, Indianapolis,

1995.

BATES, BEART; SIERRA, KATHY; BASHAM, BRYAN. Use a Cabeça! Servlets e JSP. 1ª

ed. Alta Books, Rio de Janeior, 2005.

SUN DEVELOPER NETWORK. Core J2EE Patterns – Data Access Object. Disponível em:

http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html Acesso em:

11 de outubro de 2010.

SUN DEVELOPER NETWORK. Core J2EE Patterns – Transfer Object. Disponível em:

http://java.sun.com/blueprints/corej2eepatterns/Patterns/TransferObject.html Acesso em: 11

de outubro de 2010.

GCJ. The GNU Compiler for java – GNU Project – Free Software Foundation (FSF).

Disponível em: http://gcc.gnu.org/java/ Acesso em: 11 de outubro de 2010.

Page 56: Monografia P2PMON final

55

APÊNDICE A – MANUAL DO P2PMON

O P2PMON é um sistema de monitoramento de servidores baseado em redes p2p.

A.1 Requerimento de software

Para a instalação do P2PMON e do P2PMONWEB são necessários os seguintes

softwares:

Máquina virtual do Java – Java Runtime Environment (JRE) versão >= 1.5

Banco de dados (preferencialmente o MySQL) versão >= 5.0

Apache Tomcat versão >= 6.0.29

A.2 Requerimento de hardware

Para a instalação do P2PMON e do P2PMONWEB, além dos requisitos necessários

para a instalação da JRE, do MySQL e do Tomcat, é recomendável pelo menos 256

megabytes de RAM e pelo menos 1 gigabyte de espaço livre em disco.

A.3 Configuração do Banco de dados

O modelo do banco de dados foi desenvolvido utilizando o software MySQL

Workbench. Para facilitar a migração para outros bancos de dados, toda a modelagem foi

desenvolvida utilizando quatro tipos de dados: bit, date, integer e varchar.

Os conectores para os bancos de dados Microsoft SQL Server, MySQL, PostgreSQL já

estão inclusos no P2PMON, bastando apenas a configuração no arquivo de configuração

config.txt.

O MySQL em distribuições GNU/Linux precisa de alguns ajustes:

1 – a linha bind-address deve ser comentada no arquivo my.cnf

de bind-address = 127.0.0.1 para #bind-address 127.0.0.1

Page 57: Monografia P2PMON final

56

2 – os usuários devem ter acesso permitido através da execução da linha abaixo no

console do MySQL:

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' WITH GRANT

OPTION;

Mais informações em http://dev.mysql.com/doc/refman/5.1/en/adding-users.html

3 – a porta padrão (3306) deve estar aberta no firewall

Feito os 3 passos anteriores, é necessário executar o script de criação das tabelas do

P2PMON, o arquivo p2pmondbm-data.sql (data indica a data da última versão disponível do

script, no momento é a versão 20101127-1) e em seguida, é necessário executar o script para a

carga de dados inicial, o script p2pmondbm-data-load.sql (novamente, data indica a data da

última versão disponível do script, que atualmente é a versão 20101128-1).

Feito isso, a configuração do banco de dados está finalizada.

A.4 O arquivo de configuração config.txt

O arquivo de configuração config.txt é um arquivo de propriedades que guarda os

dados na forma de um hash(par chave=valor). Este arquivo deve ser colocado no diretório

onde o arquivo p2pmon.jar está. A seguir é mostrado um exemplo de configuração do arquivo

config.txt

# Configuração do P2PMON

# WebURL → configuração do IP do P2PMONWEB

#utilize none quando o P2PMONWEB for local

WebURL=127.0.0.1

# path do gather, o script que executa os coletores de dados

# no linux: gatherpath=/path/para/p2pmon/dc/gather.sh

# no windows: gatherpath="c:// path // para// p2pmon//dc//gather.bat "

# perceba as aspas duplas “ para paths com espaço e a // ao invés de \ ou \\

GatherPath=/home/netto/Desktop/p2pmon/dc/gather.sh

# IP do host que receberá as mensagens, pode ser none

PeerHost=none

# O intervalo entre as coletas de dados em segundos

Page 58: Monografia P2PMON final

57

IntervalDC=5

# O driver de conexão com o banco de dados, neste caso o MySQL (padrão)

DbDriver=com.mysql.jdbc.Driver

# A URL de acesso ao banco de dados

DbURL=jdbc:mysql://localhost:3306/

# A senha do bando de dados

DbPwd=debian

# O esquema do banco de dados

DbSchem=p2pmon

# O usuário do banco de dados

DbUser=root

# O usuário do P2PMONWEB

Username=admin

# A senha do P2PMONWEB

Userpassword=admin

# O MAC Address da máquina a ser instalada

Macaddr=00:26:18:05:5f:09

# O path onde os arquivos no formato JSON devem ser criados

JSonPath=/home/netto/Desktop/p2pmon-web/build/web

A.5 Os coletores de dados

Os coletores de dados são pequenos softwares que coletam dados de um sistema. Todo

coletor de dados deve ser colocado no diretório dc dentro do diretório onde está o p2pmon.jar.

A.6 Utilizando o serviço P2PMON no sistema operacional

O gerenciamento de serviço implementado no P2PMON permite o controle do

P2PMON através dos comandos start (iniciar P2PMON), stop (parar P2PMON), status (obter

status do P2PMON) e help (ajuda).

Para iniciar o P2PMON através da linha de comando:

java -jar p2pmon.jar start

Page 59: Monografia P2PMON final

58

Para parar o P2PMON:

java -jar p2pmon.jar stop

Para obter o status do P2PMON:

java -jar p2pmon.jar status

Para obter ajuda do P2PMON:

java -jar p2pmon.jar help

Assim, é possível integrar o sistema de monitoramento do P2PMON em background

sem a necessidade de interação com o usuário e de forma transparente ao sistema operacional.

A.7 Configurando o P2PMONWEB

Para a utilização do P2PMONWEB é necessário instalar o servidor de aplicações Java

Apache Tomcat, versão 6.0.29 ou maior e configurar o arquivo p2pmonweb.xml

A.8 Configuração do arquivo p2pmonweb.xml

Para o correto funcionamento do P2PMONWEB é necessário colocar o arquivo

p2pmonewb.xml dentro do diretório conf que está dentro do diretório do Apache Tomcat. A

seguir, é mostrado um exemplo de configuração do arquivo p2pmonweb.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- O atributo docBase=”” deve ser ajustado para o path do P2PMONWEB

O atributo path=”” não deve ser modificado -->

<Context antiJARLocking="true" docBase="/home/netto/Desktop/p2pmon-web/build/web"

path="/p2pmonweb"/>

Utilizando o path=”/p2pmonweb” significa que o usuário acessará o P2PMONWEB

da seguinte forma: http://localhost/p2pmonweb

A.9 Utilizando o P2PMONWEB

Para a visualização dos dados coletados pelo P2PMON, o usuário deve acessar a

Page 60: Monografia P2PMON final

59

interface WEB P2PMONWEB. A seguir, são apresentadas explicações sobre as telas do

P2PMONWEB e em seguida são apresentadas as 12 telas que compõe o P2PMONWEB.

A figura 01 (tela de login) mostra o login, onde o usuário deve digitar o nome de

usuário (username) e a senha (password). Para o primeiro login deve- se utilizar o nome de

usuário admin e a senha admin. Assim, e possível ter acesso à interface principal e

posteriormente adicionar novos usuários.

A figura 02 (tela de lista de hosts) mostra a lista de hosts (servidores monitorados),

apresentando os seguintes dados: nome do servidor (hostname), IP, local (location, ex:

datacenter), usuário (user), sistema operacional (OS), processador (processor), carga média de

processamento (loadavg), deletar host (deletehost).

A figura 03 (tela de adição de hosts) permite adicionar hosts e requer os seguintes

dados: nome do servidor (hostname), IP, MAC Address, o sistema operacional é

automaticamente atualizado quando o sistema de coleta de dados é executado pela primeira

vez após adicionar o host.

A figura 04 (tela de detalhes dos discos rígidos) mostra os detalhes dos discos rígidos

dos servidores monitorados. São exibidos os seguintes dados: nome do servidor (hostname),

Sistema operacional (OS), localização física do disco (device), ponto de montagem (mount

pt), espaço total (total disk) e livre do disco rígido (free disk), data (date).

A figura 05 (tela de detalhes da RAM e Swap) mostra os detalhes da RAM e do Swap

dos servidores monitorados. São exibidos os seguintes dados: nome do servidor (hostname),

sistema operacional (OS), quantidade de RAM total (total RAM) e livre (free RAM),

quantidade de Swap total (total Swap) e livre (free Swap), data (date).

A figura 06 (tela de detalhes de serviços monitorados no GNU/Linux) mostra os

serviços monitorados exclusivamente em servidores GNU/Linux (Cron, CUPS, Postfix,

Rsync), além do nome do servidor (hostname) e sistema operacional (OS).

A figura 07 (tela de detalhes de serviços multiplataforma) mostra os serviços que são

multiplataforma como o servidor WEB Apache HTTP, o banco de dados MySQL e Oracle

Express (OracleXE).

A figura 08 (tela de detalhes de servições monitorados no Microsoft Windows) mostra

os serviços monitorados exclusivamente em servidores Microsoft Windows (servidor DHCP,

servidor WEB IIS, servidor de e-mail POP3, servidor de e-mail SMTP, servidor de interface

gráfica terminal Service).

Page 61: Monografia P2PMON final

60

A figura 09 (tela de lista de usuários) mostra a lista de usuários cadastrados,

apresentando os seguinte dados: nome de usuário (user), local (location), permissão para

adicionar host (can add host), permissão para deletar host (can delete host), permissão para

adicionar usuário (can add user), permissão para atualizar usuário (can update user),

permissão para deletar usuário (can delete user), atualizar usuário (update user), deletar

usuário (delete user).

A figura 10 (tela de adição de usuários) permite adicionar usuários e requer os

seguintes dados: nome de usuário (username), senha (password) e confirmação de senha

(confirm password), permissão para adicionar host (can add host), permissão para deletar host

(can delete host), permissão para adicionar usuário (can add user), permissão para atualizar

usuário (can update user), permissão para deletar usuário (can delete user).

A figura 11 (tela de lista de locais) mostra a lista de locais cadastrados, apresentando

os seguintes dados: nome do local (location), endereço (address), código postal (postal code),

cidade (city), país (country), número para contato (contact no), atualizar local (update

location) e deletar local (delete location).

E finalmente, na figura 12 (tela de adição de locais) permite adicionar locais e requer

os seguintes dados: nome do local (location), endereço (address), código postal (postal code),

cidade (city), país (country) e número para contato (contact no).

Page 62: Monografia P2PMON final

61

Fig

ura

01 –

Tel

a de

logi

n

Page 63: Monografia P2PMON final

62

Fig

ura

02 –

Lis

ta d

e ho

sts

Page 64: Monografia P2PMON final

63

Fig

ura

03 –

Adi

ção

de h

osts

Page 65: Monografia P2PMON final

64

Fig

ura

04 –

Det

alhe

s do

dis

co r

ígid

o

Page 66: Monografia P2PMON final

65

Fig

ura

05 –

Det

alhe

s da

RA

M/S

wap

Page 67: Monografia P2PMON final

66

Fig

ura

06 –

Sta

tus

dos

serv

iços

mon

itor

ados

de

um s

ervi

dor

GN

U/L

inux

Page 68: Monografia P2PMON final

67

Fig

ura

07 –

Sta

tus

dos

serv

iços

mul

tipl

ataf

orm

a

Page 69: Monografia P2PMON final

68

Fig

ura

08 –

Sta

tus

dos

serv

iços

mon

itor

ados

de

um s

ervi

dor

Mic

roso

ft W

indo

ws

Page 70: Monografia P2PMON final

69

Fig

ura

09 –

Lis

ta d

e us

uári

os

Page 71: Monografia P2PMON final

70

Fig

ura

10 –

Adi

ção

de u

suár

ios

Page 72: Monografia P2PMON final

71

Fig

ura

11 –

Lis

ta d

e L

ocai

s

Page 73: Monografia P2PMON final

72

Fig

ura

12 –

Adi

ção

de L

ocai

s