% \chapter{Introdução}

\chapter{O Projeto de Cluster}
%\section{O Projeto de Cluster}
\label{projetodecluster}
\cutname{projetodecluster.html}

No processo de preparação para projetar ou planejar um sistema que vai rodar em Cluster para ambientes empresariais (ou ambientes de produção, que não são flexíveis como os ambientes acadêmicos) é aconselhável se preparar para responder e respaldar várias tecnologias, metodologias e informações. A opção por uma ou outra tecnologia pode ser o marco divisor entre o sucesso ou não do projeto. Assim, alguns cuidados precisam ser tomados na hora de reconhecer o ambiente no qual se está optando.

Várias dicas com foco apenas em sistemas de alto desempenho, são dadas no artigo: ``Ten Tips for Building Your First High-Performance Cluster"~ ou em tradução livre ``Dez macetes para construir seu primeiro Cluster de Alto-desempenho"~ escrito por Joseph D. Sloan e publicado em ``12/29/2004"~ na \www{http://www.linuxdevcenter.com/pub/a/linux/2004/12/29/lnxclstrs\_10.html}.%, que tem foco apenas em sistemas de alto desempenho.

Assim, procuramos expandir a idéia do artigo e tendo como foco estruturas empresariais mais complexas e tecnologias abertas.

% Uma solução ``enterprise"~ na visão geral, e de forma simplificada, é a solução para sistemas críticos e que necessitam estar sempre ativos e em pleno funcionamento.

Algumas características que devem ser observadas nesse modelo são:
	\begin{itemize}
	\item Escalabilidade do ambiente: Capacidade sob demanda para atender os requisitos de recursos de infra-estrutura;
	\item Balanceamento de carga: Capacidade de realocar as cargas de trabalho no caso de falhas dos sistemas, tanto de Hardware como de \textit{software}, e também aumentar o desempenho global do sistema;
	\item Permitir separação de ambientes e ou aplicativos dentro de uma partição, para eliminar a contenção e alocar desempenho para sistemas específicos;
	\item Gerenciamento da carga de trabalho, permissão para estabelecer critérios de desempenho para cargas de trabalho específicas com base em suas regras de negócios e ajustar os recursos de processamento para atingir estas metas.
	\end{itemize}

Essas opções não só estimulam a eficiência econômica, mas também permitem maior visibilidade de como os recursos de computação devem ser alocados para apoiar processos de negócio estratégicos em tempo real, eliminando a subutilização e os custos indiretos dela decorrente.

%\subsection{O que deve ser observado}
\section{O que deve ser observado}

Como já observado, a construção deste tipo de sistema é complexa e é necessário conhecer muito bem o problema para propor a melhor solução. Clusters de alto-desempenho provêem freqüentemente o modo de melhor custo benefício para acelerar cálculos, ou em outras palavras, a computação de alto desempenho, mas a construção do primeiro Cluster pode ser uma experiência difícil. Os desafios para a construção de uma infra-estrutura deste tipo é grande e muitas variáveis tem de ser observadas e trabalhadas para se obter, além do melhor desempenho, um menor custo de investimento. O pensamento é semelhante aos em sistemas ``enterprise", mas com um grau de complexidade maior, pois estamos tratando de um ambiente que tem de ser estável, robusto, escalável e capaz de responder por toda a carga de processamento projetada.

O tempo de vida\footnote{Ciclo de vida e de desenvolvimento dos sistemas} das aplicações desenvolvidas para Clusters ``enterprise"~ tem a tendência de ser maior, podendo ter ciclos de mais de 10 anos de operação. Nestes casos a escolha das tecnologias a serem usadas terão grande importância para as bases do projeto.

Entre muitas outras informações e detalhes de projetos, alguns considerados mais importantes são levantados e discutidos nas próximas sessões, a listar:
	
	\begin{enumerate}
	\item{Estabeleça metas realistas}
	\item{Projeto piloto}
	\item{Utilização \textit{hardware} idêntico}
	\item{Sistemas \textit{diskless}}
	\item{A importância da rede de comunicações}
	\item{Minimize mas não subdimensione seu \textit{hardware}}
	\item{Isole seu Cluster}
	\item{Use ferramentas de Cluster}
	\item{Supere o desejo do mais recente}
	\item{Plano para expansão e reposição desde o princípio}
	\item{Documente seu Cluster}
	\item{Segurança}
	\item{Aplicação}
	\item{Banco de dados}
	\end{enumerate}

% \begin{enumerate}

%\subsubsection{Estabeleça metas realistas}
\subsection{Estabeleça metas realistas}

O primeiro passo na construção de um Cluster de alto-desempenho é realizar um planejamento visando o que se pretende estruturar e decidir quais as metas a serem atendidas, tanto no curto como no longo prazo. É preciso selecionar o \textit{hardware} apropriado e determinar de quais \textit{softwares} previstos para o ambiente. Claramente, estas decisões afetarão seu planejamento. Por exemplo, para cálculos intensivos em dados, é necessário um subsistema de I/O de grande capacidade e desempenho, mas em ambientes WEB a resposta dos servidores WEB pode ser a métrica, já para banco de dados a quantidade de transações suportadas.

Não é aconselhável iniciar o desenvolvimento da aplicação e nem do Cluster, antes de conhecer seu problema. Faça um levantamento de seus sistemas e tenha pessoas que conheçam ambas as áreas para participar do projeto do Cluster.

Em caso de aplicações existentes, que se queira portar para este ambiente, pesquise as possibilidades pois, certamente, o porte de aplicações mais antigas (legados) custará muito mais caro do que o desenvolvimento de uma nova aplicação em tecnologias mais recentes. Mas ainda sim, a avaliação de cada uma aplicação precisa ser feita. Podem ocorrer casos de aplicações (neste caso, problemas) que nem mesmo com o emprego de  tecnologias mais recentes seja possível clusterizar.

As metas de desempenho desejadas (o crescimento deste) a longo prazo também são uma métrica a ser utilizada, podendo até mesmo se tornar a linha mestra para o projeto de todo o sistema. As capacidades tem de ser bem planejadas e conhecidas desde o início do desenvolvimento do projeto, pois estas que indicarão as possíveis tecnologias a serem adotadas para se obter uma equalização de desempenho e custo total de implantação. Ressalta-se que neste momento do projeto não se pode pensar apenas nas capacidades imediatas do sistema. Deve-se também programar o crescimento de demanda a longo prazo, picos de utilização do sistema, que em alguns momentos pode explodir a capacidade instalada, sistema de recuperação de desastres, entre outras variáveis.


%\subsubsection{Projeto piloto}
\subsection{Projeto piloto}

O planejamento de um projeto ou Cluster pode ser difícil se não há conhecimento e experiência na plataforma tecnológica. Só com a prática e experiência que poderemos ser capazes de entender as capacidades e limitações de um Cluster. Iniciar com um projeto pequeno pode ser a melhor forma para evitar enganos e erros, e conseqüentemente, gastos excessivos.

Construir um sistema de teste com um número pequeno de máquinas e com base no modelo do seu sistema, permitirá determinar o que é preciso antes de assumir compromissos que podem ser equivocados. Isto provavelmente irá economizar tempo e dinheiro, já que corrigir enganos em um Cluster de grande porte e em produção pode ser muito demorado e principalmente ter um custo  elevado.

O domínio da tecnologia também é importante, e um projeto piloto pode ser utilizado para várias outras aplicações, como plataforma de desenvolvimento de sistemas, testes de configurações, projeção de estresse de sistemas e homologação de aplicações, entre muitas outras coisas.


%\subsubsection{Utilização de \textit{hardware} idêntico}
\subsection{Utilização de \textit{hardware} idêntico}

Existem exceções a esta regra, mas certamente será preciso um nó frontal mais rápido para seu sistema, da mesma maneira que também são necessários discos de maior capacidade em servidores de I/O.% Mas em geral, duração será muito mais simples se você puder unificar seu \textit{hardware}.


No entanto, a utilização do mesmo \textit{hardware} em cada máquina do Cluster traz muitas facilidades e simplificações, dentre elas:
	\begin{itemize}
	\item De instalação e de configuração de seus Clusters, já que poderá ser usado imagens idênticas do sistema para cada máquina.
	\item De manutenção do Cluster, pois todos os sistemas têm a mesma configuração básica. Assim, deve ser preciso manter poucas peças sobressalentes que poderão ser trocadas rapidamente, caso o \textit{hardware} do equipamento apresente defeitos. %quando preciso.% Mas as grandes economia virá quando se for programar seu Cluster; você não terá de preocupar em codificar pensando em diferenças em desempenho entre máquinas. Com \textit{hardware} não homogêneo, esta pode ser uma frustração sem fim.
	\end{itemize}

% Eu percebo esta recomendação contra executa à imagem tradicional de um Cluster de Beowulf composta de uma pilha de computadores velhos, reciclados. Mas você não lamentará isto. Sugestão: se você está olhando para usar \textit{hardware} semelhante mas não pode dispor equipamento novo, dê uma olhada para ISTO departamentos aumente atualizações.

Existe também a idéia de Cluster segmentado, ou Cluster de $N$ camadas, no qual se teriam vários Clusters que, trabalhando em conjunto, seriam responsáveis por toda a demanda dos sistemas que fossem executados no ambiente. Por exemplo, uma divisão em camadas onde se tem: uma responsável pelo armazenamento (Cluster de armazenamento, SAN), uma pelo banco de dados, uma pela aplicação, uma pelo firewall e \textit{proxy}; assim a modelagem do \textit{hardware} para atender as especificidades dos sistemas utilizados no ambiente é de extrema importância. Mais detalhes deste tipo de ambiente pode ser melhor visto na sessão \ref{n_camadas}. Seguindo assim essa característica de camadas de Cluster, cada uma destas tenderia a ter um único tipo de configuração de \textit{hardware}.


%\subsubsection{Sistemas \textit{diskless}}
\subsection{Sistemas \textit{diskless}}

Sloan, em seu artigo \cite{tentips}, aconselha  evitar a utilização de sistemas que não utilizam disco rígidos; no entanto, a experiência e a evolução destes sistemas vêm mostrando que a sua eficiência pode ser muito bem aproveitada, além de facilitar o gerenciamento de todo o sistema de forma global. Mesmo assim, a utilização deste tipo de tecnologia precisa ser muito bem avaliada para verificar os prós e contras de uma implementação baseada em tecnologia sem disco.


%\subsubsection{A importância da rede de comunicações}
\subsection{A importância da rede de comunicações}

Uma reflexão tem de ser feita antes de começar a pensar em redes: um dos grandes erros em projetos de Clusters, para qualquer que seja a sua finalidade, é acreditar que o processamento, ou alta capacidade de processamento, é baseado apenas em computadores, ou em seus processadores. Um Cluster precisa ser visto como um organismo completo, onde cada peça tem sua importância e pode ser o responsável por um melhor desempenho do sistema globalmente.


E é exatamente nesse aspecto que a rede de comunicações tem sua importância na hora de projetar o Cluster. A rede é normalmente o gargalo de desempenho para Clusters que utilizam \textit{hardware} não proprietário, ou \textit{hardware} de prateleira. Assim é importante tomar cuidado e colocar a camada de rede como uma das partes de grande importância no projeto. A criação de camadas separadas para dados e para gerenciamento dos sistemas, a possível utilização de várias interfaces de rede, ou outras tecnologias de comunicação, precisam ser avaliadas para as características que se deseja obter. Com os baixos preços das placas Gigabit Ethernet, a sua utilização vem se tornando freqüente nesses tipos de sistemas.


%\subsubsection{Minimize mas não subdimensione seu \textit{hardware}}
\subsection{Minimize mas não subdimensione seu \textit{hardware}}

Ao especificar o \textit{hardware} dos nós computacionais de um Cluster, há muita coisa a ser observada. Dependendo do ambiente e do número de máquinas que o Cluster irá conter, decisões como utilizar ou não ``RACKS"~ serão de grande importância, assim como é uma tendência em ambientes de grande porte a utilização deste tipo de infra-estrutura para melhorar utilização do espaço físico e facilidade de manutenção, para pequenos ambientes será um gasto desnecessário.

Na especificação do \textit{hardware} dos nós, certamente, não precisará de coisas como placas de som, aceleradoras $3D$, mouses, teclados e monitores. %Uma idéia criativa é montar, em um carrinho, um monitor, teclado, e mouse que possam circular pelo ambiente para fazer a checagem de máquinas individuais quando problemas surgirem.
Se estiver comprando os equipamentos, minimizar o \textit{hardware} pode baixar seu custo total de forma a permitir  comprar mais máquinas.

Mas existe um limite à esta ``minimização"~ das especificações de \textit{hardware}, certamente uma placa de vídeo será necessária no caso de que se precise dar manutenção em alguma máquina, assim como um CD-Rom pode fazer falta para a instalação de \textit{softwares} e do sistema operacional. Portanto, ter esses equipamentos ou possibilidades de solução para esses problemas é de extrema importância para o ambiente, não pode ser obrigatória  a necessidade de se abrir máquinas para adicionar uma placa de vídeo ou cd-rom para resolver qualquer tipo de problema, e o custo envolvido não é tão grande para se evitar a aquisição destes equipamentos.



%\subsubsection{Isole seu Cluster}
\subsection{Isole seu Cluster}

Não existe nenhuma razão para todos os nós do Cluster estarem visíveis em sua rede local. A existência de uma rede separada para o Cluster tem por razão a segurança das informações e dos sistemas que nele são executados. Com esse isolamento, pode-se principalmente preocupar com o desempenho do sistema, minimizando as preocupações com correções de seguranças. Repare que não está sendo dito que o isolamento do Cluster evita problemas de segurança, mas sim que muitas falhas de segurança em servidores em redes públicas são críticos, em um ambiente isolado e sob controle não terão as mesmas repercussões, possibilitando assim melhoras na disponibilidade dos sistemas.

Se for preciso obter acesso à rede do Cluster, este pode ser provido através de conexões seguras por um firewall e por uma máquina de entrada, responsável pelo disparo de processos no sistema. O controle de acesso e conexões ao Cluster são temas que têm de ser bem estudados, e dependendo do tipo e principalmente do valor desta informação, o controle tem de ser mais acurado. Nesse ponto, o controle de acesso iria muito além dos firewalls, proxies e servidores de autenticação, mas também passaria pelo estabelecimento de conexões seguras e autenticadas, com uso de certificados digitais, entre outras tecnologias.


%\subsubsection{Use ferramentas de Cluster}
\subsection{Use ferramentas de Cluster}
\label{ferramentasdecluster}
A utilização de ferramentas, que automatizam as tarefas de instalação e administração de Cluster podem ser uma solução agradável para os administradores de sistemas, mas é preciso dominar e entender essas ferramentas com profundidade.

Ferramentas como o OSCAR\footnote{Mais informações podem ser vistas em \www{http://oscar.openclustergroup.org/}}, Rocks\footnote{Mais informações podem ser vistas em \www{http://www.rocksclusters.org/}} e XCAT\footnote{Mais informações podem ser vistas em \www{http://www.xcat.org/}}, simplificam a instalação e o gerenciamento de Clusters, neste caso Cluster de processamento de alto desempenho. Qualquer um destes pacotes provavelmente instalará e configurará boa parte das suas necessidades básicas.%, e ambos provêem um mecanismo por ter ido além do software básico.

Assim como estes pacotes, existem outros que facilitam a utilização de Clusters, como o RHCS \footnote{Mais informações podem ser vistas em \www{https://www.redhat.com/solutions/clustersuite/}} que é apontado para sistema de HA.% e ferramentas que gerenciam a  instalação de sistemas distribuídos, como  a FAI\footnote{Mais informações podem ser vistas em \ref{FAI}}.

%\subsubsection{Supere o desejo pelo mais recente}
\subsection{Supere o desejo pelo mais recente}

Tenha como meta a ser alcançada um Cluster em funcionamento, que atenda de melhor forma as necessidades levantadas. Sendo assim, é muito improvável que não se precise da versão mais recente de distribuições Linux. %Equipamentos de Cluster estão baseado nas distribuições de Linux mais comuns, mas leva tempo para se adaptarem aos novos  lançamentos.
Na maioria dos Clusters, os usuários notarão diferenças apenas no nó de entrada do sistema. Para os nós de trabalho (ex., o tamanho do Cluster), não importa qual distribuição de Linux está executando, contanto que execute a tarefa para a qual foi projetado.% E você deveria restringir uso no nó de cabeça para tarefas Cluster-relacionadas, assim você não precisará ou quererá o mais recente e maior e-mail ou leitor de notícias, etc. Se você insistir em usar o mais recente lançamento de uma distribuição de Linux menos-comum, você estará criando trabalho desnecessário para você.


%\subsubsection{Plano para expansão e reposição desde o princípio}
\subsection{Plano para expansão e reposição desde o princípio}

O ciclo de vida de equipamentos de informática é curto, e isto fica muito evidente quando se começa a pensar na evolução do Cluster, de como gerenciar toda a necessidade de expansão com a viabilização tecnológica e técnica necessária. Vários pontos têm de ser levantados, como escalabilidade, compatibilidade, custo, assim como os motivos para a expansão.

A evolução do Cluster para aumentar as capacidades, a escalabilidade da solução utilizada tem de ser observada, para conhecer, no mínimo, quais as limitações da arquitetura que pretende-se implantar. Outros pontos também  precisam ser levantados para a expansão planejada, dentre eles: a aderência de \textit{hardwares} de modelos diferentes, espaço físico, capacidade de refrigeração, etc. A vantagem, no caso de expansão ou na troca de todo o Cluster, é que boa parte do equipamento pode ser reciclada para outras tarefas dentro do sistema.

No caso de estar trabalhando na expansão de um Cluster em funcionamento, o estudo deste será de grande importância para saber como a aplicação é executada no ambiente existente, fornecendo um grande volume de informação valiosa para os novos projetos e ajustando os elementos para realizar adequadamente a migração.


%\subsubsection{Documente seu Cluster}
\subsection{Documente seu Cluster}

Documentação bem feita e completa é a chave para o aperfeiçoamento do uso de seu Cluster atual e para projetos futuros. Se estiver instalando equipamentos, mantenha o registro da informação de configuração, rede, dados históricos de tráfego, utilização e principalmente de problemas.

Muitas vezes passamos por problemas que já foram resolvidos em ocasiões anteriores, mas por falta de um histórico de ocorrências, não sabemos como resolver o problema, o que obriga a todo um retrabalho de pesquisa por soluções dos problemas apresentados. As documentações são de extrema importância nesses momentos, mas as principais documentações ainda são as relacionadas ao próprio Cluster. Deve-se conhecer como as conexões de rede e energia estão feitas, quais as configurações e todos os detalhes técnicos da implementação, para ajudar a prever problemas, bem como facilitar em muito o processo de resolução de qualquer incidente.
% \end{enumerate}

% 
%\subsubsection{Segurança}
\subsection{Segurança}

Muitos projetos não trabalham o suficiente com a segurança dos ambientes de uma forma integrada, ou seja, a segurança pensada tanto na interface de \textit{hardware} como na de \textit{software}. A ISO 17799 ``Tecnologia da Informação - Código de Prática para Gestão da Segurança de Informações"~ aborda vários aspectos da segurança que tem de ser observados para uma boa prática desta. Entre outros itens, ela aborda:
	
	\begin{itemize}
	\item Política de Segurança;
	\item Segurança Organizacional;
	\item Segurança Relacionada ao Pessoal;
	\item Segurança Física e Ambiental;
	\item Gerenciamento de Comunicações e Operações;
	\item Controle de Acesso;
	\item Desenvolvimento e Manutenção de Sistemas, que levantam itens como:\\
		Requisitos de Segurança nos Sistemas,\\
		Análise e Especificação dos Requisitos de Segurança,\\
		Segurança em Sistemas Aplicativos,\\
		Validação dos Dados de Entrada,\\
		Controle do Processamento Interno,\\
		Segurança de Arquivos do Sistema,\\
		Controle de Software Operacional.
	\item Gerenciamento da Continuidade do Negócio;
	\item Obediência a Exigências.
	\end{itemize}


% aspectos de segurança ISO/IEC 17799:2000(E)

% oia o PDF
% 
% 
%\subsubsection{Aplicação}
\subsection{Aplicação}

No projeto e desenvolvimento da aplicação devem estar detalhados todos os processos e tecnologias que serão utilizados, uma aplicação bem projetada terá sucesso na sua execução em um ambiente de Cluster.

As aplicações serão tratadas por grupos específicos: em produção não passíveis de migração, em produção passíveis de migração, em desenvolvimento e novos projetos.

Os técnicos e gestores com base nos grupos acima irão montar o planejamento para o uso das tecnologias de Cluster que considere o melhor custo/benefício de seu caso.

%\subsubsection{Banco de dados}
\subsection{Banco de dados}

Conhecer bem as demandas de acesso aos dados pelos sistemas que serão executados no Cluster permitirá uma melhor escolha da arquitetura de banco de dados necessária para suprir as exigências do sistema. Mais informações podem ser obtidas no capítulo \ref{clusterdados}.

Como já observado na arquitetura de $N$ camadas, o Cluster de banco de dados compõe a tecnologia de mais complexa decisão para uma possível clusterização.
%devido ao alto grau de valor que pode ter a informação com a qual se venha a trabalhar ... cada ambiente depende de um estudo e de um amadurecimento de todas as partes envolvidas.

