\chapter{Introdução}

O uso das tecnologias de Cluster e Grid tem aumentado nos últimos 20 anos, principalmente em aplicações de pesquisa, algumas das áreas de maior utilização destas tecnologias são: pesquisa genética, bioinformática, física, química, engenharia, climatologia, petroquímica, pesquisa espacial e resolução de equações e métodos matemáticos.

Apesar das tecnologias de clusters serem recentes, sua utilização é crescente e já domina a lista das máquinas mais rápidas do mundo. A figura \ref{fig:arqcluster} mostra a evolução percentual das arquiteturas de sistemas de alto desempenho no mundo, onde os sistemas classificados como Clusters já são responsáveis por $72,80$\% dos ambientes de supercomputação classificados na lista. Os dados são da organização ''top500.org'' \cite{top500}.

\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=.5]{imagens/arquitetura.png}
\end{center}

\caption{Evolução da utilização de Arquiteturas de alto desempenho. Fonte Top500.org}
\label{fig:arqcluster}
\end{figure}
% \newpage

Assim como as arquiteturas de cluster vem crescendo, a utilização de software livre (GNU/Linux) também vem crescendo de forma progressiva. A figura \ref{fig:sotop500} mostra a evolução de sua utilização nos últimos anos.

\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=.5]{imagens/so.png}
\end{center}

\caption{Evolução da utilização de S.O. na Top500. Fonte Top500.org}
\label{fig:sotop500}
\end{figure}
\newpage

% Existe uma crescente tendência mundial de utilização de clusters na supercomputação, denotada pelo fato de que os sistemas classificados como Clusters já são responsáveis por $72,80$ \% \footnote{http://www.top500.org/static/lists/2006/06/top500\_statistics.pdf} da lista dos 500 supercomputadores mais rápidos do mundo. 

O mercado corporativo tem percebido as vantagens e possibilidades de negócios relacionadas a utilização de tecnologias baseadas em Cluster e Grid, sendo observado um crescimento da adoção destas tecnologias nesse mercado. Este fato pode ser analisado pelo investimento para desenvolvimento destas tecnologias realizado pelas maiores empresas de tecnologia do mundo, como Oracle, Google, IBM, Intel, AMD, Sun, Cisco, entre outras, somado ao aumento da demanda por arquiteturas computacionais alternativas. Uma pesquisa realizada no ano de 2004 pelo instituto Forrest Research\footnote{Forrester, 2004. http://www.forrester.com/go?docid=34449} constatou que 37\% das grandes empresas do mercado corporativo estão em alguma fase de adoção/desenvolvimento de projetos baseados em tecnologias de Grid Computing.

A organização ''Top500'' também mantém os dados sobre os segmentos corporativos que utilizam as máquinas de maior capacidade computacional do mundo, a figura \ref{fig:segmentacaotop500} mostra a evolução no tempo desses segmentos de utilização.

\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=.5]{imagens/segmentacao.png}
\end{center}
\label{fig:segmentacaotop500}
\caption{Evolução da utilização por segmento de mercado. Fonte Top500.org}
\end{figure}

%Este crescimento da utilização de tecnologias de computação distribuída no mercado corporativo, a crescente necessidade governamental de recursos computacionais para integração dos sistemas existentes, implementação de novos sistemas de qualidade, mineração e análise da grande massa de dados, disponibilização de novos serviços aos cidadãos e o alto custo e problemas envolvidos na implementação destas melhorias no atual modelo computacional de computação de grande porte, 

%O governo possui uma crescente necessidade computacional para a implementação de novos sistemas, novos serviços aos cidadãos e melhorias dos serviços e sistemas existentes. A utilização do modelo computacional de computação de grande porte, atualmente adotado para sistemas críticos no governo, muitas vezes dificulta a implementação da
A utilização de computação distribuída no governo federal tem sido pequena, devido entre outros fatores à:
\begin{itemize}
\item Quebra de paradigma de desenvolvimento de sistemas;
\item Lentidão para absorver as novas tecnologias;
\item Falta de documentação em português;
\item Falta de treinamento em novas tecnologias.
\end{itemize}

Em decorrência da baixa adoção dessas tecnologias na área governamental, esta parte do documento aborda as principais tecnologias de Cluster e Grid e suas possibilidades de utilização no ambiente do Governo Federal, com o objetivo de estimular a utilização destas tecnologias no governo.

\section{Vantagens Técnicas de Utilização de Cluster e Grid}

A sessão \ref{asnovasdemandascomputacionais} apresenta algumas demandas e desafios computacionais do Governo Brasileiro e a possibilidade de utilização de tecnologias baseadas em cluster e grid para auxiliar no atendimento destas demandas. Assim observa-se que utilização de cluster e grid nos ambientes do governo possui as seguintes vantagens técnicas:

\begin{itemize}
	\item Utilização de \textit{hardware} padrão de mercado em sistemas críticos através da transferência do gerenciamento das funções de alta disponibilidade, tolerância à falhas e balanceamento de carga do \textit{hardware} para o software. Diminuindo a necessidade de \textit{hardware} especializado, aumentando a concorrência entre as empresas fornecedoras e propiciando ao governo a independência tecnológica de fornecedores de \textit{hardware}.
	
	\item Em geral, as tecnologias de Cluster e Grid possuem como base padrões abertos e interoperáveis. Facilitando a integração de sistemas baseados nestas tecnologias, em oposição a sistemas em computação de grande porte que utilizam, em sua grande parte, tecnologias proprietárias e padrões fechados.

	\item Disponibilidade de soluções baseadas em software livre que permitem a implementação de sistemas de cluster e grid sem a necessidade de ônus de licenças de software, além de permitir a melhoria, alteração, distribuição e compartilhamento de soluções, segurança, transparência e possibilidade de auditoria plena do sistema. %Somente as categorias de Clustering\footnote{\www{http://sourceforge.net/softwaremap/trove\_list.php?form\_cat=141}} e Computação Distribuída\footnote{\www{http://sourceforge.net/softwaremap/trove\_list.php?form\_cat=308}} do site de projetos Sourceforge.net possuem juntas um total de 1363\footnote{Ultimo acesso: 28/09/2006} projetos de tecnologias de cluster, grid e computação distribuída.

	\item Maior Facilidade de aumentar ou diminuir a capacidade computacional de acordo com a demanda existente, utilizando Grids e clusters computacionais. Esta questão foi abordada no relatório de avaliação de ferramenta de mineração, que encontra-se disponível para download no endereço: \www{http://guialivre.governoeletronico.gov.br/labcluster/tamandua.pdf}

	\item Possibilidade do desenvolvimento de sistemas e serviços que utilizem os conceitos de computação sob demanda, com o objetivo de aproveitar da melhor maneira possível os sistemas e recursos computacionais existentes no governo.

	\item Possibilidade de realizar o aproveitamento de ''ciclos ociosos'' de computadores já existentes na infra-estrutura de TI atual. Este assunto pode ser melhor visto na sessão \ref{ciclosociosos}.%Estima-se que o governo federal possua atualmente mais de 300 mil computadores. A maior parte destes equipamentos possui um padrão de utilização semelhante, onde são grandes os períodos de tempo de inatividade ou ociosidade. Esta imensa capacidade computacional poderia ser utilizada para a execução de sistemas de governo ou para o processamento de projetos de pesquisa técnica-científica desenvolvidos nas universidades brasileiras e empresas públicas brasileiras.
\end{itemize}

% \section{As Gerações da computação distribuída}
% \label{evolucaoarquiteturas}
% Durante os últimos 20 anos, a computação distribuída passou por um processo intenso de mudanças e revoluções. Este processo foi marcado por 5 gerações computacionais descritas a seguir:
% \begin{itemize}
% 	\item Primeira Geração de Computação distribuída: \\
% A primeira geração, também conhecida como host-based computing, é baseada na utilização de terminais burros que servem apenas como meio de visualização de aplicações, softwares e dados que encontram-se no computador central. Os recursos computacionais de processamento e armazenamento utilizados nesta geração são exclusivamente do computador que hospeda as aplicações.
% 	\item Segunda Geração de Computação distribuída: \\
% Na segunda geração, passam a ser utilizados computadores clientes com uma capacidade um pouco maior, capazes de suportar a emulação de terminal, entretanto as aplicações continuam sendo  armazenadas e executadas em um servidor remoto. 
% 	\item Terceira Geração de Computação distribuída: \\
% A terceira geração é caracterizada pelo utilização do paradigma de cliente e servidor, as aplicações são desenvolvidas para serem executadas em um computador cliente, terem uma interface com o usuário e  interagirem com servidores de aplicação. 
% 	\item Quarta Geração de computação distribuída: \\
% A quarta geração é caracterizada pela utilização de aplicações multi-camadas com regras de negócio, interface de usuários e dados separadas entre ambiente de interação do usuário e várias camadas de servidores.
% 	\item Quinta geração de computação distribuída: \\
% A quinta geração, também conhecida como grid computing, é caracterizada pela existência pela utilização por parte do cliente de recursos computacionais alocados em um pool virtual, de forma que o cliente utiliza capacidade computacional de acordo com a sua necessidade sem precisar ter maiores detalhes ou controle de onde são os recursos utilizados. 
% \end{itemize}
% 
% 
% \subsection{Tabela Resumo das gerações de computação distribuída}
% A tabela \ref{tabela:cincogeracoescomputacao} apresenta um resumo das cinco gerações da computação distribuída
% \begin{table}
% \begin{center}
% \begin{footnotesize}
% % use packages: array
% \begin{tabular}{|p{7.0cm}|p{7.0cm}|}
% \hline
% 
% \multicolumn{2}{|c|}{\textbf{Cinco Gerações de Computação Distribuída}}\\ \hline
% Geração  &   Características \\ \hline
% Primeira (Computação baseada em Host) & \begin{itemize} \item Terminal Burro  \item Um servidor \item Aplicações Monolíticas \end{itemize} \\ \hline
% Segunda (Acesso Remoto)  & \begin{itemize}  \item Um cliente suportando somente funções de emulação de terminal \item Um Servidor  \end{itemize} \\ \hline
% Terceira (Cliente/Servidor)  &  \begin{itemize} \item   Um cliente suportando regras de processamento, bem como interfaces de usuário \item Até dois servidores \end{itemize} \\ \hline
% Quarta (Multi-camadas)     &   \begin{itemize}  \item Um cliente suportando regras, bem como interfaces de usuário \item Mais de duas camadas de servidores \end{itemize} \\ \hline
% Quinta (Grid)  &  \begin{itemize} \item  Ambiente virtual onde todos os sistemas são considerados um pool de recursos  \item  N-camadas \item Arquiteturas orientadas a serviço \end{itemize} \\ \hline
% \end{tabular}
% \end{footnotesize}
% \end{center}
% 
% \caption{Tabela de resumo das cinco gerações de computação distribuída}
% \label{tabela:cincogeracoescomputacao}
% \end{table} 
% 
% Da mesma forma que em cada uma destas revoluções aconteceu mudanças estruturais nas relações entre as pessoas (usuárias ou desenvolvedores de tecnologias) e os sistemas computacionais, o mesmo irá ocorrer na adoção de tecnologias em Cluster e Grid. Não existe tecnologia pior ou melhor do ponto de vista global, cada tecnologia possui seu nicho de utilização e aplicação, cabe ao gestor do sistema ou aplicação realizar a devida análise e verificar quais procedimentos devem ser realizados. Ao menos que a mudança tecnológica seja transparente para o usuário do sistema, como em todas as mudanças poderá vir a ser necessário realizar alterações nos sistemas, treinamento e capacitação dos usuários e desenvolvedores, desenvolvimento de novas aplicações baseadas no novo paradigma.
% 
% %omplicados, em algumas áreas e aplicações é possível realizar a mudança de tecnologia computacional para 


\section{Arquitetura para sistemas críticos online em N Camadas}
\label{n_camadas}

% \subsection{Definição}

A Arquitetura para sistemas críticos online em $N$ camadas é um conceito que vem ganhando credibilidade no mercado. Em sistemas mais voltados para serviços web, suas principais vantagens são a estrutura baseada totalmente em padrões abertos e da arquitetura extremamente modular, capaz de se adaptar aos mais diversos cenários computacionais.

Tal arquitetura é conjugada por $N$ Camadas e pode ser composta geralmente por:

\begin{itemize}
	\item Camada de Aplicação Web
	\item Camada de Banco de Dados
	\item Camada de Armazenamento
\end{itemize}

Cada uma destas camadas será melhor exemplificada nas subseções abaixo:

\subsection{Camada de Aplicação}

Esta camada é responsável pelos serviços web disponíveis no cluster. É nela que se encontram os servidores de aplicação e é a única camada acessada externamente pelos usuários dos serviços.

Nesta Camada são utilizadas tecnologias de Cluster de Aplicação, Balanceamento de Carga e Alta Disponibilidade. A tabela \ref{tecnologias} apresenta uma lista das tecnologias utilizadas.

As principais características são: Alta Disponibilidade, Escalabilidade, Balanceamento de Carga, Alta Performance.

\subsection{Camada de Banco de Dados}

Esta camada é responsável pelos bancos de dados que são acessados pelos serviços disponíveis no Cluster e onde se encontram os serviços de Banco de Dados.

Nesta Camada são utilizadas tecnologias de Cluster de Banco de Dados e Replicação de Banco de Dados. A tabela \ref{tecnologias} apresenta uma lista das tecnologias utilizadas.

As principais características são: Alta Disponibilidade, Balanceamento de Carga, Alta Performance e Integridade dos Dados.

\subsection{Camada de Armazenamento}

Esta camada é responsável pela consolidação do armazenamento do Cluster, ela deve simular/funcionar como um \textit{storage} externo onde se encontram os servidores de Armazenamento.

Nesta Camada são utilizadas tecnologias de \textit{Distributed Mass Storage}, Sistemas de arquivos compartilhados, Dispositivos de Blocos em rede, entre outras. A tabela \ref{tecnologias} apresenta uma lista das tecnologias utilizadas.

As principais características são: Tolerância à falhas, Alta Disponibilidade, Integridade dos Dados, Alta Performance e Arquivos Distribuídos.

\subsection{Diagrama da arquitetura proposta}

A figura abaixo apresenta um diagrama da arquitetura proposta na seção
\ref{n_camadas}

\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=0.5]{imagens/cluster_aplicacao_DRAID5.eps}
\end{center}

\caption{Esquema do modelo de cluster proposto.}
\end{figure}

\subsection{Considerações sobre a arquitetura}

A arquitetura em $N$ camadas foi pensada para que fosse o mais geral e modular possível, alguns exemplos de utilização desta arquitetura podem ser definidos com os seguintes tipos de implementações:

\begin{itemize}
	\item Camada de aplicação através de tecnologias de cluster, camada de banco de dados através de uma máquina RISC de grande Porte e camada de armazenamento em Cluster, ou.
	
	\item Camada de aplicação através de máquina RISC grande porte e/ou \textit{Mainframe}, camada de banco de dados em Cluster, camada de armazenamento através do uso de \textit{Storage} Externo, ou.

	\item Implementação da camada de aplicação, banco de dados e armazenamento em Cluster;
	
	\item Além de outras variações de arquiteturas possíveis.
\end{itemize}


\section{Possibilidades de Aplicações Práticas de Cluster e Grid}

A adoção de tecnologias em Cluster e Grid muitas vezes poderá impactar nas relações entre as pessoas (usuários ou desenvolvedores de tecnologias) e os sistemas computacionais, da mesma forma que qualquer outra mudança tecnológica. Os gestores, juntamente com os técnicos,  deverão definir qual tecnologia será adotada, quando adotar e sobre qual metodologia/procedimento através de uma análise prévia dos possíveis benefícios obtidos com a mudança tecnológica e os riscos/impactos envolvidos.

% Esta seção irá abordar as possibilidades de utilização prática de "cluster e grid" em diferentes áreas e tipos de aplicações, com o objetivo de esclarecer os gestores e técnicos de forma que os mesmos possam realizar a análise de suas aplicações e definir qual tecnologia poderia ser melhor utilizada na solução de sua demanda. 

%O Governo brasileiro possui várias aplicações e demandas computacionais distintas. Entretanto, existem necessidades ou características que são comuns a todas as aplicações:
O Governo Brasileiro possui várias aplicações e demandas computacionais distintas. Entretanto, existem necessidades ou características que são comuns a maioria das aplicações:

\begin{itemize}
	\item Alta Disponibilidade: a indisponibilidade de alguma aplicação de governo acarretará desde uma interrupção na execução das atividades internas, até mesmo, uma impossibilidade de serviços prestados aos cidadãos. Por este motivo, uma demanda transversal e comum para os sistemas e aplicações de governo é que eles possuam algum tipo de sistema de alta disponibilidade e tolerância à falhas. Na computação de grande porte tais sistemas são implementados em \textit{hardware} altamente especializado.
	
	\item Segurança: a demanda de segurança deve ser entendida como:
	\begin{itemize}
		    \item Confidencialidade:  o acesso a informação deverá ser realizado tão somente às entidades autorizadas, ou seja, àquelas legitimamente definidas pelo proprietário da informação.
    		    \item Integridade:  a informação manipulada deve manter todas as características originais estabelecidas pelo proprietário da informação, incluindo controle de mudanças e garantia do seu ciclo de vida (nascimento, manutenção, arquivamento e destruição).
 		    \item Disponibilidade: a informação deve estar sempre disponível para o uso legítimo, ou seja, por aqueles usuários autorizados pelo proprietário da informação.
	\end{itemize}
	
	\item Utilização de Padrões Abertos: crescente necessidade de utilização de padrões abertos e comuns entre as diferentes arquiteturas de aplicações com o objetivo de facilitar a integração de sistemas, bases de dados e diminuir a dependência de tecnologias proprietárias. A e-ping\footnote{Mais informações sobre a e-Ping podem ser obtidas na sessão \ref{subsecao_eping}} define os padrões adotados, recomendados e em transição que deverão ser utilizados pelo governo brasileiro.
	
	\item Aderência à Legislação: sistemas e aplicações de governo necessariamente devem estar de acordo com a legislação vigente no país.
\end{itemize}

% Podemos separar as possibilidades de aplicação de cluster e grid em sistemas governamentais em 6 maiores grupo:
% 
% A tabela \ref{tabela:seistecnologias} apresenta uma lista das principais tecnologias de cluster e grid que podem ser utilizadas no governo, bem como a referência do capítulo deste documento onde encontram-se informações técnicas mais completas sobre estas tecnologias.
% \begin{table}
% \begin{center}
% \begin{footnotesize}
% % use packages: array
% \begin{tabular}{|p{5.0cm}|p{2.0cm}|}
% \hline
% \textbf{Tecnologia} & \textbf{Capítulo} \\ \hline
% Processamento de alto desempenho & \ref{clusterprocessamento} \\ \hline
% Cluster de Aplicações & \ref{clusteraplicacao}\\ \hline
% Banco de Dados & \ref{clusterdados} \\ \hline
% Armazenamento & \ref{clusterarmazenamento} \\ \hline
% Grid & \ref{grids} \\ \hline
% Virtualização de Recursos & \ref{virtualizacao} \\ \hline
% 
% \end{tabular}
% \end{footnotesize}
% \end{center}
% 
% \caption{Tabela de resumo das cinco gerações de computação distribuída}
% \label{tabela:seistecnologias}
% \end{table} 



% \subsection{Aplicações Web}
% "Quase toda e qualquer aplicação web que armazene os dados remotamente"
% \subsection{Banco de Dados}
% "Explicar"
% \subsection{Grid}
% "Aproveitamento de ciclos ociosos e utilização de recursos geograficamente dispersos"
% \subsection{Virtualização de Recursos}
% "Consolidação de serviços e servidores de forma centralizada"

A definição de soluções tecnológicas, ou até mesmo a realização de uma análise do ambiente computacional do governo, é complicada devido a heterogeneidade e diversidade tecnológica implementadas. Desta maneira, é preciso realizar uma análise de cada cenário e aplicação, para poder definir quais tecnologias serão capazes de atender as demandas da instituição com o melhor custo-benefício.

O uso de tecnologias de Cluster e Grid para aplicações críticas no governo, pode representar uma redução nos custos, viabilização da implementação de novos sistemas e ampliação da capacidade computacional dos sistemas existentes, devido principalmente a utilização de \textit{hardware} \textit{commodity}, de software livre e a questão estratégica da independência tecnológica e de fornecedor.

Existem tecnologias de Cluster e Grid para as mais variadas finalidades, sendo necessário realizar uma análise, e conseqüente verificação de quais tecnologias são capazes de atender as demandas computacionais existentes na instituição, com o melhor custo-benefício e o menor risco possível à continuidade do negócio.

Entretanto, podemos observar que alguns sistemas governamentais estão aptos para uma possível adequação:
\begin{itemize}
 	\item o Sistema Integrado de Administração de Recursos Humanos (SIAPE\footnote{http://www.siapenet.gov.br}): Sistema responsável pela geração e processamento da folha de pagamentos dos funcionários da administração pública federal. Atualmente, este sistema funciona em um computador de grande porte que centraliza o processamento de todas as folhas de pagamento da administração pública federal. Teoricamente, o processamento de uma folha de pagamento de dois funcionários distintos não possui interdependência entre si e poderia ser realizado de forma distribuída utilizando-se tecnologias de processamento paralelo ou ``Grid Computing"~ do tipo \textit{bag-of-tasks}. Esta abordagem poderia utilizar equipamentos dedicados distribuídos ou até mesmo aproveitar os recursos ociosos das estações de trabalho do governo federal, eliminando a necessidade e os custos envolvidos na aquisição e manutenção do \textit{mainfraime} utilizado atualmente por este sistema.

	\item Sistema Integrado de Administração Financeira do Governo Federal - SIAFI\footnote{http://www.tesouro.fazenda.gov.br/SIAFI/}:
	O SIAFI é o principal instrumento utilizado para registro, acompanhamento e controle da execução orçamentária, financeira e patrimonial do Governo Federal. Atualmente, este sistema é executado em \textit{mainfraime} e encontra-se em andamento no Serviço Federal de Processamento de Dados (Serpro) um projeto\cite{migrasiafi} de migração para baixa plataforma, adoção de \textit{software livre} e tecnologia de Cluster de balanceamento de carga.


\end{itemize}

% \subsection{Cenários de Aplicação}

Para efeitos didáticos e de esclarecimento das possibilidades de utilização de tecnologias de Cluster e Grid no governo federal, serão definidas alguns cenários básicos diferentes onde serão apresentadas características das aplicações, demandas computacionais e uma pequena análise sobre quais tecnologias poderão ser utilizadas. Para informações técnicas sobre as tecnologias de Cluster e Grid abordadas neste documento, leia a parte \ref{aspectostecnicos}.

\subsection{Cenário - Aplicações WEB}

Neste cenário, a instituição da administração pública possui um portal web de serviços voltados aos cidadãos, sendo utilizado basicamente para realizar consultas e obter informações, possuindo conteúdo estático (armazenado localmente em sistema de arquivos) e conteúdo dinâmico (armazenado remotamente através da utilização de um servidor de banco de dados).

O portal precisa estar disponível para acesso e consulta dos usuários na maior parte do tempo possível, as questões como integridade, confidencialidade e autenticidade são essenciais, pois as informações contidas no portal não devem ser alteradas e disponibilizadas para pessoas que não possuam a devida autorização.

A tabela \ref{tabela:cenario_1} apresenta o mês, a quantidade de acessos simultâneos ao portal e a carga de processamento utilizada no computador que hospeda a aplicação.

\begin{center}

	\begin{small}
	\begin{table}[!htb]
	\begin{tabular}{ | p{1.5cm} | p{1.5cm} | p{1.5cm} |}
	\hline
	\textbf{Mês} & \textbf{Acessos Simultâneos} & \textbf{Carga Utilizada} \\ \hline
	01	& 250 & 50\% \\ \hline
	02	& 350 & 70\% \\ \hline
	03 	& 450 & 90\% \\ \hline
	04 	& 500 & 100\% \\ \hline
\end{tabular}
\caption{Tabela Cenário 1}
\label{tabela:cenario_1}
\end{table}

\end{small}
\end{center}

Neste cenário, após o servidor atingir sua capacidade de processamento máxima em 4 meses será necessário, caso seja possível, realizar otimizações na aplicação, para continuar utilizando o mesmo servidor por mais tempo ou realizar um \textit{upgrade} na capacidade computacional do servidor. Após atingir o limite técnico de expansão do servidor deverá, ser adquirida uma máquina com maior capacidade de processamento e expansão.

Normalmente, quanto maior a capacidade de processamento de um único servidor maior será o preço, sendo que o custo envolvido na aquisição não cresce de maneira linear e o preço de uma máquina com 4 processadores é maior que preço de duas máquinas de 2 processadores cada. Apesar disso, uma máquina de 8 processadores terá um desempenho menor que duas máquinas de 4 processadores devido as características e limitações físicas da arquitetura x86\_32 e x86\_64. Sabe-se que nestas arquiteturas computacionais a melhor relação custo/performance são obtidas em máquinas de 4 processadores.

Caso a demanda continue crescendo, em pouco tempo, uma única máquina na arquitetura x86\_32 e x86\_64 não será capaz de atender as necessidades computacionais. Neste caso, existirão duas possibilidades: trocar a arquitetura da máquina utilizada, ou distribuir a demanda computacional em mais de um servidor.

A abordagem tradicionalmente utilizada seria a primeira e tem apresentado alguns problemas tais como: alto custo, dependência tecnológica e de fornecedor e conseqüente dificuldade de administrar o ambiente de TI.

Para se realizar a ampliação da capacidade computacional de acordo com a segunda possibilidade, distribuindo o atendimento da demanda em mais de um servidor, deverão ser utilizadas tecnologias e soluções para a implementação de Cluster ou Grid.

Neste cenário de portal ou aplicação web, poderão ser utilizadas tecnologias de alta disponibilidade (para garantir que o nível de serviço exigido) e balanceamento de carga (para distribuir as requisições dos usuários entre os servidores). Estas tecnologias podem ser utilizadas em conjunto ou separadamente de acordo com a necessidade da instituição. Exemplos de possibilidade são: 

\begin{itemize}
	\item Implementar somente um sistema de alta disponibilidade com duas máquinas:\\
	A capacidade de processamento deverá ser suportada trivialmente por apenas uma máquina. Uma das tecnologias mais utilizadas nesta possibilidade é o HeartBeat, vide \ref{heartbeat}.

	\item Implementar somente um sistema de balanceamento de carga para várias máquinas:\\
	As requisições dos usuários será balanceada entre as diversas máquinas. Entretanto, é razoável que o sistema seja capaz de não direcionar uma requisição de um usuário para uma máquina defeituosa. Uma tecnologia amplamente utilizada para balanceamento de carga é o LVS \textit{Linux Virtual Server}.

	\item Implementar um sistema de alta disponibilidade e de balanceamento de carga:\\
	As requisições de usuários serão distribuídas em um conjunto de servidores e caso ocorra falha em algum dos servidores, o mesmo não receberá mais requisições de usuários. As tecnologias mais utilizadas para implementar soluções deste tipo são : ''lvs+ldirectord'', vide \ref{lvs}.
\end{itemize}

%Neste cenário de portal web, existem alguns pré-requisitos para se utilizar tecnologias de Alta disponibilidade e balanceamento de carga: 
%\begin{itemize}
	%\item	
%\end{itemize}
Assim, é preciso garantir que a informação será a mesma não importando qual servidor ela estará sendo acessada, de forma que todo o conteúdo publicado, seja ele estático ou dinâmico, publicado deverá estar disponível, sincronizado e idêntico em todos os servidores. Soluções para esses problemas são a utilização de sistemas de arquivos distribuídos e compartilhados, como o GFS, OCS2 e PVFS.

Informações mais detalhadas sobre estas tecnologias serão apresentadas no capítulo \ref{clusteraplicacao}.
%A primeira possibilidade possui diversos pontos negativos, os principais são: equipamentos de arquitetura computacional não x86 normalmente são hardwares extremamente específicos e possuem um custo total de propriedade elevado.

%Na segunda possibilidade, dependendo da tecnologia utilizada para distribuir a carga de processamento das requisições entre as máquinas poderá ser possível que a capacidade de processamento das requisições cresça linearmente em função da quantidade de máquinas, resolvendo o problema de uma única maquina que é: Uma hora será impossível crescer. Entretanto, enquanto esta possibilidade pode possuir um custo menor de aquisição, ela também poderá possuir uma maior dificuldade de administração, existirão mais servidores para serem administrados. 



\subsection{Cenário - Mineração de Dados}
%Neste cenário, a instituição da administração pública possui um acervo de dados de diversas bases de dados distintas e deseja utilizar as informações complementares existentes nas bases para melhorar a qualidade dos dados, eliminar registros duplicados, detectar fraudes, descobrir padrões e relações entre os registros das bases ocultos na 
%TODO CITAR TRABALHO DO DANIEL
Nos últimos anos, a informatização dos meios de produção e as novas formas de comunicação possibilitaram a geração de grandes volumes de dados nas mais diversas instituições, sejam públicas ou privadas. Grande parte das informações armazenadas nessas bases de dados permanece ainda desconhecida, uma vez que as ferramentas tradicionais de extração não permitem uma completa visualização de todas as correlações possíveis, tornando o processo demorado, dispendioso e pouco automatizado.

O aproveitamento de tais informações armazenadas permite o desenvolvimento de estratégias que possibilitam aumentar a competitividade das organizações. Especificamente para o setor público, a produção de conhecimento a partir das bases de dados propicia melhor suporte à tomada de decisão, tendo por consequência a promoção da eficiência da administração.

Nesse contexto, a automatização dos processos de análise de dados, com a utilização de software específico, diretamente conectado à massa de informações, tornou-se uma grande necessidade, a qual aplicação de técnicas de mineração de dados propõe-se a dirimir. Mineração de dados é compreendida como a exploração e a análise, por meio automático ou semi-automático, de grandes quantidades de dados, a fim de descobrir padrões e regras significativos\footnote{ BERRY, M. J. A.; LINOFF, G. \textit{Data mining techniques -- for marketing, sales, and customer support}. John Wiley \& Sons, New York, 1997.}.

O processo de mineração de dados tem como principais objetivos descobrir relacionamentos, geralmente não triviais, entre dados armazenados, fornecer subsídios para que seja possível realizar previsão de tendências futuras com base nos registros acumulados, bem como estabelecer parâmetros para análise e auditoria das informações coletadas.

A realização de um processo de mineração de dados, geralmente emprega algoritmos de alta complexidade os quais podem realizar tarefas de classificação, estimativa, associação, segmentação ou agrupamento de informações, com possibilidade de consultas à bases de dados não estruturadas.

Dessa forma, à medida que a base de dados aumenta, as possibilidades de relacionamentos e combinações de tarefas cresce exponencialmente.

Por essa razão, existe o desafio de promover um ambiente computacional favorável ao processo de mineração de dados para que os resultados possam ser obtidos em curto espaço de tempo.

Existem 2 tipos de Cluster que podem auxiliar na resolução deste problema: 
\begin{itemize}
	\item Cluster de Processamento de Alto Desempenho: Implementação dos algoritmos de manipulação dos dados utilizando-se de técnicas de exploração de paralelismo e sistemas de processamento distribuído de alto desempenho, com o objetivo de melhorar o tempo de mineração dos dados através da distribuição das operações realizadas entre um conjunto de servidores. As principais tecnologias utilizadas para esta finalidade são: MPI, PVM e openMosix.

	\item Cluster de Banco de Dados:  A idéia aqui é clusterizar a camada de banco de dados da aplicação, fornecendo a aplicação uma maior capacidade de armazenamento disponível e um acesso aos dados mais rápido. Estas questões são obtidas através da utilização de tecnologias de banco de dados distribuído, replicado, ou paralelização de consultas SQL. As soluções mais conhecidas para auxiliar na resolução deste problema são: Mysql Cluster, PgCluster, slony, Sequoia e Pargres.

\end{itemize}

O governo federal financiou o desenvolvimento do tamanduá, um software de mineração de dados em cluster, este software foi licenciado sobre os termos de licenciamento GPL. Permitindo a sua utilização, distribuição, alteração e redistribuição de versão alterada do software. O tamanduá é um serviço web de mineração de dados, possui uma arquitetura escalar e modular, capaz de realizar o processamento da mineração através de algoritmos de processamento paralelo baseados na biblioteca de processamento paralelo PVM.

Maiores informações sobre o software de mineração tamanduá podem ser encontradas na página oficial do projeto: \www{http://tamandua.speed.dcc.ufmg.br/}.

\subsection{Cenário - Processamento de Alto Desempenho}

Aplicações que demandam uma grande quantidade de recurso de processamento podem obter ganhos expressivos se utilizarem paradigmas de programação paralela e sistemas de distribuição do processamento em cluster. Alguns exemplos são: aplicações de processamento científico, simulações, análises e comparações de dados/informações, entre outras. 

Atualmente existem dois principais tipos de cluster para processamento de alto desempenho, sendo que cada um possui suas próprias características:

\begin{itemize}
	\item Bibliotecas de Programação Paralela: Neste tipo de cluster de processamento de alto desempenho é necessário adaptar o software para utilizar as bibliotecas de programação paralela que compõem o cluster. As bibliotecas mais utilizadas são o MPI e o PVM.  Não é simples portar aplicações existentes para utilizar este tipo de cluster, pois a lógica computacional normalmente utilizada no desenvolvimento de sistemas ou aplicações é seqüencial, sendo preciso antes de mais nada realizar uma análise da aplicação com o objetivo de encontrar pontos no sistema de maior demanda computacional e possibilidades de paralelização, utilizando técnicas de programação paralela e exploração do paralelismo de forma a obter o melhor desempenho possível em um cluster de processamento de alto desempenho.

	\item Sistema de imagem única(SSI): Neste tipo de cluster de processamento de alto desempenho, o sistema de imagem única simula uma única máquina com todos os recursos computacionais das máquinas presentes no cluster. Isto acontece geralmente de maneira transparente para as aplicações e dependendo do sistema utilizado, teoricamente, se a aplicação é capaz de utilizar mais de um processador ela será capaz de ser utilizada no cluster sem a necessidade de realizar alterações na aplicação. 

\end{itemize}

Os sistemas de SSI mais utilizados são: Mosix, openMosix, OpenSSI e Kehrrighed. Cada um destes sistemas realiza a migração de processos de maneira diferenciada, não sendo possível atualmente realizar a migração de qualquer tipo de aplicação ou processo, devido as limitações de cada sistema. Entretanto, existem muitos casos onde a adaptação do sistema para execução em um cluster de processamento baseado em bibliotecas de programação paralela pode ser custoso ou inviável e que é possível executar a aplicação em um cluster SSI, obtendo um desempenho melhor que o da aplicação serial, entretanto não tão otimizado quanto se a aplicação fosse programada para ser paralela.

Um exemplo de aplicação que envolveria um grande esforço de adaptação e migração para um cluster de bibliotecas de programação paralela e que poderia ser utilizado em um cluster SSI facilmente é um programa de simulação que recebe a entrada de diversas condições iniciais e demora 10 dias para retornar o resultado da simulação. Em um cluster SSI, poderiam ser executadas várias cópias do programa com arquivos de entrada e saída diferentes que seriam automaticamente distribuídos no conjunto de máquinas do cluster. Este tipo de aplicação não teria nenhum ganho no tempo de processamento de uma cópia do programa pois o programa não é paralelo, entretanto ao final do prazo de execução teria-se um acervo maior de resultados para posterior análise e utilização.

As tecnologias de processamento de alto desempenho devem ser utilizadas nas seguintes situações:
\begin{itemize}
	\item Se no caso da instituição não possuir recursos ou permissão para realizar alterações na aplicação. A aplicação pode obter ganhos na utilização do sistema de imagem única sem necessidade de alteração.
	
	\item Se a melhoria de performance e resultados da paralelização da aplicação justificar a necessidade de adaptação e re-desenvolvimento da aplicação explorando as possibilidades de paralelismo.
\end{itemize}

Atualmente a Petrobras é a maior usuária de processamento de alto desempenho em cluster no brasil, sendo que possui 3 dos 4 supercomputadores da América do Sul que encontram-se atualmente na lista 500 supercomputadores \cite{top500} mais rápidos do Mundo. Estes 3 supercomputadores são clusters de processamento de alto desempenho utilizados para a execução de seus sistemas de exploração petrolífera.

\subsection{Cenário - Alta Disponibilidade}

Atualmente, sistemas de tecnologia da informação são responsáveis pela execução das mais variadas atividades administrativas, financeiras, de gestão de pessoas e até mesmo de comunicação na maioria das instituições públicas. Neste ambiente dependente de tecnologias, uma possível falha ou indisponibilidade em algum servidor ou serviço, acarretará a impossibilidade de realizar alguma atividade ou até mesmo prejuízo financeiro para a instituição. 

Um fator importante a ser levado em consideração na preparação de infra-estrutura para qualquer serviço ou aplicação é o fato de que todo e qualquer \textit{hardware}, software ou aplicação estão sujeitos a falhas. Sejam por conta de problemas nos componentes eletrônicos, problemas de desenvolvimento do software/aplicação ou até mesmo erros resultantes de uma interação errada dos usuários ou administradores do ambiente.

Existem basicamente duas alternativas, do ponto de vista do servidor que hospeda uma determinada aplicação, para se conseguir um maior nível de disponibilidade:
\begin{enumerate}
	\item Implementação de mecanismos de redundância e tolerância à falhas no \textit{hardware}. Alguns exemplos são: Fontes Redundantes, Espelhamento de discos, Utilização de Tecnologias \textit{HotSwap} para troca de componentes do servidor, entre outras. Esta abordagem normalmente é responsável por aumentar os custos associados à aquisição dos equipamentos de informática.
	\item Implementação de mecanismos de tolerância à falhas via software. Esta abordagem consiste em utilizar um sistema de alta disponibilidade em software, capaz de gerenciar um conjunto de servidores de forma que a falha em algum dos servidores não afete a execução da aplicação que é controlada pelo sistema de alta disponibilidade. Devido as questões relacionadas a alta disponibilidade serem tratadas em software, em geral, podem ser adquiridos \textit{hardwares commodity}, normalmente com custo menor que os \textit{hardwares} utilizados na alternativa 1. Exemplos destes sistemas são: HeartBeat, Mon, Carp, entre outros.
\end{enumerate}

O sistema de alta disponibilidade com maior maturidade e mais utilizado no sistema operacional linux é o Heartbeat \ref{heartbeat}. Este sistema pode ser utilizado para controlar a parada e o início de ''serviços'' ou a execução de comandos em um conjunto de máquinas. Em conjunto com o Heartbeat é necessário utilizar alguma tecnologia que seja responsável por replicar e garantir a integridade  dos dados entre os dois ou mais servidores, em geral o software mais utilizado é o drbd \ref{drbd}.

A figura \ref{fig:heartbeat_ha} é um diagrama onde 4 clientes estão acessando uma aplicação que encontra-se hospedada em um conjunto de alta disponibilidade. A aplicação encontra-se ativa somente no servidor primário e todos os dados salvos no disco do servidor primário são replicados para o servidor secundário. Em caso de falhas no servidor primário, o heartbeat será responsável por tomar as ações necessárias para que o servidor secundário passe a executar a aplicação e servi-la aos clientes. Os clientes enxergam apenas um servidor através de um endereço ip compartilhado entre os dois servidores.


\begin{figure}[!htb]
\centering
\includegraphics[scale=1.3]{imagens/heartbeat_ha.png}
\caption{Sistema de alta disponibilidade com dois servidores sendo acessados por 4 clientes. Um dos servidores é Primário(ativo) e outro Secundário(passivo)}
\label{fig:heartbeat_ha}
\end{figure}

Esta solução é estável, de implementação simples e utilizada em produção em todo o mundo. Entretanto, uma requisição enviada ao servidor primário antes de sua falha que envolva alguma atividade de escrita (email, banco de dados, servidor de arquivos, etc.) e não tenha sido gravada no disco do servidor primário, será perdida quando o servidor secundário assumir. Pois, o servidor secundário só possui as informações que tiverem sido gravadas no disco do servidor primário e replicadas em seu disco.

Recomenda-se utilizar uma solução baseada em heartbeat+drbd+mon  em sistemas de email, servidor de arquivos, servidor web e banco de dados. Sendo que devem ser tomados os devidos cuidados no sistema gerenciador de banco de dados para que não sejam perdidas requisições de transação.

\subsection{Cenário - Banco de Dados}

A camada de banco de dados é uma das partes críticas da maioria dos sistemas. Uma falha, indisponibilidade ou problemas de integridade na camada de banco de dados pode ser responsável pela indisponibilidade de um sistema inteiro ou até mesmo pela perda de dados que encontravam-se armazenados. Por conta desse motivo, esta camada deve ser avaliada, desenvolvida e implementada com cuidado. 

Existem diversos cenários em que as tecnologias de cluster para banco de dados podem ser utilizadas, sendo que as principais podem ser classificadas em:

\begin{itemize}
	\item Alta Disponibilidade: Nesta categoria encontram-se as tecnologias de replicação e alta disponibilidade. Para replicação normalmente é utilizado alguma solução própria ou específica para o sistema de banco de dados utilizado. No caso do postgres pode ser utilizado o slony\ref{slony} que provê replicação do tipo ativo/passivo. O mysql\ref{mysql} possui um recurso próprio para replicação de tabelas e dados entre servidores. Para alta disponibilidade pode ser utilizado por exemplo o Heartbeat+DRBD.
	
	\item Paralelização de Consultas SQL: Nesta categoria encontram-se as tecnologias de paralelização de consultas SQL, cujo objetivo é aumentar a velocidade de processamento e execução de consultas sql complexas, particionando-a e distribuindo em um conjunto de servidores. Uma solução independente de plataforma de banco de dados é o Pargres\footnote{\url{http://http://pargres.nacad.ufrj.br/}.}, desenvolvido para ser utilizado principalmente em aplicações OLAP e \textit{Datawarehouse}.

	\item Distribuição do banco e balanceamento das requisições: Este tipo de tecnologia é utilizada normalmente em grandes aplicações transacionais, onde é necessário aumentar a performance e disponibilidade. As soluções mais conhecidas são o pgCluster, específico para o postgres e o Sequoia\ref{sequoia}, solução em java independente de sistema de gerenciamento de banco de dados.

\end{itemize}

Maiores informações sobre as tecnologias disponíveis para cluster de banco de dados podem ser encontradas no capítulo \ref{clusterdados}.

