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

Post on 12-May-2018

229 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

A ARQUITETURA DO STACK OVERFLOWRoberta Arcoverde / @rla4

QCon Rio 2015

/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

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

*Alexa, Quantcast

>140 SITES

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

TUDO ISSO COM APENAS 9 SERVIDORES*

*mas 1 bastaria

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

NOSSO DC EM UMA IMAGEM*

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

...OU MELHOR, DUAS

New York, NY Denver, CO

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

COMOFAS?

UMA LOUCA OBSESSÃO: PERFORMANCE!

TIME34 devs6 sysadmins6 designers75% do timetrabalharemotamente

http://stackexchange.com/about/team

STACKc#, asp.net mvcless/jquerysql serverelasticsearchredis

TEH CODEZ

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

ARQUITETURA MONOLÍTICA

TESTES?

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

http://meta.stackexchange.com

COMUNIDADE É AMOR

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

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

ENCONTRE OS GARGALOS

https://github.com/MiniProfiler

ENCONTRE OS GARGALOS II

https://github.com/opserver/Opserver

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

REMOVENDO OS GARGALOS

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})      

CACHE ALL THE THINGS

REMOVENDO OS GARGALOS@Html.Partial("~/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})      

DESIGN FOR MINIMAL ALLOCATIONSVS

DESIGN FOR TESTABILITY

REINVENTANDO RODAS?

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

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

DAPPERnosso próprio ORM <3

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

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

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

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

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

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

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

top related