escalabilidade via software no expressov3

47
Líder em soluções de TI para governo Escalabilidade via Software no Expresso V3 Palestrante: Flávio Gomes da Silva Lisboa

Upload: flavio-lisboa

Post on 26-May-2015

347 views

Category:

Technology


0 download

DESCRIPTION

ExpressoV3 é uma suíte de comunicação escrita em PHP e Javascript que disponibiliza catálogo de endereços, e-mail, calendário, tarefas, webconferência e mensageria instantânea. Nesta palestra são apresentadas as mudanças no projeto para atendimento em escala de um milhão de usuários.

TRANSCRIPT

Líder em soluções de TI para governo

Escalabilidade via Software no Expresso V3

Palestrante: Flávio Gomes da Silva Lisboa

Quem sou eu?

Argentina e Uruguai

O que é o Tine 2.0?

É uma suíte de comunicação e colaboração e um CRM.

Possui módulos de Recursos Humanos, Inventário, Vendas, Cursos, Projetos, Rastreabilidade de Tempo de Atendimento e VOIP.

Arquitetura do Software

Arquitetura do Software

Arquitetura do Software

Cooperação

Cassiano

Bruno

Funchal

RommelLagesMárioCarlosLavoisier

Antonio

Cooperação

Cooperação

Desafio Sustentar um milhão... de usuários

Quantidade de Usuários

Desafio Atender mais usuários sem degradar a performance

RestriçãoBanco de dados relacional não escalável no ambiente considerado

RestriçãoNão impedir mudanças de backend no futuro

Solução Filme de Terror

Mudanças de Arquitetura

1) Separar domínios2) Dividir o banco de dados

Multidomínio

● Implementação para distribuir carga de serviços entre domínios.● O domínio, neste caso, refere-se à conta de e-mail do usuário.● Existe uma única instância de aplicação para vários clientes, cada um com seus serviços.

Configuration

Arquitetura de Multidomínio

Backend

Frontend

SingleApplication

Domain 1

DB LDAP IMAP SMTP

Domain n

DB LDAP IMAP SMTP

Domain 2

DB LDAP IMAP SMTP

Mudança na Estrutura de Pastas

Impactos do Multidomínio

1)Não é mais realizada nenhuma consulta ao banco de dados para o carregamento da página de login.

2)Todas as consultas a banco de dados para recuperação de dados de configuração foram substituídas por consultas ao arquivo config.inc.php (do domínio em uso). Para a recuperação de dados de configuração eram feitas duas consultas para cada item de configuração, uma para a tabela applications e outra para a tabela config.

3)Foi eliminada a dupla tentativa de autenticação via LDAP. Se não autenticar, lança exceção.

Tamanho da Mudança

Depois do Multidomínio...

… vem o Sharding!

O que é Shard?

● Linhas de uma tabela distribuídas em dois ou mais BDs;● Tabelas ficam com menos registros;● Distribuição da carga entre vários SGBDs;● Consultas paralelas;● Consultas com JOINS entre BDs podem ser ineficientes;

Sharding é Tetris, mas ao contrário

I HATE JOINS!

Premissas do Projeto:

a) Usar shard é opcional:Ambientes pequenos não necessitam da complexidade do shard;A ausência de shard será o caso particular de uso de um único shard.Dados globais serão replicados para cada shard.

b) Serão utilizados virtual shardsVirtual shards usarão tabelas de mapeamento.

c) Granularidade a nível de usuário/domínio:A chave do shard deve ser por usuário/domínio;

d) Domínio geograficamente distribuído:A infraestrutura de um domínio pode estar distribuída em várias regiões geográficas, interligadas via redes WAN;

Premissas do Projeto:

e) Implementar inicialmente shard apenas para BD:

f) Não criar obstáculos para mudanças de backends:Deve ser abstrato para não gerar obstáculos que impeçam sua extensão para operar com Sistemas de Arquivos, IMAP, LDAP, etc...

g) Minimizar o uso de JOINS entre shards:Essa é uma operação que pode ser muito custosa. Deve ser evitada;

h) Não criar um fork da comunidade:

i) Os convidados de eventos de calendário são sempre tratados como externos.

Admin

Addressbook

Setup

Tinebase

ActiveSync

Calendar

Não criar um fork da comunidade:

Expressomail Felamimail

Webconference

Messenger

Esquema – Visão Geral

Desafios:

● Direcionamento de usuário para seu frontend Web;● Como implementar?

● Escolha da chave de shard;● Quais campos usar?

● Estratégia de distribuição;● Mapeamento de usuário x backends? Função matemática? ● Usar Virtual Shard?

● Gerenciamento de auto incremento;● Implementar ou Remover?

● Queries distribuídas;● Estender SQL? Implementações específicas do domínio da aplicação?

Estratégia de mapeamento: Como distribuir os usuários/domínio de forma balanceada entre os shards.

● Virtual Shard● Usuário/Domínio X Virtual Shard X BD;● No de Shards >= No Máx de BDs;● Objetivo é evitar ter que reorganizar um grande volume de informações

ao fazer um resharding.

● Estratégia de Mapeamento de usuário x backends● Usando Virtual Shard:

● Mapear no LDAP usuário/domínio x Virtual Shard;● Mapear Virtual Shard x BD;

● Sem usar Virtual Shard:● Mapear no LDAP usuário/domínio x BD;

● Granularidade de resharding a nível de usuário/domínio;● Problema de Gargalo de ponto central (LDAP);

Estratégia de mapeamento:

● Estratégia de Função matemática ● Usando Virtual Shard:

● Mod(Hash(CHAVE_SHARD)) → Virtual Shard;● Mapear Virtual Shard x BD;● Granularidade de resharding a nível de Virtual Shard;

● Mantém duas versões do Mapeamento durante o resharding;● Sem usar Virtual Shard:

● Mod(Hash(CHAVE_SHARD)) →BD;● O resharding se torna muito complexo;

● Vantagem de não precisar buscar informações de associação em LDAP;

Queries distribuídas – Banco de Dados:

● Estender SQL● WHERE determina roteamento de consultas para vários shards;● JOINS

● Entre shards, executados localmente (baixo desempenho);● Com tabelas replicadas, executados remotamente (custo de replicação);

● GROUP BY, Funções de Agregação e ORDER BY executados localmente; ● Gerenciamento de memória (Resultados grandes);● Gerenciamento de timeout: LAN, WAN;● Transporte de consultas em Web Services para requisições através de Rede

WAN;● Vantagens:

● Evita/Minimiza alteração da implementação da aplicação Tine20;● Desvantages:

● Específico para BD. Não suporta backends LDAP, IMAP, Arquivo;● Implementação complexa;● Menor desempenho e maior uso de rede por não reduzir, de forma

distribuída, as consultas (não usa Map/Reduce);

Queries distribuídas:

● Implementar consultas específicas:● Criar Web Services para tratar consultas específicas do Tine20;● Gerenciamento de Timeout: LAN, WAN;● Agrupamento distribuído e local (Map/Reduce);

● Map/Reduce: Implementar ou usar solução de terceiro? ● Ordenação executada localmente;● Gerenciamento de memória (Resultados grandes);● Vantagens:

● Mais fácil de adaptar para outros backends (Arquivo, LDAP, IMAP);● Mais simples de implementar que um parser SQL;● Map/Reduce pode melhorar desempenho; ● Map/Reduce pode diminuir tráfego de rede;● Web Service suporta nativamente consultas geograficamente distribuídas;

● Desvantages:● Precisa alterar a implementação da aplicação Tine20;● Para cada nova consulta, requer um novo esforço de implementação;

I HATE JOINS!

Integridade Referencial:

● Implementar na aplicação:● Transferir para a aplicação Tine20 a responsabilidade por garantir a

Integridade Referencial entre shards;● Vantagem:

● A aplicação não cria inconsistências no BD;● Desvantagens:

● Necessidade de alterar o código fonte do Tine20;● Processamento extra prejudica desempenho;● Acessos diretos ao BD não garantem integridade;

● Remover do BD:● Remover a verificação de Integridade Referencial entre shards;● Vantagens:

● Maior desempenho;● Não necessita nenhuma implementação;

● Desvantages:● A Integridade não é garantida. Um erro pode levar o BD a inconsistência;

Resharding usando Virtual Shard :

● Adição de novo backend:● Mover linhas (amarelas) da tabela para o novo BD e apontar o Virtual Shard

(amarelo) para o novo BD;● Função Matemática Mod(Hash(Chave_Shard)) decide, de forma automática,

para qual Virtual Shard cada requisição da aplicação deve ser encaminhada;

Resharding usando Virtual Shard :

● Adição de novo backend:● Mover linhas (amarelas) da tabela para o novo BD e apontar o Virtual Shard

(amarelo) para o novo BD;● Atualizar, no LDAP, associação de Usuário/Domínio X Virtual Shard;

Resharding sem Virtual Shard:

● Adição de novo backend:● Mover linhas (amarelas) para o novo BD e atualiza o LDAP para

apontar os dois usuários/domínio para o novo BD;

Replicação de Informações Globais:

● Replicar todas informações globais:● Frequência de replicação de cada informação;● Como implementar a replicação de informações globais que estão

atualmente em tabelas que também possuem informações de shard?

Replicação de Informações Globais – Banco de Dados:

● Replicação de todas informações Globais em todos Shards:● Aumenta necessidade de espaço de armazenamento;● Minimiza JOINS entre Shards;● Alto custo de replicação;

Replicação de Informações Globais – Banco de Dados:

● Replicação de informações Globais entre WANs (em cinza):● Maior quantidade de JOINS entre Shards;● Custo de replicação via WAN;

Alta Disponibilidade – Banco de Dados:

● Organizar os BDs em arquitetura de Cluster;● Links de rede redundantes (LANs e WANs);● Backup individual de cada shard;

Escopo do Projeto – Macro Atividades:

1) Permitir vários bancos de dados2) Criar camada de abstração para banco de dados3) Criar backend separado para ACL4) Criar backend separado para containers5) Modificar consultas para ambiente distribuído6) Reduzir acesso ao banco de dados7) Tratar conteúdo compartilhado8) Direcionamento de usuário para seu frontend Web9) Implementar script de resharding10) Revisar arquitetura e implementação de sharding

ESCOPO DO PROJETO

Planejamento de execução e dependências entre tarefas

1

2

3

4

5

6

7

8

910

5 6 7 88 9 10 11

1

2

3 4

5

6

7

8

9

10

[email protected]

www.serpro.gov.br

http://comunidadeexpresso.serpro.gov.br

[email protected]@serpro.gov.br