Skip to content
José Flauzino edited this page Sep 29, 2018 · 59 revisions

O Artigo

Em ambientes que necessitam continuamente efetuar transferências de grandes volumes de dados em altas taxas de transferência, como ocorre em data centers, é fundamental o uso de redes de alta capacidade que suportem a carga de trabalho exigida. Ao projetar redes desse tipo, diversos desafios são enfrentados. O artigo intitulado "Jellyfish: Networking Data Centers Randomly"[1], publicado no USENIX NSDI'12, trata a respeito de um problema crucial, a expanssão incremental da rede. Em redes que possuem essa característica é possível adicionar servidores e capacidade de rede (novas midleboxes, links, etc.) de forma incremental a medida que as demandas surgem, por exemplo, novos usuários ou aplicações.

No momento da publicação desse artigo (em 2012), já haviam diversas pesquisas que exploravam estruturas especiais para topologias e roteamento em redes de data centers como, por exemplo, a Fat-Tree. No entanto, nenhuma das soluções abordavam o problema de expanssão incremental.

Embora a topologia Fat-Tree permita um certo nível de expanssão, para adicionar servidores é preciso substituir um grande número de elementos da rede e uma realizar extensiva configuração, o que pode tornar seu uso inviável ou pelo menos muito custoso (tanto em termos financeiros quanto operacional) em determinados casos.

A solução proposta pelos autores, denominada Jellyfish, é um novo método de interconexão de rede que adota uma topologia de grafo aleatório e possibilita naturalmente a expanssão incremental. No caso mais básico apresentado no trabalho, a rede possui switches com a mesma quantidade de portas e servidores, se tornando assim um grafo regular aleatório.

Todavia, ao empregar uma nova topologia, novos desafios podem surgir como o roteamento e o controle de congestionamento. Isso porque, parte da proposta é que a topologia ofereça uma grande diversidade de caminhos para os nós se conectarem. Essa característica torna a Jellyfish uma rede de alta capacidade, pois o objetivo é que os dados fluam de forma balanceada por diferentes caminhos, utilizando a capacidade total da rede (evitando o desperdício de recurso). Sendo assim, é preciso que o protocolo de roteamento seja capaz de identificar a maior quantidade possível de caminhos (usando o maior número de links, sem deixar links inutilizáveis) para que o protocolo de controle de congestinamento tenha uma variedade de caminhos disponíveis para encaminhar o tráfego de forma balanceada.

Ok (tentar melhorar) - Que problema a Jellyfish estava tentando resolver? Ok (tentar melhorar) - Qual era o estado da arte no momento em que o artigo foi publicado?

Experimentos do artigo

No intuito de apresentar algumas propriedades da Jellyfish, bem como comprovar alguns avanços providos pela mesma, são realizados diversos experimentos, muitos deles comparando a Jellyfish com a topologia Fat-Tree.

(falar mais sobre os experimentos)

Dois experimentos foram reproduzidos neste repositório, sendo eles a Figura 9 e a Tabela 1. Ambos estão relacionados à capacidade da topologia.

A Figura 9 apresenta o comportamento de alguns protocolos de roteamento rodando em uma topologia Jellyfish. Os protocolos utilizados são o k-shortest-path com k=8 e o ECMP de 8 vias e até mesmo de 64. Com os resultados apresentados por essa figura é possível observar que o ECMP (com 8 ou 64 vias) não fornece uma diversidade interessante de caminhos em uma Jellyfish para que a maior capacidade possível da rede seja utilizada. De forma oposta, o k-shortest-path se mostrou ideal para a Jellyfish, já que aproveita melhor os links disponíveis.

Já a Tabela 1 faz um comparativo do funcionamento de protocolos de controle de congestionamento sendo implementados tanto em uma topologia Jellyfish quanto em uma Fat-Tree. Os protocolos comparados foram o TCP com 1 e 8 fluxos e o MPTCP com 8 subfluxos.

Reproduzindo experimentos

Figura 9

Detalhes da implementação

Por motivos de simplicidade e compatibilidade com o Mininet, python foi a linguagem de programação escolhida para implementação.

Já que a Jellyfish pode ser representada como um grafo regular aleatório, foi usada uma biblioteca python denominada networkx, pois a mesma possibilita elaborar uma diversidade de grafos de forma trivial, além de prover muitas funções, como por exemplo, busca de menor caminho.

A abordagem para executar o experimento foi construir a Jellyfish como um grafo regular aleatório a partir de parâmetros passados por linha de comando a respeito das características da rede, como número de switches, conexões entre os switches e de quantidade de hosts.

Com o grafo gerado, foi obtido uma lista de adjacência dos nós e em seguida feito a contagem de caminhos com um algoritmo do ECMP e com k-shortest-path.

Finalmente, a Figura 9 foi gerada usando outra biblioteca python chamada matplotlib.

Um último, que pode ser considerado adicional (já que não faz parte do experimento da Figura 9) passo foi criar as tabelas de roteamento tanto do ECMP quanto do k-shortest-path. Essas tabelas seram utilizadas no próximo experimento.

  • Destaque as vantagens da sua abordagem

Veja no README como executar o experimento.

Resultados obtidos

Os resultados apresentados na Figura 9 dependem de três fatores:

- Número de switches
- Número de conexões entre switches
- Quantidade de hosts

Como os autores não mencionam exatamente os valores utilizados, uma bateria de testes foi realizada em busca de um resultado mais próximo possível do original, com o objetivo de tentar comprovar (ao menos visualmente) o comportamento da Jellyfish apresentado no artigo.

A figura a seguir apresenta o resultado mais aproximado obtido, usando 231 swicthes, com 12 interconexões cada, e 686 hosts.

Reprodução da Figura 9

Essa reprodução reafirma que o ECMP não gera uma diversidade suficiente para a Jellyfish, sendo uma melhor opção o k-shortest-path.

Foi observado que variando esses fatores as linhas gráfico se altera, porém o comportamento se mantém similar.

OK (tentar melhorar)- Qual o resultado que você conseguiu? Correspondeu ao papel original?

  • Você estendeu o experimento de alguma forma?

Tabela 1

Congestion Control Fat-Tree ECMP Jellyfish ECMP Jellyfish 8-shortest paths
TCP 1 flow 48.0% 57.9% 48.3%
TCP 8 flows 92.2% 73.9% 92.3%
MPTCP 8 subflows 93.6% 76.4% 95.1%

Reprodução da Tabela 1

Veja no README como executar o experimento.

Desafios encontrados

Referências

[1] Ankit Singla, Chi-Yao Hong, Lucian Popa, and P. Brighten Godfrey. 2011. Jellyfish: networking data centers, randomly. In Proceedings of the 3rd USENIX conference on Hot topics in cloud computing (HotCloud'11). USENIX Association, Berkeley, CA, USA, 12-12.

Clone this wiki locally