Universidade Federal do Rio de Janeiro. Escola Politécnica. Departamento de Eletrônica e de Computação



Documentos relacionados
Entendendo como funciona o NAT

MÓDULO 7 Modelo OSI. 7.1 Serviços Versus Protocolos

Sistemas Distribuídos

CONCEITOS INICIAIS. Agenda A diferença entre páginas Web, Home Page e apresentação Web;

Intranets. FERNANDO ALBUQUERQUE Departamento de Ciência da Computação Universidade de Brasília 1.INTRODUÇÃO

Na Figura a seguir apresento um exemplo de uma "mini-tabela" de roteamento:

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert:

4 Estrutura do Sistema Operacional Kernel

3 SERVIÇOS IP. 3.1 Serviços IP e alguns aspectos de segurança

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas

Processos (Threads,Virtualização e Migração de Código)

Orientação a Objetos

5 Mecanismo de seleção de componentes

Protocolo. O que é um protocolo? Humano: que horas são? eu tenho uma pergunta

Entrar neste site/arquivo e estudar esse aplicativo Prof. Ricardo César de Carvalho

APLICAÇÃO REDE APLICAÇÃO APRESENTAÇÃO SESSÃO TRANSPORTE REDE LINK DE DADOS FÍSICA 1/5 PROTOCOLOS DE REDE

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Online Help StruxureWare Data Center Expert

TACTIUM ecrm Guia de Funcionalidades

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

Introdução a listas - Windows SharePoint Services - Microsoft Office Online

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

FTIN Formação Técnica em Informática Módulo Sistema Proprietário Windows AULA 04. Prof. André Lucio

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Rotina de Discovery e Inventário

Introdução à Linguagem Java

Figura 01 Kernel de um Sistema Operacional

IP significa Internet Protocol. A Internet é uma rede, e assim como ocorre em qualquer tipo de rede, os seus nós (computadores, impressoras, etc.

Segurança de redes com Linux. Everson Scherrer Borges Willen Borges de Deus

Curso: Redes II (Heterogênea e Convergente) Tema da Aula: Características Roteamento

Faculdade de Tecnologia SENAC Goiás. Disciplina: Gerenciamento de Rede de Computadores. Goiânia, 16 de novembro de 2014.

Desenvolvendo Websites com PHP

Para funcionamento do Netz, alguns programas devem ser instalados e alguns procedimentos devem ser seguidos. São eles:

HOW TO Procedimento para instalar Aker Firewall virtualizado no ESXi 5.0

Manual do Usuário Android Neocontrol

1

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

Virtualização e Criação de uma rede Virtual utilizando Virtual Box Professor: João Paulo de Brito Gonçalves

DESENVOLVIMENTO PARA DISPOSITIVOS MÓVEIS. PROFª. M.Sc. JULIANA H Q BENACCHIO

ADDRESS RESOLUTION PROTOCOL. Thiago de Almeida Correia

Há dois tipos de configurações bidirecionais usados na comunicação em uma rede Ethernet:

Arquitetura de Rede de Computadores

O modelo ISO/OSI (Tanenbaum,, 1.4.1)

SISTEMAS OPERACIONAIS. Maquinas Virtuais e Emuladores

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 2. Cursos de Computação

Manual SAGe Versão 1.2 (a partir da versão )

Operador de Computador. Informática Básica

DELEGAÇÃO REGIONAL DO ALENTEJO CENTRO DE FORMAÇÃO PROFISSIONAL DE ÉVORA REFLEXÃO 3

Roteamento e Comutação

UFG - Instituto de Informática

VIRTUALIZAÇÃO CONVENCIONAL

MINICURSO WINDOWS SERVER 2008 UTILIZANDO O VMWARE PLAYER

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO

Kaspersky Security for Virtualization. Overview

ISO/IEC 12207: Gerência de Configuração

Aula Prática Wi-fi Professor Sérgio Teixeira

Aplicação Prática de Lua para Web

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

Introdução ao Active Directory AD

Redes de Computadores II. Professor Airton Ribeiro de Sousa

Introdução a Banco de Dados

Sistemas Operacionais. Prof. André Y. Kusumoto

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS

SMTP, POP, IMAP, DHCP e SNMP. Professor Leonardo Larback

Introdução a Informática - 1º semestre AULA 02 Prof. André Moraes

Sistema Operacional Unidade 12 Comandos de Rede e Acesso Remoto

ConneXium TCSESM, TCSESM-E Managed Switch

Noções de. Microsoft SQL Server. Microsoft SQL Server

PROJETO DE REDES

LICENCIAMENTO V14 USANDO REPRISE LICENSE MANAGER

REDES DE COMPUTADORES

Disciplina Fundamentos de Redes. Introdução ao Endereço IP. Professor Airton Ribeiro de Sousa Outubro de 2014

Prof. Samuel Henrique Bucke Brito

Comm5 Tecnologia Manual de utilização da família MI. Manual de Utilização. Família MI

SISTEMAS DISTRIBUÍDOS

ALTERNATIVA PARA CONEXÃO VIA INTERNET DE IP MASCARADO A IP REAL

Manual do Ambiente Moodle para Professores

Guia de Conectividade Worldspan Go Res! A V A N Ç A D O

COMPONENTES BÁSICOS DE

Firewall. Alunos: Hélio Cândido Andersson Sales

Laboratório de Redes. Professora Marcela Santos

SCE-557. Técnicas de Programação para WEB. Rodrigo Fernandes de Mello

OCOMON PRIMEIROS PASSOS

Lógica de Programação

TRANSMISSÃO DE DADOS Prof. Ricardo Rodrigues Barcelar

FileMaker Pro 13. Utilização de uma Conexão de Área de Trabalho Remota com o FileMaker Pro 13

HOW TO Alterando o tipo de interface de rede na VmWare para uso no Aker Firewall 6.7

Sistema Gerenciador de Conteúdo OpenCms: um caso de sucesso no CEFET-MG

INTERNET = ARQUITETURA TCP/IP

Voltar. Placas de rede

Prof. Luiz Fernando Bittencourt MC714. Sistemas Distribuídos 2 semestre, 2013

Capítulo 9 - Conjunto de Protocolos TCP/IP e Endereçamento. Associação dos Instrutores NetAcademy - Julho de Página

QUAL O PROCEDIMENTO PARA CONFIGURAR AS IMPRESSORAS DE REDE BROTHER EM UM SISTEMA DEC TCP / IP para VMS (UCX) Procedimento

Sistemas Operacionais. Conceitos de um Sistema Operacional

CAPÍTULO 2. Este capítulo tratará :

Transcrição:

Universidade Federal do Rio de Janeiro Escola Politécnica Departamento de Eletrônica e de Computação Simulador de redes de computadores para treinamento em atividades cibernéticas Autor: Orientador: Oliver von Behr Kuster Examinador: Prof. Marcelo Luiz Drumond Lanza Examinador: Prof. Luís Henrique Maciel Kosmalski Costa Prof. Miguel Elias Mitre Campista DEL Março 2014

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO Escola Politécnica - Departamento de Eletrônica e de Computação Centro de Tecnologia, bloco H, sala H-217, Cidade Universitária Rio de Janeiro - RJ CEP 21949-900 Este exemplar é de propriedade da Universidade Federal do Rio de Janeiro, que poderá incluí-lo em base de dados, armazenar em computador, microfilmar ou adotar qualquer forma de arquivamento. É permitida a menção, reprodução parcial ou integral e a transmissão entre bibliotecas deste trabalho, sem modificação de seu texto, em qualquer meio que esteja ou venha a ser fixado, para pesquisa acadêmica, comentários e citações, desde que sem finalidade comercial e que seja feita a referência bibliográfica completa. Os conceitos expressos neste trabalho são de responsabilidade do(s) autor(es) e do(s) orientador(es). ii

AGRADECIMENTO Dedico esse trabalho aos meus pais, pela oportunidade que me deram para chegar a esse ponto. Agradeço aos meus amigos e professores que me apoiaram e me auxiliaram no caminho. Também tenho em mente que, sem nenhuma das pessoas que participaram na história de nossa tecnologia, nada disso teria sido possível. iii

RESUMO Este projeto apresenta o desenvolvimento e a metodologia usada para criar um simulador de redes de computadores voltado para treinamentos cibernéticos, em especial os na área de segurança de redes. Através desses treinamentos serão fornecidas redes virtuais para alunos executarem suas tarefas. O objetivo do projeto é prover uma ferramenta para geração automática de redes virtualizadas, com acesso via Web. Nele, deve ser possível configurar redes virtuais com suas máquinas e serviços de forma flexível e modular, permitindo reúso de conteúdo. Toda criação de redes virtuais será feita exclusivamente através da interface Web do sistema, portanto não será necessária a intervenção manual na preparação de redes virtuais. Tendo especificada a rede no sistema, é então possível a criação repetida e automatizada dela, de acordo com a necessidade para a quantidade de alunos que estão sendo treinados. Estes podem ter suas redes individualmente, preparando uma rede por aluno, ou podem estar todos conectados na mesma rede. O projeto foi desenvolvido em Java para Web Server, utilizando o VMware como sistema virtualizador de máquinas e redes. A contribuição no projeto inclui a implementação do uso das APIs do VMware para gerenciamento das máquinas virtuais e a configuração das máquinas virtuais através dessas APIs. Palavras-Chave: simulador, redes, computadores, virtualização, treinamento. iv

ABSTRACT This project explains the development and methodology of creating a computer network simulator focused on cybernetic training. The main goal of the project is to provide a tool for automatic network creation, using a web interface. It will be possible to configure virtual networks and their machines and services flexibly and in a modular way, allowing for content reuse. All configuration of the virtual networks will be made through the web interface, so no manual intervention will be required in the creation of the networks. After having specified the desired network, the system will be able to automatically create it repeatedly, fulfilling the need for the number of students to be trained. The students can have their individual networks, creating one identical network for each student, or they can share the same network. The system was developed in Java for Web Server, using VMware as the machine and network virtualizer. The contribution of this project includes the use of the VMware APIs for virtual machine management and the configuration of these virtual machines. Key-words: simulator, networks, computers, virtualization, training. v

SIGLAS AD - Active Directory ADSL - Asymmetric Digital Subscriber Line AJP - Apache JServ Protocol API - Application Programming Interface ASCII - American Standard Code for Information Interchange BGP - Border Gateway Protocol DHCP - Dynamic Host Configuration Protocol DLL - Dynamic Link Library DNS - Domain Name System DWR - Direct Web Remoting HTTP - Hypertext Transfer Protocol HTTPS - Hypertext Transfer Protocol Secure IDE - Integrated Development Environment IP - Internet Protocol JIT - Just-in-time JSP - JavaServer Pages JVM - Java Virtual Machine vi

MAC - Medium Access Control NAT - Network Address Translation OSI - Open Systems Interconnection OSPF - Open Shortest Path First RIP - Routing Information Protocol SOAP - Simple Object Access Protocol SSH - Secure Shell SQL - Structured Query Language UFRJ - Universidade Federal do Rio de Janeiro VLAN - Virtual Local Area Network VM - Virtual Machine XSD - XML Schema Definition XML - extensible Markup Language WSDL - Web Services Description Language vii

Sumário Lista de Figuras xi 1 Introdução 1 1.1 Tema.................................... 1 1.2 Delimitação................................ 1 1.3 Justificativa................................ 2 1.4 Objetivos................................. 2 1.5 Metodologia................................ 4 1.6 Organização do texto........................... 4 2 Tecnologias Usadas 6 2.1 Java.................................... 6 2.1.1 Tipos de linguagens........................ 7 2.1.2 Bytecode.............................. 8 2.1.3 A linguagem............................ 9 2.1.4 Apache Tomcat.......................... 9 2.2 PostgreSQL................................ 10 2.3 VMware.................................. 12 2.3.1 VMware ESXi........................... 13 2.3.2 VMware vsphere......................... 14 2.3.3 VMWare vcenter......................... 14 2.3.4 Formatos de VMs......................... 15 2.3.5 VMware Tools........................... 16 2.3.6 VMware vmotion......................... 16 2.3.7 Conexões Virtuais......................... 16 viii

2.3.8 APIs de acesso ao VMware.................... 19 2.3.9 Escolha do VMware....................... 20 2.3.10 Hardware............................. 21 2.4 Outras ferramentas............................ 22 2.4.1 Eclipse............................... 22 2.4.2 Jira................................ 22 2.4.3 Bibliotecas............................. 22 3 O Sistema 23 3.1 Objetos de rede.............................. 23 3.2 Treinamento................................ 27 3.3 Interface do sistema............................ 28 3.3.1 Criar e editar redes........................ 28 3.3.2 Execução de eventos....................... 31 4 Instanciação e configuração das máquinas 32 4.1 Máquinas virtuais............................. 32 4.1.1 VMware vsphere Management API............... 32 4.2 Configuração de rede........................... 34 4.2.1 Protocolos usados......................... 35 4.2.2 Elementos clientes........................ 37 4.2.3 Elementos roteadores....................... 38 4.2.4 Outros elementos......................... 41 4.3 Execução de scripts............................ 42 5 Motor de execução 48 5.1 O funcionamento............................. 48 5.1.1 Threads.............................. 48 5.1.2 Agendamento........................... 49 5.1.3 Unidade de tempo........................ 50 5.2 Eventos.................................. 50 5.3 Métricas.................................. 52 ix

6 Análise do resultado do treinamento 53 6.1 Banco de dados.............................. 53 6.2 Análise................................... 54 7 Conclusão 56 7.1 Limitações e Dificuldades......................... 56 7.2 Resultados................................. 57 7.3 Trabalhos futuros............................. 58 7.4 Conclusão................................. 59 Bibliografia 60 A Interface Vix 63 x

Lista de Figuras 2.1 Java JIT[1]................................. 9 2.2 Arquitetura do Tomcat[2]......................... 11 2.3 Infraestrutura do VMWare vsphere[3].................. 13 2.4 VMWare vcenter[4]............................ 14 2.5 Infraestrutura de produção........................ 21 3.1 Lista e classificação dos elementos de rede................ 29 3.2 Interface de associação de elementos de rede.............. 30 3.3 Lista de eventos de configuração..................... 30 3.4 Lista de eventos.............................. 31 xi

Capítulo 1 Introdução 1.1 Tema O projeto apresentado neste documento visa solucionar a deficiência de treinamentos cibernéticos, notadamente na área de segurança de redes de computadores, quando realizados utilizando um ambiente físico. O sistema discutido faz uso de máquinas virtuais (computadores e dispositivos de rede) para o processo de treinamento. As máquinas virtuais desejadas para uma rede serão selecionadas e relacionadas na forma em que a rede deverá ser montada. Para a criação da rede é possível especificar configurações em forma de scripts, que serão executados nas máquinas virtuais. Todos os elementos usados na criação de rede são modulares, possibilitando a reutilização e facilitando a expansão do conteúdo disponível. Este trabalho se enquadra na área de computação. Mais especificamente, serão abordados conhecimentos de desenvolvimento de software, de redes de computadores e de virtualização. 1.2 Delimitação Tendo em vista os recentes acontecimentos globais relacionados a ameaças digitais, foi criada uma demanda pelo Exército Brasileiro para treinamentos em operações cibernéticas. Este projeto é parte da solução desenvolvida pela empresa Minds at Work contratada pela empresa Decatron, vencedora da licitação para o desenvolvimento e entrega do sistema. 1

O sistema foi elaborado com fim de operações cibernéticas, com foco em ataque e defesa. Contudo, por ser um simulador de redes, pode ser adaptado para treinamentos em diversas áreas que utilizam tecnologia da informação. Isso se dá, pois todas as configurações são modulares, que permite serem editadas pelo usuário e que resulta em uma flexibilidade maior na gama de redes possíveis a serem criadas. 1.3 Justificativa Por mais que existam muitas soluções para a criação de máquinas virtuais, não encontramos uma solução de gerenciamento integrado para redes de computadores. Quando existem, são gerenciamentos pontuais e não facilmente replicáveis. Um treinamento, para ser executado, necessita de máquinas ligadas em rede configuradas para acesso. Nisso é incluída a configuração de IP da rede e a configuração de serviços que serão acessados. Toda vez que for executado um treinamento, será necessária a manutenção manual ou até individual dos computadores no treinamento, como por exemplo a reversão das máquinas para o estado inicial ou a configuração de máquinas novas. Também seria dificultada a criação de novas funcionalidades, sem ter que modificar a configuração existente, perdendo a configuração utilizada. Assim o treinamento em redes de computadores se torna limitado e custoso, dependendo de configurações fixas para que alunos possam usá-las recorrentemente. Isso limita a diversidade de treinamentos que podem ser oferecidos. Para oferecer flexibilidade é necessário configurar individualmente os componentes do treinamento para cada aluno, aumentando o custo do treinamento. A quantidade de alunos que podem ser treinados ao mesmo tempo é limitada por essas características do sistema de gerenciamento integrado. 1.4 Objetivos A ideia do projeto é criar uma ferramenta de gerenciamento de redes para organizar e modularizar o conteúdo para criação de redes virtuais. As redes terão como foco treinamentos em atividades cibernéticas, sendo possível, porém, criar redes genéricas de usos diversos, que envolvam redes de computadores e serviços. 2

Não existe atualmente uma grande preocupação em poder criar redes préconfiguradas sem ter a necessidade de implementar as configurações manualmente ou sem estar limitado a máquinas préviamente configuradas. Mesmo que redes sejam parcialmente ou exclusivamente em ambientes virtualizados, suas configurações são feitas de maneira efêmera, descartando a possibilidade de serem reaproveitadas de outra forma ou em outro ambiente. O projeto almeja oferecer uma mecânica integrada para a criação e para a execução de treinamentos em redes. A criação deve ser o mais flexível possível, mantendo-se ao mesmo tempo simples, de forma que seja necessário pouco conhecimento específico sobre o sistema. Assim, é apenas necessária a configuração de modelos de máquinas virtuais existentes através de scripts. Através do uso de um virtualizador de máquinas, neste caso o VMware, será feita a preparação de máquinas virtuais a partir de Templates, que são máquinas virtuais modelo. Estas máquinas virtuais criadas serão configuradas pelo sistema de acordo com a definição da rede criada para o treinamento. Utilizando o sistema, um mesmo treinamento poderá ser reexecutado quantas vezes necessário, sem a necessidade de intervenção manual nas máquinas virtuais ou reconfiguração de conteúdo no sistema. Esses treinamentos fornecerão máquinas virtuais pré-configuradas para os alunos acessarem, através das quais deverão executar as tarefas especificadas. No treinamento será possível monitorar os alunos, bem como criar scripts que interajam com as máquinas virtuais e possam coletar informações. A execução dos treinamentos deve oferecer acesso a um número adequado de alunos, individualmente ou em grupo. Os instrutores deverão poder acompanhar os treinamentos de modo que possam monitorar os alunos e/ou o sistema como um todo através de regras configuráveis. O material para estudar e analisar o resultado do treinamento após a sua execução deverá ficar disponível, possibilitando discussões e avaliações do processo, bem como das soluções elaboradas pelos alunos. 3

1.5 Metodologia Como o sistema é complexo e necessita de várias soluções de terceiros para se tornar viável, foi conduzida uma pesquisa para a avaliação dos componentes a serem usados. Isso se torna importante para a adequação dos termos dados ao sistema pela sua licitação. Também será feita uma análise quantitativa da usabilidade do sistema em questão de criação de redes. O projeto será apresentado em quatro fases, permitindo que o seu andamento possa ser verificado e principalmente se as especificações iniciais estejam sendo atendidas. A validação oficial foi realizada através do uso do sistema em testes e através do primeiro uso após a sua entrega. A contribuição neste projeto está no gerenciamento de máquinas virtuais através do sistema desenvolvido. Isso é implementado através do uso das APIs do VMware, usando o controle de máquinas virtuais e a interação com o sistema operacional virtualizado. Nisso são incluídas as funcionalidades de clonar, iniciar e reconfigurar as máquinas virtuais, assim como a criação, modificação e execução de arquivos no sistema operacional virtualizado. Também são fornecidos os scripts e as configurações internas nas máquinas virtuais que são usados para adequar as máquinas à rede definida. Essencialmente desenvolveu-se a utilização do VMware, os scripts e as configurações das máquinas e a maneira que o sistema gerencia ambos. 1.6 Organização do texto No capítulo 2 serão apresentadas as tecnologias usadas e detalhes relevantes sobre cada uma delas. O capítulo 3 apresenta a geração de conteúdo, o próprio treinamento e como ele pode ser gerenciado através da interface. No capítulo 4 é discutido o uso e a configuração de máquinas virtualizadas. O capítulo 5 contém informações sobre o decorrer do treinamento, realizado pelas ações do motor de execução. No capítulo 6, serão apresentadas as funcionalidades de análise dos treinamentos executados. 4

O capítulo 7 encerra com os resultados e a conclusão do trabalho. 5

Capítulo 2 Tecnologias Usadas Neste capítulo serão descritas as tecnologias utilizadas no funcionamento do sistema. Essas tecnologias concentram-se em dois pontos, o primeiro sendo a linguagem Java e como ela pode ser usada para gerar um portal Web através do Webserver Tomcat. O segundo ponto é a integração entre o desenvolvimento e a ferramenta de virtualização escolhida, ou seja, o VMware. 2.1 Java Java é uma linguagem de programação orientada a objetos cuja grande vantagem é a portabilidade entre plataformas. Inicialmente criada para televisão interativa, não teve difusão por ser avançada demais em 1991 [5]. Seu nome inicial era Oak, depois foi trocado para Green até chegar em Java. A linguagem se tornou popular quando navegadores incorporaram a habilidade de executar Java Applets em páginas Web, tornando-as interativas. De acordo com sua criadora, a Sun Microsystems [6], Java é um código do tipo Write once, run anywhere (WORA). Isto é, o código fonte de uma aplicação Java pode ser executado em diversos hardwares e em sistemas operacionais diferentes sem maiores modificações. Com isso, projetos podem ser difundidos entre usuários de diversos dispositivos. Há também a consideração de que desenvolvedores não precisam aprender a usar uma ferramenta totalmente nova para cada plataforma, facilitando novos projetos. Atualmente, o Java tem usa principal implementação pertencente à Oracle, pela aquisição da Sun Microsystems em 2009. 6

Essa linguagem é usada em uma grande quantidade de dispositivos, desde aparelhos de som de carros a televisões, e têm tido grande uso no sistema operacional de smartphones, o Android, desenvolvido pela Google. A linguagem foi usada nesse projeto por que está de acordo com as técnicas de desenvolvimento atuais, sendo orientada a objetos e amplamente difundida. A sintaxe da linguagem Java é de fácil entendimento e usada por padrão em projetos da empresa na qual o projeto foi desenvolvido. 2.1.1 Tipos de linguagens As linguagens de programação são executadas normalmente de duas formas. Da primeira, é compilada do código fonte para a linguagem de máquina do hardware alvo e a segunda é interpretada direto do código fonte em tempo de execução. Compilar nada mais é que traduzir o código fonte para a linguagem de máquina. Com isso, podem ser feitas diversas otimizações para a arquitetura alvo, baseadas nas instruções implementadas no processador em questão. Essas instruções podem conter comandos específicos para diversas aplicações amplamente usadas, como encriptação, que seriam executadas de forma mais rápida. Implementações a nível de hardware tendem a ser mais rápidas pois reduzem o número de comandos necessários para implementar os mesmos cálculos. Ao compilar, o binário torna-se dependente do ambiente alvo onde será executado. Traduzir o binário para todos os sistemas operacionais e arquiteturas é custoso e dificulta a sua distribuição. Para superar esse problema existem linguagens interpretadas, onde o código fonte é lido em tempo de execução e implementado nativamente por um interpretador. O interpretador também teria que ser compilado para cada ambiente. Isso é feito apenas uma vez, enquanto que cada aplicativo teria que ser compilado para cada combinação sistema operacional e arquitetura. Existem desvantagens. Uma delas é a necessidade de analisar o código toda vez que for executado, verificando a sua léxica. Certamente os interpretadores são compilados com as otimizações, melhorando o desempenho dos comandos lidos do código fonte do aplicativo a ser executado. Porém é muito mais custoso ler um arquivo texto, onde cada instrução pode relacionar várias linhas e comandos diferentes. 7

As instruções nada mais são que comandos da linguagem que executarão uma atividade, como executar outros comandos, atribuir valores a variáveis, etc. Os comandos nas linguagens interpretadas devem ser analisados para confirmar se a sintaxe está correta. A seguir devem ser traduzidos pelo interpretador para as instruções equivalentes do ambiente de execução. É muito mais eficiente ler instruções já no formato correto, compostas por alguns bytes, que serão passados diretamente para o sistema operacional e para o processador. 2.1.2 Bytecode Java é um comprometimento entre os dois tipos de linguagens. Nela, o código fonte é compilado para uma linguagem de máquina chamada bytecode, que garante a compatibilidade entre diferentes sistemas operacionais. Para conciliar as duas formas, Java cria uma espécie de linguagem de máquina própria. O resultado ainda precisa ser interpretado, no entanto é menos custoso que uma linguagem puramente interpretada. Verificações léxicas não precisam ser feitas a cada execução e o gerador de bytecode pode otimizar o código. Esse código é então executado em uma Java Virtual Machine (JVM). A JVM executa código de arquivos com extensão.class ou.jar. O primeiro contém uma classe Java, enquanto que o segundo contém um conjunto comprimido de classes, o que facilita a sua distribuição. A cada vez que forem executados, será realizada uma análise para verificar se o binário está com os dados em posições válidas, sempre inicializados e com tipos compatíveis, e se as regras de acesso aos métodos são seguidas. Em tempo de execução, a máquina virtual pode usar um Just-in-time compiler (JIT), que converte pedaços do bytecode em linguagem de máquina corresponde à arquitetura em questão, otimizando aqueles trechos. Essa ferramenta é usada na maioria das implementações de máquinas virtuais de Java. Sendo que a mais difundida é a HotSpot, da Oracle Corporation [7]. O nome vem da procura por pontos quentes no código, que são partes executadas repetidamente, necessitando de otimização do desempenho. Na figura 2.1 é possível ter uma visão geral dessa funcionalidade. 8

Figura 2.1: Java JIT[1]. 2.1.3 A linguagem A sintaxe da linguagem é, em grande parte, derivada de C++. Todo o código é contido em classes e todas as variáveis são objetos, com exceção dos tipos básicos, como inteiros, números de ponto flutuante, booleanas e caracteres. Java não suporta sobrecarga de operadores, que pode ser usada em C++ para definir comportamentos alternativos para operações de soma, divisão, atribuição, etc. Essa decisão foi tomada, pois não é possível garantir a lógica da implementação desses operadores para objetos complexos. Por isso, devem ser chamadas sempre funções cujo nome identifique o seu comportamento. Também não são suportadas heranças de múltiplas classes e tipos sem sinal (unsigned) de variáveis numéricas, que restringem seus valores apenas para números positivos. Essas limitações são estabelecidas tendo em mente manter a simplicidade da linguagem [8]. O uso de comentários é parecido com C/C++: // para comentar apenas uma linha de conteúdo após as duas barras e / para comentar conteúdo até o próximo /. Difere porém na existência do comentário iniciado por / que indica ser um Javadoc, terminado por /. Esse comentário é necessário para gerar a documentação do código e deve ser usado para descrever classes, métodos e seus parâmetros. 2.1.4 Apache Tomcat O Tomcat é um Webserver de código aberto, desenvolvido pela Apache Software Foundation, e está na versão 7. Nesse projeto foi utilizada a versão 4.1.40, pois fornece maior estabilidade e compatibilidade com as ferramentas utilizadas. Esse 9

serviço é usado para gerar um portal Web gerenciado por binários em Java. Existem outros serviços que têm a mesma funcionalidade, como por exemplo o WebSphere da empresa IBM, que porém não é de código aberto. O Tomcat foi usado no projeto por ser livre e de código aberto, suportado em Linux, Windows e Mac OS. Também é usado como padrão da empresa. Um concorrente válido seria o IBM WebSphere, que é pago porém. Existem diversas outras maneiras de desenvolver sistemas Web, porém para uso da linguagem Java estas são as mais adequadas. Três partes constituem o Tomcat: Catalina, Coyote e Jasper. Coyote é o responsável por receber conexões Web e responder com conteúdo para os clientes. Jasper compila arquivos de código fonte Java, as JavaServer Pages (JSP), que são gerenciadas pelo Catalina, que também incorpora elementos de segurança e de permissões. As conexões que o serviço suporta são configuradas em um arquivo extensible Markup Language (XML), localizado no caminho da instalação. Neste arquivo podem ser definidos diversos conectores, como Hypertext Transfer Protocol (HTTP), Hypertext Transfer Protocol Secure (HTTPS) e Apache JServ Protocol (AJP). O HTTP e sua forma encriptada, o HTTPS, são os formatos padrões de conteúdo Web. O AJP é um protocolo para integração com outros servidores Apache, para que tarefas possam ser distribuídas internamente de maneira transparente. Isso é representado de maneira abstrata na figura 2.2, onde é mostrada a arquitetura do Tomcat. Também é suportada a execução em cluster, onde o processamento do serviço é dividido entre várias máquinas para atender melhor à grande quantidade de requisições. 2.2 PostgreSQL O Bancos de dados são uma coleção organizada de dados, contendo estruturas para armazenar informações de um ou de vários sistemas. Para essas coleções de dados serem acessadas e gerenciadas, são necessários sistemas gerenciadores de bancos de dados. As ações que um sistema gerenciador pode tomar em um banco de 10

Figura 2.2: Arquitetura do Tomcat[2]. dados se enquadram em quatro tipos. O primeiro é a definição de dados, que define a estrutura que será utilizada no banco para armazenar as informações. Em seguida é necessário popular o banco, inserindo, modificando ou apagando informações. Buscas poderão ser realizadas sobre essas informações. Por fim, o sistema gerenciador também pode administrar o banco, isto é, configurar usuários para limitar acessos indevidos e garantir a segurança das informações, monitorar o desempenho, garantir integridade do banco e recuperá-lo em caso de falha. Para armazenar as informações, os bancos usam normalmente o modelo relacional. Nele, os dados são armazenados em tabelas, que devem ter um índice único para aquela entrada de dados. Cada entrada de dados é uma linha na tabela, também chamado de tupla, podendo conter vários atributos, que são as colunas. Os índices são chamados de chaves primárias. Essas chaves primárias podem ser referenciadas por chaves estrangeiras de outras tabelas, relacionando tuplas diferentes. Existem três tipos de relacionamentos usando chaves estrangeiras. Os dois mais simples são Um para um e Um para muitos. Nesses dois tipos, uma tupla é referenciada apenas por uma ou mais tuplas de outra tabela. Em Um para um não é diferenciado qual contém a chave estrangeira. Na outra, entretanto, a chave primária da Um deve estar referenciada nas chaves estrangeiras dos muitos, para evitar complexidades desnecessárias no banco. Várias entradas de uma tabela podem referenciar uma única entrada da outra tabela, mas cada entrada 11

referencia apenas uma outra tupla. O terceiro tipo é Muitos para muitos, onde é necessária a criação de uma nova tabela para fazer a refêrencia cruzada entre as chaves primárias das tabelas relacionadas. Um exemplo simples para esse tipo seria uma tabela de publicações e autores. Um autor pode ter várias publicações, assim como uma publicação pode ter mais de um autor. Nesse caso seria criada uma tabela que relaciona cada índice de publicação com o índice do autor correspondente. O banco de dados objeto-relacional PostgreSQL, ou simplesmente Postgres, foi desenvolvido em 1990 na Universidade da Califórnia para avançar no campo de bancos de dados. A ideia era desenvolver um sistema com o mínimo de funcionalidades necessárias para conseguir implementar relacionamentos de objetos. Isso permitiria a exploração de conceitos novos, como a tecnologia objeto-relacional[9]. O Postgres suporta grande parte do padrão SQL e possibilita várias opções modernas, tal como consultas complexas, chaves estrangeiras, gatilhos entre outros[10]. Com consultas complexas é possível buscar por entradas usando mais de um filtro e múltiplas tabelas. O uso de chaves estrangeiras permite que sejam impostas regras entre tabelas para manter a integridade dos dados contidos em mais de uma tabela. A refêrencia de outra tabela não pode ser removida enquanto alguma outra entrada a estiver usando, ou que ao remover uma informação, todos os pontos que são referenciados somente por ela também sejam removidos. O Postgres foi usado no projeto pois estava nos requisitos do edital. Além disso é um banco de dados maduro e seguro, suportado em diversas plataformas, e uma solução gratuita. 2.3 VMware Por mais que o Java execute código em JVM, isso não é o suficiente para executar sistemas operacionais inteiros em ambientes simulados. Para conseguir gerenciar isto, foi usada a solução de virtualização da VMware. A solução se divide em três aspectos principais, que em sua totalidade são denominados VMware vsphere. sistema operacional VMware ESXi que é instalado nos servidores de virtua- 12

lização gerenciador dos servidores, chamado VMware vcenter software cliente que permite o acesso a essa infraestrutura Figura 2.3: Infraestrutura do VMWare vsphere[3]. 2.3.1 VMware ESXi O VMware ESXi é um sistema operacional criado a partir do Linux e não possui uma interface gráfica, apenas uma interface limitada para acesso emergencial. A vantagem de ser um sistema específico para virtualização é conseguir prover o maior desempenho para as máquinas virtuais que são executadas nele. Idealmente, essas máquinas virtuais conseguem ser executadas com velocidade próxima a que conseguiriam se estivessem em uma máquina física com hardware equivalente. Idealmente, pois é feita uma distribuição de recursos entre cada máquina quando é necessário, o que pode resultar em uma redução dos recursos necessários para as outras máquinas. 13

2.3.2 VMware vsphere A solução vsphere da VMware é a visão geral de todos os elementos da empresa, desde servidores, a serviços e gerenciamento de máquinas. A figura 2.3 engloba muitas das tecnologias disponíveis, a principal sendo o VMware vsphere, como centro das funcionalidades. A partir do vsphere é possível acessar e gerenciar diferentes funcionalidades e ferramentas disponíveis pela VMware. 2.3.3 VMWare vcenter O vcenter, figura 2.4, é uma ferramenta de gestão integrada de múltiplos servidores de virtualização. Nele são integrados diversos servidores ESXi sobre um único ponto de gerenciamento, fornecendo acesso ao VMware vsphere e integração de APIs de gerenciamento, que são usadas no projeto. Ele é um serviço com suporte apenas para Windows, com banco de dados próprio e pode ser instalado dentro de uma das máquinas virtuais gerenciadas por ele. Figura 2.4: VMWare vcenter[4]. 14