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

Building Scalable Applications

Dec 05, 2014

Download

Technology

racx

How to build sustainable and scalable SaaS applications.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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