Por: @felipefc
Publicado em: 2019-05-08
Motor SD-WAN
Durante a última sprint foi realizado um estudo para o planejamento e prototipagem do motor SD-WAN. Resumindo de forma bem básica, o módulo SD-WAN terá como algumas de suas funcionalidades o monitoramento e trocas de links de internet do servidor. O spike realizado teve como enfoque descrever as bases da coleta e avaliação dos pings.
No debate de ideias para a montagem do motor foi identificada a necessidade de separar os serviços de coleta e avaliação dos pings. Além de evitar que ambos serviços parem se ocorrer um problema em um deles, o principal fator da separação surgiu da pergunta: “Onde iremos armazenar os resultados dos pings?”.
O armazenamento em um arquivo ou em um banco de dados certamente não seria ágil o suficiente para o que precisávamos. Logo, surgiu a ideia de utilizar o Prometheuspara salvar os dados e ser o elo entre os dois serviços. Por fim, o motor SD-WAN foi arquitetado da seguinte forma:
Enquanto os serviços de Coleta e Avaliação rodam separadamente, eles possuem seus próprios inputs, processamento e outputs. O passo inicial para ambos é ler as configurações da SLA que estarão provisionadas no servidor. As configurações estarão em uma estrutura de Configparser semelhante ao exemplo abaixo:
[general]
version = "jW1EioEwi924502ab"
test_interval = 10
test_timeout = 500
manual_failback = false
failback_limiter = 1000
test_hosts_logic = "or"
test_hosts = ["8.8.8.8", "www.google.com"]
[packet_loss]
enabled = yes
fail_time = 90
valid_time = 180
type = "percentage"
count = no
percentage = 90
[latency]
enabled = yes
fail_time = 90
valid_time = 180
threshold = 400
type = "count"
count = 10
percentage = no
[jitter]
enabled = yes
fail_time = 90
valid_time = 180
threshold = 1000
type = "count"
count = 5
percentage = no
[policy_routing:policy01]
connection = "wan-opt"
iface = NULL
test_hosts = []
[policy_routing:policy02]
connection = null
iface = "eth0"
test_hosts = ["200.121.25.100"]
Coleta de pings
O serviço de coleta, após ler a configuração da SLA, irá executar seu ciclo de coleta dos pings com base no time_interval
determinado. Após executar um ping, os resultados de latência e jitter serão enviados como métricas ao Prometheus, via HTTP.
Avaliação do link
O serviço de avaliação também irá ler o arquivo de configuração da SLA. Além disso, antes de iniciar o processamento, serão realizadas as consultas no Prometheus para obter os valores das métricas de latência e jitter.
Com as configurações e as métricas obtidas, o serviço irá avaliar o status das políticas de roteamento, com base nos pârametros da SLA. Após identificado se o status está como “falha” ou “ok”, este resultado será salvo em um arquivo exemplificado abaixo:
em /var/lib/itflex/firewall/sdwan/<sla_name>.status
:
[general]
version = "jW1EioEwi924502ab"
[policy_routing:policy01]
status = "ok"
last_change = "2019-05-10T13:52:10Z"
[policy_routing:policy02]
status = "fail"
last_change = "2019-05-10T11:44:02Z"
Desempenho
Ao término do desenvolvimento do motor SD-WAN, tanto o serviço de coleta, quanto o serviço de avaliação terão implementações pensando no desempenho. Se formos imaginar que existem 3 SLAs cadastradas, 3 políticas de roteamento e para uma delas 3 hosts de teste e considerando que o cliente configurou o test_interval
de 1 em 1 segundo, a quantidade de pings executados em um único chegaria a mais de 2 milhões.
Dessa forma, em cada um dos serviços serão analisadas as regiões críticas do processamento e aplicadas as soluções convienentes. Alguns exemplos das possíveis soluções a serem aplicas envolvem paralelização e/ou microthreads.