Você está na página 1de 94

Universidade de Braslia - UnB

Faculdade UnB Gama - FGA


Engenharia de Software
Projeto de um balanceador de carga de
servidores convel para sistemas Linux
Autor: Matheus Souza Fonseca
Orientador: Prof. Dr. Luiz Augusto Fontes Laranjeira
Braslia, DF
2014
Matheus Souza Fonseca
Projeto de um balanceador de carga de servidores
convel para sistemas Linux
Monograa submetida ao curso de graduao
em Engenharia de Software da Universidade
de Braslia, como requisito parcial para ob-
teno do Ttulo de Bacharel em Engenharia
de Software.
Universidade de Braslia - UnB
Faculdade UnB Gama - FGA
Orientador: Prof. Dr. Luiz Augusto Fontes Laranjeira
Braslia, DF
2014
Matheus Souza Fonseca
Projeto de um balanceador de carga de servidores
convel para sistemas Linux
Monograa submetida ao curso de graduao
em Engenharia de Software da Universidade
de Braslia, como requisito parcial para ob-
teno do Ttulo de Bacharel em Engenharia
de Software.
Trabalho aprovado. Braslia, DF, 16 de Junho de 2014:
Prof. Dr. Luiz Augusto Fontes
Laranjeira
Orientador
Prof. Dra. Carla Silva Rocha Aguiar
Membro convidado 1
Prof. Dr. Andr Barros de Sales
Membro convidado 2
Braslia, DF
2014
Este trabalho dedicado a todas as pessoas que participaram diretamente
ou indiretamente da minha trajetria acadmica at o atual momento.
"No force o crescimento, elimine os fatores que o limitam."
Peter Sange.
Resumo
Com o surgimento da World Wide Web, h uma crescente e incessante demanda por ser-
vios fornecidos por sistemas de informao das mais variadas dimenses. Desde o uso
de redes sociais at o uso de sistemas de e-commerce, as infraestruturas de TI das orga-
nizaes precisam atender importantes requisitos para alcanar a satisfao do usurio,
dentre os requisitos se encontram o desempenho, escalabilidade, conabilidade e dispo-
nibilidade. Para tentar suprir estes requisitos esto sendo continuamente desenvolvidas
solues em hardware e software, dentre elas existe o Balanceamento de carga de servi-
dores, que constitui em um processo de distribuio uniforme de requisies a servios
utilizando um dispositivo baseado em rede, ou seja, uma tcnica de distribuio de traba-
lho a um cluster de servidores via um algoritmo de escalonamento. O presente trabalho
tem como ideia a criao do projeto de um produto, um balanceador de carga de servi-
dores simplicado para computadores que fazem uso de sistemas operacionais baseados
em Linux, em integrao conjunta com o software que fornece um servio de failover, o
Application Manager. O core do sistema ser desenvolvido como um mdulo do kernel,
fazendo uso do Netlter, um framework nativo do kernel do Linux para manipulao de
pacotes de rede.
Palavras-chaves: balanceamento de carga. algoritmo de escalonamento. linux. netlter.
Abstract
With the emergence of the World Wide Web, there is a growing and constant demand
for services provided by information systems of all sizes. Since the use of social networks
to the use of e-commerce systems, the IT infrastructures of the organizations need to
meet important requirements to achieve user satisfaction, among the requirements are
performance, scalability, reliability and availability. To try to meet these requirements are
continually being developed hardware and software solutions, among them is the Load
balancing server, which is a process of uniform distribution of requests to services using
a network-based device, i.e., a technique of distribution of work to a cluster of servers via
a scheduling algorithm. This present work has the idea to create the design of a product,
a simplied server load balancer for computers that use Linux-based operating systems,
with joint integration with a software that provides a failover service, the Application
Manager. The core of the system will be developed as a kernel module, using Netlter, a
native Linux kernel framework for handling network packets.
Key-words: load balancing. scheduling algorithm. linux. netlter.
Lista de ilustraes
Figura 1 Cronograma do TCC1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Figura 2 Camadas de rede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Figura 3 Interao de modos de CPU e hardware . . . . . . . . . . . . . . . . . 30
Figura 4 Balanceador de carga de servidores . . . . . . . . . . . . . . . . . . . . 33
Figura 5 Congurao de um balanceador de carga . . . . . . . . . . . . . . . . 38
Figura 6 Retorno de trfego via NAT . . . . . . . . . . . . . . . . . . . . . . . . 40
Figura 7 Retorno de trfego via tunelamento IP . . . . . . . . . . . . . . . . . . 42
Figura 8 Retorno de trfego via DR . . . . . . . . . . . . . . . . . . . . . . . . . 43
Figura 9 Cenrio de redundncia ativo-standby . . . . . . . . . . . . . . . . . . . 48
Figura 10 Processo de comunicao TCP . . . . . . . . . . . . . . . . . . . . . . 53
Figura 11 Viso lgica da soluo de balanceamento de carga . . . . . . . . . . . 57
Figura 12 Estrutura do Application Manager . . . . . . . . . . . . . . . . . . . . 61
Figura 13 Mquina de estados do SMA . . . . . . . . . . . . . . . . . . . . . . . . 61
Figura 14 Viso de implantao da soluo de balanceamento de carga . . . . . . 63
Figura 15 Projeto da rede de computadores da soluo . . . . . . . . . . . . . . . 68
Figura 16 Tipos de hook com possibilidade de registro . . . . . . . . . . . . . . . 80
Lista de tabelas
Tabela 1 Estatstica de uso de sistemas operacionais . . . . . . . . . . . . . . . . 29
Tabela 2 Comparao entre tcnicas de retorno de trfego . . . . . . . . . . . . 44
Tabela 3 Eventos para troca de estados do SMA . . . . . . . . . . . . . . . . . . 62
Lista de quadros
Quadro 1 Cdigo fonte C: Envio de um ICMP_ECHO . . . . . . . . . . . . . . 70
Quadro 2 Cdigo fonte C: Recebimento de um ICMP_ECHOREPLY . . . . . . 70
Quadro 3 Cdigo fonte Python: Envio de arquivo via SCP . . . . . . . . . . . . 72
Quadro 4 Cdigo fonte C: Chamadas IOCTL no slbcore . . . . . . . . . . . . . 74
Quadro 5 Cdigo fonte Python: Uso do IOCTL no slbd . . . . . . . . . . . . . . 75
Quadro 6 Cdigo fonte C: Structs para o slbcore . . . . . . . . . . . . . . . . . . 76
Quadro 7 Cdigo fonte C: Struct de cogurao de um hook . . . . . . . . . . . 79
Quadro 8 Cdigo fonte C: Prottipo de funo para registrar um hook . . . . . . 79
Quadro 9 Cdigo fonte C: Exemplo de um mdulo netlter simples . . . . . . . 82
Lista de abreviaturas e siglas
TCC Trabalho de Concluso de Curso
ASICs Application Specic Integrated Circuits
API Application Programming Interface
OSI Open Systems Interconnection
IP Internet Protocol
VIP Virtual Internet Protocol
TCP Transmission Control Protocol
UDP User Datagram Protocol
PDU Protocol Data Unit
ISO International Organization for Standardization
ICMP Internet Control Message Protocol
GPL GNU Public License
CPU Central Processing Unit
RAM Random Access Memory
DNS Domain Name System
KISS Keep It Simple, Stupid
NAT Network address translation
HTTP Hypertext Transfer Protocol
LAN Local Area Network
CLI Command Line Interface
IOCTL Input/Output Control
LVS Linux Virtual Server
Sumrio
1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.1 Justicativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.2 Objetivo geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3 Objetivos especcos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.4 Estrutura do trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.5 Metodologia de trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.5.1 Cronograma do trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2 Fundamentao terica . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.1 Terminologia bsica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2 Protocolos de rede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2.1 Modelo OSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2.2 Pilha TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.3 Sistemas Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.3.1 Conceitos bsicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.3.2 Modos de CPU (kernel e usurio) . . . . . . . . . . . . . . . . . . . . . 30
2.3.3 Mdulos do kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.3.4 Netlter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.4 Balanceamento de carga de servidores . . . . . . . . . . . . . . . . . . . 32
2.4.1 Denio e tipos de balanceamento . . . . . . . . . . . . . . . . . . . . 32
2.4.2 Histrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.4.3 Benefcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3 Arquitetura de um balanceador de carga de servidores . . . . . . . . 37
3.1 Camada de rede de atuao (modelo OSI) . . . . . . . . . . . . . . . . . 38
3.2 Retorno de trfego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2.1 Retorno de trfego via NAT . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2.2 Retorno de trfego via tunelamento IP . . . . . . . . . . . . . . . . . . . 41
3.2.3 Retorno de trfego via DR . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.2.4 Comparao entre as tcnicas de retorno de trfego . . . . . . . . . . . 44
3.3 Algoritmos de escalonamento . . . . . . . . . . . . . . . . . . . . . . . . 44
3.4 Redundncia do servio . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4 Projeto arquitetural . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.1 Representao da arquitetura . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2 Tecnologias e tcnicas utilizadas . . . . . . . . . . . . . . . . . . . . . . 52
4.3 Viso lgica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.4 Viso de implantao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.5 Restries de qualidade . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5 Detalhes tcnicos da soluo . . . . . . . . . . . . . . . . . . . . . . 67
5.1 Congurao da rede de computadores . . . . . . . . . . . . . . . . . . 67
5.2 Monitoramento do cluster . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.3 Processo de failover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.4 Comunicao entre slbd e slbcore . . . . . . . . . . . . . . . . . . . . . 73
5.5 Tabela de servidores e tabela de conexes . . . . . . . . . . . . . . . . . 75
5.6 Persistncia de sesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.7 Interceptao e manipulao de pacotes . . . . . . . . . . . . . . . . . . 78
6 Concluso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.1 Trabalhos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Apndices 89
APNDICE A Lista de comandos do amcli . . . . . . . . . . . . 91
21
1 Introduo
A internet em conjunto com suas ferramentas de acesso (e.g. World Wide Web)
a mais poderosa ferramenta de comunicao do mundo, por intermdio dessa so diaria-
mente realizadas desde simples conversas entre pessoas, at transaes nanceiras de alto
valor. As mudanas na forma de comunicao que esta infraestrutura causou e causa at
hoje na vida das pessoas e suas relaes incalculvel. Todas a vantagem que esse meio
de comunicao oferece, implica no fato de que dia aps dia, existe um aumento de uso
dessa infraestrutura.
Como prova deste aumento de uso, vejamos a progresso do nmero de buscas feitas
na ferramenta de busca Google no perodo de seis anos (STATISTIC BRAIN, 2014). No
ano de 2007foram realizadas uma mdia de 1.200.000.000 (um bilho e duzentos milhes)
de buscas por dia, j no ano de 2013, o dado mais recente no perodo de realizao deste
presente trabalho, foram realizadas uma mdia de 5.922.000.000 (cinco bilhes, novecentas
e vinte e duas milhes) de buscas por dia. Um aumento aproximado de 493,5% nas buscas,
ou seja, um uxo de requisies quase cinco vezes maior em um perodo 6 anos.
Esta situao se repetiu e se repete em vrios outros servios disponveis na web,
at mesmo internamente em empresas (com uma escala menor, obviamente). Isto mo-
tivou o desenvolvimento de diversas solues de sistemas distribudos para amenizar os
impactos causados por esta situao, uma dessas solues o balanceamento de cargas
em servidores.
1.1 Justicativa
Dados os fatos introduzidos anteriormente, este trabalho de concluso de curso
motivado a desenvolver uma soluo que contorne o aumento do uso de servios em uma
rede. Levando-se em considerao um servio que aumenta diariamente a sua taxa de
acessos, podem surgir diversos problemas, como os a seguir:
Diminuio de desempenho do servio;
Caso o servio esteja centralizado em um nico local (e.g. Servidor fsico), se houver
uma falha neste servidor todo o servio car indisponvel;
Se for optado pelo aumento dos recursos do servidor (e.g. memria RAM, proces-
samento, interface de rede com maior largura de banda, etc), a situao pode ser
contornada temporariamente, mas se o aumento de requisies prosseguir, em algum
momento ser atingido o limite fsico da mquina, e o problema retornar.
22 Captulo 1. Introduo
O balanceamento de carga em servidores uma possvel soluo denitiva para
estes problemas. Atualmente existem diversas solues de balanceamento baseadas em
software e hardware, disponibilizadas de forma comercial ou at mesmo gratuitamente.
As solues comerciais so normalmente ASICs (Application Specic Integrated Circuits),
uma soluo conjunta de software e hardware especializado para o balanceamento de
carga, possuindo um desempenho melhor e um alto custo, exemplos de solues so o
Cisco CSS
1
, o Alteon NG Load Balancer
2
e o F5 LTM
3
. J em relao as solues base-
adas somente em software, que operam sobre sistemas operacionais padres (e.g. Debian
Linux
4
, Red Hat ES
5
, Windows Server
6
, etc), existem verses pagas, gratuitas e at livres,
exemplos de solues so o LVS (Linux Virtual Server)
7
e o HAProxy
8
(softwares livres).
O trabalho ca justicado pelo seu m didtico e por este propor uma soluo
mais minimalstica em relao as citadas anteriormente.
1.2 Objetivo geral
O presente trabalho tem o objetivo de denir o projeto de um sistema de balan-
ceamento de carga de servidores convel, sendo a sua plataforma de execuo sistemas
operacionais baseados em Linux.
1.3 Objetivos especcos
Levantar material bibliogrco para suporte a toda a pesquisa e desenvolvimento
relacionado a este trabalho;
Desenvolver a arquitetura geral de uma soluo de balanceamento de carga, de-
nindo as tecnologias a serem utilizadas, como: Linguagem de programao, plata-
forma de execuo, viso geral dos componentes (APIs, bibliotecas, etc), camada
de rede de atuao, tipo de retorno de trfego, etc;
Desenvolver o projeto detalhado da soluo de balanceamento de carga, contendo as
principais decises de tcnicas a serem utilizadas: Forma de interceptao de pacotes,
forma de comunicao entre os componentes do sistema, forma de congurao do
sistema, etc.
1
<http://www.cisco.com/go/css11500/>
2
<http://www.radware.com/Products/Alteon/>
3
<https://f5.com/products/modules/local-trac-manager>
4
<https://www.debian.org/>
5
<http://br.redhat.com/products/enterprise-linux/>
6
<http://www.microsoft.com/pt-br/server-cloud/products/windows-server-2012-r2/>
7
<http://www.linuxvirtualserver.org/>
8
<http://haproxy.1wt.eu/>
1.4. Estrutura do trabalho 23
Realizar projeto de integrao do software a ser desenvolvido (balanceador de carga)
e do software Application Manager.
1.4 Estrutura do trabalho
A estruturao do trabalho est de acordo com o sumrio deste documento. No
captulo 1 feita uma introduo ao tema, oferecendo a devida motivao para a reali-
zao da pesquisa, juntamente com informaes adicionais sobre o trabalho. No captulo
2 so citados vrios conceitos que oferecem toda a base para a realizao do trabalho, ou
seja, uma fundamentao terica necessria. O captulo 3 tambm oferece fundamentos
tericos, mas so fundamentos especcos sobre balanceamento de carga. No captulo 4
fornecida uma viso alto nvel (generalista) da soluo que est sendo proposta, de-
monstrando os componentes da arquitetura do balanceador de cargas. J o captulo 5
responsvel por fornecer detalhes tcnicos sobre como podero ser implementadas de-
terminadas funcionalidades do sistema. No captulo 6 ser feita a concluso do trabalho,
fazendo um resumo a tudo o que feito pesquisado e projetado, e fornecendo uma possvel
estruturao do Trabalho de Concluso de Curso 2, que ser realizado em sequncia.
1.5 Metodologia de trabalho
Para a realizao deste trabalho a coleta de dados foi feita atravs de livros, artigos
e documentaes de software, todos no segmento de Redes de computadores, Sistemas
distribudos e kernel do Linux.
O presente Trabalho de Concluso de Curso tem como objetivo o projeto de um
sistema, e como ao futura no Trabalho de Concluso de Curso 2 este projeto servir
como base para a implementao do sistema.
1.5.1 Cronograma do trabalho
24 Captulo 1. Introduo
Figura 1 Cronograma do TCC1
25
2 Fundamentao terica
Este captulo ter a funo de demonstrar a pesquisa realizada acerca dos diversos
temas que tangem este trabalho, fornecendo um referencial terico para descrio e justi-
cativa do projeto da soluo. Somente assuntos com maior recorrncia sero trabalhados
aqui, caso um determinado assunto pertinente no seja explicado neste captulo, signica
que ele ser abordado diretamente nos posteriores.
2.1 Terminologia bsica
Neste trabalho surgiro diversos termos que sero recorrentemente citados e devem
ter signicados esclarecidos para no haver interpretaes incorretas. Ressalta-se que estes
termos possuem estes signicados no domnio deste trabalho (balanceamento de carga),
em outros domnios eles podem ter outros signicados. A seguir os termos:
Servidor real: Um servidor real um dispositivo conectado em rede que possui servios
em execuo, estes servios tem a carga compartilhada entre os outros servidores
(BOURKE, 2001, p. 15).
Cluster de servidores: Um cluster de servidores (i.e. fazenda de servidores) um aglo-
merado de servidores independentes, trabalhando em conjunto como um sistema
nico. Neste trabalho o cluster de servidores ser a representao de todos os servi-
dores reais, mas diferentemente de uma soluo de cluster tpica, os servidores no
se comunicaro entre si.
VIP: Um VIP (Virtual IP) o endereo IP do servidor de balanceamento de carga que
acessvel fora da rede (normalmente um IP pblico), fazendo a representao de
todo o cluster de servidores, que so os hosts para quem ele despacha as requisies.
Failover: Failover o processo de troca de um servidor primrio para um servidor se-
cundrio/redundante quando ocorre um colapso do sistema primrio (JAYASWAL,
2006, p. 309). Para determinar quando ocorre o colapso, pode ser utilizada a tcnica
de heartbeat.
Kernel: O kernel o principal programa de computador que compe um sistema operaci-
onal. Ele possui funcionalidades essenciais para o funcionamento da mquina, como
a interao com o hardware da mquina e o provimento de ambiente de execuo
para outros programas (BOVET; CESATI, 2000, p. 12).
26 Captulo 2. Fundamentao terica
Camada de rede: Uma camada de rede um componente de uma arquitetura de um
software de rede. Em uma pilha de protocolos, os protocolos so agrupados por
camadas, onde cada camada tem o objetivo de oferecer soluo a um subproblema
do todo.
Pacote de rede: Em sentido estrito, pacote representa o conjunto de informaes tro-
cadas pelas camadas de rede (protocolo IP), mas este termo tambm amplamente
utilizado para representar qualquer PDU (Protocol Data Unit) de qualquer camada
de rede, seja ele um quadro ethernet, um pacote IP ou um segmento TCP. Neste
trabalho um pacote ter este signicado mais amplo.
2.2 Protocolos de rede
Logo aps o comeo da pesquisa e desenvolvimento em redes de computadores
1
, foram desenvolvidas solues de software de rede para reduo da complexidade de
comunicao do sistema. Comumente os software de rede no so um grande amontoado
de cdigo que efetua toda a operao de comunicao entre mquinas. Como uma boa
deciso arquitetural o software que realiza essa tarefa foi componentizado, de forma que os
problemas que esse amontoado de cdigo resolveria, fosse dividido de acordo com suas
similaridades e cada componente caria responsvel por resolver um pequeno conjunto de
problemas (princpio de Dividir para conquistar
2
).
Estes componentes foram organizados de uma forma hierrquica, formando uma
pilha de camadas, umas sobre as outras. Cada camada tem a funo de fornecer deter-
minados servios as camadas superiores, e uma camada X de uma mquina A tem a
funo de se comunicar com a mesma camada X de uma mquina B (TANENBAUM,
2003, p. 37). Seguindo o uxo dessa pilha de camadas a comunicao seria estabelecida,
conforme a Figura 2.
A forma em que essas camadas se comunicam determinado pelo protocolo de
rede utilizado, que uma implementao da soluo dos problemas associados a camada,
alinhado a um conjunto de regras e procedimentos a serem respeitados para emisso e
recepo de mensagens.
2.2.1 Modelo OSI
O primeiro e mais conceituado modelo de camadas o OSI (Open System Inter-
connection), um modelo de referncia publicado pela ISO
3
(International Organization for
Standardization) que determina sete camadas e seus objetivos (seguindo a lgica proposta
1
Ocorreu em meados da dcada de 1960, resultando na rede ARPANET.
2
<http://pt.wikipedia.org/wiki/Divis%C3%A3o_e_conquista>
3
Organizao internacional de padronizao: <http://www.iso.org/iso/>
2.2. Protocolos de rede 27
Figura 2 Camadas de rede
na seo anterior). Este somente um modelo conceitual e no um guia de implemen-
tao, onde futuras implementaes reais se basearam. A seguir uma breve descrio de
cada camada de acordo com (TANENBAUM, 2003, p. 45-47):
1. Fsica: Trata da transmisso de bits (1s e 0s) por um meio fsico de comunicao
(e.g. cabo coaxicial, cabo de par tranado, cabo de bra tica, etc);
2. Enlace de dados: Transformar a transmisso de dados em algo mais convel,
reduzindo os erros de transmisso e agrupando as informaes em pacotes (nesta
camada as PDUs so chamadas de quadro);
3. Rede: Roteamento dos pacotes (pacotes IP) at o seu destino, passando nas sub-
redes onde eles trafegam;
4. Transporte: Fornecer um canal ponto a ponto livre de erros entre os dois hosts
que se comunicam, diferente da camada de enlace esta normalmente tem a funo
de comunicar os hosts de origem e destino, enquanto as camadas inferiores comu-
nicam os hosts com seus vizinhos imediatos, assim a origem e destino podem estar
separados por vrios roteadores;
5. Sesso: Estabelece um controle do dilogo que est ocorrendo entre os dois hosts;
6. Apresentao: Controle da sintaxe e semntica do dilogo, podendo controlar as
diferentes formas em que diferentes arquiteturas computacionais organizam suas
estruturas de dados (e.g. Little endian e Big endian);
7. Aplicao: composta por protocolos para atendimento de demandas do usurio,
que podem ser desde a transferncia de e-mails at a um transmisso multimdia.
28 Captulo 2. Fundamentao terica
2.2.2 Pilha TCP/IP
Diferentemente do modelo de referncia OSI, que foi denido inicialmente por um
grupo de trabalho da ISO antes mesmo de qualquer pilha de protocolos serem implemen-
tadas, o modelo de referncia ocial da internet foi formalizado aps os protocolos forem
projetados, implementados e testados (COMER, 2013, p. 53). Este modelo ocial cha-
mado de TCP/IP
4
, ele possui somente cinco camadas e cada uma contm n protocolos
associados.
Fazendo uma relao com o modelo OSI, a pilha TCP/IP possui as camadas de
Sesso e Apresentao incorporadas na camada de Aplicao, o restante continuando da
mesma forma, com os mesmos objetivos (fruto da inuencia do modelo OSI).
A pilha TCP/IP atualmente implementada por padro em todos os sistemas ope-
racionais modernos, e como um padro utilizado na internet geralmente no ocorrem
problemas de comunicao em mquinas com diferentes sistemas operacionais ou arqui-
teturas computacionais. A seguir uma breve lista de alguns dos protocolos mais famosos
da pilha TCP/IP, agrupados por camada (WIKIPEDIA, 2014):
1. Fsica: Bluetooth, RS-232, USB (Universal Serial Bus), etc;
2. Enlace de dados: Ethernet, PPP (Point to Point Protocol ), Frame Relay, etc;
3. Rede: IP (Internet Protocol ), ARP (Address Resolution Protocol ), ICMP (Internet
Control Message Protocol ), IGMP (Internet Group Management Protocol ) etc;
4. Transporte: TCP (Transmission Control Protocol ), UDP(User Datagram Proto-
col ), etc;
5. Aplicao: HTTP(Hypertext Transfer Protocol ), FTP(File Transfer Protocol ), DNS(Domain
Name System), etc.
2.3 Sistemas Linux
O Linux um kernel (ncleo) de sistema operacional baseado em Unix, no sendo
considerado um sistema operacional completo por no incluir por padro outras ferramen-
tas utilitrias necessrias para ser categorizado como tal. Dentro da rvore genealgica
de sistemas operacionais baseados em Unix
5
, o Linux hoje obtm a posio de segundo
mais utilizado no mundo at o presente momento, perdendo somente para sistemas Mac
OS X da Apple
6
. A Tabela 1 demonstra os dados mensais de deste ano de 2014.
4
Faz referncia aos seus dois protocolos mais famosos, TCP e IP.
5
Imagem da rvore genealgica: <http://www.computerworld.com/common/images/site/features/
2009/062009/unix_chart_775.jpg>
6
<http://www.apple.com/br/osx/>
2.3. Sistemas Linux 29
Tabela 1 Estatstica de uso de sistemas operacionais
2014 Win8 Win7 Vista NT WinXP Linux Mac Mobile
Abril 15.8% 55.4% 1.2% 0.2% 8.0% 5.0% 10.3% 4.0%
Maro 15.0% 55.1% 1.3% 0.2% 9.4% 4.9% 9.9% 4.0%
Fevereiro 14.2% 55.0% 1.4% 0.3% 10.1% 5.0% 10.0% 4.0%
Janeiro 13.4% 55.3% 1.5% 0.3% 11.0% 4.9% 9.6% 4.0%
Fonte: W3SCHOOLS (2014).
Estes resultados englobam sistemas operacionais de todos os tipos, mas se a pes-
quisa fosse restrita a sistemas operacionais para uso em servidores, os que fazem uso do
kernel Linux disparadamente ocupariam o primeiro lugar. Grande parte desse sucesso
devido a enorme comunidade que oferece desenvolvimento contnuo e grande suporte as
verses do Linux, resultante da losoa de software livre adotada.
2.3.1 Conceitos bsicos
O Linux um kernel de sistema operacional no-proprietrio sob licensa GPL
(GNU Public License), o que o caracteriza como um software livre. Um software livre se ba-
seia em quatro fundamentos de liberdade principais (FREE SOFTWARE FOUNDATION,
2014):
A liberdade de usar um software para qualquer propsito,
A liberdade de modicar um software para necessidades prprias,
A liberdade de compartilhar um software com seus amigos e vizinhos, e
A liberdade de compartilhar as mudanas que voc fez no software.
Quando um software atinge esse grau liberdade, ele considerado um software
livre. O Linux atende todas estas liberdades, e como resultado disso ele possui uma vasta
comunidade de desenvolvedores experientes, que alm de efetuarem as mais diversas cor-
rees e melhorias em seu cdigo, conseguiram portar este para ser utilizado em diferentes
arquiteturas computacionais (e.g. Intel x86, Intel x86-64, AMD 64, ARM, PowerPC, entre
outras), sendo possvel fazer uso do sistema operacional em servidores de grande porte,
computadores pessoais, tablets, celulares e at em uma geladeira!
Todas as caractersticas de software livre citadas anteriormente so extremamente
bencas para os campos de ensino, pesquisa e desenvolvimento tambm. Anal, as liber-
dades possibilitam a investigao do cdigo fonte, e maior liberdade de acesso a funciona-
lidades do sistema, o que facilita o desenvolvimento uma nova soluo (o objetivo deste
trabalho).
30 Captulo 2. Fundamentao terica
Como j foi dito anteriormente, o Linux um kernel, sendo o principal programa de
um sistema operacional e cando responsvel por: Gerenciamento de recursos (memria,
processador, disco e perifricos), escalonamento de processos, provimento de ambiente de
execuo para aplicaes, etc. Outras funcionalidades esto implementadas em aplicativos
utilitrios, como: Editor de texto, interpretador de comandos, compilador, ambiente de
desktop, etc. O kernel Linux e os aplicativos utilitrios em conjunto formam um sistema
operacional por completo, onde normalmente comunidades de desenvolvedoras os custo-
mizam e os distribuem com um determinado codinome, as chamadas distribuies Linux
(e.g. Ubuntu, Debian, Fedora, Arch Linux, etc).
2.3.2 Modos de CPU (kernel e usurio)
De acordo com Atwood (2008), o kernel de um sistema trabalha em um modo
especial chamado comumente de modo kernel, este oferece uma srie de privilgios em
relao ao acesso direto de funcionalidades do hardware da mquina (e.g. executar qual-
quer instruo da CPU e referenciar qualquer rea da memria RAM). Se todo e qualquer
processo pudesse ter acesso a essas funcionalidades, existiram diversos problemas de se-
gurana por conta de programas mal intencionados. Por este motivo os outros aplicativos
(e.g. editores de texto, compiladores, etc) atuam em um modo diferente, mais restritivo,
chamado comumente de modo usurio.
Essa separao garantida pela prpria CPU, que capaz de distinguir qual modo
est sendo executado o processo corrente e ento restringir determinadas instrues. Mas
existem determinados momentos, onde alguns processos comuns precisam ter acesso ao
hardware, como por exemplo, acesso a um arquivo que est gravado em disco. Para ter
tal recurso o processo precisa fazer uma chamada ao sistema (i.e. system call ), que um
pedido feito ao kernel do sistema, para que esse acesse o hardware e depois entregue o
pedido de volta ao processo (novamente, uma questo de segurana). A Figura 3 ilustra
essa situao.
Figura 3 Interao de modos de CPU e hardware
2.3. Sistemas Linux 31
Existem outras caractersticas de modos de CPU especcas de sistemas Linux, por
exemplo, em modo kernel o processo tem a maior prioridade de requisio de memria
dinmica, j em modo usurio a requisio de memria considerada no-urgente. Outra
questo, em modo kernel as funcionalidades so consideradas livres de erro (o kernel cona
em si prprio), no sendo necessrios mecanismos avanados de preveno de erros de
programao, j em modo usurio estes erros so esperados e tratados, por isso quando um
processo em modo usurio falha, dicilmente ir travar todo o sistema (BOVET; CESATI,
2000, p. 183).
Estas caractersticas enfatizam duas coisas, o modo kernel preza por desempenho,
j que tem acesso mais direto ao hardware alinhado de maior prioridade de acesso a mem-
ria. O modo usurio preza por estabilidade, j que o processo neste modo supervisionado
pelo kernel, possuindo uma maior proteo contra erros.
2.3.3 Mdulos do kernel
O Linux contempla uma srie de funcionalidades como as j descritas anterior-
mente, mas e quando surge a necessidade de uma funcionalidade que no foi desenvolvida
no seu cdigo fonte? Por exemplo, estabelecer a comunicao com um novo hardware
desenvolvido. Isso possvel graas aos mdulos do kernel. A seguir uma descrio de
acordo com Salzman, Burian e Pomerantz (2007, p. 2):
Mdulos so pedaos de cdigo que so carregados e descarregados no
kernel sob demanda. Eles estendem a funcionalidade do kernel sem a
necessidade de reiniciar o sistema [...] Sem mdulos, ns precisaramos
de criar kernels monolticos
7
e adicionar a funcionalidade diretamente
na imagem do kernel. Ter grandes kernels ainda tem a desvantagem de
nos exigir a reconstruo e reiniciao do kernel toda vez que queremos
novas funcionalidades.
A ideia de mdulos vieram de uma estratgia utilizada em microkernels, que so
kernels com somente as principais funcionalidades do sistema, as outras deveriam ser aco-
pladas ao kernel sempre que necessrio, oferecendo uma maior exibilidade arquitetural
do sistema. Um tipo de mdulo pode ser um device driver
8
, um cdigo que oferece uma
interface ao sistema operacional para interao com um hardware. Exemplos de mdulos
que no so device drivers podem ser a implementao de um escalonador de processos
customizado, um manipulador de pacotes de rede, etc.
Os mdulos sempre atuam no modo kernel de CPU, pois quando so carregados
dinamicamente eles so acoplados ao kernel do sistema. O que trs a vantagem de maior
desempenho e acesso a funcionalidades restritas, mas trs a desvantagem de perda de
7
<http://pt.wikipedia.org/wiki/N%C3%BAcleo_monol%C3%ADtico>
8
Caso ele seja inserido estaticamente a imagem do kernel, ele no um mdulo.
32 Captulo 2. Fundamentao terica
estabilidade e maior complexidade de desenvolvimento (como foi dito anteriormente na
subseo 2.3.1).
2.3.4 Netlter
Especicamente para mdulos do kernel Linux que trabalham com aspectos de
rede, existe uma srie de componentes que podem ser utilizados para ter acesso a de-
terminadas funcionalidades, como interceptao de pacotes. Este conjunto de componen-
tes fazem parte do framework chamado de Netlter, que composto de quatro partes
(RUSSEL; WELTE, 2002):
Hooks: So pontos pr-denidos na travessia de pacotes na pilha de protocolos TCP/IP
de uma mquina. Toda vez que chegado neste ponto pr-denido, o hook chamar
o que estiver registrado nele;
Registro de hooks: Qualquer mdulo do kernel pode registrar um hook com uma fun-
o de callback prpria
9
, ou seja, quando um pacote chegar a uma determinada
camada de rede, a funo de callback implementada e registrada no hook ir receber
o pacote da camada e vrias operaes podero ser feitas nele (aceitar, descartar,
esquecer, empilhar e tambm efetuar alteraes);
Empilhamento de pacotes: Quando em uma funo de callback, um pacote empi-
lhado, ele pode ser acessado por aplicaes no modo usurio de CPU, de forma
totalmente assncrona;
Documentao: Todas estas funcionalidades possuem uma boa documentao, alm de
comentrios no prprio cdigo do componente.
2.4 Balanceamento de carga de servidores
Esta seo pode ser considerada uma das mais importantes de todo o trabalho,
pois um dos objetivos especcos citados anteriormente na seo 1.3 era o de levantamento
bibliogrco para suporte ao trabalho, e como este trabalho ir projetar uma soluo de
balanceamento de carga de servidores, nada mais importante do que possuir uma denio
terica bsica sobre o assunto.
2.4.1 Denio e tipos de balanceamento
De acordo com Karimi et al. (2009):
9
Funes de calback so passadas como argumento de uma outra funo, para serem futuramente
utilizadas.
2.4. Balanceamento de carga de servidores 33
Balanceamento de carga a tcnica de diviso de trabalho entre dois
ou mais computadores, links de rede, CPUs, discos rgidos, ou outros
recursos, a m de obter a melhor utilizao dos recursos, vazo (i.e.
throughput) ou tempo de resposta.
Como a referncia citou, o termo recurso pode ter diferentes representaes, onde
a denio de balanceamento de carga ainda seria passvel de aplicao, por exemplo,
a distribuio de carga entre trabalhadores de uma empresa. Mas as formas que estes
balanceamentos so feitos contm suas peculiaridades, a seguir diferenas de duas das
principais:
Balanceamento de carga de CPU: Em um sistema com multiprocessamento, as CPUs
podem estar em uma mesma mquina ou distribudas, e o intuito do balanceamento
de carga distribuir um trabalho, mas este trabalho divido em partes, onde os
processados atuam paralelamente (e.g. As instrues de um programa so divididas
entre as CPUs).
Balanceamento de carga de servidores: Em uma arquitetura web podem existir di-
versos servidores que rodam o mesmo website, a carga de trabalho pode ser dis-
tribuda entre eles, mas neste caso os servidores no atuam obrigatoriamente em
paralelo, provavelmente eles nem se comunicam ou sabem da existncia um do ou-
tro. Neste caso cada pedido ao website distribudo entre os servidores, mas um
mesmo pedido no ser processado em dois ou mais servidores. A Figura 4 representa
este caso.
Figura 4 Balanceador de carga de servidores
34 Captulo 2. Fundamentao terica
Na sua forma mais simples, o processo de balanceamento de carga de servidores
ocorre na Figura 4 o seguinte:
1. Um cliente Y requisita um servio (e.g. HTTP, SMTP, Telnet, FTP, etc) a um
determinado endereo IP (X.X.X.X) e porta;
2. O balanceador de carga que responde pelo VIP X.X.X.X recebe a requisio, deter-
mina por meio de um algoritmo qual ser o servidor real a responder pelo servio,
ento altera o IP de destino para corresponder com o servidor real selecionado;
3. O servidor real recebe a requisio, efetua o processamento e envia a resposta para
o endereo do remetente da requisio (cliente Y) por sua rota padro;
4. O balanceador de carga o gateway da rota padro, ento ele recebe de volta a res-
posta do servidor real, mas para ela no ser descartada pelo cliente X o balanceador
altera agora o IP do remetente, colocando novamente o VIP X.X.X.X.
Esta soluo citada utiliza a tcnica de retorno de trfego via NAT, mas existem
outras forma de efetuar o balanceamento que sero citadas posteriormente no decorrer do
trabalho.
2.4.2 Histrico
Com o aumento do trfego na internet foi necessrio um determinado investimento
na estrutura das redes e das empresas que disponibilizavam servios. Inicialmente como
primeira medida para aumentar o desempenho dos servidores, foi utilizada a abordagem
de scale-up, que consiste em aumentar os recursos computacionais de uma mquina (CPU,
memria RAM, velocidade do disco rgido, etc). Durante algum tempo essa abordagem
atendeu algumas necessidades, mas rapidamente foram atingidos limites de melhoria (os
recursos computacionais para uma mquinas so nitos), alm disso, os recursos com
maior capacidade tinham altos preos, e ao nal de tudo as mquinas ainda corriam o
risco de falhar em algum momento e deixar seus servios indisponveis.
Outra abordagem que foi iniciada para se adaptar ao aumento do trfego foi a
de scale-out, onde ao invs de aumentar os recursos de uma nica mquina, aumen-
tado o nmero de mquinas para trabalhar em conjunto de forma distribuda. De acordo
com (SHARMA; SINGH; SHARMA, 2008), um sistema computacionalmente distribudo
prov compartilhamento de recursos como uma das suas maiores vantagens, o que prov
melhor performance e conabilidade do que qualquer outro sistema tradicional nas mes-
mas condies.
Antes dos balanceadores de carga virarem um produto real, os administradores de
sistema faziam uso da tcnica baseada em DNS round-robin para atingir resultados simi-
2.4. Balanceamento de carga de servidores 35
lares. Um DNS tradicionalmente faz associao de um domnio (e.g. www.example.com) a
um IP (e.g. 187.10.10.1), mas os servidores de DNS tambm oferecem suporte a associao
de mais de um IP a um domnio, o que possibilita que cada requisio ao domnio seja
distribuda entre os n servidores reais associados.Para escolha de qual ser o servidor que
receber a requisio, utilizado o algoritmo round-robin (ser discutido mais a frente)
para escolha. Mas esta soluo contm algumas desvantagens as solues de balancea-
mento de carga tradicionais, como suporte a um nico algoritmo de deciso e inexistncia
de monitoramento dos servidores, onde caso ocorra o colapso de um desses servidores, o
DNS no far nada para contornar (BOURKE, 2001, p. 5-6).
2.4.3 Benefcios
Com o surgimento das solues de balanceadores de carga baseados em servidores
(operam sobre mquinas servidoras com sistemas operacionais padro) foram alcana-
dos diversos benefcios, vrios deles j foram citados diretamente ou indiretamente neste
trabalho. A seguir uma lista dos principais de acordo com Bourke (2001, p. 8):
Escalabilidade: Em uma infraestrutura com balanceamento de carga, existe um bom
nvel de escalabilidade dos servios, pois para aumentar o seu poder necessrio so-
mente adicionar mais servidores reais. Tambm facilitada a remoo de servidores
com defeito, ou a desativao e ativao de servidores de acordo com a demanda.
Tudo com transparncia para os clientes.
Desempenho: So alcanados altos nveis de performance a um custo mais baixo do
que se fossem comprados computadores com recursos computacionais mais poten-
tes. Dependendo da ecincia do algoritmo utilizado para deciso de despacho das
requisies, onde sero escolhidos os que estiverem menos ocupados, melhor ser o
desempenho.
Disponibilidade e conabilidade: Caso um dos servidores falhe, o balanceador de
carga capaz de detectar e redirecionar o uxo para outros, sem que o servio
como um todo que indisponvel. Outro aspecto importante que o balanceador de
carga no deve ser um gargalo para o servio (caso ele seja o n a falhar), ento
necessrio aplicar alguma redundncia no servio de balanceamento, possuindo um
servidor de backup adicionado de um processo de failover integrado, aumentando a
conabilidade do sistema.
37
3 Arquitetura de um balanceador de carga de
servidores
A partir das denies bsicas abordadas anteriormente sobre os balanceadores de
carga de servidores, possvel detalhar melhor os seus componentes, mostrando de fato
como eles atuam nas redes de computadores modernas e demonstrando quais so as suas
possibilidades reais de funcionamento. As decises de quais so as melhores estratgias e
a forma de organizao dos componentes de uma soluo, determina qual a arquitetura
da mesma.
Em um projeto real de um balanceador de cargas devem ser tomadas precaues
para que os objetivos almejados sejam alcanados, ou o pior pode acontecer, o que j
no era o ideal pode se tornar pior, devido ao aumento da complexidade do sistema sem
evidncias de melhoria. De acordo com (BOURKE, 2001, p. 41), existem trs aspectos
que devem ser procurados em uma soluo, e outros trs aspectos que devem ser evitados
em uma soluo: Simplicidade ao invs de complexidade, funcionalidade ao invs de des-
perdcio e elegncia ao invs de irrelevncia. Todas elas remetem a um princpio conhecido
como KISS (Keep It Simple, Stupid)
1
, ou seja, existiro diversas solues que resolvem o
problema de balanceamento de carga, mas cabe ao arquiteto que est projetando a soluo
escolher a que atenda da forma mais simples e direta.
Na seo 2.4.2 j foi citada a existncia de balanceadores de carga DNS-based, que
apesar de ser uma forma de congurao antiga ainda utilizada. Bourke (2001, p. 43)
cita outras duas formas de congurao que so mais utilizadas atualmente, uma delas
a Flat-based, que uma forma simples e eciente, onde tanto o balanceador de carga
quanto o cluster de servidores se encontram em uma mesma sub-rede (e.g. 192.168.0.0/24).
Outra forma mais complexa, mas com possibilidade de emprego de melhores tcnicas de
segurana a NAT-based, onde o balanceador de carga se encontra em uma sub-rede
pblica (e.g. 192.168.0.0/24) com acesso a internet, mas o cluster de servidores se encontra
em uma sub-rede privada (e.g. 10.0.0.0/24). A Figura 5 ilustra esses casos de congurao
de forma simplicada (no cenrio caram omitidos roteadores, switches, etc).
Com isso os detalhes arquiteturais de um balanceador podem ser divididos em
quatro categorias principais:
1. De acordo com a camada de rede de atuao (segundo o modelo OSI);
2. De acordo com o retorno do trfego de rede;
1
Mantenha isso simples, estpido: <http://pt.wikipedia.org/wiki/Keep_It_Simple>
38 Captulo 3. Arquitetura de um balanceador de carga de servidores
Figura 5 Congurao de um balanceador de carga
(a) Congurao DNS-based, (b) Congurao Flat-based e (c) Congurao NAT-based
3. De acordo com a deciso de balanceamento das requisies;
4. De acordo com a forma de redundncia do servio.
3.1 Camada de rede de atuao (modelo OSI)
Uma importante deciso arquitetural na implementao ou implantao de um
balanceador de carga, decidir em qual camada de rede ele vai atuar, cando denido
qual tipo de pacote ele ir balancear o trfego (e.g. Quadro ethernet, pacote IP, segmento
TCP, mensagem HTTP, etc).
Existe uma forma de balancear o trfego na camada 2, para isso utilizada a
tcnica de link agreggation que consiste unio de dois ou mais links de rede, simulando
3.2. Retorno de trfego 39
um nico link lgico de alta velocidade e redundncia. Tambm pode ser realizado na
camada 3, onde os pacotes IP em um dispositivo de rede so redistribudos seguindo
algum algoritmo, o problema que via camada 3 s so conhecidos os possveis hosts
alvos, no tendo conhecimento da aplicao alvo (s seria acessvel via a porta do servio).
Normalmente os equipamentos como switches e roteadores operam at a camada 3, sendo
possvel acessar cabealhos de quadros ethernet e pacotes IP.
Natrio (2011) cita que as camadas de rede mais utilizadas so a 4 e a 7. O balan-
ceamento de carga na camada 4 um mtodo mais simplista do que na camada 7, consiste
na redistribuio de requisies na camada de transporte, fazendo uso normalmente dos
protocolos TCP ou UDP. A sua simplicidade est ligada ao balanceador no fazer an-
lise do contedo (i.e payload) dos segmentos TCP ou UDP, somente tendo a funo de
repassar a informao, resultando em um maior desempenho. J na camada 7 feito um
extenso uso de anlise de informaes que esto sendo trefegadas, sendo capaz de analisar
a URL (Uniform Resource Locator) de um pedido, os cookies
2
que esto sendo trefegados,
o tipo de dado que foi requisitado (via mime-type
3
). Em cima dessas informaes podem
ser tomadas decises mais inteligentes, fazendo por exemplo uma separao dos servidores
da infraestrutura de acordo com os seus dados, um grupo especializado em informaes
estticas (e.g. pginas HTML estticas, imagens e vdeos) e outro grupo especializado em
informaes dinmicas (e.g. scripts PHP), melhorando a organizao da infraestrutura.
Um contra deste tipo de abordagem baseado em contedo que o balanceador ca preso
a determinados tipos de aplicao, isso signica que se ele faz
3.2 Retorno de trfego
Acerca da forma de retorno do trfego dos servidores reais que esto atrs do
balanceador, sero abordados aqui trs estratgias que so parcialmente descritas por
Bourke (2001, p. 44-45), mas principalmente baseadas nas tcnicas de retorno de trfego do
LVS, descritas por Zhang (2000). As tcnicas so via NAT (Network Adress Translation),
via tunelamento IP e via DR (Direct Routing).
3.2.1 Retorno de trfego via NAT
Este a tcnica de retorno de trfego mais simples das trs, mas por conta da
sua simplicidade existe uma considervel perda de desempenho se comparado as outras
tcnicas. Devido ao alcance de endereos IP no IPv4 e tambm por requisitos de segurana,
existem um conjunto de IPs reservados para uso interno em organizaes, chamados de
IP falsos ou IP privados. Isso impossibilita que este endereo seja utilizado publicamente
2
<http://en.wikipedia.org/wiki/HTTP_cookie>
3
<http://en.wikipedia.org/wiki/Internet_media_type>
40 Captulo 3. Arquitetura de um balanceador de carga de servidores
na internet, mas possibilita que o endereo seja reutilizado por outros hosts em sub-
redes internas de outras organizaes, quantas vezes forem necessrias (dependendo da
arquitetura da rede, at na mesma organizao). Mas para estes hosts com IP privados
conseguirem se comunicar com a internet, deve ser utilizada a tcnica conhecida como
NAT, onde o IP privado ser representado pelo IP pblico do gateway que est na sada
padro da rede, sofrendo um processo de traduo sempre que for necessrio.
Figura 6 Retorno de trfego via NAT
Fonte: Zhang (2000). Adaptado pelo autor.
A Figura 6 Ilustra o retorno de trfego via NAT. A seguir uma explicao da
tcnica seguindo a numerao dos passos na Figura 6:
1. Uma requisio realizada por um cliente da internet chega na rede;
2. O balanceador de cargas recebe a requisio, escolhe qual ser o servidor que ir
process-la e ento reescreve o endereo de destinatrio do pacote IP, substituindo
pelo IP privado do servidor real escolhido;
3. A requisio chega a um servidor real, ele a processa e manda a resposta para o
balanceador de volta, j que ele rota padro e o endereo do cliente est na internet;
4. O balanceador recebe o pacote de resposta, ento ele novamente altera o pacote,
inserindo o seu IP como remetente para que o cliente no o descarte;
3.2. Retorno de trfego 41
5. O pacote segue de volta ao cliente da requisio.
Essa mesma estratgia pode ser utilizada tambm na camada de transportes, a
diferena principal que as portas de remetente e destinatrio tambm deveriam ser alte-
radas, como feito no LVS via PAT (Port Address Translantion). Um problema associado
a essa tcnica que o balanceador um potencial gargalo para o sistema, pois ele atua
tanto como porta de entrada da rede como porta de sada, podendo car sobrecarregado
de funes. As prximas tcnicas diminuem um pouco essa sobrecarga pelo balancea-
dor se tornar somente porta de entrada da rede, mas em compensao elas aumentam a
complexidade do sistema pois denem restries a rede e/ou ao cluster de servidores.
3.2.2 Retorno de trfego via tunelamento IP
Tunelamento IP uma tcnica que, de forma resumida, encapsula um pacote IP
dentro de outro pacote IP e o repassa para outro host process-lo (ZHANG, 2000). Para
ter suporte a este tipo de tcnica o balanceador de carga e os servidores reais devem ter
suporte ao protocolo de tunelamento IP, alm disso, deve existir uma interface de rede
virtual especca para tunelamento, e ela deve estar congurada de modo que se estabe-
lea um tnel entre o balanceador de carga com o VIP e os servidores reais. Normalmente
so utilizados dois protocolos de tunelamento IP em conjunto, o L2TP (Layer 2 Tun-
neling Protocol ) na camada 2 em conjunto com o IPsec (Internet Protocol Security) na
camada 3, opes amplamente utilizadas em VPNs (Virtual Private Networks). A Figura
7 demonstra o uso da tcnica.
Observando a Figura 7 vemos algumas diferenas entre a tcnica usando NAT.
At o momento da chegada da requisio no balanceador tudo ocorre da mesma forma,
a escolha do servidor real que ir processar tambm ocorre igualmente, mas no momento
em que deveria ser feita a reescrita do pacote o que ocorre algo diferente. O balanceador
fazendo uso do seu protocolo de tunelamento, insere o pacote IP dentro de um outro
pacote, ento sendo possvel envi-lo ao servidor escolhido via o tnel (anteriormente
congurado entre o balanceador e os servidores reais). No momento em que o servidor
escolhido recebe o pacote, faz uso do seu protocolo de tunelamento para desencapsular o
pacote IP e ento pode processar a requisio normalmente. A grande diferena ocorre
agora, ao analisar o pacote o servidor real consegue averiguar que o pacote era destinado
ao VIP, que est congurado em seu tnel, ento ao gerar uma resposta ele insere o
VIP como remetente, sendo possvel envi-la diretamente ao cliente. Outra caracterstica
marcante da tcnica que somente nela possvel que os servidores reais estejam em uma
sub-rede diferente da do balanceador de carga, isso por conta do pacote da requisio
poder estar encapsulado em outros pacotes.
A tcnica remove o overhead do balanceador, agora ele somente precisa interceptar
42 Captulo 3. Arquitetura de um balanceador de carga de servidores
Figura 7 Retorno de trfego via tunelamento IP
Fonte: Zhang (2000). Adaptado pelo autor.
os pacotes que entram na rede, em sua sada os pacotes podem ser enviados diretamente
para o cliente, via uma rota padro diferente. Mas em compensao existe tambm um
overhead neste tipo de tcnica, pois os pacotes agora so inseridos dentro de outros pa-
cotes, existindo dois cabealhos para cada conjunto de dados, agora sero necessrios
trafegar alguns pacotes a mais. Tambm existem as tarefas adicionais de encapsular e de-
sencapsular os pacotes IP, mas mesmo assim, o desempenho da soluo por tunelamento
IP superior a via NAT.
3.2.3 Retorno de trfego via DR
A implementao da tcnica via DR (Direct Routing) a terceira e ltima tcnica
de retorno de trfego explicada por Zhang (2000). Para aplicao desta tcnica necessrio
que o balanceador e os servidores reais tenham uma de suas interfaces de rede ligadas por
um segmento interrupto, ou seja, ou devem estar ligados via um cabeamento direto, ou por
um HUB/switch, tudo em uma nica LAN (Local Area Network). Outra caracterstica
que todos os servidores reais devem possuir um endereo IP igual ao VIP, mas sem remover
o endereo IP que identica unicamente os servidores reais dentro da LAN.
Um endereo IP s vezes erroneamente denido como uma forma de identicao
de uma mquina na rede, mas na verdade o endereo IP no est associado ao host, ele
associado a uma interface de rede deste, possibilitando que um mesmo host tenha n IPs
para suas n interfaces de rede. Na tcnica via DR, como os servidores reais e o balanceador
3.2. Retorno de trfego 43
esto interligados em uma LAN, no h a necessidade de incluir outra interface de rede
para ser possvel associar o VIP nos servidores reais, possvel utilizar a interface de
loopback
4
. A Figura 8 ilustra o uso da tcnica.
Figura 8 Retorno de trfego via DR
Fonte: Zhang (2000). Adaptado pelo autor.
A Figura 8 demonstra que a arquitetura deve estar congurada de modo que todos
os hosts estejam conectados em um mesmo segmento de rede. O processo que ocorre nesta
tcnica o seguinte:
1. Um cliente envia a requisio ao balanceador de carga;
2. Aps deciso de qual servidor real ir efetuar o processamento, o balanceador troca
o endereo MAC (Media Access Control ) do destinatrio (que originalmente era o
seu prprio MAC). Isso deve ocorrer para que o endereo VIP de destino do pacote
permanea inalterado;
3. O servidor real recebe a requisio, verica que ele o destinatrio por causa do
seu VIP, processo a requisio e envia uma resposta para a sada padro da rede. O
campo de destinatrio da resposta o endereo do cliente e o campo de remetente
o VIP do balanceador, que estava congurado em sua interface de loopback;
4. O cliente recebe a resposta e a aceita, pois o endereo de remetente realmente um
endereo a quem ele fez uma requisio.
4
Interface de rede virtual utilizada para servios locais na mquina
44 Captulo 3. Arquitetura de um balanceador de carga de servidores
Um problema aparente desta soluo com o protocolo ARP, este protocolo tem
a funo de encontrar um endereo MAC de uma interface em uma rede, informando
qual o endereo IP da interface que se deseja a informao. No caso da tcnica via DR
isto representa um problema por conta de todos os hosts da LAN compartilharem um
mesmo IP, podendo ocasionar problemas na rede. Para resolver a situao necessrio
que o sistema operacional hospedeiro dos hosts possibilite a desabilitao do protocolo
ARP nas interfaces de loopback.
3.2.4 Comparao entre as tcnicas de retorno de trfego
A Tabela 2 mostra uma comparao entre as tcnicas de retorno de trfego,
levando-se em considerao: Especicaes do servidor, forma de congurao da rede,
nmero de servidores reais aconselhados na rede e gateway da rede.
Tabela 2 Comparao entre tcnicas de retorno de trfego
Via NAT Via tunelamento IP Via Direct Routing
Especicaes Qualquer
Protocolo e
Tnel congurado
Interface de loopback
com VIP e ARP
desabilitado
Rede LAN LAN/WAN LAN
Quantidade Baixo (10 a 20) Alto (aprx. 100) Alto (aprx. 100)
Rota padro Balanceador de carga Roteador da rede Roteador da rede
Fonte: Zhang (2000). Adaptado pelo autor.
3.3 Algoritmos de escalonamento
Esta seo trata de um dos mais importantes aspectos do balanceamento de carga,
no somente de balanceamento de cargas de servidores, mas grande parte das tcnicas que
sero abordadas a seguir so aplicveis em todos os tipos de balanceamento de carga (e.g.
CPU e disco). O balanceamento de carga um problema de escalonamento de trabalho,
trabalho que originalmente deveria ser realizado por um nico indivduo (e.g. Host de
rede ou ncleo de uma CPU) poder ser dividido e realizado por outros n indivduos,
para tomar a deciso de como organizar este trabalho necessrio de um algoritmo de
escalonamento.
Casavant e Kuhl (1988) deniram uma taxonomia para caracterizao de algor-
timos de balanceamento de carga, a seguir algumas das categorias componentes dessa
taxonomia:
Esttico vs. Dinmico: Um algoritmo esttico tem como premissa o desempenho dos
indivduos que iro realizar o trabalho, ou seja, antes de se iniciar o escalonamento
carga de trabalho denida a forma que ele ser distribudo, no sendo alterado em
3.3. Algoritmos de escalonamento 45
tempo de execuo. J um algoritimo dinmico possui poucas ou nenhuma informa-
o sobre os indivduos, todo a deciso de escalonamento ser realizado em tempo
de execuo;
Cooperativo vs. No-cooperativo: Em um algoritmo no-cooperativo os indivduos
realizam suas tarefas independente dos outros indivduos do sistema, j em um
cooperativo um indivduo pode alterar a forma de realizao de sua tarefa devido
a uma possvel cooperao com outro indivduo (neste caso os indivduos realmente
se conhecem).
Adaptvel vs. No-adaptvel: Em uma soluo adaptvel a forma de escalonamento
da carga de trabalho poder ser modicada em tempo de execuo, isso ocorre
principalmente devido a anlise de um comportamento anterior do sistema, onde
se descobre que uma possvel alterao no escalonamento pode aumentar o desem-
penho do sistema. J em um no-adaptvel no existe modicao na forma de
escalonamento em tempo de execuo.
Foram omitidas algumas outras categorias dessa taxonomia, pois as selecionadas
so a que tem maior importncia quando se trata especicamente do balanceamento de
carga em servidores. A seguir sero descritos um total de cinco algoritmos de balancea-
mento de carga de servidores, trs estticos e dois dinmicos.
a) Round-robin e Aleatrio
um dos mais antigos algoritmos na rea da computao, aplicado original-
mente em escalonamento de processos. No balanceamento de carga de servidores foi
originalmente aplicado no DNS round-robin (como explicado na seo 2.4.2). um al-
goritmo esttico, no-cooperativo e no-adaptvel que consiste em uma simples tc-
nica que distribui de forma homognea as requisies aos servidores que foram previ-
amente ordenados, similar a um sentido horrio. Este algoritmo trata todos os servi-
dores de forma igualitria, somo se tivessem a mesma congurao de hardware, no
diferenciado-os, caso isso seja a realidade do cluster este algoritmo tende a trabalhar bem
(MADHURAVANI; SUMALATHA; SHANMUKHI, 2012).
Um cenrio explicativo desta situao a seguir: Existem trs servidores (S1, S2
e S3) e foram enviadas em sequncia quatro requisies (R1, R2, R3 e R4) ao sistema,
usando o algoritmo round-robin, R1 seria destinado ao S1, R2 ao S2, R3 ao S3 e R4 ao
S1.
A nica diferena do algoritmo round-robin com o aleatrio que ao invs da
requisio ser distribuda seguindo a ordem dos servidores (1, 2, 3, ..., n), ela distribuda
de forma aleatria, mas sem atribuio de duas requisies ao mesmo servidor antes que
um ciclo completo de requisies tenha sido distribudo aos outros servidores.
46 Captulo 3. Arquitetura de um balanceador de carga de servidores
b) Ratio
O algoritmo ratio, tambm chamado de round-robin com pesos em algumas so-
lues de balanceamento de carga, outro algoritimo esttico, no-cooperativo e no-
adaptvel. O round-robin tradicional aconselhado para clusters com servidores homog-
neos, mas isso nem sempre a realidade de uma organizao, podendo existir servidores
mais antigos e com congurao mais bsica atuando em conjunto com servidores mais
novos com maior poder computacional, nestes casos o round-robin tradicional pode so-
brecarregar alguns servidores enquanto outros esto ociosos (JAYASWAL, 2006, p. 224).
O algoritmo ratio indicado para clusters com servidores heterogneos, onde so
distribudos pesos entre eles, os que tiverem maior poder computacional possuem maior
peso e os com menor poder um peso menor. Um cenrio explicativo poderia ser o seguinte:
Quatro servidores reais (S1, S2, S3 e S4) com os pesos 10, 5, 5 e 7, respectivamente. Com
a soma dos pesos sendo 27, para o servidor S1 seriam direcionadas 37% das requisies,
para o S2 e S3 aproximadamente 18% cada, j pro S4 cerca de 26% das requisies.
c) Menos conexes
Como explicado anteriormente, os algoritmos estticos tem o seu comportamento
determinado previamente, no possuindo mudanas em tempo de execuo. J os algo-
ritmos dinmicos podem tomar as decises baseadas em novas informaes do sistema
(MADHURAVANI; SUMALATHA; SHANMUKHI, 2012), estas podendo ser coletadas
via monitoramento dos servidores ou via anlise de informaes mantidas pelo prprio
balanceador.
Uma informao que o balanceador pode e deve armazenar o nmero de conexes
que cada servidor real esta processando. Uma conexo aqui pode ser tratada como o
processamento de requisies de um nico cliente, por exemplo, caso um servidor real
esteja tratando 10 requisies, sendo que duas destas pertencem a um mesmo cliente, o
servidor possu um total de 9 conexes ento. A partir do nmero de conexes de cada
servidor real, o balanceador poder dirigir as novas requisies ao servidor com o menor
nmero de conexes no momento (JAYASWAL, 2006, p. 224). Este algoritmo chamado
de Menos conexes, ele um algoritmo dinmico, no-cooperativo e adaptvel.
d) Menor latncia
Outro algoritmo dinmico, no-cooperativo e adaptvel, o Menor latncia,
semelhante a estratgia do ultimo algoritmo apresentado, onde tomada a deciso de
balanceamento em cima de informaes do sistema, s que neste caso ela coletada a
partir do monitoramento do cluster. A latncia (i.e. ping), a quantidade de tempo que
um dispositivo de rede deve esperar pela resposta de outro (JAYASWAL, 2006, p. 131).
Em um perodo de tempo pr-determinado feita a coleta do tempo de resposta destes
servidores, onde normalmente se utiliza o protocolo ICPM para tal. Os servidores com
3.4. Redundncia do servio 47
menor latncia sero os escolhidos para receber requisies.
Um problema deste protocolo que ele est fazendo uma medida relacionada a
mquina servidor, mas o que realmente importa no ponto de vista de um cliente a
performance do servio que este servidor est provendo. Algo ainda pior pode ocorrer, o
servidor real pode estar em pleno funcionamento, mas os servios dele podem se encontrar
inoperantes ou sobrecarregados, neste cenrio caso a latncia do servidor ainda esteja
mais baixa em relao a outros, ele ainda sim poderia ser selecionado para receber novas
requisies (que seriam frustradas). Uma possvel soluo para o problema seria checar os
tempos de resposta dos servios ao invs de ser capturada a latncia do servidor, e us-
los para o os valores coletados para escalonamento. A forma de checar a latncia de um
servio pode ser via a diferena de tempo entre uma requisio TCP SYN e o retorno TCP
SYN ACK
5
, j que o uma conexo TCP est ligada a uma porta/servio (KOPPARAPU,
2002, p. 34). A mesma soluo no vlida para servios que operam sobre o protocolo
UDP j que este no orientado a conexo, no possuindo mensagens ACK
6
.
3.4 Redundncia do servio
Clientes da infraestrutura de TI
7
com o passar dos anos aumentaram a sua de-
pendncia de servios disponibilizados na internet, e esse crescimento incessante (e.g.
24h por dia e 7 dias por semana). Ento existe uma necessidade de garantir que os clien-
tes desses servios online no quem desapontados com um servio fora do ar por causa
de uma falha em hardware ou software. Existem requisitos no funcionais
8
que tratam
paralelamente esta necessidade, os requisitos de disponibilidade e conabilidade.
Para garantia destes requisitos existe uma rea de estudo na computao chamada
de Tolerncia a falhas. De acordo com Jayaswal (2006, p. 233):
Tolerncia a falhas a capacidade de um host ou subsistema de re-
cuperar a falha de um componente sem a interrupo do servio. Um
host tolerante a falhas ou dispositivo tem componentes redundantes que
monitoram uns aos outros.
Para implementar esta redundncia em balanceadores de cargas de servidores, exis-
tem dois cenrios tpicos que sero descritos a seguir. O cenrio mais comum de redundn-
cia o cenrio ativo-standby, onde existem dois servidores (instncias) de balanceador de
cargas, uma sendo o servidor primrio, e outro o servidor secundrio, tambm chamado
5
Parte do que conhecido como handshake de trs vias: <http://andreysmith.wordpress.com/2011/
01/02/three-way-handshake/>
6
Abreviao de acknowledge. a mensagem de reconhecimento.
7
Acrnimo para Tecnologia da Informao.
8
A norma ISO/IEC 9126 trata de conceituar estes requisitos e outros: <http://pt.wikipedia.org/wiki/
ISO/IEC_9126>.
48 Captulo 3. Arquitetura de um balanceador de carga de servidores
de servidor de backup. Quando se inicia a execuo do sistema, o servidor primrio entra
em estado de ativo do sistema (tendo o comportamento normal de um balanceador), j
o servidor secundrio entra em estado de standby (em prontido). Quando ocorre uma
falha no servidor em estado de ativo, o servidor em estado de standby detecta isso usando
algum tipo de tcnica, da em diante o servidor secundrio entra em estado de ativo, e
o servidor primrio (com falha) entra em estado de standby (CISCO SYSTEMS, 2010,
p. 33.1-33.2). Esse processo de troca chamado de failover.
Outro cenrio o ativo-ativo, onde existem dois servidores que atuam de forma
igualitria, os dois se encontram ativos e fazem o balanceamento de carga. Caso ocorra
a falha em um dos servidores, o outro ir continuar executando as suas operaes e o
servio ainda continuar online.
Para que o servidor detecte a falha em outro, seja em ativo-standby ou ativo-ativo,
deve ser utilizado algum protocolo de monitoramento em conjunto com um cabo de heart-
beat. Esse cabo (normalmente um par tranado) congurando ligando os dois servidores
diretamente, ento o protocolo de heartbeat estabelece uma comunicao por pulsos entre
os dois servidores, estes pulsos determinam se o servidor est operando normalmente, caso
os pulsos se encerrem signica que alguma falha ocorreu e o servidor entrou em colapso
(JAYASWAL, 2006, p. 334-336). A deteco de erros do sistema est completamente li-
gada a sua conabilidade. A Figura 9 ilustra a organizao da tcnica em um cenrio de
redundncia ativo-standby:
Figura 9 Cenrio de redundncia ativo-standby
No cenrio ativo-standby valido ressaltar que ao ocorrer o processo de failover,
as conguraes do servidor falho devem ser incorporadas no novo servidor ativo (e.g.
endereo IP, tabela de conexes, etc), para isso elas devem ser periodicamente transferi-
das entre os servidores. Tambm deve ser ressaltado que no cenrio ativo-ativo, os dois
3.4. Redundncia do servio 49
servidores devem possuir alguma poltica de congurao do VIP, j que existiro duas
instncias do balanceador de carga trabalhando paralelamente.
51
4 Projeto arquitetural
Este captulo e o captulo posterior (5) tem uma grande importncia para este
trabalho, sero nestes captulos que sero descritas as estratgias que foram desenvolvidas
pelo autor para a soluo que ser implementada posteriormente. Para construo do
conhecimento abordado a seguir, foi necessria a pesquisa prvia de todo o referencial
terico em que este trabalho foi baseado (captulos 2 e 3).
Especicamente neste captulo ser tratada a arquitetura do software proposto,
ser descrito um modelo conceitual que facilitar a transio dos requisitos de um balan-
ceador de carga para a sua implementao, ou seja, servir como um guia para o futuro
TCC 2 do autor. A arquitetura de software uma das subreas de conhecimento da enge-
nharia de software de acordo com SWEBOK
1
(Software Engineering Body of Knowledge).
A arquitetura em grosso modo pode ser descrita como a subdiviso de um todo em
partes, estabelecendo relaes especcas entre as partes. Garlan e Shaw (1994) denem
a motivao da arquitetura de software como:
Conforme o tamanho e a complexidade de sistemas de software aumen-
tam, o problema de design vai alm dos algoritmos e das estruturas de
dados da computao. A projeo e a especicao da estrutura geral do
sistema emergem como um novo tipo de problema. As questes estrutu-
rais incluem organizao total e estrutura de controle global; protocolos
de comunicao, sincronizao e acesso a dados; atribuio de funcionali-
dade a elementos de design; distribuio fsica; composio de elementos
de design; escalonamento e desempenho; e seleo entre as alternativas
de design.
Para uma documentao que siga as melhores prticas empreendidas na indstria
atualmente, o projeto arquitetural do balanceador de cargas ser feito tendo como base o
template de um documento de arquitetura de software do RUP (Rational Unied Process)
(IBM RATIONAL SOFTWARE, 2001).
4.1 Representao da arquitetura
Neste captulo sero indicadas as decises de uso das tecnologias que foram ex-
plicadas no referencial terico, e pelo seu baseamento em um template de documento de
arquitetura de software, este captulo tambm conter subsees que tratam das vises
de arquitetura aplicveis neste contexto (personalizadas para melhor atender o trabalho),
1
Arquitetura de software est contida dentro de uma outra rea de conhecimento mais genrica que
a de design de software: <http://www.computer.org/portal/web/swebok>
52 Captulo 4. Projeto arquitetural
e ao nal listando restries de qualidade do sistema. A seguir uma breve descrio de
cada item citado:
Tecnologias e tcnicas utilizadas: Uma listagem e justicativa de quais tecnologias,
tcnicas e estratgias sero utilizadas no balanceador de carga (e.g. qual espao de
CPU ser utilizado, qual a camada de rede de atuao, qual a tcnica de retorno de
trfego, etc).
Viso lgica: Uma descrio da arquitetura lgica do balanceador, explicando uma de-
composio em mdulos e camadas.
Viso de implantao: Uma descrio da decomposio do balanceador em termos f-
sicos, ou seja, explicao de quais sero os hosts da rede, forma de interconexo dos
hosts (meio fsico e protocolos de comunicao) e mapeamento dos processos (do
sistema operacional) que atuaro nos hosts.
Restries de qualidade: Uma descrio que compreende os requisitos no-funcionais
que restringem, ou delineiam, o projeto do balanceador, como o desempenho, a
disponibilidade e a conabilidade.
4.2 Tecnologias e tcnicas utilizadas
Seguindo ainda o princpio KISS introduzido por Bourke (2001, p. 41), nesta seo
sero descritos e justicados quais tecnologias, tcnicas e estratgias sero utilizadas na
implementao do balanceador de carga de servidores (grande parte das alternativas j
foram listadas nos captulos 2 e 3), sempre presando pela simplicidade do sistema, at por
conta da viabilidade de sua implementao pelo autor no perodo do TCC 2.
a) Camada de rede de atuao
O balanceador a ser implementado ser baseado em servidores comuns, fazendo
uso de um computador comum com um sistema operacional padro, isso porque este
tipo de soluo requer somente o desenvolvimento do software, no sendo necessrio o
desenvolvimento da soluo de hardware como em balanceadores baseados em AISICs.
Os balanceadores na camada 2 so em sua maioria baseados em AISICs, cando
descartada a sua utilizao. A camada 3 tambm tem grande parte das suas solues
baseadas as AISICs, isso ocorre por essa camada ser a mais alta camada de atuao de
dispositivos de rede como os roteadores (atuam normalmente na 1, 2 e 3), o que colabora
com o desenvolvimento de um balanceador com software e hardware customizados, mas
mesmo assim existem algumas solues baseadas em servidores comuns na camada 3.
Balanceadores na camada 7 esto ligados a aplicaes especcas (e.g. web, e-mail, servidor
de arquivos, etc), o que no o foco deste trabalho, j que se almeja um sistema mais
4.2. Tecnologias e tcnicas utilizadas 53
genrico que no faa distino do tipo de aplicao, cando tambm descartada a soluo
na camada 7.
Ficaram como opes as camadas 3 e 4 do modelo OSI para atuao. Depois de
uma anlise de vantagens e desvantagens de atuao nestas duas, foi escolhida a camada
4, a seguir as justicativas:
O protocolo IP, que o principal protocolo da camada 3 no orientado a conexo,
o que signica que este protocolo tem uma baixa conabilidade.
O protocolo TCP, um dos principais protocolos da camada 4, categorizado como
orientado a conexo e fornece um stream convel de dados. Isso signica que uma
conexo prvia estabelecida entre os hosts comunicantes (handshake de trs vias),
e para cada segmento de dados enviado existe uma resposta de reconhecimento
(ACK), que arma que o segmento chegou ao seu destino. Ao nal tambm existe
um momento de nalizao da conexo. A Figura 10 explica esse processo de comu-
nicao.
Figura 10 Processo de comunicao TCP
O protocolo TCP oferece um mecanismo de preveno de entrada de dados duplica-
dos, porque cada segmento possui um campo SEQUENCE NUMBER e outro ACKNOWLEDGEMENT
NUMBER, o primeiro nmero identica o segmento e o segundo nmero serve como
um indicador do que o remetente espera como SEQUENCE NUMBER da resposta, ofe-
recendo um maior controle dos pacotes recebidos (COMER, 2013, p. 211).
Os protocolos da camada 4 de rede esto relacionados a portas, o que os remete
a comunicao entre aplicaes de dois hosts. Isso facilita a preveno o envio de
54 Captulo 4. Projeto arquitetural
pacotes indesejados do balanceador at o cluster, porque somente sero enviados
pacotes destinados aos servios anteriormente cadastrados pelo balanceador. Por
exemplo, em um cluster de servidores web somente desejado o acesso as portas
80 e 443
2
(HTTP e HTTPS), qualquer requisio de acesso a outra porta no ser
enviado. Em um protocolo da camada 3 no existe a distino de tipos de aplicao,
podendo somente ser denido o endereo de um host e no um servio que se deseja
acesso, isso poderia ocasionar o envio de requisies a todo e qualquer servio a um
host, desde que ele esteja cadastrado.
b) Modo de CPU
A deciso do modo de CPU que uma aplicao ir atuar uma ponderao so-
bre desempenho e estabilidade, como j foi abordado na seo 2.3.2. Este trabalho est
sendo extensamente baseado na implementao da soluo em software livre LVS, e os
seus escalonadores so mdulos do kernel Linux, ou seja, atuam no modo kernel de CPU
(HORMAN, 2003). Para maior desempenho dos sistema, que um dos focos do balan-
ceamento de carga, a soluo proposta tambm ser implementada como um mdulo do
kernel, mas no completamente. Como uma outra parte do sistema ser implementada
como uma ou mais aplicaes para ns de administrao da soluo, atuando no modo
usurio de CPU.
O mdulo do kernel ser responsvel por efetuar a manipulao dos pacotes de
rede, j a aplicao de administrao ser formada por um servio em background e uma
interface com o usurio por linha de comando, onde por intermdio dela ser possvel
congurar o mdulo (maiores explicaes nas sees de vises arquiteturais). A forma
mais recomendada de manipulao destes pacotes de rede no modo kernel, fazendo uso
do framework Netlter.
c) Linguagens de programao
Como foi tomada a deciso de projeto que o balanceador seria implementado como
um mdulo do kernel para sistemas Linux, obrigatoriamente a linguagem de programao
dever ser C ou C++, que so as nicas linguagens utilizadas. O desenvolvimento de
mdulos usando C++ possvel, mas desencorajada de acordo com o prprio Torvalds
(2004), criador do Linux. Algumas das justicativas dadas so:
O tratamento de excees do C++ so falhos, principalmente em mdulos do kernel ;
Qualquer tipo de compilador ou linguagem que abstrai coisas como a alocao de
memria, no uma boa opo para mdulos do kernel, o que o caso do C++ por
ser uma linguagem nativamente orientada a objetos;
2
Lista de portas padro por protocolo: <http://pt.wikipedia.org/wiki/Anexo:
Lista_de_portas_de_protocolos>
4.2. Tecnologias e tcnicas utilizadas 55
Bibliotecas como STL e Boost do C++ trazem abstraes que podem dicultar a
depurao de um mdulo, alm de trazerem falhas que podem ser catastrcas em
um mdulo do kernel ;
possvel simular a orientao a objetos na linguagem C, fazendo uso de structs e
ponteiros para funo, melhorando a modularidade do cdigo sem trazer os malef-
cios citados anteriormente.
Resumindo, o desenvolvimento em C mais propcio pelo programador ter maior
controle das funes do sistema (principalmente nas alocaes dinmicas de memria), o
que na teoria reduz os problemas com estabilidade do cdigo, pois necessrio lembrar-
se que uma falha em um programa que atua no modo kernel de CPU pode fazer todo o
sistema operacional entrar em colapso. Por conta destes fatores o mdulo ser desenvolvido
usando a linguagem C.
J o aplicativo com ns de administrao do sistema no possu essa necessidade
eminente de ser desenvolvido em C, pelo fato de atuar modo usurio de CPU. Ento foi
ponderado, analisado e acertado que ser utilizada a linguagem de programao Python
para sua implementao, a seguir algumas justicativas:
O interpretador Python vem nativamente instalado em grande parte das distri-
buies Linux (e.g. Ubuntu, Debian e Fedora), contendo vrias funcionalidades da
prpria distribuio implementadas em Python;
A linguagem Python a 8
a
mais utilizada do mundo, de acordo com dados de maio de
2014 (TIOBE SOFTWARE, 2014). Este sucesso se faz por conta de vrios benefcios
que a linguagem oferece: Possui uma sintaxe de fcil compreenso e aprendizado, tem
estruturas de dados que facilitam o desenvolvimento (e.g. listas, tuplas e dicionrios)
e uma linguagem de alto nvel, interpretada, imperativa, orientada a objetos,
funcional, de tipagem dinmica e forte;
Por conta da sua vasta comunidade de usurios, existem diversas bibliotecas e fra-
meworks desenvolvidos e distribudos sob licenas livres para os mais diversos do-
mnios de conhecimento (e.g. fsica aplicada, jogos de computadores e computao
grca);
O autor do trabalho tem experincia com a linguagem devido a trabalhos acadmicos
anteriores que foram desenvolvidos utilizando Python, tendo maior preferencia no
desenvolvimento fazendo o seu uso.
d) Retorno de trfego
56 Captulo 4. Projeto arquitetural
A tcnica de retorno de trfego via NAT de longe a mais simples de ser implemen-
tada, por conta de no exigir qualquer congurao adicional nos servidores do sistema,
tanto o balanceador quanto os servidores reais que iro desempenhar o processamento das
requisies. Mas ela possu uma grande desvantagem de necessitar que o as respostas dos
servidores reais passem de volta pelo balanceador, o que o torna um gargalo, diminuindo
o desempenho do sistema como um todo.
As tcnicas de retorno de trfego via DR e via tunelamento IP necessitam de um
esforo de congurao adicional do balanceador e servidores reais como j foi descrito
nas sees 3.2.2 e 3.2.3. A tcnica via tunelamento oferece a capacidade o envio de carga
de trabalho at para servidores reais que no se encontram na rede, diferentemente do DR
que necessita que todos os hosts estejam na mesma LAN, mas comparando com a tcnica
via DR, esta oferece maior desempenho por no ter o overhead de desencapsulamento dos
pacotes que o tunelamento oferece. A tcnica via DR oferece uma maior complexidade de
implementao, pois alm do balanceador de carga ter que acessar os pacotes relacionados
a sua camada de rede de atuao (e.g. Segmento TCP), ele ainda precisa acessar os quadros
ethernet da LAN para direcionar a carga de trabalho ao cluster de servidores.
Por motivos de simplicidade, a tcnica via NAT ser utilizada, pois mesmo tendo
um menor desempenho relacionado as outras duas, ela elimina uma srie de fatores que
aumentam a complexidade do projeto, que podem eventualmente at arriscar a viabilidade
do trabalho.
e) Algoritmos de escalonamento
Inicialmente iro car denidos dois algoritmos a serem implementados, um da
categoria de algoritmos de escalonamento estticos e outro da categoria de algoritmos
dinmicos. O algoritmo esttico a ser implementado ser o round-robin, que apesar de
sua simplicidade tende a ter bons resultados em um cluster heterogneo com aplicaes
de propsito especco (MADHURAVANI; SUMALATHA; SHANMUKHI, 2012). O al-
goritmo dinmico escolhido foi o menor latncia, que consegue identicar servidores
reais menos sobrecarregados pelo seu tempo de resposta dos seus servios.
f) Forma de redundncia
Parte do esforo deste trabalho se destina ao projeto de integrao do balanceador
de cargas com o software fornecido pelo professor orientador deste trabalho, o Application
Manager. Este software implementado na linguagem Java um gerenciador de mltiplas
aplicaes em cenrio ativo-standby, destinado a ambientes com mltiplos hosts distri-
budos (LARANJEIRA, 2011). Por intermdio dele uma mesma aplicao (e.g. servidor
web, servidor de arquivos, etc) pode possuir duas instncias, uma ativa em um host de
uma rede, a outra inativa (em standby) em outro host da mesma rede, e elas podem ser
gerenciadas via um utilitrio de linha de comando (amcli). Em caso de um colapso da
4.3. Viso lgica 57
aplicao ativa, a outra que estava inativa seria iniciada para exercer as mesmas funes
da aplicao que falhou.
Por conta deste objetivo especco de pesquisa e desenvolvimento pr-denido, o
nico cenrio de redundncia utilizado neste trabalho ser o ativo-standby.
4.3 Viso lgica
A viso lgica nica para todo o sistema, ela visa ilustrar os subsistemas, mdulos
e tudo mais que possuir comportamento signicativo no ponto de vista da arquitetura
(IBM RATIONAL SOFTWARE, 2001). A Figura 11 a seguir demonstra um diagrama de
pacotes
3
da UML (Unied Modeling Language) do balanceador de cargas projetado.
Figura 11 Viso lgica da soluo de balanceamento de carga
A seguir ser feita uma descrio de cada componente pertencente ao diagrama.
a) Load Balancer Solution
Este o conjunto de programas que constituem o balanceador de cargas de servi-
dores. Aps sua instalao em um servidor Linux ser possvel efetuar a congurao e
uso da soluo de balanceamento de carga.
b) slbcli
3
<http://pt.wikipedia.org/wiki/Diagrama_de_pacotes>
58 Captulo 4. Projeto arquitetural
O componente slbcli (Server Load Balancer CLI ) ser um programa do tipo CLI
(Command Line Interface). Ele contm uma srie de funcionalidades administrativas do
servio que podero ser acessadas via o interpretador de comandos do Linux (Shell).
Este programa ser a interface do balanceador de cargas com o usurio administrador do
sistema, onde ser possvel iniciar, parar e congurar o balanceador de carga.
A seguir exemplos de possveis de comandos:
# slbcli --load : Carrega o mdulo do balanceador no kernel. Por padro, antes de efetuar
a carga do mdulo, sero lidos e aplicados os itens do arquivo padro de congurao
# slbcli --unload : Descarrega o mdulo do balanceador do kernel
# slbcli --reload : Recarrega o mdulo do balanceador no kernel. Por padro, antes de efe-
tuar a carga do mdulo, sero lidos e aplicados os itens do arquivo padro de congurao
# slbcli --load-noconf : Carrega o mdulo do balanceador no kernel, ignorando o arquivo
padro de congurao
# slbcli --reload-noconf : Rearrega o mdulo do balanceador no kernel, ignorando o ar-
quivo padro de congurao
# slbcli --restore conf_file.conf : Carrega as conguraes que esto contidas no ar-
quivo conf_le.conf
# slbcli --bind 172.17.60.201:80 : Atribui um endereo VIP 172.17.60.201 ao balancea-
dor, juntamente com a porta 80 que ele ir atender
# slbcli --alg RR : Seleciona o algortimo de balanceamento de carga round-robin para ser
utilizado
# slbcli --add 192.168.0.1:80 : Adiciona um servidor real com IP 192.168.0.1 ao cluster
de servidores, podendo receber requisies na porta 80
# slbcli --rm 192.168.0.1:80 : Remove um servidor real com IP 192.168.0.1
# slbcli --lconn : Lista todas as conexes atualmente ativas
# slbcli --lserv : Lista os servidores reais do cluster e os seus respectivos status (e.g. UP e
DOWN)
# slbcli --lconf : Lista toda a congurao do sistema
# slbcli --clearconf : Limpa toda a congurao j feita, inclusive exclui todos os itens do
arquivo de congurao padro
4.3. Viso lgica 59
O smbolo # signica que o comando est sendo executado em um shell
4
pelo
usurio root do sistema Linux. A lista de comandos provavelmente sofrer alteraes na
futura implementao do balanceador pela mudana ou descoberta de novos requisitos.
O slbcli ser um programa implementado em Python, ele ir interagir com o servio de
balanceamento de carga que estar executando em background, fazendo um repasse dos
comandos para que este execute-os.
c) slbd
O componente slbd (Server Load Balancer Daemon) ser um programa do tipo
daemon, um tipo de processo que executado em brackground e no possui interao direta
com nenhum tipo de usurio. Esse processo ser o responsvel por ser a aplicao no modo
usurio de CPU que ir interagir com o mdulo do kernel, tendo as funcionalidades de
carreg-lo, descarreg-lo e congur-lo.
d) slbcore
O componente slbcore (Server Load Balancer Core) ser o ncleo de todo o sistema,
ser um LKM (Loadable Kernel Module), um cdigo objeto carregvel que ir estender as
funcionalidades do kernel Linux. Este mdulo ir fazer o balanceamento no modo NAT,
que foi o tipo de retorno de trfego escolhido para ser implementado na soluo. Ele ser
responsvel por interceptar os segmentos TCP e UDP que contm as requisies a servios
que os servidores reais iro desempenhar, e aps deciso de qual ser o servidor escolhido
para processamento da requisio (por intermdio do subcomponente scheduling-algs),
este mdulo ir repassar o segmento.
e) netlter
o componente que representa o framework Netlter a ser utilizado pelo slbcore
para acesso a funcionalidades de interceptao de pacotes de rede, fazendo a importao
de suas devidas bibliotecas de forma privada (por isso o uso da associao com esteretipo
access no diagrama UML).
f) scheduling-algs
O scheduling-algs o componente responsvel pela implementao dos algoritmos
de escalonamento de servidores, uma referncia a Scheduling Algorithms. O algoritmo
padro a ser utilizado ser o round-robin (RR), mas tambm ser possvel selecionar o
algoritmo menor latncia (LL). Este um subcomponente do slbcore, sendo parte do
mdulo do kernel.
g) cluster-monitor
O componente cluster-monitor a referncia do sistema para funes de monitora-
mento dos servidores reais em tempo de execuo. O cluster-monitor um subcomponente
4
Iterpretador de comandos Unix: <http://en.wikipedia.org/wiki/Unix_shell>
60 Captulo 4. Projeto arquitetural
do slbcore, tambm sendo parte do mdulo do kernel.
Existiro a princpio duas funcionalidades exercidas por este componente:
Monitorar a latncia dos servidores reais quando estiver sendo utilizado o algoritmo
menor latncia do componente scheduling-algs, servindo como parmetro para
suas decises de escalonamento.
Monitorar periodicamente o cluster para detectar possveis falhas nos servidores.
A princpio o objetivo deste monitoramento servir para identicar servidores reais
inacessveis, que consequentemente devem ser removidos da tabela de servidores do
slbcore enquanto no voltarem e executar suas funes normalmente.
Mais informaes sobre como esse monitoramento ir ocorrer sero descritos no
captulo 5.
h) conguration-synchronizer
Este um componente a parte do balanceador de cargas, responsvel por sincroni-
zar a congurao do balanceador em um cenrio de redundncia ativo-standby. dito a
parte porque ele ser implementado de forma independente da soluo de balanceamento
de carga, cando a cargo do administrador do sistema decidir se ir ou no utiliz-lo.
O seu uso necessrio no caso de um desastre eventual que ocorra no sistema,
para que no momento em que ocorrer o processo de failover a instncia secundria possua
toda a congurao mais recente da instncia primria (com falha), mascarando a falha
ocorrida no ponto de vista dos usurios dos servios. Para realizar a sincronizao ser feita
uma cpia peridica do arquivo de congurao do servidor primrio para o secundrio
(maiores detalhes no captulo 5). Este componente tambm ser implementado em Python
j que ele ser implementado no modo usurio de CPU.
i) Application Manager
Este o conjunto de programas que constituem o software Application Manager,
um um gerenciador de mltiplas aplicaes em cenrio ativo-standby, destinado a ambi-
entes com mltiplos hosts distribudos. No contexto da soluo que est sendo projetada,
existiro duas instncias do software, uma no balanceador de carga primrio e outra no
secundrio. A Figura 12 ilustra a estrutura do sistema.
Como pode se observar em cada host podem existir mais de uma aplicao sendo
gerenciada (e.g. app-1, app-2, app-3), o que oferece a capacidade de serem gerencia-
dos tanto a soluo de balanceamento de carga, quanto o componente conguration-
synchronizer, que so duas aplicaes independentes. Mais detalhes sobre os subcompo-
nentes do Application Manager sero dados a seguir.
j) SMA
4.3. Viso lgica 61
Figura 12 Estrutura do Application Manager
Fonte: Laranjeira (2011). Adaptado pelo autor.
O SMA o subcomponente do Application Manager responsvel por gerenciar o
estado de cada aplicao, ou seja, para cada aplicao que est sendo gerenciada existiro
duas instncias do SMA que administram os seus estados, um para a aplicao ativa e
outro para a aplicao em standby. Na Figura 13 exemplicada a mquina de estados
5
que o SMA atribui a cada aplicao, e na Tabela 3 so descritos os eventos para a transio
dos estados.
Figura 13 Mquina de estados do SMA
Fonte: Laranjeira (2011). Adaptado pelo autor.
A forma que este componente gerencia o estado de uma aplicao estabelecendo
5
<http://pt.wikipedia.org/wiki/M%C3%A1quina_de_estados_nitos>
62 Captulo 4. Projeto arquitetural
Tabela 3 Eventos para troca de estados do SMA
Estado atual Novo estado Evento
OFFLINE INIT Aplicao iniciada
INIT STANDBY Aplicao inicializada, congurao BACKUP e aplicao dual em ACTIVE
INIT ACTIVE Aplicao inicializada, congurao PRIMARY e aplicao dual no em ACTIVE
INIT MAINT. Aplicao inicializada e congurao INHIBITED
STANDBY MAINT. Comando TEST
MAINT. STANDBY Comando UNTEST
STANDBY ACTIVE Falha do aplicao, dual ACTIVE ou comando SWITCH
Todos FAILED Falha da aplicao
Todos OFFLINE Comando SHUTDOWN ou SHUTDOWN-F
Fonte: Laranjeira (2011). Adaptado pelo autor.
uma comunicao local com ela. Para isso a aplicao gerenciada deve implementar uma
interface com o mecanismo de identicao das mensagens de troca de estados, e tambm
um mecanismo para informar que est ativa.
k) amcli
O subcomponente amcli (Application Manager CLI ), um programa do tipo CLI.
Este o responsvel por interagir com o administrador do sistema, aceitando uma grande
gama de comandos para alteraes nos estados das aplicaes gerenciadas ou congurar
o prprio Application Manager.Uma lista completa dos comando est no Apndice A.
l) heartbeat
Programa do tipo daemon que possui uma instncia por host do Application Ma-
nager. Eles implementam um protocolo de comunicao heartbeat para vericao das
atividades do seu par, caso no consiga estabelecer a comunicao.
4.4 Viso de implantao
A viso de implantao tem a funo de descrever a decomposio fsica do sistema,
cando visvel o conjunto de hosts onde ocorrer o processamento, inclusive a distribuio
dos componentes/pacotes de software que em um ambiente de execuo se tornaro pro-
cessos/threads nesses hosts (IBM RATIONAL SOFTWARE, 2001). A seguir na Figura
14 representa o diagrama de implantao
6
da UML para balanceador de carga projetado.
Neste diagrama esto dispostos os ns (forma geomtrica de paraleleppedo), os
componentes de software (retngulos internos aos ns) e suas associaes. A seguir uma
descrio de cada n:
Primary Load Balancer: Balanceador de carga primrio da soluo;
6
<http://pt.wikipedia.org/wiki/Diagrama_de_instala%C3%A7%C3%A3o>
4.4. Viso de implantao 63
Figura 14 Viso de implantao da soluo de balanceamento de carga
Real Server: Servidor real. No diagrama foi colocado como um nico n, mas na soluo
real existiro n ns;
Secondary Load Balancer: Balanceador de carga secundrio ou de backup. Seus com-
ponentes internos no foram ilustrados por possurem a mesma disposio dos com-
ponentes do Primary Load Balancer.
Grande parte dos componentes j foram descritos anteriormente no diagrama de
pacotes da viso lgica do sistema, com exceo do artefato slbconf.conf que representa o
arquivo de congurao do balanceador de carga, e o componente Any Service que faz a
representao de qualquer tipo de servio que um servidor real pode prover (e.g. servidor
web, servidor de e-mail, etc).
As associaes ilustradas no diagrama so categorizadas em dois tipos, associaes
fsicas e associaes lgicas. As associaes fsicas associam dois ns do sistema, ou seja,
so os meios fsicos de rede (e.g. cabo de rede ethernet, rede sem o, etc), representa-
dos no diagrama por linhas contnuas. As associaes lgicas normalmente associam um
componente a outro componente, seja ele local ou remoto, podendo at ser utilizado para
associar um componente a um n. As associaes lgicas so protocolos, ou at mesmo
programas completos, e foram representadas no diagrama por linhas tracejadas. A seguir
a descrio das associaes:
LAN: Conexo fsica entre os hosts em uma rede local. Sero um conjunto de switches
de rede conectando os hosts com cabos par tranado cat 5e e conectores RJ-45.
64 Captulo 4. Projeto arquitetural
TCP/UDP: Como a camada de rede de atuao do balanceador de carga a camada
4, no ponto de vista do sistema sero transmitidos e recebidos segmentos TCP
e/ou UDP entre o balanceador de carga e os servidores reais. Tambm representa
a estratgia com TCP SYN / SYNACK para checagem da latncia de servios
baseados no protocolo TCP.
ICMP: A associao do slbcore com o Real Server signica o envio de pings para vericar
se servidor est ativo e qual a latncia da conexo (no caso do servio provido no
for baseado em TCP).
IOCTL: Essa associao entre o slbd e o slbcore signica a forma de comunicao en-
tre o programa no modo usurio de CPU e o mdulo do kernel em modo kernel
de CPU. IOCTL (Input Output Control ) uma system call que serve como meio
de comunicao entre aplicaes nos dois modos de CPU. Maiores explicaes no
captulo 5.
Read/Write: A associao entre o slbd e o slbconf.conf de leitura e escrita de arquivos.
Isso ocorre porque o slbd ir ser o responsvel por atualizar este arquivo de con-
gurao sempre que o slbcli indicar novos comandos de congurao (inseridos via
linha de comando pelo usurio), e ele tambm far a leitura do arquivo sempre que
o mdulo do kernel for carregado ou recarregado, para passagem dessa congurao
via IOCTL. O motivo pelo qual o mdulo do kernel no far acesso direto a esse
arquivo ser descrito no captulo 5.
Read: A associao entre o conguration-synchronizer e o slbconf.conf de leitura de
arquivos. Isso ocorre porque periodicamente este arquivo de congurao ser sin-
cronizado entre Primary Load Balancer e o Secondary Load Balancer.
SCP: A associao entre o conguration-synchronizer e o Secondary Load Balancer re-
presenta o protocolo SCP (Secure Copy Protocol ), que ser o responsvel pela trans-
ferncia segura do arquivo do Primary Load Balancer para o Secondary Load Ba-
lancer.
TCP Socket: Essa forma de comunicao via a API de comunicao TCP Socket
7
ocorre
em trs pontos do sistema. (i) A associao entre o Application Manager e o slbd
representa uma comunicao interna no servidor primrio e secundrio, fazendo o
envio de alteraes de estados do servio de balanceamento de carga (e.g. ativo, em
standby, em manuteno), e tambm a checagem constante da execuo processo
slbd, para vericar se est em execuo ou parou mediante alguma falha. (ii) A
associao entre as duas instncias do Application Manager, uma no Primary Load
7
Um socket uma API (Application Programming Interface) oriunda de sistemas BSD Unix para
comunicao entre aplicativos sobre a pilha TCP/IP, normalmente baseado em TCP (Stream) ou
UDP (Datagrama).
4.5. Restries de qualidade 65
Balancer e outra no Secondary Load Balancer, onde so enviados e processados co-
mandos que normalmente so solicitados pelo administrador do sistema ou enviados
automaticamente ao ocorrer um processo de failover, sendo necessrio iniciar o slbd
no Secondary Load Balancer. (iii) A associao entre o slbcli e o slbd representa
uma comunicao interna do servidor, onde so repassadas comandos inseridos por
um usurio para o daemon slbd, j que o mesmo no possui interao direta com o
usurio.
UDP Socket: Essa comunicao ocorre entre os componentes heartbeat do Application
Manager no Primary Load Balancer e no Secondary Load Balancer, sendo uma
implementao de uma comunicao heartbeat.
4.5 Restries de qualidade
Um importante aspecto de uma arquitetura so as suas restries de qualidade
do produto, estas restries possuem um grande impacto nas decises de projeto de um
sistema por estarem totalmente associadas s dimenses de qualidade de um software.
Essas dimenses de qualidade so capturadas como requisitos, mais especicamente re-
quisitos no funcionais. No contexto do projeto do balanceador de carga j foram evi-
denciadas diversas vezes durante este trabalho importantes categorias de requisitos que
tiveram total impacto na soluo que est sendo projetada, como o Desempenho, a Dis-
ponibilidade, a Conabilidade, etc. Para cada uma dessas categorias podemos extrair al-
guns requisitos e para cada requisito podemos indicar como a arquitetura ir suport-los
(IBM RATIONAL SOFTWARE, 2001).
Desempenho
Requisito: A latncia dos servios providos pelo cluster de servidores no pode
ser maior do que a latncia do mesmo servio sendo oferecido por um servidor
individual (sem balanceamento de carga).
Suporte da arquitetura: A soluo de balanceamento de carga serve exatamente
para aumentar o desempenho, pois a carga de trabalho que seria realizada por
um nico host ser dividida entre n hosts.
Conabilidade
Requisito: O sistema dever se recuperar caso ocorra um falha no servidor de
balanceamento de carga.
Suporte da arquitetura: Isso ocorre mediante a integrao com o Application
Manager.
66 Captulo 4. Projeto arquitetural
Conabilidade
Requisito: O sistema dever reconhecer hosts com defeito no cluster de servidores
e remov-los do cluster enquanto no voltarem a normalidade.
Suporte da arquitetura: O componente slbcore faz essa vericao via envio e
receptao de pacotes ICMP e TCP SYN / SYNACK.
Disponibilidade
Requisito: O sistema de balanceamento de carga dever ser capaz de oferecer seu
servio 24h por dia e 7 dias por semana.
Suporte da arquitetura: A soluo de balanceamento de carga oferece a tolern-
cia a falhas, o que determina meios de ter uma alta disponibilidade.
Escalabilidade
Requisito: O sistema dever suportar a insero e remoo de servidores do cluster
sem a interrupo do servio.
Suporte da arquitetura: O slbcli possibilitar a insero e remoo de forma
simples.
67
5 Detalhes tcnicos da soluo
O ltimo captulo ofereceu uma abordagem arquitetural sobre o balanceador de
cargas que est sendo projetado, fornecendo uma viso geral do comportamento do sis-
tema para que seja possvel observar suas principais funcionalidades e caractersticas.
Propositalmente a arquitetura de software no tende a entrar em pequenos detalhes da
soluo, j que ela pretende fornecer uma viso alto nvel do sistema e no um projeto
detalhado da soluo.
Este captulo tem uma abordagem diferente, ele visa oferecer certo detalhamento
sobre alguns dos componentes do sistema que foram levantados. Esse detalhamento
necessrio para um esclarecimento de forma mais tcnica de como podero ser imple-
mentadas determinadas caractersticas, ou como podero ser solucionados determinados
problemas que foram evidenciados. Este nvel de detalhes visa renar o projeto da soluo,
facilitando o alcance do sucesso no processo de codicao do sistema. Para viabilidade
da descrio destes detalhes, sero descritos somente alguns dos considerados mais impor-
tantes, porque seria invivel detalhar totalmente todas as caractersticas de um sistema.
5.1 Congurao da rede de computadores
Em diversos momentos neste trabalho foram demonstrados possveis cenrios de
balanceamento de carga, mas em nenhum deles o projeto da rede foi dedigno a uma so-
luo real, ou seja, em todos eles foram omitidos algum elemento de rede para facilitar a
visualizao e entendimento da soluo. Como no desejado no momento de implemen-
tao do sistema possuir uma determinada dvida em como congurar a rede, necessrio
determinar uma provvel congurao.
A Figura 15 ilustra um projeto simples de uma rede baseado em uma congura-
o descrita por Kopparapu (2002, p. 90), podendo ser utilizado em uma situao real.
Neste cenrio existe um roteador com IP pblico e xo, provavelmente com uma WAN
(Wide Area Network) congurada diretamente com sua ISP (Internet Service Provider),
isso possibilitar que demandas da internet cheguem na rede congurada. Conectados
ao roteador estaro as duas instncias de balanceadores de carga, uma ativa e outra em
standby. O balanceador ativo ter um VIP pblico e xo acessvel pela internet, congu-
rado em uma de suas interfaces de rede (e.g. eth0 em um servidor Linux), ele tambm
possuir um IP privado e nico na rede congurado em outra interface (e.g. eth1) para
comunicar-se entre os servidores e servir como gateway dos mesmos, tambm necessrio
um terceiro IP privado para uso do heartbeat entre os balanceadores (e.g. eth2). O balan-
ceador em standby congurado da mesma forma que o ativo, com exceo que seu VIP
68 Captulo 5. Detalhes tcnicos da soluo
Figura 15 Projeto da rede de computadores da soluo
e o IP para comunicar-se entre os servidores (que tero os mesmos endereos do balancea-
dor ativo) somente sero congurados em um processo de failover, quando o balanceador
ativo falhar. Enquanto esse processo no ocorrer, estas interfaces de rede caro sem IP.
Para possibilitar a comunicao entre o balanceador e os servidores, dever existir
um switch da camada 2 que estar conectado aos balanceadores e os servidores reais.
Neste cenrio existem algumas decincias, como os gargalos que podem se tornar o
roteador e o switch, pois uma falha em algum dos dois dispositivos tiraria o servio do
ar. Para resoluo desse problema seria necessrio uma soluo com mltiplos switches e
roteadores, aumentando a redundncia da rede, mas este cenrio no foi planejado por
ser muito custoso, o que inviabiliza a sua realizao no contexto deste trabalho.
5.2 Monitoramento do cluster
O monitoramento do cluster de servidores necessrio por dois motivos, (i) veri-
car se cada servidor real est em seu normal funcionamento, para que no sejam enviadas
requisies a servidores inoperantes, e (ii) vericar a latncia dos servios providos pelos
servidores reais, fornecendo parmetros para a deciso do algoritimo de menor latncia.
Para vericar se um servidor est operante, em teoria pode ser utilizado o proto-
colo ICMP, destinado principalmente para troca de mensagens de controle, o protocolo
trabalha juntamente com o IP e seus pacotes so inseridos dentro de pacotes IP para
envio de relatrios sobre a comunicao (BENVENUTI, 2005, p. 585). O cabealho de
um pacote ICMP dene um campo type, que pode receber 18 valores diferentes de ti-
pos do pacote, de acordo com o que foi denido na RFC
1
792 (Request for Comments).
1
Uma RFC um documento ocial que dene o padro de um protocolo de rede. A grande maioria
5.2. Monitoramento do cluster 69
Dentro desses tipos existem trs que interessam ao caso, ICMP_ECHO, ICMP_ECHOREPLY e
ICMP_DEST_UNREACH.
Para checagem da existncia de um host em uma rede, pode ser preparado um
pacote ICMP do tipo ICMP_ECHO e envi-lo ao host desejado, caso o host receba o pacote
ele ir retornar um ICMP_ECHOREPLY, o tempo entre essas duas aes dene a latncia.
Caso o host no esteja acessvel um ICMP_DEST_UNREACH gerado.
Existem pacotes de rede que so gerados de forma programtica por um programa,
ou seja, no so gerados da forma natural que o sistema operacional lida com a pilha
TCP/IP, esses pacotes so chamados de raw packets. O cabealho e o payload desses
pacotes so montados de forma manual, o que requer grande cuidado em sua montagem
para que ele seja descartado pelo destinatrio ao serem feitas suas validaes.
Para monitorar cada servidor real dever ser gerado um raw packet ICMP do
tipo ICMP_ECHO, depois deve ser gerado um raw packet IP e encapsular o pacote ICMP
dentro do seu payload, para s ento enviar para o dispositivo de rede responsvel (e.g.
eth0). Quando forem recebidos pacotes IP de resposta, devem ser vericados se o campo
protocol do seu cabealho (campo que determina qual protocolo est contido no payload,
e.g. TCP, UDP, ICMP, IGMP, etc) indica que ele contm carrega um pacote ICMP, depois
deve ser desencapsulado o pacote ICMP e ento vericado se o seu campo type indica
um ICMP_ECHOREPLY.
O cdigo no Quadro 1 contm algumas partes de um cdigo que realiza o envio
de um ICMP_ECHO. J o cdigo no Quadro 2 contm algumas partes de um cdigo que
realiza a vericao do ICMP_ECHOREPLY.
Deve se salientar que os dois exemplos anteriores so apenas partes de cdigos
que implementam as funcionalidades. Uma importante estrutura de dados para redes em
Linux foi utilizada nestes exemplos, o sk_buff. De acordo com Benvenuti (2005, p. 23),
esta estrutura utilizada por vrias camadas de rede (MAC ou outra protocolo de enlace
da camada 2, IP na camada 3, TCP ou UDP na camada 4), e vrias outros campos da
estrutura se modicam de acordo com que so passados de uma camada a outra. Nesta
estrutura so inseridos os cabealhos dos diversos protocolos que ela trafega, ao nal do
caminho na pilha (camada 1) existir uma estrutura sk_buff com diversos cabealhos
de protocolos, acessveis por intermdio de funes como ip_header = ip_hdr(skb),
acrescentado dos dados que se deseja transmitir (e.g. texto, vdeo, udio, etc).
Algo semelhante ocorre no monitoramento da latncia dos servidores, mas neste
caso feita a vericao da latncia dos servios e no a latncia na comunicao entre os
hosts, como pode ocorre no mtodo anterior. Para vericar a velocidade de resposta de um
servio, pode ser utilizado parte do handshake de trs vias que ocorre no estabelecimento
dos protocolos possui uma RFC associada.
70 Captulo 5. Detalhes tcnicos da soluo
Quadro 1 Cdigo fonte C: Envio de um ICMP_ECHO
1 // ...
2 icmp.type = ICMP_ECHO; // Define um ECHO para o ICMP
3 ip.protocol = IPPROTO_ICMP; // Define que o protocolo sera ICMP
4 ip.daddr = inet_addr("10.10.10.2"); // Define o end. do destinarario
5 // ...
6
7 // Reserva uma estrutura "struct sk_buff" no tamanho de um frame
ethernet
8 struct sk_buff *skb = dev_alloc_skb(1500);
9 skb ->dev = __dev_get_by_name(net , "eth0"); // Define o device de saida
10
11 // ...
12 // Configura o cabecalho da camada de transporte (ICMP)
13 skb ->transport_header =skb_push(skb ,sizeof(icmp));
14 memset (skb ->transport_header ,0,sizeof(struct icmphdr));
15 memcpy (skb ->transport_header ,&icmp ,sizeof(struct icmphdr));
16 // ...
17 // Configura o cabecalho da camada de rede (IP)
18 skb ->network_header=skb_push(skb ,sizeof(ip));
19 memset (skb ->network_header ,0,sizeof(struct iphdr));
20 memcpy (skb ->network_header ,&ip ,sizeof(struct iphdr));
21 // ...
22 dev_queue_xmit(skb); // Despacha o sk_buff
23 kfree(skb);
Quadro 2 Cdigo fonte C: Recebimento de um ICMP_ECHOREPLY
1 //...
2 if(skb == NULL)
3 return -1;
4
5 iph = ip_hdr(skb); // Pega o cabecalho IP
6 //...
7 // Verifica se o "protocol" eh mesmo o ICMP
8 if(iph ->protocol == IPPROTO_ICMP) {
9 icmph = icmp_hdr(skb); // Pega o cabecalho ICMP
10 if(icmph ->type == ICMP_ECHOREPLY) { // eh um ECHO REPLY?
11 // Servidor esta acessivel entao
12 } else if(icmph ->type == ICMP_DEST_UNREACH) { // eh um DEST.
UNREACHABLE?
13 // Servidor esta inacessivel , deve ser removido temporariamente do
cluster de tempos em tempos sera verificado o seu retorno...
14 }
15 }
de uma conexo TCP. Pode ser criar um raw packet de um segmento TCP com a ag do
tipo SYN ativada (bit = 1), e ento envi-lo ao servidor e esperar como resposta um
TCP segmento TCP com as ags SYN e ACK ativadas, a diferena de tempo entre esses
dois eventos indica a latncia do servio (KOPPARAPU, 2002, p. 30). Caso o servio
seja baseado em UDP, por exemplo, essa tcnica no surtir efeito j que o protocolo
no possui segmentos de reconhecimento (ACK), podendo como alternativa ser vericada
5.3. Processo de failover 71
a latncia com o protocolo ICMP, igual ao exemplo de vericao da conexo com os
servidores reais com um adicional de vericao de tempo entre os eventos.
5.3 Processo de failover
Em um cenrio ativo-standby, caso o sistema ativo venha a falhar, algumas provi-
dncias sero tomadas reativamente a situao (logo aps a falha) e algumas providncias
j devem estar sendo tomadas preventivamente (anteriormente a falha). Aqui ser expli-
cado sucintamente esse processo.
O mdulo conguration-synchronizer atua preventivamente, pois sincroniza con-
tinuamente a congurao do balanceador, para que o n em standby tenha o mesmo
comportamento do ativo quando ocorrer um failover. A seguir as tarefas realizadas pelo
componente:
1. O arquivo de congurao da soluo de balanceamento de carga car localizado em
uma pasta especca do sistema (e.g. /etc/slb/slbconf.conf), ou poder ser so-
licitado ao programa slbcli (e.g. # slbcli --lconf > slbconf_dump_file.txt).
2. Periodicamente (e.g. de 10 em 10 segundos) essa arquivo ser transferido via o
protocolo SCP (Secure Copy Protocol ), que um meio de transferncia de arquivos
entre dois hosts remotos de forma segura, fazendo uso de criptograa, este protocolo
baseado em outro, o SSH
2
(Secure Shell ). Para realizar essa tarefa ser necessria
uma biblioteca Python (linguagem do componente em questo) para comunicao
via o protocolo SCP. O cdigo no Quadro 3 exemplica realizao da transferncia
usando as bibliotecas paramiko e scp
3
para Python.
3. Quando o failover ocorrer e for iniciado o slbd no novo balanceador ativo, o arquivo
de congurao ser o mais recente possvel e o servio continuar com as mesmas
caractersticas do antigo balanceador ativo.
As duas instncias do Application Manager no balanceador ativo e standby atuam
de forma reativa, esto em constante troca de heatrbeats via um cabo de rede exclusivo,
mas alm disso tambm podem ser trocados comandos administrativos (e.g. efetuar um
uma troca de estados, primrio vira em standby e secundrio vira ativo). Os heartbeats so
trocados via uma comunicao UDP. Caso seja percebida uma falha no servidor primrio,
de forma reativa sero realizadas as seguintes tarefas:
2
O protocolo SSH prov a estrutura para conexo remota entre hosts: <http://pt.wikipedia.org/wiki/
SSH>
3
<https://pypi.python.org/pypi/scp>
72 Captulo 5. Detalhes tcnicos da soluo
Quadro 3 Cdigo fonte Python: Envio de arquivo via SCP
1 import scp
2 import paramiko
3
4 # Cria o cliente SSH
5 def createSSHClient(server , port , user , password):
6 client = paramiko.SSHClient()
7 client.load_system_host_keys()
8 client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
9 client.connect(server, port , user , password)
10 return client
11
12 # Conecta com o servidor
13 ssh_cliente = createSSHClient("10.10.10.2", 22, "root", "passwd")
14 scp_cliente = scp.SCPClient(ssh_cliente.get_transport())
15 # Transfere o arquivo
16 scp_cliente.put(files=["/etc/slb/slbconf.conf"],remote_path="/etc/slb/
slbconf.conf",recursive=False , preserve_times=False)
1. A instncia do componente heartbeat no servidor secundrio ao perceber que o seu
par no est mais se comunicando, se comunica com a instncia do Application
Manager informando a falha do outro servidor.
2. O Application Manager se comunica via seu socket TCP com a interface da aplicao
que ele est gerenciando, no caso o slbd, enviando um comando para que ele se torne
a instncia ativa.
3. O slbd ao receber o comando, congura duas interfaces de rede (e.g. eth0 e eth1),
uma com o VIP do servio de balanceamento de carga e outra com o IP para
comunicao interna com os servidores reais e para servir como gateway da rede
interna. Logo aps o slbd carrega o mdulo do kernel (slbcore) e o congura de
acordo com o contedo do arquivo de congurao slbconf.conf.
importante ressaltar que esse processo de failover descrito considerado stateless
e no stateful. Um failover stateless no dene que a tabela de conexes que regia na
instncia ativa (agora com falha) ser passada e usada pelo servidor em standby (agora
se tornando ativo), ou seja, todas as conexes TCP ativas que existiam entre clientes
e servidores reais ser perdida, j em um processo de failover stateful essa tabela de
conexes tambm ser compartilhada (KOPPARAPU, 2002, p. 96). A sincronizao da
congurao que foi projetada garante apenas que o novo balanceador de carga ativo
saber quais so os servidores reais que ele redistribui a carga, quais portas poder atender,
qual algoritimo ser utilizado, etc.
5.4. Comunicao entre slbd e slbcore 73
5.4 Comunicao entre slbd e slbcore
Em alguns momentos na descrio deste trabalho foi falada sobre o modo de con-
gurao do slbcore, foi dito que ela seria feita atravs de uma interao via IOCTL com
o slbd, este daemon iria realizar a leitura da congurao ou iria receber um comando do
slbcli, e logo aps iria se comunicar com o mdulo do kernel para congur-lo. Mas ainda
no foi explicado o motivo dessa deciso arquitetural, qualquer um poderia se questionar
do porque do slbcore no ler diretamente o arquivo slbconf.conf, ou do porque o slbcli
no se comunica diretamente com ele. A seguir as explicaes para estes fatos.
De acordo com Kroah-Hartman (2005), a leitura de arquivos dentro de mdulos do
kernel uma m ideia pois os problemas que isso pode causar so devastadores dentro de
um mdulo. Em primeiro lugar existe o problema da interpretao dos dados (parsing
4
),
uma simples interpretao errada pode abrir espaos para buer overows, que signica
ultrapassar os limites de escrita de um buer
5
, acessando memria indevida e oferecendo
uma abertura para execuo de instrues mal intencionadas (LEVY, 1996). Ou seja,
usurios mal intencionados podem inserir instrues que fazem acesso ou manipulao
de arquivos protegidos. Outro problema a padronizao da estrutura de arquivos da
distribuio Linux em questo, dependendo da distribuio em que se encontra o m-
dulo do kernel o local de arquivos de congurao pode ser diferente, oferecendo uma
complexidade em se encontrar o arquivo e abrindo espao para mais problemas. Deve se
lembrar que erros dentro de mdulos do kernel so devastadores, pois nesse modo de CPU
o sistema ca quase irrestrito a nvel de acesso de instrues.
Para evitar esse problema de acesso direto a arquivos de congurao o ideal a
congurao via uma aplicao no modo usurio. Para estabelecer essa comunicao exis-
tem diversas formas, podem ser utilizados os sistemas de arquivo padro Linux para infor-
maes de processos ou para informaes de congurao, /proc e /sys respectivamente.
Tambm pode ser utilizada a famlia de sockets Netlink, especialmente desenvolvida para
comunicao entre processos nos dois modos de CPU, estritamente para uso interno (no
mesmo host). Outra forma o uso do IOCTL, uma funo que dene uma forma de entrada
e sada de dados destinados a um device le
6
, onde podero ser enviados qualquer tipo
de comando com parmetros associados (SALZMAN; BURIAN; POMERANTZ, 2007,
p. 2). O IOCTL foi escolhido inicialmente pela sua simplicidade de implementao, mas
os outros mtodos ainda sero melhor estudados no decorrer do TCC 2. O Quadro 4 con-
tm partes do cdigo que poderiam implementar as chamadas no slbcore. J o Quadro 5
contm partes de cdigo que poderiam fazer parte da implementao do slbd.
4
Anlise sinttica: <http://pt.wikipedia.org/wiki/An%C3%A1lise_sint%C3%A1tica_(computa%C3
%A7%C3%A3o)>
5
<http://pt.wikipedia.org/wiki/Buer_(ci%C3%AAncia_da_computa%C3%A7%C3%A3o)>
6
Um arquivo que normalmente representa um dispositivo fsico, mas qualquer mdulo do kernel pode
registrar um.
74 Captulo 5. Detalhes tcnicos da soluo
Quadro 4 Cdigo fonte C: Chamadas IOCTL no slbcore
1 // Constante que define o comando de adicionar um servidor (IOW =
escrita)
2 #define ADD_SERVER _IOW(MAGIC_CHAR , 0, int)
3 // Constante que define o comando listar conexoes ativas (IOR = leitura)
4 #define LIST_ACTIVE_CONN _IOR(MAGIC_CHAR , 1, int)
5
6 static struct file_operations fops = {
7 .read = slbcore_read , // Ponteiro para funcao de callback da leitura
do arquivo
8 .write = slbcore_write , // Ponteiro para funcao de callback da
escrita do arquivo
9 .ioctl = slbcore_ioctl , // Ponteiro para funcao de callback de uma
chamada ioctl
10 };
11
12 // Registra o device file
13 register_chrdev(0, "slb", &fops);
14
15 int slbcore_ioctl(struct inode *inode , struct file *filep , unsigned int
cmd , unsigned long arg) {
16 int len = 200;
17 char buf[200];
18 switch(cmd) {
19 case LIST_ACTIVE_CONN:
20 // Aqui deve se colocar a lista de conexoes ativas na variavel "
buf" para serem enviadas ao slbd
21 copy_to_user((char *)arg , buf , 200);
22 break;
23
24 case ADD_SERVER:
25 copy_from_user(buf , (char *)arg , len);
26 // Aqui deve se adicionar o servidor a lista de servidores , seu
IP:Porta estarao na variavel "buf"
27 break;
28 default:
29 return -ENOTTY;
30 }
31 return len;
32 }
As constantes LIST_ACTIVE_CONN_CONSTANT e ADD_SERVER_CONSTANT que esto
exemplicadas no Quadro 5 devem ser encontradas para comunicao entre os componen-
tes, isso possvel via a impresso (printk()) do seu valor dentro do mdulo slbcore.
Outra questo que deve ser esclarecida o porqu de no existir uma comunicao
direta entre o slbcli e o slbcore. O slbcli somente um programa utilitrio, quando um
comando enviado a este utilitrio ele somente executa a sua funo e depois o seu
processo deixa de existir, ou seja, ele no um processo em background. Isso j um dos
pontos a favor da existncia do slbd como um componente intermedirio, ele possibilita
que exista um processo que represente o servio de balanceamento de carga enquanto
ele estiver ativo na mquina. Outra questo que favorece a existncia do slbd a sua
5.5. Tabela de servidores e tabela de conexes 75
Quadro 5 Cdigo fonte Python: Uso do IOCTL no slbd
1 import fcntl # Modulo python para manipular IOCTL
2
3 # Devem ser descobertas as constantes numericas que representam os
comandos definidos no slbcore
4 LIST_ACTIVE_CONN_CONSTANT = 2983579
5 ADD_SERVER_CONSTANT = -3487538
6
7 # Abre o device file
8 dev_file = open("/dev/slb")
9 # Define o IP:Porta de um servidor
10 buf = array.array(1,0,.,1,0,.,1,0,.,3, :, 8, 0
)
11 # Faz chamada ao comando de adicionar um servidor
12 fcntl.ioctl(dev_file , ADD_SERVER_CONSTANT , buf , 1)
13
14 # Faz chamada ao comando de listar conexoes
15 buf = None
16 fcntl.ioctl(dev_file , LIST_ACTIVE_CONN_CONSTANT , buf , 1)
17 # Imprime a lista de conexoes
18 print buf
responsabilidade de implementar a interface de comunicao com o Application Manager,
fazendo a escuta da conexo TCP para recepo de comandos de troca de estado. Sem o
slbd esta conexo no poderia ser estabelecida continuamente, j que o slbcli somente
um programa utilitrio e no um processo em background.
5.5 Tabela de servidores e tabela de conexes
Aqui entramos em um campo de discusso mais ligado as estruturas de dados que
sero utilizadas para o slbcore executar as suas funcionalidades. Existem duas principais
estruturas que devem existir:
Tabela de servidores: Esta estrutura de dados dever conter uma lista de servidores
reais atualmente administrados pelo sistema. Cada servidor possuir um campo com
o endereo IPv4
7
associado (o projeto inicialmente ir comportar IPs nesta verso),
e tambm ter uma lista de 1 a n servios, representados pelo nmero da porta e
pelo tipo de protocolo de transporte (TCP ou UDP).
Tabela de conexes: Esta estrutura de dados dever conter uma lista de conexes atu-
almente estabelecidas. Cada conexo dever possuir o IPv4 e a porta do cliente em
questo. A lista de conexes em si ser agrupada por servio de um servidor, para
7
O IP verso 4 a verso do protocolo IP mais utilizada atualmente na internet. Mas a verso 6 (IPv6)
aos poucos vem crescendo e tende a substituir o IPv4 por conta dos seus benefcios.
76 Captulo 5. Detalhes tcnicos da soluo
ter acesso a todas as conexes devero ser acessadas todas as listas de conexes por
servio (uma lista de listas).
Como um esboo de representao dessas estruturas na linguagem de programao
a ser utilizada, o Quadro 6 dene um esboo de uma lista com possveis structs C que
sero utilizadas.
Quadro 6 Cdigo fonte C: Structs para o slbcore
1 // Representa uma conexao
2 typedef struct {
3 uint32_t client_ip4; // IP do cliente
4 uint16_t client_port; // Porta do cliente
5 } conn;
6
7 // Representa uma lista de conexoes para um servidor
8 typedef struct {
9 conn *conns; // Lista de conexoes
10 uint16_t conns_count; // Quantidade de conexoes
11 server *server; // Servidor associado
12 } conn_list;
13
14 // Tipo de protocolo da camada de transporte
15 typedef enum {TCP_PROTOCOL , UDP_PROTOCOL} transp_protocol;
16
17 // Representa uma porta
18 typedef struct {
19 uint16_t port; // Numero da porta
20 transp_protocol proto; // Qual protocolo (TCP ou UDP)
21 conn_list *conn_list; // Lista de conexoes associadas ao servico
22 } service;
23
24 // Representa um servidor real
25 typedef struct {
26 uint32_t ip4; // IP do servidor real
27 service *services; // Array de servicos do servidor real
28 uint16_t services_count; // Quantidade de servicos do servidor real
29 } server;
30
31 // Representa todos os servidores reais
32 typedef struct {
33 server *servers; // Lista de servidores reais
34 uint16_t servers_count; // Quantidade de servidores reais
35 } server_table;
36
37 // Representa todos as conexoes
38 typedef struct {
39 conn_list ** conn_lists_list; // Uma lista de listas de conexoes
40 uint16_t conn_lists_list_count; // Quantidade de listas de conexoes
41 } conn_table;
Essas estruturas servem somente como esboo para demonstrao dos dados que
devero ser mantidos e manipulados. Uma real implementao iria requerer o uso de es-
truturas de dados auxiliares mais complexas, como listas ligadas, tabelas hash e vetores,
5.6. Persistncia de sesso 77
fazendo escolhas de qual usar de acordo com as necessidades de uso dos dados, por exem-
plo, caso existam remoes constante de elementos de uma estrutura, recomendado o
uso de listas ligadas ao invs de vetores, ou se existe uma iterao contgua constante sobre
elementos de uma estrutura, recomendado o uso de vetores ao invs de listas ligadas.
Alm do problema da escolha das estruturas auxiliares, tambm ser necessrio
estabelecer uma forte poltica de alocao e desalocao de memria para as estruturas,
pois algumas delas teriam referencias cruzadas (e.g. Servidor tem uma lista de servios,
servio tem uma lista de conexes, conexo est associada a um servidor), uma desa-
locao de memria poderia levar uma outra estrutura que tinha referncia a ela agora
referenciar uma rea de memria indevida, podendo levar a falhas de segmentao. Uma
m desalocao de memria tambm poderia resultar em vazamentos de memria, que
so reas da memria devidamente alocadas, mas que no possuem atualmente nenhuma
referncia a ela, ou seja, a rea ca reservada e inutilizvel (LEVY, 1996).
5.6 Persistncia de sesso
Um dos maiores problemas que os balanceadores de carga devem superar o fato
das sesses de clientes. Existem diversas aplicaes que atualmente so dependentes de
uma sesso, estas so denominadas aplicaes stateful, um exemplo uma loja online onde
o usurio possui um carrinho de compras, as informaes sobre este carrinho de compras
so mantidas em memria RAM pelo servidor (memria voltil), ou seja, no so inseridas
em uma base de dados persistente. Caso este servio esteja replicado em vrios servidores
reais da soluo de balanceamento de carga, quando um usurio se realizar uma requisio
(e.g. uma pgina web) ele ser destinado a um servidor real, mas quando ele efetuar outra
requisio (e.g. outra pgina web) ele corre o risco de ser destinado a outro servidor real
(dependendo da deciso do algoritmo de escalonamento), caso o usurio tenha solicitado
a compra de um produto e este foi adicionado ao seu carrinho de compras virtual, ao ser
enviado para outro servidor ele perderia essa informao. Ento o ideal que um usurio
mantenha a sua conexo com um nico servidor para evitar problemas de perda da sesso.
Um fato que deve ser levado em considerao que o TCP um protocolo nati-
vamente orientando a conexo, j o UDP no. Mas mesmo o UDP no sendo orientado a
conexo, os protocolos da camada de aplicao que fazem uso do UDP podem determinar
mecanismos de estabelecimento de uma sesso, fazendo que at mesmo segmentos UDP
vindos de um mesmo usurio, tenham a necessidade de serem enviados para um nico
servidor.
De acordo com Kopparapu (2002, p. 53), existem meios de contornar este problema,
um deles a persistncia de sesso baseada em IP, que ser o mtodo implementado no
slbd para amenizar o problema. Este mtodo relativamente simples, ele determina que
78 Captulo 5. Detalhes tcnicos da soluo
ao chegar uma nova requisio de um cliente, deve ser vericado se ele j possui uma
recente conexo estabelecida com algum servidor (acessado via a tabela de conexes),
caso ele possua alguma a requisio ser enviada ao servidor em questo, caso no possua
a requisio ser enviada a algum servidor selecionado pelo algoritmo de escalonamento.
Infelizmente o mtodo de persistncia baseado em IP no infalvel, Kopparapu
(2002, p. 58) descreve o problema deste mtodo com proxies de rede. Um proxy um ser-
vidor que atua como intermedirio de um grupo de usurios a uma rede externa para me-
lhorar a segurana (rewall ) e desempenho (caching). Este grupo de usurios ao fazerem
requisies a uma rede externa so representados externamente pelo proxy, consequente-
mente este ir fazer um processo de NAT para que as requisies tenham como remetente
o seu endereo. Caso usurios de um mesmo proxy faam requisies ao servio de balan-
ceamento de carga, todos os n usurios tero o mesmo IP de remetente (o IP do proxy
que os representa), o que poder sobrecarregar um servidor real, que receber um grande
nmero de requisies de diferentes usurios por causa da persistncia de sesso. Existem
alguns meios de contornar parte deste problema, mas devido as suas complexidades de
implementao eles no sero trabalhados neste projeto.
5.7 Interceptao e manipulao de pacotes
A partir do da verso 2.3.X do kernel do Linux foi inserida uns dos mais importan-
tes componentes do kernel se tratando de redes. O projeto desenvolvido por Russel e Welte
(2002), teve a inteno de denir novas formas de ltragem e manipulao de pacotes de
rede em sistemas Linux. Foi desenvolvido um grande framework para manipulao de pa-
cotes chamado de Netlter, totalmente integrado a implementao da pilha de protocolos
TCP/IP do sistema, e junto a ele foram desenvolvidos mdulos do kernel e aplicativos
utilitrios para exercer a funcionalidade de rewall, como o iptables e o arptables.
Dentro deste framework foram denidos vrios hooks (ganchos), que so pontos
bem denidos na travessia de pacotes da pilha de protocolos do sistema. Cada protocolo
dene os seus hooks, e possibilitam que funes de callback sejam registradas a eles,
possibilitando que um mdulo do kernel tenha acesso aos pacotes que atravessam a pilha
de protocolos no hook registrado em questo. Ao ter acesso aos pacotes de rede, podem ser
efetuadas alteraes e ainda podem ser dadas instrues ao netlter sobre o que deve ser
feito com o pacote a partir do retorno da funo de callback (RUSSEL; WELTE, 2002).
A seguir as cinco constantes que podem servir como retorno de funo, seguido dos seus
respectivos efeitos:
NF_ACCEPT: O pacote continua a sua travessia normalmente;
NF_DROP: O pacote ser descartado;
5.7. Interceptao e manipulao de pacotes 79
NF_STOLEN: O pacote dever ser esquecido pelo netlter, o responsvel pelo seu
destino agora ser do prprio mdulo.;
NF_QUEUE: O pacote deve ser enleirado para uso de aplicativos no modo usurio
de CPU;
NF_REPEAT: Esse hook com este mesmo pacote em questo dever ser chamado
novamente.
Para registrar um hook necessrio informar alguns dados ao framework netlter,
estes dados so passados via a struct nf_hook_ops, que possui o formato do cdigo no
Quadro 7.
Quadro 7 Cdigo fonte C: Struct de cogurao de um hook
1 struct nf_hook_ops
2 {
3 struct list_head list; // Nao deve ser preenchido
4 nf_hookfn *hook; // Ponteiro para a funcao que ira registrar o hook
5 int pf; // A familia do protocolo de rede
6 int hooknum; // O identificador do tipo de hook
7 int priority; // Prioridade do hook
8 };
Cada um dos campos sero explicados para melhor entendimento do funciona-
mento do netlter. O primeiro campo hook um ponteiro para uma funo implementada
no prprio mdulo do kernel, ela ser a funo de callback que ir receber os pacotes
de rede. O netlter dene um prottipo para essa funo com o formato do cdigo no
Quadro 8.
Quadro 8 Cdigo fonte C: Prottipo de funo para registrar um hook
1 unsigned int hook_function_name(unsigned int hooknum ,
2 struct sk_buff **skb ,
3 const struct net_device *in ,
4 const struct net_device *out ,
5 int (*okfn)(struct sk_buff*));
A seguir a descrio de cada parmetro:
hooknum: Tipo de hook (ser melhor explicado adiante);
skb: Estrutura que contm o pacote, ou conjunto de pacotes a serem manipulados. Seu
contedo mutvel de acordo com a camada de rede em que se encontra, por conta
de estruturas union que ele contm;
80 Captulo 5. Detalhes tcnicos da soluo
in: Ponteiro para a estrutura que representa a interface de rede em que o pacote chegou ao
host (e.g eth0). Vlido para pacotes que acabaram de chegar, seno far referncia
a NULLl;
out: Ponteiro para a estrutura que representa a interface de rede em que o pacote ser
destinado para sair do host (e.g eth0), o que foi denido aps roteamento do mesmo.
Vlido para pacotes que esto para sair, seno far referncia a NULL;
okfn: Ponteiro para uma funo que ser invocada caso todas as funes de callback
registradas ao hook em questo retornem NF_ACCEPT.
Dentro da funo hook_function_name que poder ser feita a manipulao e l-
tragem dos pacotes de rede. O prximo campo da estrutura principal o pf, que faz
uma simples referncia a famlia do protocolo que est sendo trabalhado, PF_INET para
IPv4 e PF_INET6 para IPv6, no caso do slbcore o pf ser a princpio PF_INET. O prximo
campo o hooknum, este um dos mais importantes pois dene qual tipo de hook ser
trabalhada na funo de callback, denindo em que ponto da travessia de rede o pacote
car acessvel. A Figura 16 dene os cinco hooks acessveis da travessia. A descrio de
cada hook e cada evento da travessia vir a seguir.
Figura 16 Tipos de hook com possibilidade de registro
Fonte: Wehrle et al. (2004). Adaptado pelo autor.
0. O pacote chega em uma interface de rede de entrada do host;
1. O primeiro hook, antes do roteamento inicial possvel acessar o pacote;
2. Ocorre o roteamento do pacote;
3. O segundo hook, analisado que o pacote se destina ao host em questo e antes
dele ser processado possvel acess-lo;
5.7. Interceptao e manipulao de pacotes 81
4. O pacote processado pelas aplicaes do host a quais ele era destinado;
5. O terceiro hook, aps o processamento do pacote no host ele pode ser acessado;
6. Ocorre o roteamento de sada do pacote processado no host;
7. O quarto hook, analisado que o pacote no se destina ao host em questo, e antes
dele ser repassado (i.e. forwarded) possvel acess-lo;
8. O quinto hook, o pacote est de sada do host e antes disso possvel acess-lo;
9. O pacote chega a interface de rede de sada do host.
No caso do slbcore o que se deseja realizar um DNAT (Destination Network
Adress Translation), ou seja, o endereo de destino do pacote de rede ser alterado e
repassado para o roteamento (onde ser enviado ao servidor real escolhido). A realizao
do DNAT sempre dever ocorrer na chegada do pacote a rede, para isso o seu acesso via
o netlter dever ser feito pelos hooks NF_IP_PRE_ROUTING ou NF_IP_LOCAL_IN. Como
no desejado que o pacote seja processado por nenhuma aplicao dentro do servidor de
balanceamento de carga, necessrio que ele seja acessado antes do roteamento ocorrer,
pois ele ser destinado a este m j que o IP de destinatrio o VIP. Ento ser utilizado
o hook NF_IP_PRE_ROUTING.
O prximo campo da estrutura de congurao nf_hook_ops o priority, esse
campo indica qual a prioridade de acesso do hook ao pacote em questo, pois em um
mesmo host podem existir diversos mdulos do kernel com hooks denidos. Ento quanto
maior a prioridade de acesso prvio a um pacote dever ser indicado pela constante
NF_IP_PRI_FIRST, e no caso de existir uma prioridade mnima de acesso poder ser
indicado pela constante NF_IP_PRI_LAST. Entre essas duas constantes existem outras
que denem prioridades intermedirias.
Com o preenchimento dos campos da estrutura nf_hook_ops j possvel fazer
um simples mdulo netlter. Para realizar uma pequena demonstrao de uso, foi feito
um esboo no Quadro 9 que une algumas partes de cdigo C e pseudocdigo para melhor
visualizao do sua utilizao.
82 Captulo 5. Detalhes tcnicos da soluo
Quadro 9 Cdigo fonte C: Exemplo de um mdulo netlter simples
1 // Funcao que realiza o balanceamento
2 int process_segment(struct sk_buff *skb) {
3 // Verifica se eh o pacote eh valido
4 if(!skb) return NF_ACCEPT;
5 if(!(skb ->nh.iph)) return NF_ACCEPT;
6
7 struct tcphdr *tcp=NULL;
8 struct iphdr *iph=NULL;
9 iphdr = ip_hdr(skb);
10
11 if(iph ->protocol == IPPROTO_TCP){
12 tcphdr = tcp_hdr(skb);
13 uint16_t dport = tcphdr ->th_dport;
14 // ...
15 // Verifica se algum servidor real contem o servico com "dport"
16 // Se nao existir eh dado um "return NF_DROP;"
17 // ...
18 // Caso existam , eh feito o escalonamento de qual servidor sera
o responsavel
19 uint32_t realserver_ip = scheduling_algorithm();
20
21 iphdr ->daddr = realserver_ip;
22
23 // Refaz os checksums
24 iphdr ->check = checksum(iphdr);
25 tcphdr ->th_sum = checksum(tcphdr);
26 } else if(iph ->protocol == ...) { // Outros protocolos de transporte
...
27
28 }
29 return NF_ACCEPT;
30 }
31 // Funcao de callback para o hook
32 static u_int slbcore_hook_fn( u_int hooknum ,
33 struct sk_buff **skb ,
34 const struct net_device *in,
35 const struct net_device *out ,
36 int (*okfn)(struct sk_buff *)) {
37
38 // Verifica se o pacote chega pela interface do VIP
39 // se nao vier desta o pacote seguira o seu caminho
40 if(strcmp(in ->name , "eth0") != 0){
41 return NF_ACCEPT;
42 }
43 return process_segment(*skb);
44 }
45 // Funcao de inicializacao do modulo
46 struct nf_hook_ops slbcore_nfh_ops;
47 static int __init slbcore_init() {
48 // Configura o hook
49 slbcore_nfh_ops.hook = slbcore_hook_fn;
50 slbcore_nfh_ops.hooknum = NF_IP_PRE_ROUTING;
51 slbcore_nfh_ops.pf = PF_INET;
52 slbcore_nfh_ops.priority = NF_IP_PRI_FIRST;
53 // Registra o hook
54 nf_register_hook(& slbcore_nfh_ops);
55 return 0;
56 }
83
6 Concluso
Por intermdio deste trabalho de concluso de curso foi possvel realizar um estudo
sobre diversas reas da computao que tangem desde redes de computadores, sistemas
operacionais, engenharia de software e outras. Todo este estudo foi necessrio para se
obter maior entendimento sobre ferramentas de balanceamento de carga de servidores,
deste o seu histrico de uso, suas principais funcionalidades, benefcios e sua arquitetura
geral.
Na introduo deste trabalho foi indicada a motivao real da implementao desta
ferramenta, e na concluso deve ser feita uma rearmao da importncia que este tipo
de produto tem no mundo hoje. O uso de balanceadores de carga uma das formas de
garantia de desempenho, disponibilidade e conabilidade de servios, e juntamente com
outros tipos de solues forma uma estrutura bsica de uma infraestrutura de TI que visa
oferecer estes servios a um grande nmero de usurios sem pecar com a sua qualidade a
um nvel tcnico.
Para ns de pesquisa e desenvolvimento foi feito o projeto de uma soluo original
de balanceamento de carga, tendo como participantes os presentes autor e orientador deste
trabalho. A soluo proposta conseguiu atingir dois nveis de projeto que iro proporcionar
a base de uma futura implementao, foi atingido um nvel arquitetural, mais genrico
e mais abstrato, onde foram denidos, descritos e relacionados todos os componentes
que iro agregar a soluo de balanceamento de carga, com a viso de sua organizao
lgica e com a viso de sua disposio fsica. Outro nvel de projeto atingido foi um nvel
mais detalhado, mais especco e concreto, onde foram levantados e descritos importantes
problemas que deveriam ser solucionados para se tornar vivel a futura implementao do
balanceador de carga. Estes resultados alcanados conseguem demonstrar que os objetivos
deste trabalho foram atingidos.
6.1 Trabalhos futuros
O contexto desse projeto foi a disciplina de Trabalho de Concluso de Curso 1,
do curso de Engenharia de Software da Universidade de Braslia. A continuao deste
trabalho ser realizado na disciplina de Trabalho de Concluso de Curso 2, e o objetivo
geral deste trabalho futuro ser a real implementao do balanceador de carga em conjunto
com a criao de uma sute de testes para vericao de suas funcionalidades. Todo o
projeto da soluo realizado neste trabalho atual dever servir como base para a futura
implementao.
84 Captulo 6. Concluso
A partir do conhecimento adquirido possvel denir uma estrutura de trabalho
a ser utilizada no TCC2, mesmo sabendo-se que provavelmente sofrer alteraes no
decorrer da execuo. A seguir uma estrutura cronolgica:
1. Congurao de um ambiente de desenvolvimento da soluo (Computadores, m-
quinas virtuais, roteadores, switches e cabeamento). Esforo = 3.
2. Implementao e testes do componente cluster-monitor. Esforo = 8.
3. Implementao e testes do componente scheduling-algorithms. Esforo = 3.
4. Implementao e testes do componente slbcore (com uma congurao totalmente
esttica). Esforo = 13.
5. Implementao da integrao e realizao de testes de integrao entre o slbcore,
cluster-monitor e scheduling-algorithms. Esforo = 8.
6. Implementao e testes do componente slbd (com execuo de comandos pr-denidos).
Esforo = 8.
7. Implementao da integrao e realizao de testes de integrao entre o slbd e
slbcore. Esforo = 5.
8. Implementao e testes do componente slbcli. Esforo = 3.
9. Implementao da integrao e realizao de testes de integrao entre o slbcli e
slbd. Esforo = 2.
10. Implementao e testes do conguration-synchronizer. Esforo = 1.
11. Implementao da integrao e realizao de testes de integrao entre o Application
Manager e slbd. Esforo = 13.
12. Realizao de testes de sistema e testes de aceitao para vericao e validao de
toda a soluo. Esforo = 8.
Para estimativa de esforo foi denido o valor 1 a atividade com menor complexi-
dade (nmero 10), depois foram estimados valores proporcionais a este usando nmeros da
sequncia de Fibonacci
1
, levando em considerao a complexidade das outras atividades.
1
Exemplo: 0, 1, 1, 2, 3, 5, 8, 13, 21, ...(<http://pt.wikipedia.org/wiki/Sequ%C3
%AAncia_de_Fibonacci>)
85
Referncias
ATWOOD, J. Understanding User and Kernel Mode. 2008. Blog Coding Horror.
Disponvel em: <http://blog.codinghorror.com/understanding-user-and-kernel-mode/>.
Citado na pgina 30.
BENVENUTI, C. Understanding Linux Network Internals. 1. ed. EUA: OReilly, 2005.
Citado 2 vezes nas pginas 68 e 69.
BOURKE, T. Server Load Balancing. 1. ed. EUA: OReilly, 2001. Citado 5 vezes nas
pginas 25, 35, 37, 39 e 52.
BOVET, D. P.; CESATI, M. Understanding the Linux Kernel. EUA: OReilly, 2000.
Citado 2 vezes nas pginas 25 e 31.
CASAVANT, T. L.; KUHL, J. G. A taxonomy of scheduling in general-purpose
distributed computing systems. Software Engineering, IEEE Transactions, v. 14, n. 2,
1988. Citado na pgina 44.
CISCO SYSTEMS. Cisco ASA 5500 Series Conguration Guide using the CLI. 8.2. ed.
[S.l.], 2010. Cap. 33. Disponvel em: <http://www.cisco.com/c/en/us/td/docs/security/
asa/asa82/conguration/guide/cong.html>. Citado na pgina 48.
COMER, D. E. Internetworking with TCP/IP: Principles, Protocol, and Architecture. 6.
ed. New Jersey, EUA: Pearson, 2013. Citado 2 vezes nas pginas 28 e 53.
FREE SOFTWARE FOUNDATION. What is free software? 2014. Verso 1.135.
Disponvel em: <https://www.gnu.org/philosophy/free-sw.en.html>. Citado na pgina
29.
GARLAN, D.; SHAW, M. An introduction to software architecture. Advances in
Software Engineering and Knowledge Engineering, v. 1, 1994. Citado na pgina 51.
HORMAN, S. Linux Virtual Server Tutorial. 2003. Ultra Monkey Project. Disponvel
em: <http://www.ultramonkey.org/papers/lvs_tutorial/html/>. Citado na pgina 54.
IBM RATIONAL SOFTWARE. Rational Unied Process (RUP): Diretrizes de um
Documento de Arquitetura de Software. 2001. Disponvel em: <http://www.wthreex.
com/rup/portugues/process/modguide/md_sad.htm>. Citado 4 vezes nas pginas 51,
57, 62 e 65.
JAYASWAL, K. Administering Data Centers: Servers, Storage, and Voice over IP.
Indianapolis, EUA: Wiley, 2006. Citado 4 vezes nas pginas 25, 46, 47 e 48.
KARIMI, A. et al. A new fuzzy approach for dynamic load balancing algorithm.
International Journal of Computer Science and Information Security (IJCSIS), v. 6,
n. 1, 2009. Citado na pgina 32.
KOPPARAPU, C. Load Balancing Servers, Firewalls, and Caches. New York, EUA:
Wiley, 2002. Citado 6 vezes nas pginas 47, 67, 70, 72, 77 e 78.
86 Referncias
KROAH-HARTMAN, G. Things you never should do in the kernel. Linux Journal,
n. 133, 2005. Citado na pgina 73.
LARANJEIRA, L. A. F. Manuteno e Evoluo de Software: Aula 3A, Apresentao do
Trabalho. 2011. Universidade de Braslia, Faculdade UnB Gama. 21 slides. Citado 4
vezes nas pginas 56, 61, 62 e 91.
LEVY, E. Smashing the stack for fun and prot. Phrack Magazine, v. 7, n. 49, 1996.
Citado 2 vezes nas pginas 73 e 77.
MADHURAVANI, P.; SUMALATHA, G.; SHANMUKHI, M. An emperical study of
static and dynamic load balancing algorithms in parallel and distributed computing
environment. International Journal of Emerging trends in Engineering and Development,
v. 3, n. 2, 2012. Citado 3 vezes nas pginas 45, 46 e 56.
NATRIO, R. Load Balancing III. 2011. Blog Network and Servers. Disponvel em:
<http://networksandservers.blogspot.com.br/2011/03/balancing-iii.html>. Citado na
pgina 39.
RUSSEL, R.; WELTE, H. Linux netlter Hacking HOWTO. 2002. Rev. 521. Disponvel
em: <http://www.netlter.org/documentation/HOWTO/netlter-hacking-HOWTO.
html>. Citado 2 vezes nas pginas 32 e 78.
SALZMAN, P. J.; BURIAN, M.; POMERANTZ, O. The Linux Kernel Module
Programming Guide. 2007. Verso 2.6.4. Linux Documentation Project. Citado 2 vezes
nas pginas 31 e 73.
SHARMA, S.; SINGH, S.; SHARMA, M. Performance analysis of load balancing
algorithms. World Academy of Science, Engineering and Technology, n. 38, 2008. Citado
na pgina 34.
STATISTIC BRAIN. Google Annual Search Statistics. 2014. Disponvel em: <http://
www.statisticbrain.com/google-searches/>. Citado na pgina 21.
TANENBAUM, A. S. Redes de Computadores. Trad. 4. ed. So Paulo: Campus Elsevier,
2003. Citado 2 vezes nas pginas 26 e 27.
TIOBE SOFTWARE. TIOBE Programming Community Index. 2014. Disponvel em:
<http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html>. Citado na
pgina 55.
TORVALDS, L. Re: Compiling C++ kernel module + Makele. 2004. Mensagem enviada
a lista de e-mails em 19 janeiro 2004. Disponvel em: <https://groups.google.com/
forum/#!forum/fa.linux.kernel>. Citado na pgina 54.
W3SCHOOLS. OS Platform Statistics. 2014. Disponvel em: <http://www.w3schools.
com/browsers/browsers_os.asp>. Citado na pgina 29.
WEHRLE, K. et al. The Linux Networking Architecture: Design and Implementation of
Network Protocols in the Linux Kernel. EUA: Prentice Hall, 2004. Citado na pgina 80.
WIKIPEDIA. Internet protocol suite Wikipedia, The Free Encyclopedia. 2014.
Disponvel em: <http://en.wikipedia.org/wiki/Internet_protocol_suite>. Citado na
pgina 28.
Referncias 87
ZHANG, W. Linux virtual server for scalable network services. National Key Laboratory
of Parallel and Distributed Processing, 2000. The Linux Virtual Server Project. Citado
6 vezes nas pginas 39, 40, 41, 42, 43 e 44.
Apndices
91
APNDICE A Lista de comandos do amcli
A seguir uma lista comandos do componente amcli do Application Manager e seus
respectivos efeitos (LARANJEIRA, 2011):
START: Inicia a aplicao em um ou dois hosts.
RESTART: Fecha e recomea a aplicao (exceto se ela for ACTIVE e no houver uma verso
STANDBY)
SHUTDOWN: Fecha a aplicao (exceto se ela for ACTIVE e no houver uma verso STANDBY)
SWITCH: Reverte o estado da aplicao (ACTIVE e STANDBY)
RELOAD: Recarrega o arquivo de congurao esttica da aplicao.
TEST: Faz com que a instncia STANDBY da aplicao mude para MAINTENANCE.
UNTEST: Faz com que a instncia MAINTENANCE da aplicao mude para STANDBY.
PRIMARY: Muda a instncia da aplicao que no PRIMARY para PRIMARY (no arquivo
de congurao).
ENABLE: Muda a instncia da aplicao que MAINTENANCE para STANDBY e a libera
para se tornar ACTIVE caso a dual falhe (mudando o valor no arquivo de congurao
dinmica UNINHIBITED)
DISABLE: Muda a instncia da aplicao que STANDBY para MAINTENANCE e a res-
tringe para no se tornar ACTIVE caso a dual falhe (mudando o valor no arquivo de
congurao dinmica para INHIBITED)
INHIBIT: Restringe a instncia da aplic. a no se tornar ACTIVE (caso seja STANDBY e a
dual falhe) mudando o valor no arquivo de congurao dinmica para INHIBITED.
UNINHIBIT: Libera a instncia da aplic. para se tornar ACTIVE (caso seja STANDBY e a
dual falhe) mudando o valor no arquivo de congurao dinmica para UNINHIBITED.
GETPID: Solicita o PID de um processo especco da instncia local da aplicao.
KILLPROC: Executa o comando Unix/Linux kill -0 sobre um processo especco de uma
aplicao.
KILLRM: Executa o comando Unix/Linux kill -0 sobre o AppMgr que roda em um dado host.
92 APNDICE A. Lista de comandos do amcli
QUERY: Solicita o estado da aplicao (das duas instncias)
REBOOT: Fecha e recomea a aplicao (exceto se ela for ACTIVE e no houver uma verso
STANDBY)
SHUTDOWN-F: Fecha a instncia da aplicao mesmo se ela for ACTIVE e a outra no for
STANDBY.
DISABLE-F: Muda a instncia da aplicao para o estado MAINTENANCE mesmo se ela
for ACTIVE.
RESTART-F: Fecha e recomea a instncia da aplic. mesmo se ela for ACTIVE e no houver
STANDBY.

Você também pode gostar