Estudo de caso · Stack

Como a Plausible construiu uma alternativa enxuta ao Google Analytics

A Plausible é uma ferramenta de análise de sites de código aberto e sem cookies, tocada por um time pequeno e sem investidores na Europa. A base é um monólito em Elixir e Phoenix, com PostgreSQL para os dados do app e ClickHouse para as estatísticas, rodando em servidores na Alemanha.
Copiar stackplausible.io Análise de sites que respeita a privacidade · Estônia · fundada em 2018

A stack da Plausible Analytics

Abrir no montador

Linguagem

  • Elixirserokell.io

    Linguagem principal de todo o back-end, da coleta de eventos ao app web.

    Por quê: Ela lida bem com estado, então as sessões ativas ficam na memória em vez de consultar o banco a cada evento.

  • TypeScriptgithub.com

    Linguagem do código do painel no front-end.

Biblioteca de interface

  • Reactgithub.com

    Faz o painel interativo de estatísticas.

Hospedagem

  • Hetznerplausible.io

    Servidores na Alemanha onde roda o produto na nuvem.

  • Bunnyplausible.io

    CDN, DNS e proteção contra DDoS na frente do app.

Banco de dados

  • PostgreSQLplausible.io

    Guarda contas, sites, configurações e os outros dados do app.

    Por quê: O Täht via o PostgreSQL como a escolha segura por ser maduro e testado em batalha.

  • ClickHouseplausible.io

    Guarda cada visualização e evento e responde às consultas de estatística do painel.

    Por quê: O armazenamento em colunas é bem mais rápido para análise e ainda mantém os dados brutos para qualquer consulta.

Pagamentos

E-mail

  • Postmarkplausible.io

    Envia os e-mails transacionais e os relatórios de estatísticas.

Estilo e kit de interface

  • Tailwind CSSplausible.io

    Cuida do visual do painel e do resto do site.

    Por quê: Passada a curva de aprendizado, o Täht achou que ele entregava telas mais bonitas em menos tempo do que tudo que já tinha testado.

Busca de dados

  • Obangithub.com

    Roda as tarefas em segundo plano dentro do app em Elixir.

Framework de servidor

  • Phoenixgithub.com

    Framework web do app, incluindo as páginas montadas no servidor e o LiveView.

Segurança

  • Friendly Captchaplausible.io

    Barra spam nas telas de cadastro e login.

Modelo de IA

  • Anthropicplausible.io

    Opcionalmente rascunha respostas de suporte e gera as respostas com IA na busca da documentação.

Erros

Chat de suporte

  • Help Scoutplausible.io

    Guarda e organiza as conversas de suporte com clientes.

Como montaram

Um desenvolvedor e a stack preferida dele

O Uku Täht começou a Plausible sozinho em dezembro de 2018 e escolheu ferramentas em que já confiava: Elixir e Phoenix no servidor, PostgreSQL para guardar os dados, Tailwind no visual e páginas montadas no servidor. A ideia era que menos peças deixam um projeto pequeno rápido e simples.

No começo tudo rodava no Heroku, com Sentry para erros, Mailgun para e-mail e Cloudflare na frente. A única dúvida dele era se o Elixir aguentaria muito tráfego, e ele mesmo disse que só saberia testando.

Fontes:plausible.io plausible.io

Quando o PostgreSQL ficou lento: a troca pelo ClickHouse

Cada visualização de página ia para uma única tabela do PostgreSQL, e as contas eram feitas na hora da consulta. Depois do pico de tráfego do começo de 2020, o painel de demonstração chegava a levar mais de 6 segundos para abrir. Para o Täht, o problema era usar um banco organizado por linhas num tipo de consulta que ele não foi feito para responder.

Em vez de pré-calcular os números, o time passou as estatísticas para o ClickHouse, um banco colunar que guarda os eventos brutos e ainda responde rápido a qualquer consulta. Os fundadores contaram depois que o ClickHouse ganhou tanto em desempenho quanto em recursos, e que hoje ele atende clientes com cerca de 150 milhões de visualizações por mês.

Fontes:plausible.io clickhouse.com

O Elixir deu conta, e a hospedagem foi para a Alemanha

Numa entrevista posterior, a Plausible já processava 60 milhões de visualizações por mês em Elixir sem problemas. O Täht destacou o ponto forte da linguagem para guardar estado: as sessões ativas dos visitantes ficam na memória, num GenServer, e o app não precisa consultar o banco a cada evento.

A hospedagem mudou no caminho. O time saiu do Heroku para um servidor na DigitalOcean com Docker, e hoje os dados dos visitantes ficam em servidores da Hetzner na Alemanha, com a Bunny na frente para CDN, DNS e proteção contra DDoS e a UpCloud hospedando banco de dados.

Fontes:serokell.io plausible.io

Código aberto e poucos serviços de fora

O mesmo código roda o produto pago na nuvem e a versão gratuita para hospedar por conta própria, que está no GitHub. O painel é um app em React escrito em TypeScript, e o resto do site fica no Phoenix.

A lista de fornecedores é curta: Paddle para pagamentos, Postmark para e-mails com rastreamento de abertura e de cliques desligado, Help Scout para suporte e Friendly Captcha nas telas de cadastro e login. A Anthropic aparece como ferramenta opcional para rascunhar respostas de suporte e responder perguntas na documentação.

Fontes:github.com plausible.io

Também detectado no site

Achado na página inicial com as regras abertas do Wappalyzer (HTML, scripts e cabeçalhos). Mostra o que roda no navegador, não o backend inteiro.

  • Alpine.js
  • Jekyll
  • Ruby