Versão Final » History » Version 48

Beraldo Leal, 08 May 2012 13:15

1 1 Marco Gomes
h1. Ciclo 2 - Relatório final
2 1 Marco Gomes
3 1 Marco Gomes
h2. Resumo
4 1 Marco Gomes
5 28 Beraldo Leal
O conceito de computação em nuvem (em inglês, _cloud computing_) refere-se à utilização da memória, capacidade de armazenamento e poder computacional dos computadores interligados por meio da _Internet_, seguindo o princípio da computação em grade. Com a subutilização destes recursos computacionais em equipamentos modernos, surgiu a necessidade de compartilhar recursos de forma isolada, tornando assim uma máquina física em várias máquinas virtuais, cada uma servindo para um determinado propósito e com seus recursos bem definidos, tentando obter o máximo de aproveitamento dos recursos computacionais.
6 1 Marco Gomes
7 28 Beraldo Leal
Prover uma infraestrutura de máquinas virtuais para clientes de forma escalável é hoje uma necessidade mundial e um desafio tecnológico. Este relatório tem por objetivo exibir as características e requisitos necessários para instalar e configurar uma infraestrutura de Cloud para prover máquinas virtuais aos usuários do projeto *EduCloud*.
8 1 Marco Gomes
9 1 Marco Gomes
h2. Introdução
10 1 Marco Gomes
11 28 Beraldo Leal
O projeto *EduCloud* é uma iniciativa da *Universidade Estadual Paulista - UNESP*, em parceria com a *Secretaria de Educação do estado de São Paulo*, *Intel* e *ACCEPT*. Esta iniciativa visa fornecer uma infraestrutura de computação em nuvem para hospedar sistemas de apoio ao ensino para as escolas da rede pública do estado de São Paulo.
12 1 Marco Gomes
13 28 Beraldo Leal
Uma das grandes vantagens da computação em nuvem é a possibilidade de utilizar _softwares_ remotamente, oferecidos na forma de serviços, mais comumente chamado de: _Software as a Service (SaaS)_, sem a necessidade de que esses estejam instalados no disco local do computador do usuário. Todavia o leque de vantagens trazidos pelo _SaaS_ é mais amplo, não limitando-se unicamente à economia do recurso de disco do usuário[1]:
14 1 Marco Gomes
15 28 Beraldo Leal
* Independência de plataforma, ou seja, é possível acessar a nuvem virtualmente a partir de qualquer computador e sistema operacional;
16 28 Beraldo Leal
* As atualizações dos _softwares_ são feitas de forma transparente ao usuário, sem necessidade que este intervenha;
17 28 Beraldo Leal
* O trabalho colaborativo torna-se mais dinâmico e simples, uma vez que os arquivos criados pelo grupo são editados na nuvem, onde existe um controle de acessos simultâneos para garantir consistência das informações, e instantaneamente disponibilizados para todos os membros da equipe;
18 28 Beraldo Leal
* Os _softwares_ e os dados podem ser acessados em qualquer lugar, bastando que haja acesso à _Internet_, não estando mais restritos ao ambiente local de computação, nem dependendo da sincronização de mídias removíveis;
19 28 Beraldo Leal
* O usuário tem um melhor controle de gastos ao usar aplicativos, pois a maioria dos sistemas de computação em nuvem fornece aplicações gratuitamente, e mesmo quando estas não são gratuitas, são pagas somente pelo tempo de utilização dos recursos. Não é necessário pagar por uma licença integral de uso de _software_;
20 28 Beraldo Leal
* Diminuição dos gastos com manutenção da infraestrutura física de redes locais dos usuários, bem como da instalação dos _softwares_ nos computadores corporativos, pois esta fica a cargo do provedor da estrutura de nuvem, bastando que os computadores clientes tenham acesso à _Internet_;
21 46 Beraldo Leal
* A infraestrutura necessária para uma solução de cloud computing é mais enxuta do que uma solução tradicional de hosting ou collocation[17], consumindo menos energia, refrigeração e espaço físico e consequentemente contribuindo para preservação e uso racional dos recursos naturais.
22 1 Marco Gomes
23 29 Beraldo Leal
Para implementar uma infraestrutura de nuvem, o *Núcleo de Computação Ciêntifica - NCC*, da *UNESP* pesquisou as principais ferramentas livres[2] do mercado para que juntas, executem esta tarefa. 
24 1 Marco Gomes
25 27 Carlos Moreira
Para prover uma infraestrutura de nuvem, faz-se atender as seguintes necessidades:
26 1 Marco Gomes
27 29 Beraldo Leal
# Disponibilizar máquinas virtuais de acordo com a demanda de forma automática e rápida, com diferentes configurações de memória, disco e _cpu_;
28 29 Beraldo Leal
# Entregar unidades persistentes de armazenamento de dados, juntamente às máquinas virtuais disponibilizadas;
29 29 Beraldo Leal
# Suportar controle de acesso de usuários e grupos que podem utilizar os recursos da nuvem, bem como um mecanismo de quota de recursos por usuário/grupo;
30 29 Beraldo Leal
# Armazenar as máquinas virtuais e os dados de forma descentralizada, possibilitando também que a arquitetura seja escalável facilmente.
31 1 Marco Gomes
32 45 Beraldo Leal
Alguns _softwares_ existem para suprir estas necessidades. No capítulo 1 falaremos sobre o projeto _OpenStack_[3], responsável por disponibilizar uma infraestrutura de máquinas virtuais e unidades de armazenamento para as máquinas virtuais. No capítulo 2 falaremos sobre o projeto _Hadoop_[4], responsável por gerenciamento e manipulação de grandes volumes de dados em ambientes largamente distribuídos. No capítulo 5, falaremos sobre os balanceadores de conexões e de máquinas virtuais, fundamental para balancear a carga da nuvem entre os nós _"workers"_, no capítulo 6 falaremos sobre o _OCCI_[5], uma interface de comunicação entre os serviços de cloud.
33 1 Marco Gomes
34 1 Marco Gomes
h2. OpenStack
35 1 Marco Gomes
36 33 Carlos Moreira
O OpenStack consiste em uma coleção de projetos open source criada para fornecer uma infraestrutura de computação em nuvem e armazenamento distribuído. A empresa Rackspace[6] e a NASA[7] são os principais contribuidores do conjunto de projetos. Hoje o consórcio possui mais de 100 membros, dentre as principais temos: Rackspace, AT&T, NASA, DreamHost, Safew Labs, Citrix, Dell, AMD, Intel, Canonical, Yahoo e HP. O projeto mantém uma página[8] com uma lista dos principais contribuidores do projeto.
37 1 Marco Gomes
38 1 Marco Gomes
No OpenStack, existem 3 principais componentes:
39 1 Marco Gomes
40 40 Carlos Moreira
* Nova - Compute Infrastructure
41 1 Marco Gomes
42 34 Carlos Moreira
Nova é um controlador de poder computacional para o OpenStack. Todas as atividades necessárias durante o ciclo de vida de uma instância (uma máquina virtual sendo executada) com o OpenStack são gerenciadas pelo Nova. Isto faz dele uma plataforma de gerenciamento que manipula recursos computacionais (e.g. rede), além de manter o controle de acesso sobre os recursos, e zelar pela escabilidade da infraestrutura de máquinas virtuais. O Nova não provê nenhuma funcionalidade de virtualização por si só; ele usa a interface libvirt[9] para interagir com os hypervisors[10] suportados.
43 1 Marco Gomes
44 40 Carlos Moreira
* Swift - Storage Infrastructure
45 1 Marco Gomes
46 47 Beraldo Leal
O Swift provê um armazenamento para os objetos (dados) de forma distribuída. Ele é análogo ao serviço da Amazon: Simple Storage Service, ou S3[13]. O Swift é capaz de armazenar bilhões de objetos distribuindos entre os nós. Ele possui um mecanismo de redundância e _failover_ e é capaz de armazenar e transmitir os dados. Além disso o Swift é capaz de escalar arquivos considerados muito grandes (petabytes), mesmo que estes sejam em grande quantidade (número de objetos).
47 1 Marco Gomes
48 40 Carlos Moreira
* Glance - Imaging Service
49 1 Marco Gomes
50 40 Carlos Moreira
O Glance é um sistema de busca e recuperação de imagens de máquinas virtuais. Ele é responsável por gerenciar as imagens das máquinas virtuais, armazenando-as no sistema de arquivos local ou via o OpenStack Object Store - Swift.
51 1 Marco Gomes
52 1 Marco Gomes
Outros componentes, como um front end web (Horizon) e um serviço de autenticação (keystone), também fazem parte do projeto. O OpenStack está disponível no site do projeto[10] e está dispobilizado sobre a licença Apache[11].
53 1 Marco Gomes
54 40 Carlos Moreira
O OpenStack atende as necessidades do projeto EduCloud por se tratar de um conjunto de ferramentas que permitem montar uma infra estrutura de cloud utilizando ferramentas livres. Cada subprojeto do OpenStack tem suas próprias características, mas de modo geral as principais vantagens do OpenStack são:
55 1 Marco Gomes
56 40 Carlos Moreira
* Escalabilidade.
57 40 Carlos Moreira
* Robustez.
58 40 Carlos Moreira
* VNC proxy via web browser.
59 40 Carlos Moreira
* API com suporte a REST nativo.
60 40 Carlos Moreira
* Projeto com apoio de grande empresas.
61 40 Carlos Moreira
* Larga adoção na iniciativa privada e comunidade do Software Livre.
62 48 Beraldo Leal
* API com _"rate limite"_, ou seja, pode-se estabelecer quotas máximas de requisições na API.
63 40 Carlos Moreira
* Comunidade ativa.
64 40 Carlos Moreira
* Licença Livre.
65 1 Marco Gomes
66 1 Marco Gomes
As principais desvantagens são:
67 1 Marco Gomes
68 40 Carlos Moreira
* Documentação dispersa.
69 40 Carlos Moreira
* Muitos subprojetos, o que potencialmente dificulta a instalação e configuração.
70 1 Marco Gomes
71 41 Carlos Moreira
h3. Requisitos de Hardware
72 1 Marco Gomes
73 3 Beraldo Leal
O OpenStack é uma infraestrutura complexa que exige um conjunto mínimo de algumas máquinas. Embora uma única máquina pode ser utilizada para fins de desenvolvimento, os requisitos mínimos para um ambiente de produção exige uma quantidade maior de máquinas.
74 3 Beraldo Leal
75 8 Beraldo Leal
As recomendações de hardware foram retiradas do site do projeto OpenStack[11]. Abaixo temos 3 propostas de arquiteturas para o projeto EduCloud, com suas respectivas configurações:
76 1 Marco Gomes
77 8 Beraldo Leal
78 1 Marco Gomes
h4. Arquitetura proposta - mínima
79 1 Marco Gomes
80 9 Beraldo Leal
!https://ncc.unesp.br/its/attachments/189/openstack_small.png! 
81 1 Marco Gomes
82 9 Beraldo Leal
Nesta arquitetura proposta, temos as seguintes máquinas:
83 9 Beraldo Leal
84 8 Beraldo Leal
* 05 Computer Nodes;
85 8 Beraldo Leal
* 03 Storage Nodes;
86 8 Beraldo Leal
* 04 Standard Servers (Storage Proxy, Nova Server, API Server e Network Controller)
87 8 Beraldo Leal
* 04 Switches 10 GBoE;
88 1 Marco Gomes
89 9 Beraldo Leal
Com as seguintes configurações:
90 9 Beraldo Leal
91 9 Beraldo Leal
* Computer Nodes: 2 x 64 bits QuadCore x86 CPU with HT support | 16 GB RAM | 2 x 2TB SATA | 2 x 10GBoE NICs
92 9 Beraldo Leal
* Storage Nodes: 2 x 64 bits QuadCore x86 CPU with HT support | 16 GB RAM | 24 2T SATA | 2 x 10GBoE NICs
93 9 Beraldo Leal
* Standard Servers: 2 x 64 bits QuadCore x86 CPU with HT support | 16 GB RAM | 2 x 2TB SATA | 2 x 10GBoE NICs
94 3 Beraldo Leal
95 10 Beraldo Leal
h4. Arquitetura proposta - caso médio
96 10 Beraldo Leal
97 10 Beraldo Leal
!https://ncc.unesp.br/its/attachments/190/openstack_medium.png!
98 10 Beraldo Leal
99 10 Beraldo Leal
Nesta arquitetura proposta, temos as seguintes máquinas:
100 10 Beraldo Leal
101 11 Beraldo Leal
* 10 Computer Nodes;
102 11 Beraldo Leal
* 05 Storage Nodes;
103 12 Beraldo Leal
* 08 Standard Servers (Storage Proxy, Nova Server, API Server, Network Controller, VPN, etc..)
104 10 Beraldo Leal
* 04 Switches 10 GBoE;
105 10 Beraldo Leal
106 10 Beraldo Leal
Com as seguintes configurações:
107 10 Beraldo Leal
108 12 Beraldo Leal
* Computer Nodes: 2 x 64 bits QuadCore x86 CPU with HT support | 32 GB RAM | 2 x 2TB SATA | 2 x 10GBoE NICs
109 12 Beraldo Leal
* Storage Nodes: 2 x 64 bits QuadCore x86 CPU with HT support | 32 GB RAM | 24 2T SATA | 2 x 10GBoE NICs
110 12 Beraldo Leal
* Standard Servers: 2 x 64 bits QuadCore x86 CPU with HT support | 32 GB RAM | 2 x 2TB SATA | 2 x 10GBoE NICs
111 1 Marco Gomes
112 13 Beraldo Leal
h4. Arquitetura proposta - melhor caso
113 13 Beraldo Leal
114 14 Beraldo Leal
!https://ncc.unesp.br/its/attachments/191/openstack_big.png!
115 13 Beraldo Leal
116 13 Beraldo Leal
Nesta arquitetura proposta, temos as seguintes máquinas:
117 13 Beraldo Leal
118 15 Beraldo Leal
* 20 Computer Nodes;
119 15 Beraldo Leal
* 10 Storage Nodes;
120 16 Beraldo Leal
* 13 Standard Servers (Storage Proxy, Nova Server, API Server, Network Controller, VPN, etc..)
121 15 Beraldo Leal
* 08 Switches 10 GBoE;
122 13 Beraldo Leal
123 13 Beraldo Leal
Com as seguintes configurações:
124 13 Beraldo Leal
125 13 Beraldo Leal
* Computer Nodes: 2 x 64 bits QuadCore x86 CPU with HT support | 32 GB RAM | 2 x 2TB SATA | 2 x 10GBoE NICs
126 13 Beraldo Leal
* Storage Nodes: 2 x 64 bits QuadCore x86 CPU with HT support | 32 GB RAM | 24 2T SATA | 2 x 10GBoE NICs
127 13 Beraldo Leal
* Standard Servers: 2 x 64 bits QuadCore x86 CPU with HT support | 32 GB RAM | 2 x 2TB SATA | 2 x 10GBoE NICs
128 13 Beraldo Leal
129 1 Marco Gomes
h3. Tecnologias alternativas
130 1 Marco Gomes
131 1 Marco Gomes
Várias tecnologias podem ser utilizadas para provêr uma infraestrutura de máquinas virtuais. Algumas delas na forma de solução livre, podendo ser instalada em infraestrutura própria, e outras na forma de serviço web, sendo executada na infraestrutura da empresa que a provê.
132 1 Marco Gomes
133 1 Marco Gomes
Entre as tecnologias livres mais conhecidas, temos:
134 1 Marco Gomes
135 41 Carlos Moreira
# Abiquo (na versão mantida pela comunidade).
136 41 Carlos Moreira
# Nimbus.
137 41 Carlos Moreira
# OpenStack.
138 41 Carlos Moreira
# Open Nebula.
139 41 Carlos Moreira
# Eucalyptus.
140 1 Marco Gomes
141 1 Marco Gomes
Entre as tecnologias funcionando como serviço web, temos:
142 1 Marco Gomes
143 41 Carlos Moreira
# Amazon Web Service.
144 41 Carlos Moreira
# Linode.
145 41 Carlos Moreira
# Rackspace.
146 41 Carlos Moreira
# Gogrid.
147 1 Marco Gomes
148 1 Marco Gomes
Estas são apenas as principais alternativas que atendem os requisitos do projeto, levando em consideração popularidade, quantidade de downloads/mês e nível de maturidade do projeto.
149 1 Marco Gomes
150 17 Beraldo Leal
h2. Balanceador de conexões HTTP
151 17 Beraldo Leal
152 42 Carlos Moreira
Um balanceador de conexões é o elemento responsável por redirecionar o fluxo de pacotes de redes vindo da Internet para os _worker_ _nodes_ na rede interna, dividindo as conexões de forma mais justa possível para evitar sobre carga em um nó específico. Desta forma, se temos 10 servidores web, o balanceador recebe as conexões e encaminha para os 10 balanceadores dependendo do algoritmo por ele suportado.
153 17 Beraldo Leal
154 43 Carlos Moreira
Como as conexões HTTP são _stateless_, é fundamental que o balanceador tenha a capacidade de enviar sempre para o mesmo servidor conexões vindas de um mesmo cliente. O balanceador também é responsável por adicionar ou remover _worker_ _nodes_ da fila de máquinas sempre que necessário.
155 17 Beraldo Leal
156 19 Beraldo Leal
h3. Nginx vs HAProxy
157 19 Beraldo Leal
158 44 Carlos Moreira
Durante esta etapa foi feita uma pesquisa inicial sobre os projetos Nginx[14] e HAProxy[15]. Todas as duas tecnologias se encaixam, com vantagens e desvantagens no projeto EduCloud.
159 17 Beraldo Leal
160 44 Carlos Moreira
O Nginx (pronuncia-se em inglês: Engine X) é um servidor HTTP + proxy reverso e está disponibilizado pela licença BSD. Ele funciona no modo de _load_ _balance_ via um módulo externo.
161 17 Beraldo Leal
162 44 Carlos Moreira
Já o HAProxy nao é um servidor HTTP (ele não serve páginas estáticas), foi feito exclusivamente para ser um proxy e _load_ _balance_ não só HTTP mas para qualquer protocolo TCP. Seu código está licenciado sob a GPL.
163 1 Marco Gomes
164 44 Carlos Moreira
Nenhuma das tecnologias conflita com demais componentes do projeto EduCloud, porém o Nginx possui algumas limitações.
165 1 Marco Gomes
166 19 Beraldo Leal
Nginx é um servidor e proxy reverso HTTP de alta performance, gratuito e livre, bem como um servidor proxy para IMAP/POP3.
167 1 Marco Gomes
168 44 Carlos Moreira
Foi criado pelo programador russo Igor Sysoev em 2005. Segundo pesquisa da Alexa, reportada pela W3Techs. Em presquisa realizada pela Netcraft em Julho de 2010[16], o Nginx é usado em 5.21% dos domínios, tornando-se o quarto servidor web mais popular do mundo.
169 19 Beraldo Leal
170 44 Carlos Moreira
E funciona em UNIX, Linux, BSD, Mac OS, Solaris, e Microsoft Windows.
171 19 Beraldo Leal
172 19 Beraldo Leal
Todas as duas tecnologias possui um desenvolvimento ativo.
173 19 Beraldo Leal
174 44 Carlos Moreira
O HAProxy é usado por empresas como Twitter, Farmville, Fedora, github, Reddit, Stack Overflow, Tumblr, entre outras empresas.
175 19 Beraldo Leal
176 19 Beraldo Leal
Todos os dois projetos existem uma boa documentação, embora elas estejam espalhadas.
177 19 Beraldo Leal
178 19 Beraldo Leal
179 44 Carlos Moreira
h3. Desvantagens do Nginx
180 19 Beraldo Leal
181 44 Carlos Moreira
* Possui um algoritmo simples de _round-robin_. Se as requisições são pequenas e retornam rapidamente, o ngnix atende perfeitamente. Porém se a página demora para ser atendida, o Ngnix enviará novas conexões para máquinas que ainda estão atendendo requisições, fazendo com que algumas máquinas fiquem sobrecarregadas e outras não.
182 44 Carlos Moreira
* Existem módulos de terceiros para o Ngnix que torce esse balanceamento mais justo, mas ainda não está maduro.
183 44 Carlos Moreira
* O Ngnix apenas reconhece um host como _down_, quando o servidor retorna um erro com código 500.
184 19 Beraldo Leal
* Apenas atende HTTP.
185 19 Beraldo Leal
186 19 Beraldo Leal
h3. Desvantagens do HAProxy
187 19 Beraldo Leal
188 19 Beraldo Leal
Durante a pesquisa inicial a única desvantagem encontrada no HAProxy é que nativamente ele não suporta HTTPS. Porém alguns módulos extras permitem adicionar esta funcionalidade.
189 19 Beraldo Leal
190 1 Marco Gomes
h2. Referências
191 1 Marco Gomes
192 1 Marco Gomes
# "O que é computação em nuvem?":http://www.infowester.com/cloudcomputing.php
193 1 Marco Gomes
# "Definição de software livre":http://www.gnu.org/philosophy/free-sw.html
194 1 Marco Gomes
# http://www.gnu.org/philosophy/free-sw.html
195 1 Marco Gomes
# "Projeto Hadoop":http://hadoop.apache.org/
196 1 Marco Gomes
# "Open Cloud Compute Interface - OCCI":http://occi-wg.org/
197 1 Marco Gomes
# "Rackspace":http://rackspace.com/
198 1 Marco Gomes
# "Nasa":http://www.nasa.gov/
199 1 Marco Gomes
# "OpenStack - Empresas Participantes":http://www.openstack.org/community/companies/
200 1 Marco Gomes
# "The virtualization API":http://libvirt.org/
201 1 Marco Gomes
# "Hypervisor":http://en.wikipedia.org/wiki/Hypervisor
202 1 Marco Gomes
# "Projeto OpenStack":http://openstack.org/
203 1 Marco Gomes
# "Apache License":http://www.apache.org/licenses/LICENSE-2.0
204 1 Marco Gomes
# "Amazon Simple Storage Service":http://aws.amazon.com/s3/
205 1 Marco Gomes
# "nginx [engine x] an HTTP and reverse proxy server":http://nginx.org/
206 18 Beraldo Leal
# "HAProxy, The Reliable, High Performance TCP/HTTP Load Balancer":http://haproxy.1wt.eu/
207 1 Marco Gomes
# "Netcraft, web server survey":http://news.netcraft.com/archives/2010/07/16/july-2010-web-server-survey-16.html
208 29 Beraldo Leal
# "Cloud Colocation and data center real estate analysis":http://wiredre.com/colocation-data-center/2011/03/cloud-colocation-and-data-center-real-estate-analysis/