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.
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.
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.
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.
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.