SlideShare uma empresa Scribd logo
Pragmatismo e Simplicidade
Cases da Arquitetura do Stack Overflow
2
☉ recifense
☉ bacharela em Ciência da Computação, UFPE
☉ mestre em Informática, PUC-Rio
☉ programando desde 2004
☉ full-stack dev na Stack Overflow desde 2014
☉ três gatas, um cachorro
Roberta Lopes Arcoverde
na fila do pão
3
☉ começou em 2008
☉ 16MM perguntas
☉ 24MM respostas
☉ 9MM usuários cadastrados
☉ 50MM usuários únicos/mês
☉ top 50 sites mais acessados do mundo
(top 20 no Brasil)
> 170 sites
alguns números do mês passado
5
☉ 2,488,992,677 page views
☉ 8,593,556,666 requisições
☉ 90,499,664,505,069 bytes enviados
☉ 24,492,247,320 SQL queries executadas
☉ 20,057,786,101 comandos Redis*
☉ 500,000 websockets concorrentes
☉ 18.3ms tempo médio de page load
março de 2018
operando entre 5 e 10% da
nossa capacidade
imagem gentilmente cedida por Marco (@sklivvz) em http://www.slideshare.net/howtoweb/marco-cecconi-stack-overflow-architecture
8
☉ maior controle da infra (rede, cabos,
localização, upgrades)
☉ sysadmins
☉ custo $$$
☉ segurança e privacidade
☉ dá pra desenhar nos servidores :)
data center próprio?
comofas?
priorizando performance
10
☉ c#
☉ asp.net mvc
☉ sql server
☉ typescript/jquery
☉ elasticsearch
☉ redis
☉ ha proxy
tech stack & ferramental
11
☉ minimizar alocações
▮ emissão de IL, métodos estáticos, memoization
☉ minimizar acessos ao banco
▮ de-normalizar dados, caching
☉ cachear sempre que possível (L1, L2, L3)
▮ padrão de acesso ao site é predominantemente somente-leitura
▪ altamente cacheável!
☉ todo dev precisa ser um DBA em potencial
▮ queries devem rodar em < 1ms
padrões comuns de arquitetura e código
12
arquitetura monolítica?
13
Paragraph copy. Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Sed molestie lorem et ipsum euismod
volutpat. Cras et neque euismod, suscipit turpis et,
hendrerit libero.
● First level bullet point
○ Second level bullet point
■ Third level bullet point
testes?
Click to edit slide subtitle
☉ arquitetura não é testável
▮ sem injeção de dependências, sem mocks,
acessos estáticos e service locators
☉ alguns testes automatizados, mas todos de
integração
☉ nosso bug board: meta.stackexchange.com
14
☉ dapper
☉ mini-profiler
☉ OpServer
☉ protobuf-net
☉ Jil
☉ StackExchange.Redis
☉ StackExchange.Precompiler
reinventando a roda
https://github.com/stackexchange
15
1. solução mais simples que resolve o problema
2. encontre os gargalos
3. remova os gargalos
3 princípios básicos
mas performance não é apenas tempo
de execução e recursos de máquina...
simplicidade também é (ou
também afeta) performance
17
regra do escoteiro
18
☉ build para produção em 4’30’’
☉ tempo de compilação (local) entre 30’’ e 45’’
☉ ferramentas que facilitem debug
▮ mini-profiler, exceções com mapeamento pro código fonte
☉ ambiente local fiel ao de produção e totalmente automatizado
▮ todo o ambiente montado em um click
▮ inclusive configurações de VPN e download de aplicações
▮ não, nada de VM
mais números
19
☉ está sempre agressivamente atualizado
▮ últimas versões de bibliotecas, ferramentas,
linguagem, APIs
☉ constantemente refatorado
☉ consistente
☉ é simples, rápido, leve e objetivo mas também
acoplado, intestável e pouco modularizado
conclusão
nosso código
20
☉ é boring
☉ cheio de roda reinventada
☉ não usamos micro serviços
☉ nem injeção de dependência
☉ cloud é legal, mas também não usamos
☉ testes são bem legais, mas também não tá tendo
☉ pragmaticamente: não precisamos de nada disso
pra funcionar, e funcionar BEM
conclusão
nossa arquitetura
Thanks!
qualquer coisa, pode me encontrar em:
@rla4 ou roberta@stackoverflow.com
22
☉ repositório é relativamente pequeno
☉ necessidade de paralelização é
localizada em alguns poucos módulos
☉ o time é pequeno e maduro
☉ deploy sem dependências
☉ ambiente local simplificado
▮ menos configurações
▮ no endpoints
☉ performance
▮ call > callvirt
☉ debug
arquitetura monolítica?

Mais conteúdo relacionado

Mais procurados

Introdução ao NodeJS
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJS
Giovanni Bassi
 
Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?
Pablo Souza
 
Node.js, Uma breve introdução
Node.js, Uma breve introduçãoNode.js, Uma breve introdução
Node.js, Uma breve introdução
Pablo Feijó
 
Por que Node JS?
Por que Node JS?Por que Node JS?
Por que Node JS?
Austin Felipe Santos
 
O que é nodejs, cases e vantagens
O que é nodejs, cases e vantagensO que é nodejs, cases e vantagens
O que é nodejs, cases e vantagens
Rodrigo Matheus
 
Conhecendo o Nodejs
Conhecendo o NodejsConhecendo o Nodejs
Conhecendo o Nodejs
Caio Cutrim
 
.NET Core + Selenium: extração de dados de páginas Web - Campinas .NET
.NET Core + Selenium: extração de dados de páginas Web - Campinas .NET.NET Core + Selenium: extração de dados de páginas Web - Campinas .NET
.NET Core + Selenium: extração de dados de páginas Web - Campinas .NET
Renato Groff
 
Websocket
WebsocketWebsocket
Websocket
maxii
 
.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019
.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019
.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019
Renato Groff
 
Node.js
Node.jsNode.js
Node.js
luizhse
 
O CartolaFC e o processo de desenvolvimento na globo.com
O CartolaFC e o processo de desenvolvimento na globo.comO CartolaFC e o processo de desenvolvimento na globo.com
O CartolaFC e o processo de desenvolvimento na globo.com
Alexandre Saboia Fuziyama
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
Carlos Santos
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
Filipe Falcão
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript
Carlos Santos
 
Javascript nos dias de hoje
Javascript nos dias de hojeJavascript nos dias de hoje
Javascript nos dias de hoje
Caio Ribeiro Pereira
 
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral
Renato Groff
 
Apresentação
ApresentaçãoApresentação
Apresentação
Marcelo de castro
 
ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017
ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017
ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017
Renato Groff
 
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Renato Groff
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Renato Groff
 

Mais procurados (20)

Introdução ao NodeJS
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJS
 
Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?
 
Node.js, Uma breve introdução
Node.js, Uma breve introduçãoNode.js, Uma breve introdução
Node.js, Uma breve introdução
 
Por que Node JS?
Por que Node JS?Por que Node JS?
Por que Node JS?
 
O que é nodejs, cases e vantagens
O que é nodejs, cases e vantagensO que é nodejs, cases e vantagens
O que é nodejs, cases e vantagens
 
Conhecendo o Nodejs
Conhecendo o NodejsConhecendo o Nodejs
Conhecendo o Nodejs
 
.NET Core + Selenium: extração de dados de páginas Web - Campinas .NET
.NET Core + Selenium: extração de dados de páginas Web - Campinas .NET.NET Core + Selenium: extração de dados de páginas Web - Campinas .NET
.NET Core + Selenium: extração de dados de páginas Web - Campinas .NET
 
Websocket
WebsocketWebsocket
Websocket
 
.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019
.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019
.NET Core 3.0 e ASP.NET Core 3.0: principais novidades - FCamara - Agosto-2019
 
Node.js
Node.jsNode.js
Node.js
 
O CartolaFC e o processo de desenvolvimento na globo.com
O CartolaFC e o processo de desenvolvimento na globo.comO CartolaFC e o processo de desenvolvimento na globo.com
O CartolaFC e o processo de desenvolvimento na globo.com
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript
 
Javascript nos dias de hoje
Javascript nos dias de hojeJavascript nos dias de hoje
Javascript nos dias de hoje
 
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral
 
Apresentação
ApresentaçãoApresentação
Apresentação
 
ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017
ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017
ASP.NET Core e Linux - ASP.NET Core Day - Maio/2017
 
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
 

Semelhante a Pragmatismo e Simplicidade

QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
Gleicon Moraes
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Renato Groff
 
Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?
Mozart Diniz
 
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaTrês anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Felipe Hummel
 
Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018
Renato Groff
 
Introdução ao Asp.Net Mvc
Introdução ao Asp.Net MvcIntrodução ao Asp.Net Mvc
Introdução ao Asp.Net Mvc
Giovanni Bassi
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
Flávio Lisboa
 
Arquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaArquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em Java
Breno Vitorino
 
Docker para Desenvolvedores - Developers-BR - Julho-2018
Docker para Desenvolvedores - Developers-BR - Julho-2018Docker para Desenvolvedores - Developers-BR - Julho-2018
Docker para Desenvolvedores - Developers-BR - Julho-2018
Renato Groff
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalier
Gleicon Moraes
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Renato Groff
 
Dnad 2012 iis - uma questão de arquitetura
Dnad 2012   iis - uma questão de arquiteturaDnad 2012   iis - uma questão de arquitetura
Dnad 2012 iis - uma questão de arquitetura
Sidney Filho
 
IIS - Uma questão de arquitetura
IIS - Uma questão de arquiteturaIIS - Uma questão de arquitetura
IIS - Uma questão de arquitetura
sidneyfilho
 
5 Tecnologias que todo Desenvolvedor Web deveria conhecer - Developers-BR - O...
5 Tecnologias que todo Desenvolvedor Web deveria conhecer - Developers-BR - O...5 Tecnologias que todo Desenvolvedor Web deveria conhecer - Developers-BR - O...
5 Tecnologias que todo Desenvolvedor Web deveria conhecer - Developers-BR - O...
Renato Groff
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Giovanni Bassi
 
ASP.NET vNext no MAC OS
ASP.NET vNext no MAC OSASP.NET vNext no MAC OS
ASP.NET vNext no MAC OS
Jorge Maia
 
.NET Core + Docker: containers e seus benefícios no deployment de aplicações
.NET Core + Docker: containers e seus benefícios no deployment de aplicações.NET Core + Docker: containers e seus benefícios no deployment de aplicações
.NET Core + Docker: containers e seus benefícios no deployment de aplicações
Renato Groff
 
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Renato Groff
 
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Renato Groff
 
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Renato Groff
 

Semelhante a Pragmatismo e Simplicidade (20)

QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
 
Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?
 
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaTrês anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
 
Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018
 
Introdução ao Asp.Net Mvc
Introdução ao Asp.Net MvcIntrodução ao Asp.Net Mvc
Introdução ao Asp.Net Mvc
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 
Arquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaArquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em Java
 
Docker para Desenvolvedores - Developers-BR - Julho-2018
Docker para Desenvolvedores - Developers-BR - Julho-2018Docker para Desenvolvedores - Developers-BR - Julho-2018
Docker para Desenvolvedores - Developers-BR - Julho-2018
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalier
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
 
Dnad 2012 iis - uma questão de arquitetura
Dnad 2012   iis - uma questão de arquiteturaDnad 2012   iis - uma questão de arquitetura
Dnad 2012 iis - uma questão de arquitetura
 
IIS - Uma questão de arquitetura
IIS - Uma questão de arquiteturaIIS - Uma questão de arquitetura
IIS - Uma questão de arquitetura
 
5 Tecnologias que todo Desenvolvedor Web deveria conhecer - Developers-BR - O...
5 Tecnologias que todo Desenvolvedor Web deveria conhecer - Developers-BR - O...5 Tecnologias que todo Desenvolvedor Web deveria conhecer - Developers-BR - O...
5 Tecnologias que todo Desenvolvedor Web deveria conhecer - Developers-BR - O...
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
 
ASP.NET vNext no MAC OS
ASP.NET vNext no MAC OSASP.NET vNext no MAC OS
ASP.NET vNext no MAC OS
 
.NET Core + Docker: containers e seus benefícios no deployment de aplicações
.NET Core + Docker: containers e seus benefícios no deployment de aplicações.NET Core + Docker: containers e seus benefícios no deployment de aplicações
.NET Core + Docker: containers e seus benefícios no deployment de aplicações
 
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
 
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
 
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
 

Pragmatismo e Simplicidade

  • 1. Pragmatismo e Simplicidade Cases da Arquitetura do Stack Overflow
  • 2. 2 ☉ recifense ☉ bacharela em Ciência da Computação, UFPE ☉ mestre em Informática, PUC-Rio ☉ programando desde 2004 ☉ full-stack dev na Stack Overflow desde 2014 ☉ três gatas, um cachorro Roberta Lopes Arcoverde na fila do pão
  • 3. 3 ☉ começou em 2008 ☉ 16MM perguntas ☉ 24MM respostas ☉ 9MM usuários cadastrados ☉ 50MM usuários únicos/mês ☉ top 50 sites mais acessados do mundo (top 20 no Brasil)
  • 5. alguns números do mês passado 5 ☉ 2,488,992,677 page views ☉ 8,593,556,666 requisições ☉ 90,499,664,505,069 bytes enviados ☉ 24,492,247,320 SQL queries executadas ☉ 20,057,786,101 comandos Redis* ☉ 500,000 websockets concorrentes ☉ 18.3ms tempo médio de page load março de 2018 operando entre 5 e 10% da nossa capacidade
  • 6.
  • 7. imagem gentilmente cedida por Marco (@sklivvz) em http://www.slideshare.net/howtoweb/marco-cecconi-stack-overflow-architecture
  • 8. 8 ☉ maior controle da infra (rede, cabos, localização, upgrades) ☉ sysadmins ☉ custo $$$ ☉ segurança e privacidade ☉ dá pra desenhar nos servidores :) data center próprio?
  • 10. 10 ☉ c# ☉ asp.net mvc ☉ sql server ☉ typescript/jquery ☉ elasticsearch ☉ redis ☉ ha proxy tech stack & ferramental
  • 11. 11 ☉ minimizar alocações ▮ emissão de IL, métodos estáticos, memoization ☉ minimizar acessos ao banco ▮ de-normalizar dados, caching ☉ cachear sempre que possível (L1, L2, L3) ▮ padrão de acesso ao site é predominantemente somente-leitura ▪ altamente cacheável! ☉ todo dev precisa ser um DBA em potencial ▮ queries devem rodar em < 1ms padrões comuns de arquitetura e código
  • 13. 13 Paragraph copy. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed molestie lorem et ipsum euismod volutpat. Cras et neque euismod, suscipit turpis et, hendrerit libero. ● First level bullet point ○ Second level bullet point ■ Third level bullet point testes? Click to edit slide subtitle ☉ arquitetura não é testável ▮ sem injeção de dependências, sem mocks, acessos estáticos e service locators ☉ alguns testes automatizados, mas todos de integração ☉ nosso bug board: meta.stackexchange.com
  • 14. 14 ☉ dapper ☉ mini-profiler ☉ OpServer ☉ protobuf-net ☉ Jil ☉ StackExchange.Redis ☉ StackExchange.Precompiler reinventando a roda https://github.com/stackexchange
  • 15. 15 1. solução mais simples que resolve o problema 2. encontre os gargalos 3. remova os gargalos 3 princípios básicos
  • 16. mas performance não é apenas tempo de execução e recursos de máquina... simplicidade também é (ou também afeta) performance
  • 18. 18 ☉ build para produção em 4’30’’ ☉ tempo de compilação (local) entre 30’’ e 45’’ ☉ ferramentas que facilitem debug ▮ mini-profiler, exceções com mapeamento pro código fonte ☉ ambiente local fiel ao de produção e totalmente automatizado ▮ todo o ambiente montado em um click ▮ inclusive configurações de VPN e download de aplicações ▮ não, nada de VM mais números
  • 19. 19 ☉ está sempre agressivamente atualizado ▮ últimas versões de bibliotecas, ferramentas, linguagem, APIs ☉ constantemente refatorado ☉ consistente ☉ é simples, rápido, leve e objetivo mas também acoplado, intestável e pouco modularizado conclusão nosso código
  • 20. 20 ☉ é boring ☉ cheio de roda reinventada ☉ não usamos micro serviços ☉ nem injeção de dependência ☉ cloud é legal, mas também não usamos ☉ testes são bem legais, mas também não tá tendo ☉ pragmaticamente: não precisamos de nada disso pra funcionar, e funcionar BEM conclusão nossa arquitetura
  • 21. Thanks! qualquer coisa, pode me encontrar em: @rla4 ou roberta@stackoverflow.com
  • 22. 22 ☉ repositório é relativamente pequeno ☉ necessidade de paralelização é localizada em alguns poucos módulos ☉ o time é pequeno e maduro ☉ deploy sem dependências ☉ ambiente local simplificado ▮ menos configurações ▮ no endpoints ☉ performance ▮ call > callvirt ☉ debug arquitetura monolítica?