Usar o ScyllaDB antes do produtor é um antipadrão. Como organizar corretamente a deduplicação?
Golang
Por que precisamos armazenar dados brutos no armazenamento S3? É correto usar TTL de 5 minutos no Redis, ou é melhor armazenar por mais tempo — 24 horas, e usar ScyllaDB como fonte de verificação de dados?
Suponhamos que somos uma grande rede de publicidade. Colocamos banners em sites parceiros em todo o mundo. Precisamos projetar um sistema de coleta e processamento de eventos em tempo real. Esses dados são críticos para dois propósitos: Faturação: Deduzir dinheiro dos anunciantes por cliques. Analítica: Exibir a eficácia atual das campanhas (CTR, impressões) no painel de controlo. Dados de entrada (para calcular a carga) Deve avaliar por si mesmo as capacidades necessárias (RPS, tráfego, armazenamento), com base nas seguintes métricas: Rede de parceiros: 500.000 sites ativos. Tráfego: Em média, cada site recebe 2 visualizações de página por segundo. Blocos publicitários: Em cada página, são exibidos 3 banners simultaneamente. Conversão: A taxa média de cliques (CTR) é de 1%. Irregularidade: A carga de pico (horas da noite) é 4 vezes maior que a média. Tamanho do evento: O objeto do evento (ID do banner, ID do site, UserID, Timestamp, tipo de evento) pesa aproximadamente 500 bytes. Requisitos técnicos Quase em tempo real: Os dados na interface analítica devem aparecer com um atraso não superior a 10 segundos. Confiabilidade: A perda de cliques não é aceitável (isto implica perda de dinheiro). A perda de impressões é aceitável até 0,01%. Escalabilidade: O sistema deve poder ser facilmente expandido com o crescimento do número de plataformas.