Como o Slack saiu de um app em PHP e virou uma plataforma em células na AWS
O Slack é um app de mensagens para o trabalho, usado por times de todo tamanho. O backend é um monólito em Hack no HHVM com servidores de tempo real em Java, MySQL escalado com Vitess e uma plataforma de Kubernetes na AWS, e o app de desktop é React e TypeScript dentro do Electron.
Copiar stackslack.com Mensagens e colaboração para equipes · Estados Unidos · fundada em 2009
Coloca o Google Cloud como segunda plataforma de LLMs da Slack AI.
Por quê: Traz redundância e um catálogo maior de modelos.
Como montaram
Do PHP para o Hack
O Slack estreou em 2014 em PHP 5. Em 2016 foi para o HHVM porque ele rodava o código PHP mais rápido, e depois adotou o Hack, que acrescenta tipagem estática. O modo parcial do Hack permitiu tipar arquivo por arquivo, deixando as refatorações mais seguras sem reescrever tudo de uma vez.
Quando o HHVM 4.0 deixou de aceitar PHP, o Slack tirou todo o PHP que restava. O preço foi perder acesso à maior parte dos pacotes do ecossistema PHP.
Desde o começo o Slack guardou os dados em MySQL, fatiado por workspace, com o monólito decidindo para onde ia cada consulta. Com mais clientes e recursos, esse modelo gerou pontos de sobrecarga, quedas de shards inteiros e um modelo de dados engessado.
Em 2017 o Slack começou a migrar para o Vitess, que coloca fatiamento flexível, failover automático e backups em cima do MySQL. No fim de 2020 o Vitess já atendia 99% do tráfego de MySQL do Slack, cerca de 2,3 milhões de consultas por segundo no pico.
O app de desktop do Slack rodava cada workspace logado num processo próprio do Electron, feito com jQuery da época de 2012 e templates HTML atualizados na mão. A memória crescia a cada workspace, e os workspaces grandes baixavam dados demais logo de cara.
A reescrita de 2019 exigiu que todo componente de interface fosse feito em React, deu a cada workspace sua própria store do Redux dentro de um único processo do Electron e reduziu bastante o uso de memória. O código do desktop já tinha ido para TypeScript em 2017, para garantir que as várias partes se encaixassem.
A fila de jobs do Slack rodava no Redis até que uma lentidão no banco encheu a memória do Redis e derrubou o serviço. Em 2017 colocaram o Kafka na frente do Redis como um buffer durável, com dois serviços pequenos em Go levando os jobs de um lado para o outro.
Depois de um incidente em 2021 em que uma zona de disponibilidade da AWS degradou, o Slack passou cerca de um ano e meio transformando os serviços críticos em células, uma por zona, para tirar o tráfego de uma zona ruim sem erro para o usuário. Os serviços rodam no Bedrock, uma plataforma interna de Kubernetes que reduz a configuração de cada serviço de centenas de linhas para dezenas.
A Slack AI estreou em 2023 no SageMaker da AWS, escolhido pela segurança, pela conformidade com o FedRAMP e pelo controle dos modelos, com os LLMs rodando numa VPC de custódia para o fornecedor do modelo nunca ver os dados dos clientes.
Os modelos novos sempre chegavam antes ao Amazon Bedrock, então em meados de 2024 o Slack foi para lá para ter acesso imediato. No início de 2026 entrou também o Vertex AI do Google Cloud, por redundância e por um catálogo maior de modelos.