SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
Tirando água
da rocha:
escalabilidade via
software no
ExpressoV3
Quem sou eu?
● Chefe do setor de adequação do ExpressoV3 em Curitiba
Quem sou eu?
000`000000
FISL LATINOWARE
Quem sou eu?
● Fui palestrante e instrutor em vários eventos
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.
Quem sou eu?
● Sou autor dos livros:
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.
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
Escalabilidade
Escalabilidade não significa melhoria de
desempenho, significa sobrevivência.
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
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
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
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]
O que o mercado faz
O que o mercado faz
MySQL tem uma solução para sharding de
banco de dados proprietária e paga, o MySQL
Cluster.
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]
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]
Expresso antes
Instância da
aplicaçã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
Single
Application
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
Database Sharding
Instância da
aplicação
Shard 1Shard 1 Shard 2 Shard 3 Shard n
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.
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.
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
EnterpriseDB
Realidade
Desenvolvemos uma camada para fazer sharding,
desconectada do banco de dados.
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
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.
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!
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.
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
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
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.
Rumo à nuvem
Referências:
[1] http://gigaom.com/2011/07/07/facebook-trapped-in-mysql-fate-worse-than-death/
[2] https://www.facebook.com/MySQLatFacebook
[3] http://yoshinorimatsunobu.blogspot.com.br/2014/04/semi-synchronous-replication-at-
facebook.html
[4] http://pt.scribd.com/doc/51466747/Foursquare-ML-Presentation
[5] http://www.mongodb.com/customers/foursquare
[6] http://expandedramblings.com/index.php/by-the-numbers-interesting-foursquare-user-
[7] stats/#.U9kwAZZVOCg
[8] http://www.infoq.com/news/2010/10/4square_mongodb_outage
[9] http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-
hundreds-of-instances-dozens-of
[10] http://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram
[11] http://pt.slideshare.net/denishpatel/scaling-postgres
[12] https://wiki.postgresql.org/wiki/Postgres-XC
flavio.lisboa@serpro.gov.br
www.serpro.gov.br
http://comunidadeexpresso.serpro.gov.br/

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documento
 
Sistemas NoSQL, surgimento, características e exemplos
Sistemas NoSQL, surgimento, características e exemplosSistemas NoSQL, surgimento, características e exemplos
Sistemas NoSQL, surgimento, características e exemplos
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
Cassandra - O básico
Cassandra - O básicoCassandra - O básico
Cassandra - O básico
 
Seminário Hadoop
Seminário HadoopSeminário Hadoop
Seminário Hadoop
 
NoSQL Familia de Colunas Monografia
NoSQL Familia de Colunas MonografiaNoSQL Familia de Colunas Monografia
NoSQL Familia de Colunas Monografia
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodb
 
Hadoop - Primeiros passos
Hadoop - Primeiros passosHadoop - Primeiros passos
Hadoop - Primeiros passos
 
NoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPNoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAP
 
Conhecendo Apache Cassandra @Movile
Conhecendo Apache Cassandra  @MovileConhecendo Apache Cassandra  @Movile
Conhecendo Apache Cassandra @Movile
 
NoSQL & SQL
NoSQL & SQLNoSQL & SQL
NoSQL & SQL
 
NoSQL
NoSQLNoSQL
NoSQL
 
Artigo Nosql
Artigo NosqlArtigo Nosql
Artigo Nosql
 
Primeiros passos com o Cassandra
 Primeiros passos com o Cassandra  Primeiros passos com o Cassandra
Primeiros passos com o Cassandra
 
Banco de Dados - NoSQL
Banco de Dados - NoSQLBanco de Dados - NoSQL
Banco de Dados - NoSQL
 
Cassandra NoSQL JUG Vale 2012
Cassandra NoSQL JUG Vale 2012Cassandra NoSQL JUG Vale 2012
Cassandra NoSQL JUG Vale 2012
 
Modelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaModelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência Poliglota
 
BIGDATA: Da teoria à Pratica
BIGDATA: Da teoria à PraticaBIGDATA: Da teoria à Pratica
BIGDATA: Da teoria à Pratica
 
Proposta de arquitetura Hadoop
Proposta de arquitetura HadoopProposta de arquitetura Hadoop
Proposta de arquitetura Hadoop
 
A importância do ecossistema Java em aplicações baseadas em Big Data
A importância do ecossistema Java em aplicações baseadas em Big DataA importância do ecossistema Java em aplicações baseadas em Big Data
A importância do ecossistema Java em aplicações baseadas em Big Data
 

Andere mochten auch

Где живут сайты? Это загадочное слово "хостинг"
Где живут сайты? Это загадочное слово "хостинг"Где живут сайты? Это загадочное слово "хостинг"
Где живут сайты? Это загадочное слово "хостинг"
Usanov Aleksey
 
Process Solutions Web
Process Solutions WebProcess Solutions Web
Process Solutions Web
Hunter Tate
 
Microfinance: Yesterday, Today, and Tomorrow: What is the Next Best Practices
Microfinance: Yesterday, Today, and Tomorrow: What is the Next Best PracticesMicrofinance: Yesterday, Today, and Tomorrow: What is the Next Best Practices
Microfinance: Yesterday, Today, and Tomorrow: What is the Next Best Practices
MABSIV
 
Rural Microinsurance Helping the Poor weather the storm
Rural Microinsurance Helping the Poor weather the stormRural Microinsurance Helping the Poor weather the storm
Rural Microinsurance Helping the Poor weather the storm
MABSIV
 
Tejaswi Drushti Bestseller For Super Eyesight Dr. Shriniwas Kashalikar
Tejaswi Drushti Bestseller For Super Eyesight Dr. Shriniwas KashalikarTejaswi Drushti Bestseller For Super Eyesight Dr. Shriniwas Kashalikar
Tejaswi Drushti Bestseller For Super Eyesight Dr. Shriniwas Kashalikar
drsprasadi
 
Heart Attack Infograph
Heart Attack InfographHeart Attack Infograph
Heart Attack Infograph
Andrea Mendez
 
Silver State Industries letter
Silver State Industries letterSilver State Industries letter
Silver State Industries letter
Michael Murphy
 
Politeknik Bandung Reference 01
Politeknik Bandung Reference 01Politeknik Bandung Reference 01
Politeknik Bandung Reference 01
Vincent Tjandra
 
Post Graduate Diploma - Business Administration
Post Graduate Diploma - Business AdministrationPost Graduate Diploma - Business Administration
Post Graduate Diploma - Business Administration
toaamirzaheer
 

Andere mochten auch (20)

Где живут сайты? Это загадочное слово "хостинг"
Где живут сайты? Это загадочное слово "хостинг"Где живут сайты? Это загадочное слово "хостинг"
Где живут сайты? Это загадочное слово "хостинг"
 
MATI Diploma_RU
MATI Diploma_RUMATI Diploma_RU
MATI Diploma_RU
 
Ranking fifa
Ranking fifaRanking fifa
Ranking fifa
 
diaporama
diaporamadiaporama
diaporama
 
Process Solutions Web
Process Solutions WebProcess Solutions Web
Process Solutions Web
 
Microfinance: Yesterday, Today, and Tomorrow: What is the Next Best Practices
Microfinance: Yesterday, Today, and Tomorrow: What is the Next Best PracticesMicrofinance: Yesterday, Today, and Tomorrow: What is the Next Best Practices
Microfinance: Yesterday, Today, and Tomorrow: What is the Next Best Practices
 
Business Performance In A Reset World
Business Performance In A Reset WorldBusiness Performance In A Reset World
Business Performance In A Reset World
 
Rural Microinsurance Helping the Poor weather the storm
Rural Microinsurance Helping the Poor weather the stormRural Microinsurance Helping the Poor weather the storm
Rural Microinsurance Helping the Poor weather the storm
 
Tejaswi Drushti Bestseller For Super Eyesight Dr. Shriniwas Kashalikar
Tejaswi Drushti Bestseller For Super Eyesight Dr. Shriniwas KashalikarTejaswi Drushti Bestseller For Super Eyesight Dr. Shriniwas Kashalikar
Tejaswi Drushti Bestseller For Super Eyesight Dr. Shriniwas Kashalikar
 
aytro.pdf
aytro.pdfaytro.pdf
aytro.pdf
 
Cio Survey2010 Us
Cio Survey2010 UsCio Survey2010 Us
Cio Survey2010 Us
 
Midlands Housing Alliance Transitions Center Update
Midlands Housing Alliance Transitions Center UpdateMidlands Housing Alliance Transitions Center Update
Midlands Housing Alliance Transitions Center Update
 
Heart Attack Infograph
Heart Attack InfographHeart Attack Infograph
Heart Attack Infograph
 
Oiartzunegitaraua
OiartzunegitarauaOiartzunegitaraua
Oiartzunegitaraua
 
Silver State Industries letter
Silver State Industries letterSilver State Industries letter
Silver State Industries letter
 
Politeknik Bandung Reference 01
Politeknik Bandung Reference 01Politeknik Bandung Reference 01
Politeknik Bandung Reference 01
 
Fish Ad - CC
Fish Ad - CCFish Ad - CC
Fish Ad - CC
 
Reference Letter
Reference LetterReference Letter
Reference Letter
 
Presentation1
Presentation1Presentation1
Presentation1
 
Post Graduate Diploma - Business Administration
Post Graduate Diploma - Business AdministrationPost Graduate Diploma - Business Administration
Post Graduate Diploma - Business Administration
 

Ähnlich wie Tirando água da rocha: escalabilidade via software no ExpressoV3

Bancodedadosesgbds 140326151327-phpapp01
Bancodedadosesgbds 140326151327-phpapp01Bancodedadosesgbds 140326151327-phpapp01
Bancodedadosesgbds 140326151327-phpapp01
Sugizo Akino
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDK
Ryan Padilha
 
Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP
Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SPArquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP
Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP
melidevelopers
 

Ähnlich wie Tirando água da rocha: escalabilidade via software no ExpressoV3 (20)

Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvem
 
Cientista de Dados – Dominando o Big Data com Software Livre
Cientista de Dados – Dominando o Big Data com Software Livre Cientista de Dados – Dominando o Big Data com Software Livre
Cientista de Dados – Dominando o Big Data com Software Livre
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 
Trabalho de sgbd
Trabalho de sgbdTrabalho de sgbd
Trabalho de sgbd
 
Big Data, JVM e Redes Sociais
Big Data, JVM e Redes SociaisBig Data, JVM e Redes Sociais
Big Data, JVM e Redes Sociais
 
Bancodedadosesgbds 140326151327-phpapp01
Bancodedadosesgbds 140326151327-phpapp01Bancodedadosesgbds 140326151327-phpapp01
Bancodedadosesgbds 140326151327-phpapp01
 
1409243945064
14092439450641409243945064
1409243945064
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDK
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.
 
Artigo de banco de dados
Artigo  de banco de dadosArtigo  de banco de dados
Artigo de banco de dados
 
Cloudwalker - processamento distribuído em nuvem
Cloudwalker - processamento distribuído em nuvemCloudwalker - processamento distribuído em nuvem
Cloudwalker - processamento distribuído em nuvem
 
Desenvolva rapidamente utilizando o framework Desenvolva rapidamente utiliz...
Desenvolva rapidamente
utilizando o framework
Desenvolva rapidamente utiliz...Desenvolva rapidamente
utilizando o framework
Desenvolva rapidamente utiliz...
Desenvolva rapidamente utilizando o framework Desenvolva rapidamente utiliz...
 
Escalabilidade via Software no Expressov3
Escalabilidade via Software no Expressov3Escalabilidade via Software no Expressov3
Escalabilidade via Software no Expressov3
 
Pesquisa sobre no sql
Pesquisa sobre no sqlPesquisa sobre no sql
Pesquisa sobre no sql
 
Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP
Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SPArquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP
Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP
 
Cursos
CursosCursos
Cursos
 
Indústria 4.0: como a IoT e Big Data mudarão a forma como lidamos com a tecno...
Indústria 4.0: como a IoT e Big Data mudarão a forma como lidamos com a tecno...Indústria 4.0: como a IoT e Big Data mudarão a forma como lidamos com a tecno...
Indústria 4.0: como a IoT e Big Data mudarão a forma como lidamos com a tecno...
 
Conceitos de Ajax
Conceitos de AjaxConceitos de Ajax
Conceitos de Ajax
 
BIG DATA & IoT: Tecnologias e  Aplicações
BIG DATA & IoT: Tecnologias e  AplicaçõesBIG DATA & IoT: Tecnologias e  Aplicações
BIG DATA & IoT: Tecnologias e  Aplicações
 

Mehr von Flávio Lisboa

Mehr von Flávio Lisboa (20)

Criando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHPCriando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHP
 
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaCooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
 
Aprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com LaminasAprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com Laminas
 
Ciência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com métodoCiência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com método
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHP
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework Laminas
 
PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?
 
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 
Como se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundoComo se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundo
 
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPA demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
 
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperamComunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
 
Criação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosCriação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dados
 
Amanhecer esmeralda
Amanhecer esmeraldaAmanhecer esmeralda
Amanhecer esmeralda
 
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosEstudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
 
Arquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosArquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviços
 
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasSemeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
 
O que é programação de computadores
O que é programação de computadoresO que é programação de computadores
O que é programação de computadores
 
Economia em rede (comunidade)
Economia em rede (comunidade)Economia em rede (comunidade)
Economia em rede (comunidade)
 
Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)
 

Tirando água da rocha: escalabilidade via software no ExpressoV3

  • 1. Tirando água da rocha: escalabilidade via software no ExpressoV3
  • 2. Quem sou eu? ● Chefe do setor de adequação do ExpressoV3 em Curitiba
  • 4. FISL LATINOWARE Quem sou eu? ● Fui palestrante e instrutor em vários eventos
  • 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.
  • 6. Quem sou eu? ● Sou autor dos livros:
  • 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.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 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.
  • 18. Escalabilidade Escalabilidade não significa melhoria de desempenho, significa sobrevivência.
  • 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]
  • 24. O que o mercado faz
  • 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.
  • 30. Configuration Arquitetura de Multidomínio Backend Frontend Single Application Domain 1 DB LDAP IMAP SMTP Domain n DB LDAP IMAP SMTP Domain 2 DB LDAP IMAP SMTP
  • 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.
  • 34. Database Sharding Instância da aplicação Shard 1Shard 1 Shard 2 Shard 3 Shard n
  • 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
  • 38. EnterpriseDB Realidade Desenvolvemos uma camada para fazer sharding, desconectada do banco de dados.
  • 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.
  • 47. Referências: [1] http://gigaom.com/2011/07/07/facebook-trapped-in-mysql-fate-worse-than-death/ [2] https://www.facebook.com/MySQLatFacebook [3] http://yoshinorimatsunobu.blogspot.com.br/2014/04/semi-synchronous-replication-at- facebook.html [4] http://pt.scribd.com/doc/51466747/Foursquare-ML-Presentation [5] http://www.mongodb.com/customers/foursquare [6] http://expandedramblings.com/index.php/by-the-numbers-interesting-foursquare-user- [7] stats/#.U9kwAZZVOCg [8] http://www.infoq.com/news/2010/10/4square_mongodb_outage [9] http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram- hundreds-of-instances-dozens-of [10] http://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram [11] http://pt.slideshare.net/denishpatel/scaling-postgres [12] https://wiki.postgresql.org/wiki/Postgres-XC