1) O documento descreve como o ExpressoV3 escalou via software, incluindo o uso de cache, sessões, sharding de banco de dados e migração para nuvem.
2) Foi implementado um sistema de sharding virtual para distribuir usuários entre bancos de dados, embora os dados compartilhados ainda precisem ser replicados entre shards.
3) O próximo passo é migrar para bancos não-relacionais auto-gerenciados na nuvem para melhor escalabilidade.
5. Quem sou eu?
● Leciono a disciplina Programação PHP Orientada a Objetos com Testes
Unitários no curso de especialização em Desenvolvimento de Aplicações
Web na UniCesumar.
7. O que é o ExpressoV3?
É uma suíte de comunicação e colaboração
inteiramente desenvolvida em software
livre.
Seu objetivo maior é fornecer uma
ferramenta economicamente viável, com
grande domínio e autossuficiência do
conhecimento e difusão para corporações,
dentro e fora do Brasil.
Possui módulos de Catálogo de Endereços,
Calendário, E-mail, Tarefas, Webconference,
Messenger e ActiveSync.
14. 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.
19. Cache
● Cache local, por frontend
● Cache configurável (1 hora atualmente)
● O cache compartilhado é rejeitado pela equipe de
infraestrutura por alegação de redução de desempenho
pela adição de tráfego de rede
FRONTEND
CACHE
FRONTEND
CACHE
FRONTEND
CACHE
20. Sessão
● Permissões e preferências armazenadas em sessão
● Sessão de longa duração
FRONTEND
SESSÃO
FRONTEND
SESSÃO
FRONTEND
SESSÃO
21.
22. Fato
“Unless we're doing a lot of file serving, the
database is the toughest part to scale.
If we can, best to avoid the issue altogether
and jut buy bigger hardware”
Cal Henderson
23. O que o mercado faz
Facebook tem
800 milhões de usuários sendo que 500 milhões
visitam diariamente o site.
350 milhões de usuários mobile atualizando
constantemente seus status.
7 milhões de aplicações e Web sites integrados com a
plataforma Facebook.
>60 milhões de queries por segundo
Banco de dados MySQL dividido em 4000 shards
9000 instâncias de Memcached
1800 servidores para MySQL (2008)
805 servidores dedicados para Memcached
* Dados de 2011 [1],[2],[3]
25. O que o mercado faz
MySQL tem uma solução para sharding de
banco de dados proprietária e paga, o MySQL
Cluster.
26. O que o mercado faz
Foursquare tem
45 milhões de usuários (19/12/2013)
5 bilhões de check-ins (19/12/2013)
Banco de dados MongoDB com auto-sharding.
Hive e Hadoop.
Houve um caso de indisponibilidade de 7 horas em
2010.
* [4],[5],[6],[7]
27. O que o mercado faz
Instagram tem
●14 milhões de usuários
●Amazon Elastic Load Balander com 3 instâncias de
NGINX
●Amazon Route53 para DNS
●Django sobre Apache com mod_wsgi
●PostgreSQL com sharding em cluster com 12
instâncias de memória extra-grandes quádruplas e 12
réplicas em uma zona diferente. Usa Streaming
Replication e Pgbouncer.
●Várias instâncias de Redis usadas extensivamente.
●Gearman para processamento paralelo com 200
threads.
* [8],[9]
29. 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.
32. 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.
35. Como fazer sharding para o ExpressoV3
Sem dispor de uma solução que faça o
sharding de forma transparente para a
aplicação, como o EnterpriseDB [12], temos de
fazer sharding com a aplicação ciente disso.
A aplicação está assumindo uma tarefa que o
banco de dados não consegue realizar.
36. Como fazer sharding para o ExpressoV3
Por que não usamos EnterpriseDB? Bem, ele é
proprietário. A solução alternativa aberta é o
Postgres-XC-Cluster [11, p. 27], mas ele não
faz compartilhamento entre shards.
Além de não ter domínio do código, ainda
teríamos de desenvolver a parte de
compartilhamento na aplicação.
37. Mundo ideal
Delegaríamos o sharding para o EnterpriseDB e não
precisaríamos desenvolver uma camada para
administrar a segmentação de usuários.
EnterpriseDB
39. Arquitetura da solução de sharding para o
ExpressoV3
Aplicação
Virtual Shard Virtual Shard Virtual Shard Virtual Shard Virtual Shard Virtual Shard
Banco de
Dados
Banco de
Dados
Banco de
Dados
Banco de
Dados
Estratégia de Sharding
40. Os shards no ExpressoV3 são virtuais
● Do ponto de vista da aplicação, os usuários estarão
segmentados em N shards, definidos em um arquivo de
configuração de shards (shard.inc.php).
● Mas fisicamente, dois ou mais shards podem apontar para o
mesmo banco de dados.
● A aplicação não precisa ser modificada para que um banco
seja incluído ou removido.
● O método de resharding move os dados de um usuário ou
de todos usuários de associados a um virtual shard para
outro banco de dados.
41. Não há mágica!
Virtual Shard Virtual Shard Virtual Shard Virtual Shard Virtual Shard Virtual Shard
Banco de
Dados
Banco de
Dados
Banco de
Dados
Banco de
Dados
● É preciso monitorar os shards!
42. A configuração de múltiplos bancos de dados está
pronta
● Nas próximas releases já estará disponível a
implementação de sharding.
● Para migrar instalações existentes, é necessário executar o
script de resharding.
● Os dados compartilhados não estão disponíveis. Cada
usuário compartilha somente dentro do seu shard. Usuários
de shards diferentes são como usuários de instâncias
diferentes de ExpressoV3.
● O uso de sharding é dependente da replicação dos dados
globais entre os shards.
43. Fato
● Se cada usuário tivesse de ter acesso somente a seus
dados, então cada shard teria as mesmas tabelas, mas
apenas com os registros dos usuários daquele shard.
Shard 1
Tabela 1 Tabela 2
Tabela 3 Tabela 4
Shard 2
Tabela 1 Tabela 2
Tabela 3 Tabela 4
44. Fato
● Mas existem tabelas globais, que precisam ser replicadas
em cada shard. E essa replicação deve ser síncrona.
Shard 1
Tabela 1 Tabela 2
Tabela 3
Tabela
Global
Shard 2
Tabela 1 Tabela 2
Tabela 3
Tabela
Global
45. Rumo à nuvem: o futuro
ExpressoV3
Banco relacional com
única instância
ExpressoV3
Várias instâncias de
banco relacional,
distribuídas com
distribuição gerenciada
pela aplicação.
ExpressoV3
Banco de dados não
relacional, distribuído e
auto-gerenciado.