Introdução sobre as principais linguagens para orquestração e automação

Visão Geral

As Redes Definidas por Software (SDN) mudaram de forma radical e inovadora, as metodologias e abordagens empregadas para realizar a gestão de uma infraestrutura de redes! Através dela, adotamos uma plataforma de controle centralizada, a qual se torna a responsável por gerenciar toda a infraestrutura de rede, dispensando assim a metodologia tradicional de realizar ajustes e configurações individuais para os equipamentos que fazem parte dela.

Em redes SDN, o software ganhou uma importância vital, por estabelecer toda a interação necessária para acessar o controlador, um novo dispositivo que se tornou o “cérebro” da rede e terá a missão de prover um plano de controle centralizado, para definir as ações a serem tomadas pelos demais dispositivos de redes (switches, roteadores, access-points, etc). Já estes últimos, se tornam meros coadjuvantes por se limitar a receber as instruções dadas pelos controladores, além de encaminhar o tráfego baseado nelas.

Por se tratar de soluções voltadas para o uso de softwares, as linguagens de programação, acompanhadas de suas APIs, bibliotecas e SDKs (bem como a adoção de novos padrões e protocolos de redes), ganham uma atenção especial por prover todos os recursos necessários, para realizar a automação e orquestração da rede e seus elementos. Em destaque, o Shell Script, o Python e a Ruby.

Por isto, teremos um artigo especialmente dedicado para eles… 😉

As principais linguagens

Shell Script

Eis, a realidade: o Linux se tornou um dos grandes pilares para as infraestrutura de redes baseadas em SDN, graças a sua natureza aberta, neutra e universal, além da sua flexibilidade, disponibilidade e baixo custo. Por isto, muitas das ferramentas e serviços integrados a este sistema se tornaram essenciais para a gestão e a utilização dos dispositivos de redes, os quais geralmente utilizam alguma versão do sistema para inicializar e executar as suas funções. Servidores, controladores, roteadores, switches, access-points, firewalls e proxies, são alguns exemplos de equipamentos que “rodam” o Linux!

O Bash (Bourne Again Shell) é o interpretador oficial da grande maioria dos sistemas baseados GNU/Linux, além de oferecer suporte para a criação de scripts (.sh), que por sua vez são bastante utilizados para realizar a automação de tarefas. Em conjunto com o SSH (Secure Shell), podemos nos conectar remotamente aos equipamentos gerenciados e a partir deles, executar os scripts via linha de comandos. De forma alternativa, também podemos realizar o agendador de tarefas para agendar a execução destes scripts, bem como estabelecer a sua execução em segundo plano como serviço ou ainda, inicializá-lo após o carregamento do sistema operacional.

Por estar íntimamente relacionado ao Linux, o Shell Script é uma ferramenta poderosa para automatizar tarefas & rotinas que fazem o uso de comandos administrativos do sistema para a sua gestão, facilitando bastante a vida do administrador quanto a operações como a extração de informações relacionadas ao seu estado, o backups & restaurações e as atualizações de segurança. Podemos até mesmo criar algumas pequenas aplicações, para atender a propósitos bem específicos! Já para tarefas maiores, uma linguagem de programação mais completa e sofisticada se faz necessária…

Para este último caso, temos o Python e a Ruby.

Python

Criada por Guido Van Rossum, Python é uma linguagem de programação interpretada que se tornou bastante querida e admirada pelas comunidades de desenvolvedores ao redor do mundo, graças a sua elegância, facilidade de aprendizado e limpeza de código, além de ser “divertida” (segundo o seu criador). Ela também conta com muitas bibliotecas & APIs para a criação de programas para propósitos diversos, os quais vão desde simples scripts a aplicações sofisticadas. Por ser uma linguagem de alto nível, Python suporta metodologias e técnicas modernas de codificação, além de prover um bom suporte para a programação orientada a objetos.

Dada as suas características e particularidades, Python se tornou a principal linguagem de programação para as Redes Definidas por Software (SDN). Em geral, os administradores de redes & sistemas não são profissionais especializados em desenvolvimento de software (programadores “por natureza”) e por isto, necessitam escrever códigos e rotinas para prover a automatização e a orquestração da infraestrutura, tornando essencial conhecer uma linguagem apta para este propósito! Além do Python atender a estes requisitos, a sua facilidade de entendimento, estrutura de código limpa e a sua sintaxe clara em sem ambiguidades, a tornam ideal para esta finalidade.

Por ser também uma linguagem popular e bem suportada, Python possui um grande número de bibliotecas e frameworks, das quais algumas são voltadas para atividades relacionadas a orquestração e automação em redes SDN. Em destaque a RYU, a qual fornece componentes de software com uma API bem definida, facilitando a vida dos desenvolvedores na criação de novas aplicações para o gerenciamento e controle de redes, suportando vários protocolos voltados para a automação e a orquestração, como o OpenFlow e o Netconf, entre outros. Outro framework que também tem recebido uma certa atenção é o POX, o qual possibilita a interação com switches SDN através do protocolo OpenFlow.

Sem contar ainda, as APIs & frameworks proprietárias…

Ruby

Embora não seja tão popular quanto Python, Ruby se tornou outra linguagem de programação bastante útil em processos de automação e orquestração das redes definidas por software (SDN). Criada por Yukihiro Matsumoto (Matz) na metade dos anos 90, ela se destaca por suportar vários paradigmas (procedural, orientação a objetos e funcional), além de ser designada com ênfase na produtividade e simplicidade. Segundo Matz, a linguagem foi bastante influenciada por outras como Perl, Smalltalk, Eiffel, Ada, BASIC e Lisp, embora se diferencie bastante de Python em relação ao design.

Ruby se destaca principalmente pelo fato de que algumas importantes plataformas designadas para a orquestração – como Puppet e Chef – são baseadas nesta linguagem, tornando-a um requisito para utilizar muitos recursos oferecidos por elas. Isto se dá pelo fato de que ambas utilizam uma linguagem declarativa baseadas nela (Ruby DSL), designada para definir os atributos dos dispositivos da infraestrutura que desejamos orquestrar. Já Ansible e Saltstack, estas foram escritas em Python e utilizam a linguagem de marcação YAML, que por sua vez é bastante popular e amplamente suportada.

Tal como Python, Ruby também possui um excelente conjunto de bibliotecas e frameworks, os quais podem ser administrados através do gerenciador de pacotes RubyGems. No entanto, por não ser tão popular quanto Python neste quesito, são poucas as iniciativas (que eu saiba) voltadas para redes SDN. Uma simples pesquisa no site oficial da ferramenta exibiu algumas entradas referentes aos projetos voltados para a SDN, mas nada de grande destaque ou relevância que mereça ser mencionado.

Conclusão

De tempos em tempos, vivemos grandes transformações em várias áreas e segmentos do mercado de Tecnologia da Informação! E a infraestrutura de redes se tornou uma delas, graças a uma série de fatores que tornaram possível, as Redes Definidas por Software. Em um futuro não muito distante, os dispositivos de redes, os sistemas operacionais e seus serviços de redes, além dos demais recursos que a compõem, serão gerenciados e administrados de forma unificada sob uma única interface, simplificando bastante a vida dos administradores de redes. Mas para isto, novas competências e habilidades serão necessárias para estas classes de profissionais.

Por isto, aprender a programar se tornou fundamental! &;-D