a arquitetura do stack overflow - qcon rio 2016...

35
A ARQUITETURA DO STACK OVERFLOW Roberta Arcoverde / @rla4 QCon Rio 2015

Upload: trinhthu

Post on 12-May-2018

225 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

A ARQUITETURA DO STACK OVERFLOWRoberta Arcoverde / @rla4

QCon Rio 2015

Page 2: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

/WHOIS ROBERTArecifensecientista da computação, UFPE, 2008mestre em informática, PUC-Rio, 2012programadora desde 2004full-stack developer na Stack Exchange desde 2014 (mas gostomesmo é de backend)mãe do Dostoievski e do Turing

Page 3: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

começou em 200810M perguntas18M respostas50M visitantes únicos/mêstop 50 sites mais acessados do mundo*

*Alexa, Quantcast

Page 4: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

>140 SITES

Page 5: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

APENAS NO ÚLTIMO MÊS NÓS TIVEMOS1,468,389,303 page views5,183,954,727 HTTP hits71,562,833,811,315 bytes enviados3,202,505,376 CDN hits19,532,899,854 SQL queries executadas81,505,688,410 comandos Redis18.2ms tempo médio de page load

...operando a 5-10% da nossa capacidade

Page 6: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

TUDO ISSO COM APENAS 9 SERVIDORES*

*mas 1 bastaria

http://stackexchange.com/about/performance****tá meio desatualizado, mas dá uma ideia

Page 7: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

NOSSO DC EM UMA IMAGEM*

*imagem originalmente apresentada pelo Marco (@sklivvz) em http://www.slideshare.net/howtoweb/marco-cecconi-stack-overflow-architecture

Page 8: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

...OU MELHOR, DUAS

New York, NY Denver, CO

Page 9: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

...SÓ MAIS UMA IMAGEM...galeria de fotos: http://imgur.com/a/X1HoY

Page 10: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

COMOFAS?

UMA LOUCA OBSESSÃO: PERFORMANCE!

Page 11: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

TIME34 devs6 sysadmins6 designers75% do timetrabalharemotamente

http://stackexchange.com/about/team

Page 12: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

STACKc#, asp.net mvcless/jquerysql serverelasticsearchredis

Page 13: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

TEH CODEZ

muita emissão de IL, muito método estático

Page 14: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

ARQUITETURA MONOLÍTICA

Page 15: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

TESTES?

Page 16: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

META STACKEXCHANGE!isto é, testando direto com o usuário final :D

http://meta.stackexchange.com

Page 17: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

COMUNIDADE É AMOR

http://meta.stackexchange.com/questions/71780/lol-debugging-are-we-stack-overflow-homepage-alerts-false

Page 18: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page
Page 19: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

3 PRINCÍPIOS BÁSICOS1. solução mais simples possível2. encontre os gargalos (medição)3. remova os gargalos

Page 20: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

ENCONTRE OS GARGALOS

https://github.com/MiniProfiler

Page 21: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

ENCONTRE OS GARGALOS II

https://github.com/opserver/Opserver

Page 22: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

REMOVENDO OS GARGALOSé indispensável que todo desenvolvedor entenda

profundamente como funcionam planos de execução

todo dev é um DBA em potencialcomo funcionam índices (e seus trade-offs)paginaçãosargability

Page 23: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

REMOVENDO OS GARGALOS

Page 24: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

REMOVENDO OS GARGALOSPROBLEMAS DE PERFORMANCE SÃO BUGS!

@Html.Partial("~/Views/Shared/PageTabs.cshtml", new PageTabs{    Tabs = new List<TabItem>    {    new TabItem {Value = ShowViewData.Tab.Active, Title = _s("active")    new TabItem {Value = ShowViewData.Tab.Oldest, Title = _s("oldest")    new TabItem {Value = ShowViewData.Tab.Votes, Title = _s("votes")    },    UrlFormat = Question.UrlRelative + "?answertab={0}#tab‐top",    CurrentSelection = Model.CurrentTab})      

Page 25: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

CACHE ALL THE THINGS

Page 26: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

REMOVENDO OS [email protected]("~/Views/Shared/PageTabs.cshtml", new PageTabs{    Tabs = Current.LocalCache.GetSet<List<TabItem>>("question‐show‐tabs", (_1,_2) => new    {    new TabItem {Value = ShowViewData.Tab.Active, Title = _s("active")    new TabItem {Value = ShowViewData.Tab.Oldest, Title = _s("oldest")    new TabItem {Value = ShowViewData.Tab.Votes, Title = _s("votes")    }, 24 * 60 * 60, 24 * 60 * 60),    UrlFormat = Question.UrlRelative + "?answertab={0}#tab‐top",    CurrentSelection = Model.CurrentTab})      

Page 27: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

DESIGN FOR MINIMAL ALLOCATIONSVS

DESIGN FOR TESTABILITY

Page 28: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

REINVENTANDO RODAS?

wikipedia: http://bit.ly/1U9kjth

Page 29: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

REINVENTANDO RODAS!dapperopserverprotobuf-netjilstackexchange.redisstackexchange.exceptionalstackexchange.precompiler

Page 30: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

DAPPERnosso próprio ORM <3

var loginHistories = DB.Query<AccountLoginHistory>(    "select * from AccountLoginHistory where AccountId = @accountId")

https://github.com/StackExchange/dapper-dot-net

Page 31: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

DAPPERalta performance, através de emissão de IL e caching

Page 32: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

CONCLUSÃOSOA é legalmicroservices são legaisinjeção de dependência é legaltestes são BEM legais...mas não são pra todo mundo!

Page 33: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

CONCLUSÃOé bem boring (nada de reflection, DI ou outros patterns legais)monolítica (nada de services, muito menos micro)não seguimos várias boas práticas :(gostamos de reinventar a roda (ORM, caching, perf monitors)funciona pra gente :)escolha as práticas que fazem sentido no SEU projeto

Page 34: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

PERGUNTAS?twitter.com/rla4stackexchange.github.iostackexchange.com/work-here

Page 35: A ARQUITETURA DO STACK OVERFLOW - QCon Rio 2016 …qconrio.com/.../a_arquitetura_do_stack_overflow.pdf ·  · 2015-09-1481,505,688,410 comandos Redis 18.2ms tempo médio de page

OUTRAS APRESENTAÇÕES/REFERÊNCIASthe architecture of stack overflow, by Marco Cecconi -http://www.slideshare.net/howtoweb/marco-cecconi-stack-overflow-architecturescaling stack overflow, by David Fullerton -https://speakerdeck.com/dfullerton/scaling-stack-overflow-qcon-nyc-2015