building scalable applications

51
Building scalable applica/ons Rachad Honein Gerente de Engenharia SaaS Locaweb

Upload: racx

Post on 05-Dec-2014

7.748 views

Category:

Technology


0 download

DESCRIPTION

How to build sustainable and scalable SaaS applications.

TRANSCRIPT

Page 1: Building Scalable Applications

Building  scalable  applica/ons  

Rachad  Honein  Gerente  de  Engenharia  SaaS  -­‐  Locaweb  

Page 2: Building Scalable Applications

O  Que  fazemos  no  SaaS?  

Page 3: Building Scalable Applications

Webstore  

•  ~  3600  lojas  a/vas    •  >  250.000  Page  views  /  dia  

•  Picos  de  2500  visitas  a/vas  

Google  Analy/cs:  Domingo  6/10/2013  as  13:30  

Page 4: Building Scalable Applications

Email  Marke/ng  

•  >  32.000  Contas  a/vas  

•  Media  de  10.000  contatos  por  conta  

•  Contas  com  mais  que  5  Milhões  de  contatos  

•  Acima  de  1  Bi  de  envios  por  mês  

Page 5: Building Scalable Applications

COMO  ESCALAMOS?  

Page 6: Building Scalable Applications

ANTES  DE  MAIS  NADA…  

Page 7: Building Scalable Applications

COMO  TRABALHAMOS?  

Page 8: Building Scalable Applications

METODOLOGIAS    ÁGEIS  

Scrum  Pair  Programming  Kanban  

Stand  up  mee/ngs  Retrospec/ves  Planning  

Page 9: Building Scalable Applications

TIMES  DE  2  A  5  DEVS  PARA  CADA  PRODUTO  

Page 10: Building Scalable Applications

3  DEPLOYS/SEMANA  POR  PRODUTO  

Page 11: Building Scalable Applications

Como  trabalhamos?  

Linguagens  de  programação:    

–  Ruby  

–  Python  

–  Lua  

–  Go  

–  Java    –  Javascript  

Page 12: Building Scalable Applications

Como  trabalhamos?  

Base  de  dados:  

Page 13: Building Scalable Applications

Como  trabalhamos?  

Linux:      

Debian  Squeeze  /Wheezy  

Page 14: Building Scalable Applications

Como  trabalhamos?  

Stacks:  

   

Page 15: Building Scalable Applications

Como  trabalhamos?  

Organização  =  Produ/vidade  

   

Page 16: Building Scalable Applications

HOW  TO  SCALE?  

But  

Page 17: Building Scalable Applications

How  to  scale?  

Não  poderíamos  jogar  vários  servidores  na  receita  e  resolver  o  problema?      

Page 18: Building Scalable Applications

How  to  scale?  

   Mas  o  que  é  escalabilidade?  

Page 19: Building Scalable Applications

Escalabilidade  

É  isso:    É  uma  desejável  propriedade  do  sistema  que  indica  a  habilidade  de  suportar  grande  quan/dade  de  trabalho,  ou    facilidade  de  crescimento  quando  há  demanda.  

Mas  não  é  isso:  •  Recursos  de  servidor  (2Ghz,  24Gb  Ram  …)  

•  Sistema  operacional  (Solaris,  Linux,  windows)  

•  Technologia  (  Java  vs  Django  vs  Cake  PHP  vs  Ruby  on  Rails)  

Page 20: Building Scalable Applications

Performance  vs  Scalability      

Page 21: Building Scalable Applications

Performance  

VS  

Scalibility  

Page 22: Building Scalable Applications

How  to  scale?  

     

Quanto  ao  Solware,  usaríamos  C?      

Page 23: Building Scalable Applications

How  to  scale?  

           

 Não!    

Vamos  usar  PHP,  Ruby  e  Python  

Page 24: Building Scalable Applications

How  to  scale?  

           

 Mas  PHP,  Ruby  e  Python  não  são  lentos?  

Page 25: Building Scalable Applications

How  to  scale?  

   

Isso  não  importa!  São  rápidos  o  suficiente.      

O  que  importa:  Tempo  de  desenvolvimento  

Page 26: Building Scalable Applications

How  to  scale?  

O  que  desejamos?    

•  Escalabilidade  •  Alta  disponibilidade  •  Performance  •  Gerenciamento  •  Custo  mais  baixo  (o/mização)  •  Muitas  funcionalidades  •  Gerar  receita  $$$$    

Page 27: Building Scalable Applications

How  to  scale?  

Verdade  #1:  Seu  sistema  não  vai  escalar  se  não  foi  desenhado  para  escalar  

Page 28: Building Scalable Applications

How  to  scale?  

Verdade  #2:  Mesmo  se  for  desenhado  para  escalar,  vai  doer!  

Quase  sempre  

Page 29: Building Scalable Applications

Caso  de  uso:  Um  produto  de  muito  sucesso  

Fases  de  crescimento  

Page 30: Building Scalable Applications

Fase  1:  Boostrapping  –  The  happy  beginning    

Page 31: Building Scalable Applications

•  Arquitetura  simples:  –  Firewall  +  Load  Balancer  (F5,  LVS,  HaProxy  …)  – Alguns  servidores  web  –  Base  de  dados  –  Storage  

•  Complexidade  baixa  •  Risco  baixo  •  Não  tem  muita  redundância,  custo  operacional  baixo  =>  Melhor  cenário  para  Startups  em  geral  

Fase  1:  Boostrapping  –  The  happy  beginning    

Page 32: Building Scalable Applications

Load  Balancer  

WebServers  

Storage  

Database  

Internet  

Fase  1:  Boostrapping  –  The  happy  beginning    

Page 33: Building Scalable Applications

Success:  O  négocio  está  dando  certo,  gerando  receita    

Risco  não  é  mais  uma  opção    

Page 34: Building Scalable Applications

•  Mais  redundâncias  – Mais  Servidores  Web    – Mais  Load  Balancers  –  Replicação  de  Base  de  dados    

•  Ainda  simples  de  ponto  de  vista  Aplicação  – A  aplicação  con/nua  a  mesma,  é  só  infra  

Fase  2:  O  mesmo,  mas  começando  a  crescer    

Page 35: Building Scalable Applications

Load  Balancer  

WebServers  

Storage  

Database  Internet  

Master  

Slave  

Fase  2:  O  mesmo,  mas  começando  a  crescer    

Page 36: Building Scalable Applications

 – Google  Ads  

– Ar/gos  nas  revistas  

– Eventos  de  patrocino  

Publicidade    

Page 37: Building Scalable Applications

•  Mais  redundâncias  ainda!  – Servidor  de  Varnish  – Mais  o/mização  no  banco  – Mais  redondância  no  banco  

•  Necessário  mexer  na  aplicação  – Servidor  de  sessão  – Mais  Cache    

=>  mais  cache  para  invalidar  direito  

 

Fase  3:  A  dor  começou    

Page 38: Building Scalable Applications

Load  Balancer  

WebServers  

Memcached/Redis  

Sta/c  Files  

Varnish  

Storage  

Internet  

Database  

Slaves  

SSD  

Fase  3:  A  dor  começou    

Page 39: Building Scalable Applications

Gerenciar  está  mais  complexo  e  mais  dolorido!  

Fase  3:  A  dor  começou    

Page 40: Building Scalable Applications

Muitas  assinaturas  Churn  Baixo  

Produto  de  sucesso    

Entrevista  dos  founders  na  TV  Mais  Google  Ads  Mais  Eventos  de  patrocino  

Mais  Inves/mento  =  Mais  Publicidade    

Page 41: Building Scalable Applications

•  Ainda  mais  cache  –  Clusters  Memcached,  Redis  e  outros  

•  Replicação  não  funciona    para  tudo  –  Replicação  leva  muito  tempo  (slaves  replicam  devagar)  

–  Isola  escrita  da  leitura  •  “Database  par//oning”  salva  o  dia  – Algumas  das  funcionalidades  tem  os  próprios  bancos  

•  Repensar  na  modelagem  da  base  de  dados  –  “Denormalizar"  a  modelagem  

Fase  4:  Está  doendo  mais  ainda!    

Page 42: Building Scalable Applications

Repensar  o  código  para  suportar  toda  essa  loucura  

– Devs  nunca  fizeram  isso  antes  

– Google  não  tem  resposta  

– StackOverflow  também  

Fase  4:  Está  doendo  mais  ainda!    

Page 43: Building Scalable Applications

Load  Balancer  

WebServers  

Clusters  Memcached/Redis  

Sta/c  Files  

Varnish  Cluster  

Storage  Cluster  

Internet  

Writes  Cluster  

Reads  Cluster  

SSD  

SSD  

Fase  4:  Está  doendo  mais  ainda!    

Page 44: Building Scalable Applications

Muitas  assinaturas  VS  Churn  Baixo  

Produto  de  sucesso    

Spot  no  fantás/co  Mais  Google  Ads  

Mais  Inves/mento  =  Mais  Publicidade    

Page 45: Building Scalable Applications

Está  bombando  de  assinaturas.      

Page 46: Building Scalable Applications

•  Alguém  pode  nos  ajudar???  •  Por  que  não  fizemos  isso  na  fase  de  desenho  da  arquitetura?  

•  Criar  clusters  por  usuários  – Divide  and  Conquer  – Baseado  em  grupos  de  usuários,  criar  ambientes  totalmente  separados  

•  Smart  rou/ng  para  saber  onde  cada  usuário  está  

Fase  5:  Pânico!    

Page 47: Building Scalable Applications

Usuários  com  Login  de  A  a  C  

Internet  

Usuários  com  Login  de  D  a  F  

Usuários  com  Login  de  G  a  I  

Smart  Router  

Redis  

Fase  5:  Swimlane    

Page 48: Building Scalable Applications

•  Aplicação  escalável  •  Performance  desejável  •  Agora  podemos  retomar  o  desenvolvimento  de  novos  features  

•  O/mização  de  código  e  refatoração  •  Ainda  crescendo,  mas  gerenciável  

Fase  6:  Está  melhorando!    

Page 49: Building Scalable Applications

 

Se  sobrevivemos  até  aqui,  provavelmente  nós  vamos  sobreviver  pra  sempre!  Ou  não  …  

Fase  7:  O  futuro  é  o  horizonte!    

Page 50: Building Scalable Applications

Bônus  

•  Envio  de  emails  é  sempre  assíncrono  •  MongoDB  é  caro!  Nosso  mente  é  relacional  •  Redis  é  seu  amigo  mais  fiel  •  Memcached  também  •  Usem  NewRelic  em  produção  •  Usem  Configura/on  Management  

–  Chef  –  Puppet  –  CF  Engine  

•  Nunca  servem  imagens  pela  VM!  Usem  CDN,  Varnish  com  storage,  S3,  CloudFront  

•  Divide  sua  aplicação  em  várias  aplicações  •  Nginx  +  Lua  Module  =  Smart  Rou/ng  made  easy  

Page 51: Building Scalable Applications

PERGUNTAS?  

Obrigado  

Email:  [email protected]  Twi�er:  @racx