Upgrade to Pro — share decks privately, control downloads, hide ads and more …

App Scalability Talk at Treatabit

App Scalability Talk at Treatabit

App Scalability, dal codice al management.

Luca Cipriani

March 15, 2013
Tweet

More Decks by Luca Cipriani

Other Decks in Programming

Transcript

  1. 1. Sai davvero cos'è il cloud? 2. Above the Clouds:

    A Berkeley View of Cloud Computing 3. Mille server per un’ora o un server per mille ore hannno lo stesso prezzo 4. Scalabilità? 5. Iaas Pass Saas Nass, what?! *as a service* 6. Cosa mi serve? Analisi dei requisiti 7. Perché scalare presto è sbagliato 8. Non-sense optimization 9. Una questione di design 10. L’importanza della cache 11. Trovare i colli di bottiglia 12. Cloud9 - Case History (presente) 13. Cloud9 - Case History (futuro) 14. Il mondo asincrono 15. Kred - Case history (1) 16. Kred - Case history (2) 17. Cosa vuole il cliente? 18. Q/A
  2. 19. Creare un team scalabile 20. Code review 21. Meeting

    22. Test test test 23. Monitoraggio attivo 24. Prevenire è meglio che curare 25. Datadog demo 26. Data Driven Business Rules 27. AWS Demo 28. Q/A 29. Discussione aperta 30. Ringraziamenti
  3. Caratteristiche essenziali: Paga solo quello che usi, no overhead per

    gestire i picchi di carico Aggiunta di risorse a caldo API Migrazione fra server fisici Decentralizzazione High Availability Provisioning Facilità di manutenzione Sai davvero cos'è il cloud?
  4. http://www.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS-2009-28.pdf The illusion of infinite computing resources available on demand

    • The elimination of an up-front commitment by Cloud users • The ability to pay for use of computing resources ona short-term basis as needed Above the Clouds: A Berkeley View of Cloud Computing
  5. UserHourscloud * (revenue - Costcloud) > = UserHoursdatacenter x (revenue

    - Costdatacenter/Utilization) Mille server per un’ora o un server per mille ora hannno lo stesso prezzo
  6. Un sistema è scalabile se all’aumentare degli utenti i COSTI

    aumentano linearmente o meglio che linearmente Scalabilità?
  7. Iass: Infrastructure (Ec2, Google Compute Engine, Rackspace) Paas: Platform (Heroku,

    Google App Engine, Openshift) Saas: Software (Google Apps) Naas: Network (Softlayer) Iaas Pass Saas Nass, what?! *as a service*
  8. Teorema CAP (Brewer 2000) a cosa possiamo rinunciare ? Consistency

    • Availabity • Partition Failure Un sistema distribuito può soddisfarne solo 2/3 Cosa mi serve? Analisi dei requisiti
  9. Rispettate il business plan, quanti utenti sono prospettati ogni mese?

    • Non è importante il numero di utenti che avete, ma il numero contemporaneo degli stessi. 100k utenti al giorno se ben distribuiti sono solo 666 utenti/s (bastano 2/3 server) • 100k utenti in 1s richiedono circa 300 server... Perché scalare presto è sbagliato
  10. Devi davvero ottimizzare il tuo server SQL? Un disco SSD

    può migliorare le performance del 40-50% Non usare le join, davvero, non usare le join Non-sense optimization
  11. Separazione di ogni layer, prevedete ogni stack come possibilmente eseguibile

    su un server separato Es. “apache + mod_proxy_balancer + mod_php” Vs “haproxy + nginx + phpfpm” Separazione dei layer applicativi • Creazione delle code • Distribuzione del carico Una questione di design
  12. Cache contenuti statici (CDN, Varnish, etc.) Cache db Cache applicativa

    (oggetti) Usate TUTTA la RAM (ramdisk) Il 90% degli utenti accede al 10% dei contenuti L’importanza della cache
  13. Da 5 hops a 2, da 700ms a ~ 100ms

    ELB Proxy Redis NAT IDE Openshift Utenti -> Redis Cloud9 - Case History (presente)
  14. Twitter firehose ~2TB di dati al giorno • Streaming dei

    dati twitter • 1 milione di accessi al giorno • ~5 milioni di api requests al giorno Kred - Case history
  15. Filtraggio dati • Ramdisk (512 GB di Ram ogni server)

    • Rete gigabit • SSD disk • RAID su dischi “normali” • Backup dei dati interessanti • RabbitMQ per processare i dati (20 server di backend) • KVM Kred - Case history
  16. Assumere personale in grado di imparare in fretta • Preferire

    l’eclettismo alla specializzazione • Pair programming • Sharding delle conoscenze • Knowledge sharing sessions Creare un team scalabile
  17. Il workflow di Github Pair programming • Divisione fra team

    di sviluppo e team di test • Zero bug development Code review Pull Request Branch Review Merge
  18. 1 meeting giornaliero (ogni microteam) 1 settimanale (tutti i team)

    1 mensile (piani a lungo termine) 1 ogni QT Meeting
  19. Datadog, Graphite, Pingdom, il monitoraggio diventa semplice • Non c’è

    monitoring senza alert • Non c’è alert senza intervento (manuale o automatizzato) • Se ignori un alert esso è sbagliato (evitate il rumore) Monitoraggio attivo