APIs de alta performance com Fiber

O desempenho é uma preocupação constante para desenvolvedores que trabalham com APIs. Em um mundo cada vez mais exigente, onde a latência pode definir o sucesso ou fracasso de uma aplicação, escolher o framework correto pode fazer toda a diferença.

Embora o package padrão net/http seja conhecido por sua performance e simplicidade, o framework Fiber consegue, em muito cenários, ir além, sendo uma alternativa promissora para construir APIs rápidas e eficientes.

Neste post, exploraremos como o Fiber pode melhorar o desempenho de suas APIs, faremos uma comparação com o go-chi e apresentaremos benchmarks para você tomar a melhor decisão para o seu projeto.

O que é o Fiber?

O Fiber é um framework web para Go, inspirado no popular framework Node.js, o Express. Ele se destaca por sua simplicidade, facilidade de uso e, principalmente, por seu foco em performance.

Abaixo listo as 5 principais características do Fiber.

  • Extremamente Rápido: Construído sobre a biblioteca fasthttp, que é conhecida por ser mais rápida que a biblioteca net/http padrão do Go.
  • API Simples: A API do Fiber é muito semelhante ao Express, tornando fácil para desenvolvedores que vêm do mundo Node.js se adaptarem.
  • Middleware: Oferece uma ampla variedade de middlewares prontos para uso.
  • Flexível: Suporte para roteamento dinâmico, grupos de rotas e várias outras funcionalidades avançadas.

Para finalizar a apresentação do Fiber, fiz uma pequena comparação em relação ao router mais famoso, o go-chi.

AspectoGo Fibergo-chi
DesempenhoMais rápido, devido ao uso do fasthttpUsa o net/http, mais lento que fasthttp
APISemelhante ao ExpressMais próximo do padrão Go
Facilidade de UsoMais simples para iniciantesMais verboso e idiomático em Go
MiddlewaresDiversos middlewares prontosPrecisa de bibliotecas externas para alguns

Hello World com Fiber

Para entender um pouco melhor a simplicidade do framework Fiber, vamos escrever um programa bem simples.

A API abaixo irá retornar a string “Hello, World!” ao receber uma request do tipo GET no path /.

package main

import (
    "github.com/gofiber/fiber/v2"
)

func main() {
    app := fiber.New()

    app.Get("/", HandleFiber)

    app.Listen(":3000")
}

func HandleFiber(c *fiber.Ctx) error {
    return c.SendString("Hello, World!")
}

A fim de comparação, vejamos o mesmo exemplo usando o go-chi.

package main

import (
    "net/http"
    "github.com/go-chi/chi/v5"
)

func main() {
    r := chi.NewRouter()

    r.Get("/", HandleChi)

    http.ListenAndServe(":3000", r)
}

func HandleChi(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello, World!"))
}

Note que, como o Fiber não utiliza o package net/http, a assinatura do método que trata a request é completamente diferente do padrão da linguagem.

Outro ponto importante é o retorno. No caso do go-chi, mais uma vez utilizamos as funções padrões da linguagem, enquanto o Fiber oferece seus próprios métodos para envio da resposta.

Fiber vs go-chi

Agora, para saber se realmente há diferença na questão de performance das duas APIs, vamos comparar o desempenho de ambas usando a ferramenta wrk.

Os testes foram realizados com 12 threads, com 400 conexões, durante 30 segundos.

FIBER

Running 30s test @ <http://localhost:3000>
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.31ms    1.44ms  34.30ms   87.36%
    Req/Sec    29.76k     2.32k   45.38k    71.21%
  10682379 requests in 30.10s, 1.29GB read
Requests/sec: 354898.14
Transfer/sec:     44.00MB

GO-CHI

Running 30s test @ <http://localhost:3000>
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     2.69ms    3.53ms  85.75ms   87.88%
    Req/Sec    18.79k     1.50k   31.44k    73.17%
  6739209 requests in 30.07s, 835.51MB read
Requests/sec: 224139.01
Transfer/sec:     27.79MB

Como podemos ver, a latência média do Fiber deve um desempenho 52% melhor, ficando na casa de 1.31ms, enquanto o go-chi ficou em 2.69ms.

Na questão requests por segundo, o desempenho médio do Fiber foi 58% superior, atendendo uma média de 29.760 requests/seg, enquanto o go-chi atendeu uma média de 18.790.

O que Considerar ao Utilizar Fiber

Embora o Fiber ofereça um desempenho superior, há pontos que precisam ser considerados antes de adotá-lo.

Prós

  • Desempenho Imbatível: Ideal para aplicações que precisam lidar com um alto volume de requisições.
  • Fácil de Usar: API intuitiva e similar ao Express.
  • Grande Comunidade: Vários middlewares disponíveis.

Contras

  • Não segue os padrões do Go: Para desenvolvedores acostumados com o estilo idiomático do Go, a API do Fiber pode parecer menos natural.
  • Overhead de Integração: Por ser baseado em fasthttp, pode ter algumas incompatibilidades com bibliotecas que usam net/http.

Conclusão

Go Fiber é uma excelente escolha para quem busca desempenho extremo em APIs. Com uma API simples e uma performance imbatível, ele pode ser a diferença entre uma aplicação ágil e uma lenta. No entanto, é importante considerar se as necessidades do projeto realmente justificam a escolha.

Gostou do conteúdo?

  • Inscreva-se na nossa newsletter para receber mais dicas práticas sobre Go, Kubernetes e desenvolvimento de software diretamente no seu e-mail!
  • 🚀 Torne-se um assinante pago do blog e tenha acesso a conteúdos exclusivos, como tutoriais avançados, estudos de caso e muito mais!

Faça parte da comunidade!

Receba os melhores conteúdos sobre Go, Kubernetes, arquitetura de software, Cloud e esteja sempre atualizado com as tendências e práticas do mercado.

Livros Recomendados

Abaixo listei alguns dos melhores livros que já li sobre GO.

2 comentários sobre “APIs de alta performance com Fiber

  1. Muito bom! Se puder adicionar diferenças entre fiber e gin também seria interessante!
    Vejo a comunidade bem dividida entre esses dois. No trabalho uso gin e em projetos pessoais também por conta que já tenho conhecimento, mas vejo que a adoção do fiber é alta também!

Deixe uma resposta