SlideShare uma empresa Scribd logo
1 de 78
Baixar para ler offline
Escalando uma plataforma de
e-mail transacional:
aprendizado das trincheiras
Celso Crivelaro (@celsocrivelaro)
Fabio Perrella (@fabioperrella)
SMTP Locaweb
Fabio Perrella
- Eng Computação
- Dev Ruby, Php, Python, Javascript
- Locaweb, time de Email
- 1a geração do projeto do SMTP
@fabioperrella
http://fabioperrella.blogspot.com
Celso Crivelaro
- Engenheiro e Mestre em Engenharia de Computação
- Dev Ruby / Python / Java
- Dev do SMTP Locaweb há 1 ano e meio
@celsocrivelaro
http://crivelaro.me
SMTP Locaweb - Produto
- Plataforma para envio de e-mails transacionais
- Envio de grandes quantidades com velocidade e qualidade
- Relatórios “ao vivo” para acompanhar os envios
- Envio por SMTP e API HTTP
- Webhooks para devoluções de e-mails (bounces)
- 2,5 milhões de e-mails por dia
- Há + de 2 anos no ar
O que é email transacional?
- Disparos granulares
- Notificação de eventos
- Entrega rápida
- Exemplos de uso: CRM, E-commerce, Billing, Websites
Processamento Lento
Processamento Rápido
Arquitetura
Autenticação
Tratamento da
Mensagem
MTA ProvedoresUsuário
Processamento
da Mensagem
Consolidação Painel
SMTP Locaweb
- Arquitetura distribuída
- Painel e APIs -> Ruby on Rails
- Workers -> Ruby
- Postfix milters -> Python
- DB -> Postgres
- Caches e Filas -> Redis
- MTA -> PowerMTA
Desafios
- Estabilidade
- Escalabilidade
- Performance
- Relatórios em “tempo real”
- Combater fraudes
- Manter qualidade da entrega (https://returnpath.
com/downloads/the-ultimate-guide-to-email-deliverability)
Apostas que deram certo!
http://www.lafayetterealestatenews.com/wp-content/uploads/2015/08/Success.jpg
Postgres Schemas
- Posgresql >= 9.3
- http://www.postgresql.org/docs/9.3/static/ddl-schemas.html
SET search_path TO myschema,public;
Public
Tabelas menores
Tabelas em comum
Migração default
Privado (Conta)
Tabelas maiores
Dados de uma conta
Migração ao criar conta
Postgres Schemas
Prós
Isolamento dados
Tamanho das tabelas
Contras
Complexidade
migrações
Relatórios consolidados
Postgres Schemas
Exportação de
Relatórios
Postgres Copy - Exportação de dados
Problema:
- Geração de arquivos > 100mil linhas
- Código ruby iterando do DB e gerando CSV
- Podia levar horas para finalizar geração de arquivo
COPY #{QUERY} TO STDOUT WITH FORMAT CSV
http://www.postgresql.org/docs/9.3/static/app-psql.html#APP-PSQL-META-
COMMANDS-COPY
Separação das Apps
Apps por funcionalidade
Milters
(python)
WorkersPainel
Core Api
Provisionador
DB
API envio
Open-Click
Auth
Policy
Gem “models” para compartilhar código
- Modelos, Migrações, Códigos em comum extraídos para gem
- Facilidade para usar Activerecord
- Atenção na atualização de novas versões da gem
- Dica: http://ryanbigg.com/2013/08/bundler-local-paths
Apps por funcionalidade
Milters
(python)
WorkersPainel
Core Api
Provisionador
DB
API envio
Open-Click
Auth
Policy
Problemas
- Ambiente distribuído
- Testes de integração eram essenciais!
- Configuração do Postfix, Milters, Nginx não é trivial
- Dev novo não conseguia levantar ambiente completo
- Incompatibilidades Mac OS X / Linux
- Versionamento de dependencias (ex: Redis)
Docker com ambiente completo
- Docker-compose! (https://docs.docker.com/compose)
- Mailcatcher (https://mailcatcher.me)
- Fluxo completo do email
- Base para configuração de produção
Docker
Por onde começar:
https://training.docker.com/self-paced-training
Vale gastar um tempo!
Logs
Archive de logs centralizado
- Syslog ajuda!
- Log rotate a cada 15min
- Archive em storage organizado por servidor/data
- Grep em multiplos servidores/datas
- Cuidado: limite de caracteres syslog (aprox 1500 p/ mensagem)
Caches e filas no Redis
- Milters dependem de dados das contas (API)
- Performance
- TTL
- Facilidade para debug / “queries” (comparando com memcache)
$ redis-cli monitor | grep “qquer coisa”
- Estruturas de dados: string, hashes, arrays, sets
- Operações atômicas / garantia para concorrência
Redis
- Sharding com twemproxy (https://github.com/twitter/twemproxy)
- Persistência desligada: app deve saber “esquentar” o cache!
- Alternativa: Master / Slave (local)
- Futuro: Redis Cluster
- Atenção à versão do Redis, pode não ser a mesma da sua
máquina (docker nele!)
https://github.com/locaweb/heartcheck
Heartcheck
Redis DB Sidekiq Telnet
ProcessosAPIs
Mount
Points
DNS
Gráficos!
Painel de monitoração (cockpit)
- Ajuda saber quando precisamos aumentar capacidade e onde
- Investigação de problemas
- Grafana ( http://grafana.org )
- New Relic / AppSignal
Painel de monitoração (cockpit)
Deploy contínuo
(quase...)
Toggler - Feature Toggle
- Deploy contínuo sem impacto
- Exibir/esconder feature nova para determinadas contas
- Ligar/desligar features sem deploy
De MVP para 2,5 MM
Processamento Lento
Processamento Rápido
Voltando ao diagrama...
Autenticação
Tratamento da
Mensagem
MTA ProvedoresUsuário
Processamento
da Mensagem
Consolidação
Requisitos não funcionais
Alta Disponibilidade Performance
EscalabilidadeResiliência
Estabilidade
Isole os componentes
críticos
Aplicação Painel
Painel Web API Interna - HTTP
Recursos
Pool de
Conexões
App Server
Regras de
Negócio
Integrações
Aplicação API InternaAplicação Painel
Painel Web API Interna - HTTP
Recursos
Pool de
Conexões
App
Server
Regras de
Negócio
Integrações
Recursos
Pool de
Conexões
App
Server
Regras de
Negócio
Integrações
Separação de Máquinas por Aplicação
Mesma máquina
Interdependência de libs
Consumo de Recursos
Versão da Linguagem
Máquina separada
Lib por App
Aplicação não afeta
outra
Upgrades podem ser
feitos em separado
Poucos Componentes
=
Pouca Manutenção
API InternaPainel
Novas Funcionalidades Estabilidade/Performance
Muitas atualizações Poucas atualizações
Framework para Web Framework para API
Quebrou: ninguém morre
Quebrou: ponto central
de falha
Usar tecnologia que não domina...
Postfix Milter libmilter
pymilter
app
Protoco Milter
- Libs
=
+ Alegria
Escalabilidade
Busque o dado de
memórias + rápidas e de
lugares pertos
Estratégia de Cache Padrão
App
Cache
Fonte
1
2
3
1a Estratégia de Cache
App
Fonte App Cache
App
TTL curto
2a Estratégia de Cache
App
Fonte App
Cache
App
Cache
Cache
TTL curto
TTL curto
TTL curto
3a Estratégia de Cache
App
Fonte App
Cache
Slave
App
Cache
Slave
Cache
Slave
TTL longo
TTL longo
TTL longo
Cache
Master
4a Estratégia de Cache
App
Fonte App
Cache
Slave
App
Cache
Slave
Cache
Slave
TTL longo
TTL longo
TTL longo
Cache
Master
Cache
Manager
Balanceamento de
Carga
App
Client App
App
Load
Balancer
App
Client
App
App
Load
Balancer
App
App
App
Load
Balancer
Load
Balancer
Client
Load
Balancer
Cache
Client
Load
Balancer
Cache
Use SEMPRE pool de
recursos
Problemas com Pool de Recursos
Não explode erros no
início
Esperar de liberação
de recurso
Timeouts são
esporádicos
Deadlocks
Timeouts baixos
=
Fail Fast
Coisas que devíamos
ter feito
Documentação de Arquitetura
- Documentação sobre decisões de arquitetura
http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-
decisions
- Faltou documentação de decisões
Worker com Ruby puro
- Fizemos um grande workers de processamento de mensagens
- Em Ruby puro…
- Sem recursos de mensageria
- Difícil ver errors, retentativa, tamanho da fila….
Não reinvente a roda
Saiba os limites...
Teste de Carga
Teste de Estresse
Teste de Pico
Algumas referências
Obrigado!!!
Desconto especial ao evento: bit.ly/smtpqcon

Mais conteúdo relacionado

Mais procurados

ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETRenato Groff
 
WebAPI-Route-Translate-BasicAuth
WebAPI-Route-Translate-BasicAuthWebAPI-Route-Translate-BasicAuth
WebAPI-Route-Translate-BasicAuthJean Lima Lopes
 
Arquitetura funcional em microservices, 4 anos depois
Arquitetura funcional em microservices, 4 anos depoisArquitetura funcional em microservices, 4 anos depois
Arquitetura funcional em microservices, 4 anos depoisLucas Cavalcanti dos Santos
 
Integração de Sistemas utilizando Apache Camel
Integração de Sistemas utilizando Apache CamelIntegração de Sistemas utilizando Apache Camel
Integração de Sistemas utilizando Apache CamelPedro Oliveira
 
Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2Pablo Nóbrega
 
Desenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EEDesenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EELuan Felipe Knebel
 
[Mini Palestra] - Deploy de-apps-php-com-capistrano
[Mini Palestra] - Deploy de-apps-php-com-capistrano[Mini Palestra] - Deploy de-apps-php-com-capistrano
[Mini Palestra] - Deploy de-apps-php-com-capistranoCode Experts Learning
 
Quais são os steps de que deve conter na sua pipeline?
Quais são os steps de que deve conter na sua pipeline?Quais são os steps de que deve conter na sua pipeline?
Quais são os steps de que deve conter na sua pipeline?Elias Nogueira
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPelliando dias
 
Lync Server 2010 administrando o Lync Server 2010
Lync Server 2010 administrando o Lync Server 2010Lync Server 2010 administrando o Lync Server 2010
Lync Server 2010 administrando o Lync Server 2010brunoestrozi
 
Lync Server 2010 instalação configuração upgrade e coexistência
Lync Server 2010 instalação configuração upgrade e coexistênciaLync Server 2010 instalação configuração upgrade e coexistência
Lync Server 2010 instalação configuração upgrade e coexistênciabrunoestrozi
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
Integrando E-mail ao IBM Connections
Integrando E-mail ao IBM ConnectionsIntegrando E-mail ao IBM Connections
Integrando E-mail ao IBM Connectionsrodrigoareis
 

Mais procurados (18)

ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
 
WebAPI-Route-Translate-BasicAuth
WebAPI-Route-Translate-BasicAuthWebAPI-Route-Translate-BasicAuth
WebAPI-Route-Translate-BasicAuth
 
Sessao2 ASP
Sessao2 ASPSessao2 ASP
Sessao2 ASP
 
Sessao2
Sessao2Sessao2
Sessao2
 
Arquitetura funcional em microservices, 4 anos depois
Arquitetura funcional em microservices, 4 anos depoisArquitetura funcional em microservices, 4 anos depois
Arquitetura funcional em microservices, 4 anos depois
 
Integração de Sistemas utilizando Apache Camel
Integração de Sistemas utilizando Apache CamelIntegração de Sistemas utilizando Apache Camel
Integração de Sistemas utilizando Apache Camel
 
Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2
 
Desenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EEDesenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EE
 
PHP + Flex
PHP + FlexPHP + Flex
PHP + Flex
 
[Mini Palestra] - Deploy de-apps-php-com-capistrano
[Mini Palestra] - Deploy de-apps-php-com-capistrano[Mini Palestra] - Deploy de-apps-php-com-capistrano
[Mini Palestra] - Deploy de-apps-php-com-capistrano
 
Quais são os steps de que deve conter na sua pipeline?
Quais são os steps de que deve conter na sua pipeline?Quais são os steps de que deve conter na sua pipeline?
Quais são os steps de que deve conter na sua pipeline?
 
Laravel 5
Laravel 5Laravel 5
Laravel 5
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHP
 
O Futuro do ASP.NET
O Futuro do ASP.NETO Futuro do ASP.NET
O Futuro do ASP.NET
 
Lync Server 2010 administrando o Lync Server 2010
Lync Server 2010 administrando o Lync Server 2010Lync Server 2010 administrando o Lync Server 2010
Lync Server 2010 administrando o Lync Server 2010
 
Lync Server 2010 instalação configuração upgrade e coexistência
Lync Server 2010 instalação configuração upgrade e coexistênciaLync Server 2010 instalação configuração upgrade e coexistência
Lync Server 2010 instalação configuração upgrade e coexistência
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Integrando E-mail ao IBM Connections
Integrando E-mail ao IBM ConnectionsIntegrando E-mail ao IBM Connections
Integrando E-mail ao IBM Connections
 

Semelhante a Escalando uma plataforma de e-mail transacional- aprendizado das trincheiras

Roadshow TOTVS RM 2010 v.11.0
Roadshow TOTVS RM 2010 v.11.0Roadshow TOTVS RM 2010 v.11.0
Roadshow TOTVS RM 2010 v.11.0Andre Bretas
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyRelsi Maron
 
CakeSP - Specta Platform: CakePHP, Flex, Fake
CakeSP - Specta Platform: CakePHP, Flex, FakeCakeSP - Specta Platform: CakePHP, Flex, Fake
CakeSP - Specta Platform: CakePHP, Flex, FakeSpecta TI
 
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...tdc-globalcode
 
Arquitetura da plataforma com o Biztalk Server
Arquitetura da plataforma com o Biztalk ServerArquitetura da plataforma com o Biztalk Server
Arquitetura da plataforma com o Biztalk ServerMarkus Christen
 
.NET 2015, ASP.NET 5, C# 6 e tudo mais
.NET 2015, ASP.NET 5, C# 6 e tudo mais.NET 2015, ASP.NET 5, C# 6 e tudo mais
.NET 2015, ASP.NET 5, C# 6 e tudo maisakamud
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaAmazon Web Services LATAM
 
Aplicações Web Multiplataforma com ASP .NET Core MVC - FATEC
Aplicações Web Multiplataforma com ASP .NET Core MVC - FATECAplicações Web Multiplataforma com ASP .NET Core MVC - FATEC
Aplicações Web Multiplataforma com ASP .NET Core MVC - FATECRafael Pessoni
 
Web Tools Pt B R
Web Tools Pt  B RWeb Tools Pt  B R
Web Tools Pt B Rguestb9d145
 
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...tdc-globalcode
 
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...Marcelo Palladino
 
Desenvolvimento de sistemas com mensageria
Desenvolvimento de sistemas com mensageriaDesenvolvimento de sistemas com mensageria
Desenvolvimento de sistemas com mensageriaPaula Santana
 
Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019
Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019
Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019Renato Groff
 
10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...
10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...
10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...Renato Groff
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareNorberto Santos
 
Tendências do Mercado de Internet
Tendências do Mercado de InternetTendências do Mercado de Internet
Tendências do Mercado de InternetVanessa Oliveira
 
BluDotNet - Conhecendo o Team Foundation Server 2010
BluDotNet - Conhecendo o Team Foundation Server 2010BluDotNet - Conhecendo o Team Foundation Server 2010
BluDotNet - Conhecendo o Team Foundation Server 2010Rafael Leonhardt
 

Semelhante a Escalando uma plataforma de e-mail transacional- aprendizado das trincheiras (20)

Roadshow TOTVS RM 2010 v.11.0
Roadshow TOTVS RM 2010 v.11.0Roadshow TOTVS RM 2010 v.11.0
Roadshow TOTVS RM 2010 v.11.0
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2py
 
CakeSP - Specta Platform: CakePHP, Flex, Fake
CakeSP - Specta Platform: CakePHP, Flex, FakeCakeSP - Specta Platform: CakePHP, Flex, Fake
CakeSP - Specta Platform: CakePHP, Flex, Fake
 
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
 
Arquitetura da plataforma com o Biztalk Server
Arquitetura da plataforma com o Biztalk ServerArquitetura da plataforma com o Biztalk Server
Arquitetura da plataforma com o Biztalk Server
 
.NET 2015, ASP.NET 5, C# 6 e tudo mais
.NET 2015, ASP.NET 5, C# 6 e tudo mais.NET 2015, ASP.NET 5, C# 6 e tudo mais
.NET 2015, ASP.NET 5, C# 6 e tudo mais
 
Um pouco sobre APIs
Um pouco sobre APIsUm pouco sobre APIs
Um pouco sobre APIs
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
Aplicações Web Multiplataforma com ASP .NET Core MVC - FATEC
Aplicações Web Multiplataforma com ASP .NET Core MVC - FATECAplicações Web Multiplataforma com ASP .NET Core MVC - FATEC
Aplicações Web Multiplataforma com ASP .NET Core MVC - FATEC
 
Web Tools Pt B R
Web Tools Pt  B RWeb Tools Pt  B R
Web Tools Pt B R
 
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
 
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
 
Desenvolvimento de sistemas com mensageria
Desenvolvimento de sistemas com mensageriaDesenvolvimento de sistemas com mensageria
Desenvolvimento de sistemas com mensageria
 
Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019
Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019
Desenvolvimento de APIs REST Multiplataforma com ASP.NET Core - Julho-2019
 
10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...
10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...
10 dicas úteis para simplificar o desenvolvimento em ASP.NET Core - ASP.NET C...
 
IBM WebSphere Portal
IBM WebSphere PortalIBM WebSphere Portal
IBM WebSphere Portal
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de Software
 
Tendências do Mercado de Internet
Tendências do Mercado de InternetTendências do Mercado de Internet
Tendências do Mercado de Internet
 
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
 
BluDotNet - Conhecendo o Team Foundation Server 2010
BluDotNet - Conhecendo o Team Foundation Server 2010BluDotNet - Conhecendo o Team Foundation Server 2010
BluDotNet - Conhecendo o Team Foundation Server 2010
 

Mais de Celso Crivelaro

Testing Network Conditions with ToxiProxy
Testing Network Conditions with ToxiProxyTesting Network Conditions with ToxiProxy
Testing Network Conditions with ToxiProxyCelso Crivelaro
 
Banco temporal Influxdb + Grafana: Operando sua Plataforma
Banco temporal Influxdb + Grafana: Operando sua PlataformaBanco temporal Influxdb + Grafana: Operando sua Plataforma
Banco temporal Influxdb + Grafana: Operando sua PlataformaCelso Crivelaro
 
Separando a regra de negócios do Rails
Separando a regra de negócios do RailsSeparando a regra de negócios do Rails
Separando a regra de negócios do RailsCelso Crivelaro
 
What devs should know about email
What devs should know about emailWhat devs should know about email
What devs should know about emailCelso Crivelaro
 
High Performance Architecture Patterns
High Performance Architecture PatternsHigh Performance Architecture Patterns
High Performance Architecture PatternsCelso Crivelaro
 
O que devs precisam saber sobre email
O que devs precisam saber sobre emailO que devs precisam saber sobre email
O que devs precisam saber sobre emailCelso Crivelaro
 
High Performance Architecture Patterns
High Performance Architecture PatternsHigh Performance Architecture Patterns
High Performance Architecture PatternsCelso Crivelaro
 
Treinamento apresentação
Treinamento apresentaçãoTreinamento apresentação
Treinamento apresentaçãoCelso Crivelaro
 
WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...
WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...
WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...Celso Crivelaro
 
WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...
WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...
WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...Celso Crivelaro
 

Mais de Celso Crivelaro (16)

Testing Network Conditions with ToxiProxy
Testing Network Conditions with ToxiProxyTesting Network Conditions with ToxiProxy
Testing Network Conditions with ToxiProxy
 
Actor model in Ruby
Actor model in RubyActor model in Ruby
Actor model in Ruby
 
Banco temporal Influxdb + Grafana: Operando sua Plataforma
Banco temporal Influxdb + Grafana: Operando sua PlataformaBanco temporal Influxdb + Grafana: Operando sua Plataforma
Banco temporal Influxdb + Grafana: Operando sua Plataforma
 
Separando a regra de negócios do Rails
Separando a regra de negócios do RailsSeparando a regra de negócios do Rails
Separando a regra de negócios do Rails
 
What devs should know about email
What devs should know about emailWhat devs should know about email
What devs should know about email
 
High Performance Architecture Patterns
High Performance Architecture PatternsHigh Performance Architecture Patterns
High Performance Architecture Patterns
 
O que devs precisam saber sobre email
O que devs precisam saber sobre emailO que devs precisam saber sobre email
O que devs precisam saber sobre email
 
High Performance Architecture Patterns
High Performance Architecture PatternsHigh Performance Architecture Patterns
High Performance Architecture Patterns
 
Apresentação GOLD
Apresentação GOLDApresentação GOLD
Apresentação GOLD
 
Treinamento apresentação
Treinamento apresentaçãoTreinamento apresentação
Treinamento apresentação
 
WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...
WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...
WTA 2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recom...
 
WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...
WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...
WTA2012 - Proposta de Modelo Adaptativo para Geração de Contextos na Recome...
 
Primeiro step
Primeiro stepPrimeiro step
Primeiro step
 
Cv
CvCv
Cv
 
Formas decontratação
Formas decontrataçãoFormas decontratação
Formas decontratação
 
Negociação
NegociaçãoNegociação
Negociação
 

Escalando uma plataforma de e-mail transacional- aprendizado das trincheiras