• Nenhum resultado encontrado

para milhões. Francisco Gleicon

N/A
N/A
Protected

Academic year: 2021

Share "para milhões. Francisco Gleicon"

Copied!
29
0
0

Texto

(1)

E-mail para milhões

Francisco Freire @ffreire Gleicon Moraes @gleicon

(2)

Construir um sistema de e-mails escalável para milhões de acessos/ usuários.

(3)
(4)

Como era: Recebimento

• 

QMAIL;

• 

Apenas 1 filtro (Externo);

• 

MX sem fila local;

• 

MX sem fila fallback;

• 

Erros de backend repassados para fora;

• 

Sem limites;

• 

Balanceamento por LVS;

• 

Servidores consultando DB sem cache;

• 

MTA sem alta disponibilidade;

• 

MTA sempre com filas de entrega;

MX (Qmail) QMQP MTA (Qmail) Entrada SMTP DB Storage NFS MySQL

(5)

Como era: Leitura

• 

QMAIL;

• 

Usuário acessa diretamente o backend;

• 

Sem Limitações;

• 

Acesso a banco sem cache;

• 

Falta de logs completos;

• 

Balanceamento por LVS;

• 

Sem SSL;

• 

Bugs e mais bugs;

• 

2 tipos de imap rodando;

o  Dovecot (143) o  Courier (144) Backend (Qmail / Dovecot / Courier) Usuário Pop3 / Imap DB Storage NFS MySQL

(6)

Como era: Webmail

• 

PERL;

• 

CGI;

• 

NFS; Webmail Usuário HTTP DB Storage NFS MySQL

(7)
(8)

Teoria

• 

POSTFIX;

• 

Diminuir a entrada de lixo;

• 

Não voltar erros para fora;

• 

Melhorar tracking de problemas;

• 

Alterações mínimas da estrutura;

• 

Diminuir carga no banco com

CDB;

• 

Implementação da fallback;

• 

Implementação de limitações;

Prática

• 

POSTFIX;

• 

Implementação rápida;

• 

Redução bruta da entrada de lixo;

• 

Problemas para entrega via

QMQP;

• 

Demanda reprimida;

• 

Sobrecarga nos backends;

• 

10x consumo de banda

• 

Problemas com DNS

(9)

MX (Postfix) QMQP MTA (Qmail) SMTP DB Storage NFS MySQL

Recebimento (MX)

Entrada CDB Fallback (Postfix) Cache

(10)

Recebimento (MX)

●  Muito cuidado com capacity, picos de recebimento, podem e irão acontecer.

●  Fila fallback recebe o excedente.

(11)

Teoria

• 

Acessar via IMAP;

• 

Utilizar PHP;

• 

Roundcube;

• 

Mod_php;

• 

Slaves de banco locais;

• 

Pool único;

• 

Independente de backend;

Prática

• 

Sobrecarga nos backends;

• 

Adaptação de usuários;

• 

Adaptação de capacity;

• 

Mudança cultural;

• 

Primeiros problemas globais;

(12)

Webmail

• 

Ganho de latência com database local;

• 

Ganho de eficiência com mod_php;

• 

Ganho de eficiência com acesso via IMAP;

Webmail Usuário HTTP / HTTPS DB Storage NFS MySQL Backend (Qmail / Dovecot / Courier) IMAP DB MySQL (local) Replication

(13)

Teoria

• 

Adicionar camada global;

• 

Evitar acesso direto ao backend;

• 

Fail2ban / Limites;

• 

Padronização;

• 

Dovecot apenas;

• 

Cache no acesso ao banco;

• 

Melhor balanceamento;

• 

SSL;

Prática

• 

Novos problemas globais;

• 

Adaptação de capacity;

• 

Aprendizado;

• 

Melhor utilização do banco;

• 

Maior estabilidade;

• 

Melhor administração;

• 

SSL;

(14)

Leitura (Proxy)

Backend (Qmail / Dovecot / Courier) Usuário Pop3(s) / Imap(s) DB Storage NFS MySQL Frontend (Proxy) Cache Pop3 / Imap

(15)

Teoria

• 

Dovecot;

• 

Cache;

• 

Suporte ao mesmo formato

(maildir);

• 

Novos mailboxes = mdbox;

• 

Lmtp;

• 

Alta disponibilidade + director;

Prática

• 

Melhora considerável na

estabilidade;

• 

Migração dolorida (+cache);

• 

Melhor uso de storage;

• 

Maior disponibilidade;

• 

Menos filas;

(16)

Novo ambiente

Backend (Dovecot) Storage NFS Recebimento Pop3 / Imap Webmail Imap Leitura Backend (Qmail / Dovecot / Courier) Storage NFS Recebimento Qmqp Webmail Leitura Lmtp

(17)

Acesso ao banco

Master Slave Cache Webmail Frontend Backend

(18)

• 

FreeBSD

• 

Sem backup;

• 

Sem HA;

• 

Pouco espaço;

• 

UFS + async;

• 

Único dataset;

• 

Arquivamento manual

com link simbólico;

Evolução de Storage (V1)

Produção 2TB /home{%d}/{%login} Archive 2TB /home{%d}/{%login} mv + ln -s

(19)

• 

OpenIndiana

• 

ZFS;

• 

Backup cruzado;

• 

Sem HA;

• 

Snapshot;

• 

8 datasets;

• 

Sem arquivamento;

• 

ZFS send;

Evolução de Storage (V2)

Produção 7TB /storage/{%h}/{%h}/{%login}

(20)

• 

Isilon;

• 

Backup cruzado;

• 

HA;

• 

Tiering;

• 

Snapshot;

• 

OneFS;

• 

1 dataset;

• 

Sem arquivamento;

Evolução de Storage (V3)

Produção +PB /storage/{%h}/{%h}/{%login}

(21)

• 

Red Hat AS 3 -> Debian squeeze (Wheezy)

• 

Qmail -> Postfix / Dovecot

• 

LVS nat -> LVS DR / F5 / Haproxy

• 

MySQL 4x -> Percona 5x

• 

Master/Slave -> Master/Slave/Cluster

• 

Provisionamento via raid -> Closed-loop / Cfengine

• 

Vdeliver -> Sieve

• 

Diversas linguagens -> Python

• 

Servidor de logs

• 

Métricas (+leela)

(22)

Sem eles não seria possível...

Mailfromd (http://puszcza.gnu.org.ua/software/mailfromd/)

Postfix milter rápido e escalável o suficiente para aplicarmos regras de negócio como por exemplo: Análise de headers e conteúdo de mensagens.

Redis (http://redis.io/)

Key/Value database extremamente rápido, usamos e abusamos de "sorted sets". Todos os nossos contadores e muita informação de cache está nele. Único contra é usar apenas 1 core da máquina.

Twenproxy (Nutcracker) (https://github.com/twitter/twemproxy)

Proxy para redis/memcache. Com ele resolvemos o problema do redis usar apenas 1 core da máquina e utilizando shard conseguimos escalar o ambiente conforme necessidade.

Haproxy (http://haproxy.1wt.eu/)

De longe, o melhor proxy tcp que encontramos, utilizamos nele tanto o balanceamento de banco de dados quanto HTTP.

Python (https://www.python.org/)

Linguagem de programação que adotamos, fácil aprendizado e conseguimos utilizá-lo em diversos items da estrutura, policy, scripts, dashboard (django) e mais.

(23)

Estrutura:

Servidores (Físicos e Virtuais): 595 Storage utilizado: 2.5PB Domínios: 450K Mailboxes: 6M Destinations: 10M+

Números (10/04/2014)

MX:

Mensagens recebidas: 160MMensagens recebidas (facebook): 7M

Conexões barradas: 450M Spam detectados: 54M

Frontend:

Total de autenticações: 260M

Média de usuários ativos (imap): 200k Média de usuários ativos (pop3): 20k

Webmail:

(24)
(25)

Relatórios de performance

• 

Estatísticas por cluster;

• 

Detecção de problemas;

(26)

• 

~ 1MM mailboxes/sysadmin

• 

Sysadmins programando em Python e Go

• 

Ciclos rápidos de correção de elementos da arquitetura

• 

Rápida adaptação a outras plataformas e OSs

• 

Sysadmins originais -> Gerentes e lideres técnicos

• 

Logs e métricas em todo lugar

(27)

Antes

"Há 5 anos atrás, até 15 minutos não era considerado atraso"

"Possuímos pessoas especializadas em olhar filas"

"Não era possível uma análise mais completa por falta de logs" "Tinhamos o equivalente a pelo menos 1 crise por dia"

"Estrema demora para o provisionamento de um novo servidor"

(28)

Hoje

"Se o email não chega em 5 minutos temos clientes reclamando" "Fila hoje possui a prioridade máxima de incidentes"

"Temos logs de tudo e os guardamos para sempre"

"Temos crises esporádias, com visibilidade a rápida atuação" "Simples provisionamento de novos servidores"

(29)

Referências

Documentos relacionados

O feito de que a Constitución declarase o Estado como unha monarquía constitucional deu a posibilidade de presentar un candidato carlista ó trono despois da

Muito tem se discutido e pouco tem sido realizado no tema referente à reforma da universidade para melhor adaptá-la à nossas necessidades sociais e ao quanto

personalidade jurídica atinge ​todo o patrimônio do sujeito contra o qual for aplicada, conforme art. 789 do CPC/2015, com exceção dos bens impenhoráveis, como os bens

Caso em até uma (1) hora o campo não disponha de médico para atendimento, caberá ao árbitro decidir pela interrupção da partida nos termos deste Regulamento..

Ainda, estudarei como o regime jurídico dos estudos de viabilidade é desenhado em modelos internacionais selecionados, com foco na legislação europeia e de países como a Itália

Juros e ganhos de capital tributados na fonte a Juros e ganhos de capital tributados na fonte a 15% (menor alíquota aplicada rendas

O candidato estrangeiro poderá inscrever-se no concurso público com passaporte, entretanto, por ocasião da contratação deverá apresentar a cédula de identidade

9Colônia do Sacramento (1678) – atual Uruguai.. 9Princípio do “Uti Possidetis” 97 Povos das Missões