Autores - Gustavo Pires Machado - 6º Período de Engenharia de Computação e Informação
Matheus Torres - 6º Período de Engenharia de Computação e Informação
Disciplina - Redes de Computadores 2 - EEL 879
Departamentos -
"Este trabalho foi totalmente produzido pelos autores que declaram não terem violado os direitos autorais de terceiros, sejam eles pessoas físicas ou jurídicas. Havendo textos, tabelas e figuras transcritos de obras de terceiros com direitos autorais protegidos ou de domínio público tal como idéias e conceitos de terceiros, mesmo que sejam encontrados na Internet, os mesmos estão com os devidos créditos aos autores originais e estão incluídas apenas com o intuito de deixar o trabalho autocontido. O(s) autor(es) tem(êm) ciência dos Artigos 297 a 299 do Código Penal Brasileiro e também que o uso do artifício de copiar/colar texto de outras fontes e outras formas de plágio é um ato ilícito, condenável e passível de punição severa. No contexto da Universidade a punição não precisa se restringir à reprovação na disciplina e pode gerar um processo disciplinar que pode levar o(s) aluno(s) à suspensão;"
A segunda década do século XXI está sendo marcada pelos avanços tecnológicos nas mais diversas esferas. No campo da
computação, mais especificamente quando tratamos de redes de computadores, tais desenvolvimentos têm tornado as arquiteturas
de rede obsoletas. As tecnologias ‘sem fio’ estão em ascensão no mundo, visto a grande leva de benefícios que trazem para
os indivíduos e diversos negócios. A tendência é que todos os processos sejam automatizados e não dependam de conexões via
cabo. Em detrimento disso, é necessário implementar uma arquitetura de redes mais eficiente, simples e com maior largura de
banda.
Diante disso, foi criado o SDN, Rede Definida por Software (do inglês Software Defined Networking). Tal abordagem na criação de arquitetura
de redes enfoca em separar o paradigma de dados e de controle de uma rede, tornando possível alterar a estrutura e serviços da rede por meio
de um controlador centralizado. [1] Diversos controladores foram criados ao longo do tempo, tendo sua maioria se baseado em protocolos OpenFlow.
OpenDaylight (ODL) é um controlador SDN modular cuja finalidade é uma maior customização e automação de arquiteturas de redes, oferecendo assim
uma maior integração e programabilidade. Dentre seus objetivos, ressaltamos uma maior adoção do SDN e o suporte a NFV, Virtualização de Funções
de Rede (do inglês Network Functions Virtualization). [12]
Criado em Abril de 2013, o ODL foi idealizado um projeto de código aberto colaborativo pela fundação Linux (do inglês The Linux Foundation). Tal
projeto possui o suporte de empresas renomadas como IBM, Cisco, Juniper, VMWare, etc. Esse controlador tem sido implementado em diversas plataformas
nas mais variadas camadas do âmbito social. Exemplificando temos o ODL sendo parte do cerne de “frameworks” de código aberto. [12]
Em sua concepção, o ODL foi elaborado como uma plataforma que concede o máximo de flexibilidade para usuários moldarem, de forma integrada, o
melhor controlador SDN para as suas necessidades. Esse projeto é modular, em consequência disso qualquer usuário no ecossistema pode contribuir
para a evolução do mesmo criando novas ferramentas e utilizando ferramentas dos outros. O OpenDaylight é implementado em Java, logo pode ser
utilizado em qualquer máquina que possui um sistema operacional que o interprete.[1] [9]
A primeira versão foi a Hydrogen, que foi lançada em fevereiro de 2014 e tinha um controlador de código aberto,
juntamente com alguns plugins e ferramentas de virtualização.
O ODL pode ser dividido em três camadas. A camada do topo que consiste de aplicações de rede e serviços.
Posteriormente, se encontra a camada de controle onde as abstrações do SDN podem ser encontradas. Finalizando,
temos a camada camada de interfaces “southbound” e plugins de protocolos de rede.
Essa camada é a camada central da arquitetura do OpenDayLight, viabilizando a abstração de SDN. Tal camada compreende BNSFs,
serviços básicos de rede (do inglês Base Network Service Functions), plataforma de aplicações de rede (do inglês the Platform
Network Service Functions) e SAL, camada de abstração para programação do plano de dados (do inglês Service Abstraction Layer).
Em adição a isso, tal camada exterioriza diversas APIs “Northbound”, APIs que possuem como função servir de meio de comunicação
entre controladores SDN, elementos e aplicações presentes na rede, possibilitando o gerenciamento sobre a rede como um todo.
Os serviços básicos de rede são responsáveis por implementar topologias, coletar informações, gerar estatísticas e orquestrar regras perante a rede.
Dentre os BNSFs inclusos no ODL estão compreendidos monitoramento de topologia, monitoramento de estatísticas, monitoramento de switches,
monitoramento de inventário e localizador de host.[1][9]
A plataforma de aplicações de rede abrange diversos serviços com finalidades específicas para melhorar a funcionalidade do SDN. Dentre eles, possuímos
autenticação, autorização, gerenciador de VTN, políticas baseadas em grupo, serviço de afinidade de metadados, redirecionamento de tráfego, etc.[9]
A camada de abstração para programação do plano de dados, SAL, é o coração do OpenDayLight. Essa camada apresenta um gerenciador de plugins que
permitem a comunicação com diversos protocolos de rede. Em conjunção, a SAL disponibiliza diversos serviços para outros módulos e aplicações da rede,
funcionando como uma ponte entre o produtor e o consumidor de um serviço. A arquitetura dessa camada evoluiu conforme o ODL evoluiu por inteiro;
em busca de uma maior escalabilidade e eficiência, uma arquitetura baseada em modelo foi concebida (Model-Driven SAL, MD-SAL). Esta arquitetura
possibilita múltiplos controladores se emparelharem em um cluster onde cada controlador gerencia uma rede de serviços. O OpenDaylight permite a
conexão entre diversos controladores que possibilitam load balancing da forma Master/Slave. [2][3]
Para melhor compreender o MD-SAL, alguns conceitos precisam ser introduzidos. O RPC se caracteriza por uma conexão requisitada por um consumidor com
um produtor, sendo esse remoto ou local. Uma notificação é configurada quando um consumidor possui a intenção de receber dados de um determinado
produtor. O “Data Store” árvore conceitual de dados, descrita por módulos YANG. Cada serviço em OpenDaylight modela seus dados por meio de um módulo
YANG, linguagem utilizada especificamente para a modelagem de dados das estruturas de dados presentes nas aplicações e serviços de rede. Um caminho
representa uma folha ou sub-folha presentes na árvore conceitual de dados. Finalizando, o “Mount” é uma instância própria do MD-SAL, sendo capaz de
ter uma série de RPCs, notificações e modelos YANG únicos.[2][3]
Seu funcionamento ocorre de modo que as rotas entre consumidores e produtores são traçadas por RPCs. Em seguida, um sistema de notificações é
implementado. Posteriormente, consumidores consomem dados de um Data Store e são provocados mudanças no dados do produtor. Finalizando, é concebido
o gerenciador de “Mounts”, tal possibilita a reutilização de modelos e contextos dentro de uma rede sem a necessidade de redefinir todos os modelos
de um controlador.[3]
A programabilidade do controlador OpenDaylight e sua arquitetura baseada em modelo (MD-SAL) permitem a criação de cadeias de transformação
modelo-a-modelo. Numa situação onde existe um usuário querendo uma aplicação que utilize uma API genérica de Flow Service e dois vendedores com
dispositivos que tenham um suporte diferente à criação de fluxo (um sendo OpenFlow e o outro Access List Programming), graças às características
do OpenDaylight é possível que cada vendedor crie seu plugin (independente do outro vendedor) que adapte o modelo de programação do seu dispositivo
ao modelo genérico de Flow Service. A solução final pode ser integrada pelo usuário.
Protocolos “Southbound” são encarregados de proporcionar uma comunicação segura e eficiente entre o controlador e todos
os elementos presentes na rede, gerenciar tais elementos,
e uma integração com outras tecnologias. [9] O OpenDayLight possui suporte a tais protocolos por meio de diversos plugins.
Tais plugins serão abordados abaixo:
Essa é a camada superior da arquitetura do OpenDaylight, onde encontramos serviços e aplicações que controlam e monitoram
o controlador e as diversas características da rede como um todo, criando regras novas para a rede, utilizando algoritmos de
análise e controlando o tráfego, assim como soluções que utilizam serviços de virtualização.[9]
As aplicações dessa camada
utilizam API’s disponibilizadas pela camada do controlador do ODL. Dentre as diversas aplicações, encontram-se as de proteção
da rede, como a proteção DDoS, as de coleta e transporte de informações entre as camadas, como a SDNi Wrapper, e as que buscam
facilitar a interação do usuário com o controlador, como a DLUX (interface gráfica para o usuário).
Como mencionado na introdução, o OpenDayLight é um projeto de código aberto colaborativo pela fundação Linux. Esse aspecto
no ODL gerou uma particularidade acerca desse controlador: constante evolução em virtude de atingir uma maior eficiência e
programabilidade. Em contrapartida, esse controlador possui um nível de complexidade alto e demanda algum tempo para aprender
a desenvolver aplicações no mesmo. [5]
Atualmente, existem diversos planos para o futuro do OpenDayLight. A maioria dos planos estão focados em infraestrutura
com o intuito de oferecer maior escalabilidade e clusterização. Um deles, por exemplo, é a de utilização de outras linguagens
de programação, como o Python.
Visando aumentar a escalabilidade das SDN, o OpenDaylight foi criado utilizando o Model-Driven SAL baseado em clusterização e datastore distribuídos. Os dados localizados nesses datastore são divididos em fragmentos que podem ser replicados aos outros membros do cluster, possuindo o mesmo valor por questões de consistência. No tratamento de seu datastore, o ODL optou pela utilização do algoritmo de consenso Raft [11][5], que garante uma consistência maior ainda por meio da eleição de um líder dentre os fragmentos de dados distribuídos pelos membros do cluster. Porém, somente o líder pode atualizar os dados e passar adiante aos outros membros; logo, todas as requisições são feitas a ele, causando um elevado uso de CPU e aumentando a latência. Além disso, baseado nos dados científicos coletados no artigo “Load balancing on distributed datastore in opendaylight SDN controller cluster” Taehong Kim, Seong-Gon Choi, Jungho Myung, Chang-Gyu Lim, o primeiro membro do cluster a ser iniciado tem grandes probabilidades de ser o líder. [11]
A escalabilidade do ODL é garantida principalmente por meio da sua clusterização MD-SAL.[5] No caso do ODL, ele permite a utilização de diversas instâncias agindo como um único controlador lógico, com cada uma dessas instâncias comunicando-se com as outras de forma a compartilhar informações e prevenir pontos únicos de falha. A forma de detecção das falhas nos controladores é feita por meio da troca de mensagens chamadas de “heartbeats” de tempos em tempos que indicam o estado do controlador. A clusterização funciona em conjunto com o load-balancing; quando ocorre a detecção na falha do controlador que possui o fragmento de dado líder, o acesso aos dados à partição onde está o líder é proibida até que um novo líder seja eleito, caso ultrapasse um limite de timeout pré-estabelecido, por meio do algoritmo Raft.[2]
1. O que é o OpenDaylight?
2. Quais são as 3 camadas da arquitetura do OpenDaylight?
3. Por que o Service Abstraction Layer é considerado o coração do OpenDaylight?
4. Qual o problema do Load-Balancing no ODL?
5. Como a clusterização e o load-balancing se relacionam no ODL?
1. OpenDaylight (ODL) é um controlador SDN modular cuja finalidade é uma maior customização e automação de arquiteturas de redes.
2. Controle, interfaces “southbound” e plugins de protocolos de rede e aplicações de rede e serviços
3. A camada de abstração para programação do plano de dados, SAL, é o coração do ODL, pois disponibiliza diversos
serviços para outros módulos e aplicações da rede, funcionando como uma ponte entre o produtor e o consumidor de
um serviço.
4. Somente o líder pode atualizar os dados e passar adiante aos outros membros; logo,
todas as requisições são feitas a ele, causando um elevado uso de CPU e aumentando a latência
5. Quando ocorre a detecção na falha do controlador que possui o fragmento de dado líder, o acesso aos dados à partição
onde está o líder é proibida até que um novo líder seja eleito, caso ultrapasse um limite de timeout pré-estabelecido, por meio do
algoritmo Raft.