SlideShare una empresa de Scribd logo
1 de 56
Descargar para leer sin conexión
Escalabilidade 
via Software no 
Expresso
Quem sou eu? 
● Chefe do setor de adequação do ExpressoV3 em Curitiba
Quem sou eu?
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:
VAMOS COMEÇAR!
O que é o Expresso? 
● O Expresso (ou mais precisamente, Expresso Livre) é 
um groupware, um software para comunicação e 
colaboração entre equipes. Sua primeira versão, 
derivada do E-Groupware, foi criada pela CELEPAR, 
Companhia de Informática do Paraná. A versão mais 
recente, a 3, é baseada no Tine 2.0, um projeto mais 
evoluído, com arquitetura orientada a serviço e 
modular, baseado em Zend Framework. 
● A versão mais recente do Tine 2.0 usa as versões 1 e 2 
do Zend Framework (95% - 5%)
https://comunidadeexpresso.serpro.gov.br/expressov3/
https://comunidadeexpresso.serpro.gov.br/expressov3/
Por que o Expresso? 
● A aquisição de solução semelhante ao Expresso Livre 
teria um custo muito mais elevado que o investimento 
nas equipes que o desenvolvem. 
● Cada licença de cliente Microsoft Exchange, por 
exemplo custa cerca de R$ 170,00, e provavelmente 
geraria muita demanda interna de customização. 
● Isso não é uma hipótese. Temos vários casos de 
esforço de adequação de ferramentas de código-fechado. 
Às vezes é necessário criar sistemas 
complementares para suprir a carência de 
funcionalidades.
Por que o Expresso? 
● O Expresso é um software livre e aberto, não tem 
backdoors que permitam espionagem. 
● O Expresso é extensível por módulos. 
● Existem vários módulos disponíveis. 
● O Expresso é orientado a serviços. Qualquer um pode 
fazer um cliente em qualquer linguagem que consuma 
um servidor Expresso usando JSON-RPC. 
● O Expresso é parte de uma vibrante comunidade de 
software livre internacional, a do projeto Tine 2.0.
Desafio do Expresso 
Escalar a aplicação para suportar centenas de 
milhares de usuários, podendo em situações 
extremas alcançar um milhão de usuários (ou 
mais). 
Motivo: atender a demanda por uma solução 
auditável de comunicação para toda a 
administração pública federal
Escalabilidade 
Escalabilidade não significa melhoria de 
desempenho, significa sobrevivência.
Desafio Técnico 
Fazer com que um sistema gerenciador de 
banco de dados livre possa suportar de 
centenas de milhares a um milhão de conexões 
com banco de dados. 
WHERE'S WALLY?
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 just buy bigger hardware” 
Cal Henderson
Realidade 
Nem sempre é possível comprar mais 
hardware. 
Nem sempre mais hardware implica em 
melhoria de desempenho.
Caminho 
Elaborar estratégias para escalar o banco de 
dados (PostgreSQL no caso) para a 
expectativa de demanda exposta 
anteriormente.
Frase marcante 
“Se for possível ter um 
banco de dados por 
usuário, não haverá limites 
para a infraestrutura” 
?!?!?!?!
Traduzindo 
“Como seria maravilhoso se 
o banco de dados relacional 
pudesse ser fragmentado.” 
?!?!?!?!
Dividir para conquistar
Dividir para conquistar
Dividir para conquistar
Dividir para conquistar 
Conseguimos suportar de 60 a 70 mil usuários 
por domínio, aproximadamente. 
Isso significa que com 10 domínios, podemos 
ter 700 mil usuários, cada um com sua 
infraestrutura, mas compartilhando a mesma 
instância de aplicação.
Atualização distribuída 
● Algumas operações tem de ser feitas em 
todos os domínios. 
● A instalação, atualização e remoção de 
módulos são algumas delas. 
● A criação de filtros compartilhados é outra.
Atualização distribuída 
● Foco em resultados: a aplicação precisa 
funcionar. 
● Se um banco de dados pode apresentar 
falhas, n bancos de dados também podem. 
● Não se pode evitar falhas, podemos tolerá-las. 
O que se precisa definir é o nível, a 
medida de tolerância.
Atualização distribuída 
● Se durante uma atualização, a operação em 
um banco de dados falhar, a aplicação já tem 
condições de informar qual banco falhou e 
produzir um script para atualizar o banco. 
● A aplicação não vai recuperar o banco de 
dados se o servidor estiver indisponível (sem 
conexão, máquina física desligada, etc). 
● A aplicação pode notificar o sistema de 
monitoração sobre a falha na atualização 
também, embora já avise o administrador 
sobre falhas no processo.
Atualização distribuída 
● Suponha que haja 10 domínios, e um módulo tenha 
de ser atualizado. A aplicação irá fazer um loop, 
gravando nos 10 bancos de dados. 
● Se a operação falhar em 1 banco de dados, o 
problema não é proveniente da aplicação, pois a 
operação funcionou em 9 bancos. 
● Reverter 90% do processo de atualização é menos 
custoso do que executar um script para 1 banco de 
dados? 
● Dotar a aplicação de controle transacional sobre 
vários bancos significa aumentar a complexidade 
da aplicação para atender um estado transitório.
Atualização distribuída 
6 bancos para atualizar 
Banco 1 Banco 2 Banco 3 Banco 4 Banco 5 Banco 6 
5 são atualizados 
Banco 1 Banco 2 Banco 3 Banco 4 Banco 5 Banco 6 
Revertemos 5 por causa de 1? 
Banco 1 Banco 2 Banco 3 Banco 4 Banco 5 Banco 6
Atualização distribuída 
● Atualizações de estrutura de tabelas não são 
tarefas frequentes. 
● Assim com a aplicação pode notificar a 
monitoração para alertar sobre falhas na 
atualização, agentes podem automatizar a 
execução dos scripts, desde que saibamos 
para onde os scripts precisam ser enviados 
para serem executados.
Modus Operandi da atualização distribuída 
Instância única do ExpressoV3 
Tenta atualizar todos Reporta quais não foram 
atualizados e gera script 
Banco 1 Banco 2 Banco 3 Banco n
Modus Operandi da atualização distribuída 
● Importante: a atualização é feita pelo Gerenciador de 
Aplicações, que tem uma interface que mostra o que está 
atualizado, desatualizado e se houve erros.
Status de entrega 
● Configuração de multidomínio 
pronta. 
● Release em homologação. 
● Setup com interface gráfica para 
atualização distribuída em fase 
final de desenvolvimento.
Limites 
Mas se houver mais de 70 mil usuários em um 
domínio? 
Para esses casos extremos, precisaremos de 
uma solução mais agressiva.
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]
Fato 
Diante do cenário de restrição para aumento de 
infraestrutura e limitações para introdução de 
novas soluções de software, o sharding é a 
solução mais viável de ser implementada para 
casos extremos, o que não implica que seja a 
mais fácil de ser administrada.
Hoje 
Instância da 
aplicação 
Banco de Dados
Com o Sharding 
Instância da 
aplicação 
SShhaarrdd 11 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
Realidade 
Desenvolvemos uma camada para fazer sharding, 
desconectada do banco de dados. 
EnterpriseDB
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 serã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 
● Já é possível usar o ExpressoV3 com sharding 
para novas instalações. 
● Para migrar instalações existentes, é necessário 
aguardar a finalização do 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. 
● O sharding será um plugin que terá de ser 
habilitado.
Status de entrega 
● Suporte a sharding para novas 
instalações pronta. 
● Script de resharding em fase final 
de desenvolvimento.
Sharding é uma solução extrema
Outros ajustes para reduzir acesso ao banco 
● Uso exclusivo de LDAP para autenticação e 
controle de usuários e grupos sem 
sincronização com o banco. 
● Redução de tabelas ( eliminaçao quando 
possviel). 
● O uso da sessão será ampliado para evitar o 
uso do banco de dados, armazenando ACL e 
containers. 
● Podemos usar cache compartilhado para os 
dados globais dos vários frontends do 
serviço.
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
http://comunidadeexpresso.serpro.gov.br 
flavio.lisboa@serpro.gov.br 
www.serpro.gov.br

Más contenido relacionado

La actualidad más candente

Overview de Drupal pela Just Digital
Overview de Drupal pela Just DigitalOverview de Drupal pela Just Digital
Overview de Drupal pela Just DigitalJust Digital
 
Otimizando o desempenho de transferência de arquivos e diretórios entre servi...
Otimizando o desempenho de transferência de arquivos e diretórios entre servi...Otimizando o desempenho de transferência de arquivos e diretórios entre servi...
Otimizando o desempenho de transferência de arquivos e diretórios entre servi...Joao Galdino Mello de Souza
 
ZIIP, ZAAP, ZEDC, SMT-2. EVOLUÇÃO E REVOLUÇÃO por Jorge Henrique Souza Areia...
ZIIP, ZAAP, ZEDC, SMT-2.  EVOLUÇÃO E REVOLUÇÃO por Jorge Henrique Souza Areia...ZIIP, ZAAP, ZEDC, SMT-2.  EVOLUÇÃO E REVOLUÇÃO por Jorge Henrique Souza Areia...
ZIIP, ZAAP, ZEDC, SMT-2. EVOLUÇÃO E REVOLUÇÃO por Jorge Henrique Souza Areia...Joao Galdino Mello de Souza
 
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?Marcelo Dieder
 
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLEstudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLOrlando Vitali
 
Overview sobre o CMS Drupal
Overview sobre o CMS DrupalOverview sobre o CMS Drupal
Overview sobre o CMS DrupalRafael Cichini
 
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 CAPAricelio Souza
 

La actualidad más candente (7)

Overview de Drupal pela Just Digital
Overview de Drupal pela Just DigitalOverview de Drupal pela Just Digital
Overview de Drupal pela Just Digital
 
Otimizando o desempenho de transferência de arquivos e diretórios entre servi...
Otimizando o desempenho de transferência de arquivos e diretórios entre servi...Otimizando o desempenho de transferência de arquivos e diretórios entre servi...
Otimizando o desempenho de transferência de arquivos e diretórios entre servi...
 
ZIIP, ZAAP, ZEDC, SMT-2. EVOLUÇÃO E REVOLUÇÃO por Jorge Henrique Souza Areia...
ZIIP, ZAAP, ZEDC, SMT-2.  EVOLUÇÃO E REVOLUÇÃO por Jorge Henrique Souza Areia...ZIIP, ZAAP, ZEDC, SMT-2.  EVOLUÇÃO E REVOLUÇÃO por Jorge Henrique Souza Areia...
ZIIP, ZAAP, ZEDC, SMT-2. EVOLUÇÃO E REVOLUÇÃO por Jorge Henrique Souza Areia...
 
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?
 
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLEstudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
 
Overview sobre o CMS Drupal
Overview sobre o CMS DrupalOverview sobre o CMS Drupal
Overview sobre o CMS Drupal
 
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
 

Destacado

Collaje tegno
Collaje tegnoCollaje tegno
Collaje tegnoLizzeth99
 
How Google plans to change the way you watch TV
How Google plans to change the way you watch TV How Google plans to change the way you watch TV
How Google plans to change the way you watch TV ARPAN SAXENA
 
Greywater treatment system
Greywater treatment systemGreywater treatment system
Greywater treatment systemIBN AL NAFEES
 
The Role of L&D in Supporting Change and Transformation Programmes
The Role of L&D in Supporting Change and Transformation ProgrammesThe Role of L&D in Supporting Change and Transformation Programmes
The Role of L&D in Supporting Change and Transformation ProgrammesThales Training & Consultancy
 
Ficha técnica Subaru All New Forester
Ficha técnica Subaru All New ForesterFicha técnica Subaru All New Forester
Ficha técnica Subaru All New Foresterrfarias_10
 
Helping Rural banks Comply with Microinsurance Regulations
Helping Rural banks Comply with Microinsurance RegulationsHelping Rural banks Comply with Microinsurance Regulations
Helping Rural banks Comply with Microinsurance RegulationsMABSIV
 
Manual Handlinh
Manual HandlinhManual Handlinh
Manual HandlinhGreg Doyle
 
Communication with our_clients
Communication with our_clientsCommunication with our_clients
Communication with our_clientsmartincabrera
 
Mobilny marketing Marian Chovanec
Mobilny marketing Marian ChovanecMobilny marketing Marian Chovanec
Mobilny marketing Marian ChovanecInternet je sexy
 
Стъпки за успешното затваряне на сделка
Стъпки за успешното затваряне на сделкаСтъпки за успешното затваряне на сделка
Стъпки за успешното затваряне на сделкаIvaylo Matev
 

Destacado (20)

Collaje tegno
Collaje tegnoCollaje tegno
Collaje tegno
 
How Google plans to change the way you watch TV
How Google plans to change the way you watch TV How Google plans to change the way you watch TV
How Google plans to change the way you watch TV
 
Afiche
AficheAfiche
Afiche
 
Greywater treatment system
Greywater treatment systemGreywater treatment system
Greywater treatment system
 
Trading StocksSemanal02/09/2011
Trading StocksSemanal02/09/2011Trading StocksSemanal02/09/2011
Trading StocksSemanal02/09/2011
 
The Role of L&D in Supporting Change and Transformation Programmes
The Role of L&D in Supporting Change and Transformation ProgrammesThe Role of L&D in Supporting Change and Transformation Programmes
The Role of L&D in Supporting Change and Transformation Programmes
 
Cuitzeo 1
Cuitzeo 1Cuitzeo 1
Cuitzeo 1
 
Ficha técnica Subaru All New Forester
Ficha técnica Subaru All New ForesterFicha técnica Subaru All New Forester
Ficha técnica Subaru All New Forester
 
Helping Rural banks Comply with Microinsurance Regulations
Helping Rural banks Comply with Microinsurance RegulationsHelping Rural banks Comply with Microinsurance Regulations
Helping Rural banks Comply with Microinsurance Regulations
 
Trading Stocks Semanal 17/09/2010
Trading Stocks Semanal 17/09/2010Trading Stocks Semanal 17/09/2010
Trading Stocks Semanal 17/09/2010
 
hzqgp.pdf
hzqgp.pdfhzqgp.pdf
hzqgp.pdf
 
Manual Handlinh
Manual HandlinhManual Handlinh
Manual Handlinh
 
d8u5c.pdf
d8u5c.pdfd8u5c.pdf
d8u5c.pdf
 
Communication with our_clients
Communication with our_clientsCommunication with our_clients
Communication with our_clients
 
Mobilny marketing Marian Chovanec
Mobilny marketing Marian ChovanecMobilny marketing Marian Chovanec
Mobilny marketing Marian Chovanec
 
New york
New yorkNew york
New york
 
0pcgm.pdf
0pcgm.pdf0pcgm.pdf
0pcgm.pdf
 
Стъпки за успешното затваряне на сделка
Стъпки за успешното затваряне на сделкаСтъпки за успешното затваряне на сделка
Стъпки за успешното затваряне на сделка
 
Audience research
Audience research Audience research
Audience research
 
David felipe giraldo
David felipe giraldoDavid felipe giraldo
David felipe giraldo
 

Similar a Escalabilidade via Software no ExpressoV3

TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azuretdc-globalcode
 
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 nuvemRodrigo Valerio
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
 
Transformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualizaçãoTransformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualizaçãoDarlan Segalin
 
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.Valmir Justo
 
Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformAndré Paulovich
 
Conheça o Cloud Foundry no HCP
Conheça o Cloud Foundry no HCPConheça o Cloud Foundry no HCP
Conheça o Cloud Foundry no HCPJose Nunes
 
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 - SPmelidevelopers
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineFrederico Maia Arantes
 
Desenvolvimento em Nuvem
Desenvolvimento em NuvemDesenvolvimento em Nuvem
Desenvolvimento em NuvemVitor Savicki
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2Flávio Lisboa
 
Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02thomasdacosta
 
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e ExercíciosSistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e ExercíciosCharles Fortes
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de MicroservicesDeep Tech Brasil
 
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 SDKRyan Padilha
 

Similar a Escalabilidade via Software no ExpressoV3 (20)

TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
Trabalho de sgbd
Trabalho de sgbdTrabalho de sgbd
Trabalho de sgbd
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Cursos
CursosCursos
Cursos
 
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
 
HTML5 & suas APIs
HTML5 & suas APIsHTML5 & suas APIs
HTML5 & suas APIs
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 
Transformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualizaçãoTransformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualização
 
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.
 
Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud Platform
 
Conheça o Cloud Foundry no HCP
Conheça o Cloud Foundry no HCPConheça o Cloud Foundry no HCP
Conheça o Cloud Foundry no HCP
 
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
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App Engine
 
Desenvolvimento em Nuvem
Desenvolvimento em NuvemDesenvolvimento em Nuvem
Desenvolvimento em Nuvem
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 
Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02
 
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e ExercíciosSistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
 
Conceitos de Ajax
Conceitos de AjaxConceitos de Ajax
Conceitos de Ajax
 
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
 

Más de Flávio Lisboa

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 PHPFlávio Lisboa
 
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 ArgentinaFlávio Lisboa
 
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 LaminasFlávio Lisboa
 
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étodoFlávio Lisboa
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHPFlávio Lisboa
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework LaminasFlávio Lisboa
 
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?Flávio Lisboa
 
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 2019Flávio Lisboa
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHPFlávio Lisboa
 
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 mundoFlávio Lisboa
 
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 PHPFlávio Lisboa
 
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 cooperamFlávio Lisboa
 
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 dadosFlávio Lisboa
 
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 DadosFlávio Lisboa
 
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çosFlávio Lisboa
 
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 pessoasFlávio Lisboa
 
O que é programação de computadores
O que é programação de computadoresO que é programação de computadores
O que é programação de computadoresFlávio Lisboa
 
Economia em rede (comunidade)
Economia em rede (comunidade)Economia em rede (comunidade)
Economia em rede (comunidade)Flávio Lisboa
 
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)Flávio Lisboa
 

Más de 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)
 

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:
  • 8. O que é o Expresso? ● O Expresso (ou mais precisamente, Expresso Livre) é um groupware, um software para comunicação e colaboração entre equipes. Sua primeira versão, derivada do E-Groupware, foi criada pela CELEPAR, Companhia de Informática do Paraná. A versão mais recente, a 3, é baseada no Tine 2.0, um projeto mais evoluído, com arquitetura orientada a serviço e modular, baseado em Zend Framework. ● A versão mais recente do Tine 2.0 usa as versões 1 e 2 do Zend Framework (95% - 5%)
  • 11. Por que o Expresso? ● A aquisição de solução semelhante ao Expresso Livre teria um custo muito mais elevado que o investimento nas equipes que o desenvolvem. ● Cada licença de cliente Microsoft Exchange, por exemplo custa cerca de R$ 170,00, e provavelmente geraria muita demanda interna de customização. ● Isso não é uma hipótese. Temos vários casos de esforço de adequação de ferramentas de código-fechado. Às vezes é necessário criar sistemas complementares para suprir a carência de funcionalidades.
  • 12. Por que o Expresso? ● O Expresso é um software livre e aberto, não tem backdoors que permitam espionagem. ● O Expresso é extensível por módulos. ● Existem vários módulos disponíveis. ● O Expresso é orientado a serviços. Qualquer um pode fazer um cliente em qualquer linguagem que consuma um servidor Expresso usando JSON-RPC. ● O Expresso é parte de uma vibrante comunidade de software livre internacional, a do projeto Tine 2.0.
  • 13. Desafio do Expresso Escalar a aplicação para suportar centenas de milhares de usuários, podendo em situações extremas alcançar um milhão de usuários (ou mais). Motivo: atender a demanda por uma solução auditável de comunicação para toda a administração pública federal
  • 14. Escalabilidade Escalabilidade não significa melhoria de desempenho, significa sobrevivência.
  • 15. Desafio Técnico Fazer com que um sistema gerenciador de banco de dados livre possa suportar de centenas de milhares a um milhão de conexões com banco de dados. WHERE'S WALLY?
  • 16.
  • 17. 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 just buy bigger hardware” Cal Henderson
  • 18. Realidade Nem sempre é possível comprar mais hardware. Nem sempre mais hardware implica em melhoria de desempenho.
  • 19. Caminho Elaborar estratégias para escalar o banco de dados (PostgreSQL no caso) para a expectativa de demanda exposta anteriormente.
  • 20. Frase marcante “Se for possível ter um banco de dados por usuário, não haverá limites para a infraestrutura” ?!?!?!?!
  • 21. Traduzindo “Como seria maravilhoso se o banco de dados relacional pudesse ser fragmentado.” ?!?!?!?!
  • 25. Dividir para conquistar Conseguimos suportar de 60 a 70 mil usuários por domínio, aproximadamente. Isso significa que com 10 domínios, podemos ter 700 mil usuários, cada um com sua infraestrutura, mas compartilhando a mesma instância de aplicação.
  • 26. Atualização distribuída ● Algumas operações tem de ser feitas em todos os domínios. ● A instalação, atualização e remoção de módulos são algumas delas. ● A criação de filtros compartilhados é outra.
  • 27. Atualização distribuída ● Foco em resultados: a aplicação precisa funcionar. ● Se um banco de dados pode apresentar falhas, n bancos de dados também podem. ● Não se pode evitar falhas, podemos tolerá-las. O que se precisa definir é o nível, a medida de tolerância.
  • 28. Atualização distribuída ● Se durante uma atualização, a operação em um banco de dados falhar, a aplicação já tem condições de informar qual banco falhou e produzir um script para atualizar o banco. ● A aplicação não vai recuperar o banco de dados se o servidor estiver indisponível (sem conexão, máquina física desligada, etc). ● A aplicação pode notificar o sistema de monitoração sobre a falha na atualização também, embora já avise o administrador sobre falhas no processo.
  • 29. Atualização distribuída ● Suponha que haja 10 domínios, e um módulo tenha de ser atualizado. A aplicação irá fazer um loop, gravando nos 10 bancos de dados. ● Se a operação falhar em 1 banco de dados, o problema não é proveniente da aplicação, pois a operação funcionou em 9 bancos. ● Reverter 90% do processo de atualização é menos custoso do que executar um script para 1 banco de dados? ● Dotar a aplicação de controle transacional sobre vários bancos significa aumentar a complexidade da aplicação para atender um estado transitório.
  • 30. Atualização distribuída 6 bancos para atualizar Banco 1 Banco 2 Banco 3 Banco 4 Banco 5 Banco 6 5 são atualizados Banco 1 Banco 2 Banco 3 Banco 4 Banco 5 Banco 6 Revertemos 5 por causa de 1? Banco 1 Banco 2 Banco 3 Banco 4 Banco 5 Banco 6
  • 31. Atualização distribuída ● Atualizações de estrutura de tabelas não são tarefas frequentes. ● Assim com a aplicação pode notificar a monitoração para alertar sobre falhas na atualização, agentes podem automatizar a execução dos scripts, desde que saibamos para onde os scripts precisam ser enviados para serem executados.
  • 32. Modus Operandi da atualização distribuída Instância única do ExpressoV3 Tenta atualizar todos Reporta quais não foram atualizados e gera script Banco 1 Banco 2 Banco 3 Banco n
  • 33. Modus Operandi da atualização distribuída ● Importante: a atualização é feita pelo Gerenciador de Aplicações, que tem uma interface que mostra o que está atualizado, desatualizado e se houve erros.
  • 34. Status de entrega ● Configuração de multidomínio pronta. ● Release em homologação. ● Setup com interface gráfica para atualização distribuída em fase final de desenvolvimento.
  • 35. Limites Mas se houver mais de 70 mil usuários em um domínio? Para esses casos extremos, precisaremos de uma solução mais agressiva.
  • 36. 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]
  • 37. O que o mercado faz
  • 38. O que o mercado faz MySQL tem uma solução para sharding de banco de dados proprietária e paga, o MySQL Cluster.
  • 39. 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]
  • 40. 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]
  • 41. Fato Diante do cenário de restrição para aumento de infraestrutura e limitações para introdução de novas soluções de software, o sharding é a solução mais viável de ser implementada para casos extremos, o que não implica que seja a mais fácil de ser administrada.
  • 42. Hoje Instância da aplicação Banco de Dados
  • 43. Com o Sharding Instância da aplicação SShhaarrdd 11 Shard 2 Shard 3 Shard n
  • 44. 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.
  • 45. 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.
  • 46. 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
  • 47. Realidade Desenvolvemos uma camada para fazer sharding, desconectada do banco de dados. EnterpriseDB
  • 48. 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
  • 49. Os shards no ExpressoV3 serã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.
  • 50. 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!
  • 51. A configuração de múltiplos bancos de dados está pronta ● Já é possível usar o ExpressoV3 com sharding para novas instalações. ● Para migrar instalações existentes, é necessário aguardar a finalização do 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. ● O sharding será um plugin que terá de ser habilitado.
  • 52. Status de entrega ● Suporte a sharding para novas instalações pronta. ● Script de resharding em fase final de desenvolvimento.
  • 53. Sharding é uma solução extrema
  • 54. Outros ajustes para reduzir acesso ao banco ● Uso exclusivo de LDAP para autenticação e controle de usuários e grupos sem sincronização com o banco. ● Redução de tabelas ( eliminaçao quando possviel). ● O uso da sessão será ampliado para evitar o uso do banco de dados, armazenando ACL e containers. ● Podemos usar cache compartilhado para os dados globais dos vários frontends do serviço.
  • 55. 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