SlideShare une entreprise Scribd logo
1  sur  65
SaaS
              Alberto Zuin
       http://www.azns.it
         alberto@azns.it
Come si compone un
       SaaS

        Identità
                                    Monetizzazione
      Informazioni




  Presentazione                    Piattaforma

                                  Integrazione

                                  Resilienza
                       Sviluppo
                                                            Alberto Zuin
                     Operazioni                      http://www.azns.it
                                                       alberto@azns.it
Perchè scrivere codice
    cloud-ready?
Una architettura solida che ha un suo
           valore intriseco.




                                       Alberto Zuin
                                http://www.azns.it
                                  alberto@azns.it
Perchè scrivere codice
    cloud-ready?
Una architettura solida che ha un suo
             valore intriseco.
 L'elasticità è d'obbligo nei business
              che crescono




                                        Alberto Zuin
                                 http://www.azns.it
                                   alberto@azns.it
Perchè scrivere codice
    cloud-ready?
Una architettura solida che ha un suo
            valore intrinseco.
 L'elasticità è d'obbligo nei business
              che crescono
La proprietà intellettuale di un codice
       vale di più se è flessibile

                                         Alberto Zuin
                                  http://www.azns.it
                                    alberto@azns.it
Linee guida di un bravo
    programmatore
   Ottimizzazione delle risorse




                                         Alberto Zuin
                                  http://www.azns.it
                                    alberto@azns.it
Linee guida di un bravo
    programmatore
   Ottimizzazione delle risorse
  Ottimizzazione delle operazioni




                                         Alberto Zuin
                                  http://www.azns.it
                                    alberto@azns.it
Linee guida di un bravo
    programmatore
   Ottimizzazione delle risorse
  Ottimizzazione delle operazioni
   Ottimizzazione degli obiettivi




                                         Alberto Zuin
                                  http://www.azns.it
                                    alberto@azns.it
Linee guida di un bravo
 programmatore di una
        webapp
  Ridurre le richieste di rete




                                        Alberto Zuin
                                 http://www.azns.it
                                   alberto@azns.it
Linee guida di un bravo
    programmatore di una
           webapp
     Ridurre le richieste di rete
Minimizzare il download dei contenuti




                                       Alberto Zuin
                                http://www.azns.it
                                  alberto@azns.it
Linee guida di un bravo
    programmatore di una
           webapp
      Ridurre le richieste di rete
Minimizzare il download dei contenuti
 Distribuzione dei contenuti e cache




                                       Alberto Zuin
                                http://www.azns.it
                                  alberto@azns.it
Linee guida di un bravo
    programmatore di una
           webapp
      Ridurre le richieste di rete
Minimizzare il download dei contenuti
 Distribuzione dei contenuti e cache
Ottimizzare la sequenza di download



                                       Alberto Zuin
                                http://www.azns.it
                                  alberto@azns.it
Linee guida di un bravo
    programmatore di una
           webapp
      Ridurre le richieste di rete
Minimizzare il download dei contenuti
 Distribuzione dei contenuti e cache
Ottimizzare la sequenza di download
Ottimizzare la logica dell'applicazione


                                         Alberto Zuin
                                  http://www.azns.it
                                    alberto@azns.it
Web 2.0



 Cos'è



                 Alberto Zuin
          http://www.azns.it
            alberto@azns.it
Web 2.0



 Cos'è
 Perchè


                 Alberto Zuin
          http://www.azns.it
            alberto@azns.it
Autenticazione
      E
Autorizzazione

    OpenID
    Oauth


                        Alberto Zuin
                 http://www.azns.it
                   alberto@azns.it
Aspetti critici della
 programmazione
    multiserver


          Programmazione
           tradizionale
           monoprocesso
                             Alberto Zuin
                      http://www.azns.it
                        alberto@azns.it
Aspetti critici della
 programmazione
    multiserver


          Programmazione
           multiprocesso
                             Alberto Zuin
                      http://www.azns.it
                        alberto@azns.it
Aspetti critici della
 programmazione
    multiserver


          Programmazione
           multiserver
                             Alberto Zuin
                      http://www.azns.it
                        alberto@azns.it
Tutto deve essere
    condiviso          Alberto Zuin
                http://www.azns.it
                  alberto@azns.it
Scritture sul filesystem
                           Alberto Zuin
                    http://www.azns.it
                      alberto@azns.it
Scritture sul filesystem
                           Alberto Zuin
                    http://www.azns.it
                      alberto@azns.it
SRV01                SRV02
  Appserver1           Appserver2

                Rete
                   W
     W
       R




                            R
    DBserver1            DBserver2
     (master)             (slave)




Scritture sul database
                                            Alberto Zuin
                                     http://www.azns.it
                                       alberto@azns.it
SRV01                SRV02
  Appserver1           Appserver2

                Rete
                   W
     W
       R




                            R
    DBserver1            DBserver2
     (master)             (slave)




Scritture sul database
                                            Alberto Zuin
                                     http://www.azns.it
                                       alberto@azns.it
SRV01                  SRV02
  Appserver1            Appserver2
                    W
     W


                ?
       R




                             R
    DBserver1             DBserver2
     (master)              (slave)




Scritture sul database
                                             Alberto Zuin
                                      http://www.azns.it
                                        alberto@azns.it
SRV01                  SRV02
  Appserver1            Appserver2
                    W
     W


                ?
       R




                             R
    DBserver1             DBserver2
     (master)              (slave)




Scritture sul database
                                             Alberto Zuin
                                      http://www.azns.it
                                        alberto@azns.it
SRV01                  SRV02
 Appserver1             Appserver2
          XMP    Rete
                   W    XMP
 R




                                      R
            P             P
     DBserver1            DBserver2
      (master)             (slave)




Scritture sul database
attraverso una coda in
      background
                                             Alberto Zuin
                                      http://www.azns.it
                                        alberto@azns.it
SRV01               SRV02
 Appserver1          Appserver2
          XMP        XMP
 R




                                   R
                 W
            P          P
     DBserver1         DBserver2
      (master)          (slave)




Scritture sul database
attraverso una coda in
      background
                                          Alberto Zuin
                                   http://www.azns.it
                                     alberto@azns.it
SRV01                  SRV02
 Appserver1             Appserver2
          XMP    Rete
                   W    XMP
 R




                                      R
            P             P
     DBserver1            DBserver2
      (master)             (slave)




Scritture sul database
attraverso una coda in
      background
                                             Alberto Zuin
                                      http://www.azns.it
                                        alberto@azns.it
SRV01                  SRV02
 Appserver1             Appserver2
          XMP    Rete
                   W    XMP
 R




                                      R
            P             P
     DBserver1            DBserver2
      (master)             (slave)




Scritture sul database
attraverso una coda in
      background
                                             Alberto Zuin
                                      http://www.azns.it
                                        alberto@azns.it
Le Sessioni e i cookies
                           Alberto Zuin
                    http://www.azns.it
                      alberto@azns.it
Le chiavi di criptaggio
                           Alberto Zuin
                    http://www.azns.it
                      alberto@azns.it
Le basi dati
                      Alberto Zuin
               http://www.azns.it
                 alberto@azns.it
File System | DB relazionali | DB Documentali



                                           Alberto Zuin
                                    http://www.azns.it
                                      alberto@azns.it
File System | DB relazionali | DB Documentali



                                           Alberto Zuin
                                    http://www.azns.it
                                      alberto@azns.it
File System | DB relazionali | DB Documentali



                                           Alberto Zuin
                                    http://www.azns.it
                                      alberto@azns.it
File System | DB relazionali | DB Documentali



                                           Alberto Zuin
                                    http://www.azns.it
                                      alberto@azns.it
Database relazionali



Pro:                             Contro:
Numerose funzionalità            Difficile scalabilità
Linguaggio standard e            Pesantezza in caso di query 
  conosciuto                       complesse
Possibilità di mettere in        Non adatti a gestire oggetti di 
  relazione diverse basi dati      dimensione notevole (es. 
  (Join, Union, ecc.)              memorizzare una immagine 
                                   di qualche MB)
                                                                 Alberto Zuin
                                                          http://www.azns.it
                                                            alberto@azns.it
Database relazionali:
     Scalabilità
Database relazionali:
     Scalabilità
Database relazionali:
     Scalabilità
              Lettura
              Scrittura
Database relazionali:
      velocità
Database documentali



Pro:                                         Contro:
Elevata scalabilità di spazio                Approccio al database non univoco 
Estrema velocità in lettura grazie             (API, linguaggi proprietari)
  all'utilizzo della RAM                     Nessuna capacità relazionale
Adatti a gestire oggetti di dimensione 
  notevole (es. memorizzare una immagine 
  di qualche MB)
Sono “schemaless”, per cui non si deve 
  definire uno schema di dati (tabella) a 
  cui si rimane legati, ma lo schema                                            Alberto Zuin
  cambia dinamicamente in base alle                                      http://www.azns.it
  necessità                                                                alberto@azns.it
Database documentali:
     scalabilità




                         Alberto Zuin
                  http://www.azns.it
                    alberto@azns.it
Database documentali:
      velocità




                         Alberto Zuin
                  http://www.azns.it
                    alberto@azns.it
Usare MongoDB per i
  contenuti statici




                        Alberto Zuin
                 http://www.azns.it
                   alberto@azns.it
Linguaggi di
programmazione e
    framework        Alberto Zuin
              http://www.azns.it
                alberto@azns.it
Microsoft asp e .net


IIS           IIS   IIS   IIS




                                 Alberto Zuin
                          http://www.azns.it
                            alberto@azns.it
Microsoft asp e .net

MsSQL      MsSQL   MsSQL    MsSQL




           }  Federazione
                                  Alberto Zuin
                           http://www.azns.it
                             alberto@azns.it
Microsoft asp e .net


IIS      IIS   IIS   IIS     IIS




                                  Alberto Zuin
                           http://www.azns.it
                             alberto@azns.it
Microsoft asp e .net



                    ?
http://msdn.microsoft.com/en-us/library/ff650667.aspx



                                                  Alberto Zuin
                                           http://www.azns.it
                                             alberto@azns.it
PHP e Zend




                    Alberto Zuin
             http://www.azns.it
               alberto@azns.it
PHP e Zend




                    Alberto Zuin
             http://www.azns.it
               alberto@azns.it
PHP e Zend

CORE    PLATFORM




                          Alberto Zuin
                   http://www.azns.it
                     alberto@azns.it
PHP e Zend

   Debug tools




                        Alberto Zuin
                 http://www.azns.it
                   alberto@azns.it
PHP e Zend

   Cache e velocità




                      Alberto Zuin
               http://www.azns.it
                 alberto@azns.it
PHP e Zend

   Sessioni e code




                      Alberto Zuin
               http://www.azns.it
                 alberto@azns.it
PHP e Zend

   Sessioni e code




                      Alberto Zuin
               http://www.azns.it
                 alberto@azns.it
Python e Django




                         Alberto Zuin
                  http://www.azns.it
                    alberto@azns.it
Python e Django




                         Alberto Zuin
                  http://www.azns.it
                    alberto@azns.it
Ruby e Rails




                      Alberto Zuin
               http://www.azns.it
                 alberto@azns.it
Ruby e Rails




                      Alberto Zuin
               http://www.azns.it
                 alberto@azns.it
Ruby e Rails




                      Alberto Zuin
               http://www.azns.it
                 alberto@azns.it
Scala e Lift




                      Alberto Zuin
               http://www.azns.it
                 alberto@azns.it
Scala e Lift




                      Alberto Zuin
               http://www.azns.it
                 alberto@azns.it

Contenu connexe

En vedette

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 

En vedette (20)

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 

SaaS

  • 1. SaaS Alberto Zuin http://www.azns.it alberto@azns.it
  • 2. Come si compone un SaaS Identità Monetizzazione Informazioni Presentazione Piattaforma Integrazione Resilienza Sviluppo Alberto Zuin Operazioni http://www.azns.it alberto@azns.it
  • 3. Perchè scrivere codice cloud-ready? Una architettura solida che ha un suo valore intriseco. Alberto Zuin http://www.azns.it alberto@azns.it
  • 4. Perchè scrivere codice cloud-ready? Una architettura solida che ha un suo valore intriseco. L'elasticità è d'obbligo nei business che crescono Alberto Zuin http://www.azns.it alberto@azns.it
  • 5. Perchè scrivere codice cloud-ready? Una architettura solida che ha un suo valore intrinseco. L'elasticità è d'obbligo nei business che crescono La proprietà intellettuale di un codice vale di più se è flessibile Alberto Zuin http://www.azns.it alberto@azns.it
  • 6. Linee guida di un bravo programmatore Ottimizzazione delle risorse Alberto Zuin http://www.azns.it alberto@azns.it
  • 7. Linee guida di un bravo programmatore Ottimizzazione delle risorse Ottimizzazione delle operazioni Alberto Zuin http://www.azns.it alberto@azns.it
  • 8. Linee guida di un bravo programmatore Ottimizzazione delle risorse Ottimizzazione delle operazioni Ottimizzazione degli obiettivi Alberto Zuin http://www.azns.it alberto@azns.it
  • 9. Linee guida di un bravo programmatore di una webapp Ridurre le richieste di rete Alberto Zuin http://www.azns.it alberto@azns.it
  • 10. Linee guida di un bravo programmatore di una webapp Ridurre le richieste di rete Minimizzare il download dei contenuti Alberto Zuin http://www.azns.it alberto@azns.it
  • 11. Linee guida di un bravo programmatore di una webapp Ridurre le richieste di rete Minimizzare il download dei contenuti Distribuzione dei contenuti e cache Alberto Zuin http://www.azns.it alberto@azns.it
  • 12. Linee guida di un bravo programmatore di una webapp Ridurre le richieste di rete Minimizzare il download dei contenuti Distribuzione dei contenuti e cache Ottimizzare la sequenza di download Alberto Zuin http://www.azns.it alberto@azns.it
  • 13. Linee guida di un bravo programmatore di una webapp Ridurre le richieste di rete Minimizzare il download dei contenuti Distribuzione dei contenuti e cache Ottimizzare la sequenza di download Ottimizzare la logica dell'applicazione Alberto Zuin http://www.azns.it alberto@azns.it
  • 14. Web 2.0 Cos'è Alberto Zuin http://www.azns.it alberto@azns.it
  • 15. Web 2.0 Cos'è Perchè Alberto Zuin http://www.azns.it alberto@azns.it
  • 16. Autenticazione E Autorizzazione OpenID Oauth Alberto Zuin http://www.azns.it alberto@azns.it
  • 17. Aspetti critici della programmazione multiserver Programmazione tradizionale monoprocesso Alberto Zuin http://www.azns.it alberto@azns.it
  • 18. Aspetti critici della programmazione multiserver Programmazione multiprocesso Alberto Zuin http://www.azns.it alberto@azns.it
  • 19. Aspetti critici della programmazione multiserver Programmazione multiserver Alberto Zuin http://www.azns.it alberto@azns.it
  • 20. Tutto deve essere condiviso Alberto Zuin http://www.azns.it alberto@azns.it
  • 21. Scritture sul filesystem Alberto Zuin http://www.azns.it alberto@azns.it
  • 22. Scritture sul filesystem Alberto Zuin http://www.azns.it alberto@azns.it
  • 23. SRV01 SRV02 Appserver1 Appserver2 Rete W W R R DBserver1 DBserver2 (master) (slave) Scritture sul database Alberto Zuin http://www.azns.it alberto@azns.it
  • 24. SRV01 SRV02 Appserver1 Appserver2 Rete W W R R DBserver1 DBserver2 (master) (slave) Scritture sul database Alberto Zuin http://www.azns.it alberto@azns.it
  • 25. SRV01 SRV02 Appserver1 Appserver2 W W ? R R DBserver1 DBserver2 (master) (slave) Scritture sul database Alberto Zuin http://www.azns.it alberto@azns.it
  • 26. SRV01 SRV02 Appserver1 Appserver2 W W ? R R DBserver1 DBserver2 (master) (slave) Scritture sul database Alberto Zuin http://www.azns.it alberto@azns.it
  • 27. SRV01 SRV02 Appserver1 Appserver2 XMP Rete W XMP R R P P DBserver1 DBserver2 (master) (slave) Scritture sul database attraverso una coda in background Alberto Zuin http://www.azns.it alberto@azns.it
  • 28. SRV01 SRV02 Appserver1 Appserver2 XMP XMP R R W P P DBserver1 DBserver2 (master) (slave) Scritture sul database attraverso una coda in background Alberto Zuin http://www.azns.it alberto@azns.it
  • 29. SRV01 SRV02 Appserver1 Appserver2 XMP Rete W XMP R R P P DBserver1 DBserver2 (master) (slave) Scritture sul database attraverso una coda in background Alberto Zuin http://www.azns.it alberto@azns.it
  • 30. SRV01 SRV02 Appserver1 Appserver2 XMP Rete W XMP R R P P DBserver1 DBserver2 (master) (slave) Scritture sul database attraverso una coda in background Alberto Zuin http://www.azns.it alberto@azns.it
  • 31. Le Sessioni e i cookies Alberto Zuin http://www.azns.it alberto@azns.it
  • 32. Le chiavi di criptaggio Alberto Zuin http://www.azns.it alberto@azns.it
  • 33. Le basi dati Alberto Zuin http://www.azns.it alberto@azns.it
  • 34. File System | DB relazionali | DB Documentali Alberto Zuin http://www.azns.it alberto@azns.it
  • 35. File System | DB relazionali | DB Documentali Alberto Zuin http://www.azns.it alberto@azns.it
  • 36. File System | DB relazionali | DB Documentali Alberto Zuin http://www.azns.it alberto@azns.it
  • 37. File System | DB relazionali | DB Documentali Alberto Zuin http://www.azns.it alberto@azns.it
  • 38. Database relazionali Pro:  Contro: Numerose funzionalità Difficile scalabilità Linguaggio standard e  Pesantezza in caso di query  conosciuto complesse Possibilità di mettere in  Non adatti a gestire oggetti di  relazione diverse basi dati  dimensione notevole (es.  (Join, Union, ecc.) memorizzare una immagine  di qualche MB) Alberto Zuin http://www.azns.it alberto@azns.it
  • 39. Database relazionali: Scalabilità
  • 40. Database relazionali: Scalabilità
  • 41. Database relazionali: Scalabilità Lettura Scrittura
  • 43. Database documentali Pro:  Contro: Elevata scalabilità di spazio Approccio al database non univoco  Estrema velocità in lettura grazie  (API, linguaggi proprietari) all'utilizzo della RAM  Nessuna capacità relazionale Adatti a gestire oggetti di dimensione  notevole (es. memorizzare una immagine  di qualche MB) Sono “schemaless”, per cui non si deve  definire uno schema di dati (tabella) a  cui si rimane legati, ma lo schema  Alberto Zuin cambia dinamicamente in base alle  http://www.azns.it necessità alberto@azns.it
  • 44. Database documentali: scalabilità Alberto Zuin http://www.azns.it alberto@azns.it
  • 45. Database documentali: velocità Alberto Zuin http://www.azns.it alberto@azns.it
  • 46. Usare MongoDB per i contenuti statici Alberto Zuin http://www.azns.it alberto@azns.it
  • 47. Linguaggi di programmazione e framework Alberto Zuin http://www.azns.it alberto@azns.it
  • 48. Microsoft asp e .net IIS IIS IIS IIS Alberto Zuin http://www.azns.it alberto@azns.it
  • 49. Microsoft asp e .net MsSQL MsSQL MsSQL MsSQL } Federazione Alberto Zuin http://www.azns.it alberto@azns.it
  • 50. Microsoft asp e .net IIS IIS IIS IIS IIS Alberto Zuin http://www.azns.it alberto@azns.it
  • 51. Microsoft asp e .net ? http://msdn.microsoft.com/en-us/library/ff650667.aspx Alberto Zuin http://www.azns.it alberto@azns.it
  • 52. PHP e Zend Alberto Zuin http://www.azns.it alberto@azns.it
  • 53. PHP e Zend Alberto Zuin http://www.azns.it alberto@azns.it
  • 54. PHP e Zend CORE PLATFORM Alberto Zuin http://www.azns.it alberto@azns.it
  • 55. PHP e Zend Debug tools Alberto Zuin http://www.azns.it alberto@azns.it
  • 56. PHP e Zend Cache e velocità Alberto Zuin http://www.azns.it alberto@azns.it
  • 57. PHP e Zend Sessioni e code Alberto Zuin http://www.azns.it alberto@azns.it
  • 58. PHP e Zend Sessioni e code Alberto Zuin http://www.azns.it alberto@azns.it
  • 59. Python e Django Alberto Zuin http://www.azns.it alberto@azns.it
  • 60. Python e Django Alberto Zuin http://www.azns.it alberto@azns.it
  • 61. Ruby e Rails Alberto Zuin http://www.azns.it alberto@azns.it
  • 62. Ruby e Rails Alberto Zuin http://www.azns.it alberto@azns.it
  • 63. Ruby e Rails Alberto Zuin http://www.azns.it alberto@azns.it
  • 64. Scala e Lift Alberto Zuin http://www.azns.it alberto@azns.it
  • 65. Scala e Lift Alberto Zuin http://www.azns.it alberto@azns.it

Notes de l'éditeur

  1. SaaS
  2. Piattaforma: Piattaforma di sviluppo per il programmatore Presentazione: Interfaccia per l'utente finale Identità: Informazioni sull'utente che saranno usate per modificare l'interfaccia Integrazione: framwork per il trasferimento dei dati e gestione dei processi Informazioni: storage dei dati Resilienza: Tolleranza ai guasti dell'applicazione e dell'infrastruttura; scalabilità Monetizzazione: strumenti per la fatturazione e per l'incasso Sviluppo: processi che integrano anche il test e la messa in produzione Operazioni: tools di monitoraggio e supporto Come si compone un SaaS
  3. Una architettura orientata al servizio ha un maggior grado di flessibilità che permette di mantenere attuale l'applicazione nel tempo. Se il software è ingegnerizzato considerando fin dall'inizio la tolleranza ai guasti, la sicurezza e la scalabilità, sarà molto, più robusto, sarà più facile gestire situazioni non previste inizialmente e sarà più facile implementare nuove funzionalità Perchè scrivere codice cloud-ready?
  4. Non si tratta solo di un aumento di clienti o vendite a richiedere la scalabilità. Una architettura scalabile riesce a sostenere fusione o una acquisizione aziendale. Una architettura elastica permette di riutilizzare un applicativo anche per scopi diversi rispetto a quelli previsti inizialmente Perchè scrivere codice cloud-ready?
  5. Perchè rendere elastico un codice concepito per usi interni? Perchè un domani quel codice potrebbe essere rivenduto e se è strutturato per essere flessibile varrà di più Perchè scrivere codice cloud-ready?
  6. Srivere codice slegato il più possibile dagli aspetti hardware del sistema Facilitare la virtualizzazione Prevedere sistemi di accounting e possibilità di settare autorizzazioni in modo capillare Linee guida di un bravo programmatore
  7. Minimizzare gli intervanti umani Linee guida di un bravo programmatore
  8. Creare software riutilizzabile scomponendolo in pacchetti piccoli Linee guida di un bravo programmatore
  9. Ogni richiesta di rete comporta una query al DNS che rallenta la navigazione Linee guida di un bravo programmatore di una webapp
  10. Abilitare la compressione dei dati testuali (html, js, css) Minimizzare i javascript Linee guida di un bravo programmatore di una webapp
  11. Usare sistemi CDN (Content Delivery Network) per far servire i contenuti statici esternamente minimizzando la “distanza” con l'utente Ablilitare la cache del browser Linee guida di un bravo programmatore di una webapp
  12. Portare gli script alla fine della pagine Linee guida di un bravo programmatore di una webapp
  13. Usare memcache per memorizzare l'output delle query Ottimizzare gli script javascript perchè non saturino la capacità computazionale del client Ottimizzare il funzionalmento dell'HTML5 in caso di offline Linee guida di un bravo programmatore di una webapp
  14. Non più richiesta dal client, elaborazione del server e output, ma un canale aperto costantemente con il server per aggiornamenti in tempo reale. Ajax/Rest: generico funziona con tutti i browser tramite javascript ed è gestito direttamente dal codice applicativo Websockets: no Microsoft, impone un web server compatibile Web 2.0
  15. Aggregare informazioni esterne in tempo reale /Feed RSS e Social Networks) Esporre le informazioni all'esterno Considerazioni pratiche: - Abilitare Facebook e Twitter per portare connessioni alla propria applicazione - Rendere disponibili i feed attraverso PubSubHubbub (protocollo per la diffusione dei feed) - Abilitare i commenti sul proprio sito e replicarli sui Social Network - Aggregare i commenti multidirezionalmente attraverso il protocollo Salmon - Aggiungere contenuti alla propria Webapp sfruttando i servizi in realtime (Es. pubblicare gli ultimi tweet, le quotazioni di borsa...) - Controllare la presenza degli utenti e mostrarla sul sito - Seguire i principi del design in tempo reale e permettere all'utente di contribuire con commenti - Estendere il proprio servizio con componenti “embeddable” utilizzabili da altri siti Web 2.0
  16. OpenID: Protocollo aperto per integrare l'autenticazione di provider esterni (es. Google, Yahoo...) Oauth: Protocollo aperto per la gestione delle autorizzazione (chi fa cosa) Autenticazione E Autorizzazione
  17. Programmazione tradizionale: un unico processo parte e lavora “in esclusiva” fino a che non completa il suo lavoro (o viene fermato) Aspetti critici della programmazione multiserver
  18. Programmazione multiprocesso/multithreading: essendoci più processi contemporanei, devono essere gestiti “gli stati”. Quindi bisogna prestare attenzione agli accessi contemporanei (in scrittura) ai file e alla RAM, ecc. Aspetti critici della programmazione multiserver
  19. Programmazione multiserver: come la programmazione multiprocesso, ma abbiamo più server per cui non solo bisogna gestire la concorrenza all'interno di un server, ma bisogna gestirla tra più server: tutti i server devono comunicare tra loro ed essere sincronizzati. Aspetti critici della programmazione multiserver
  20. Scritture su disco: la gestione delle scritture su disco e la sincronizzazione delle stesse è estremamente complessa e causa di incongruenze tra i server: semplicemente, va evitata. Le scritture su disco devono essere limitate solo al codice dell'applicativo in caso di aggiornamento (ad es. Upload di file asp/php/rb/jsp/ecc.). Tutti i dati dinamici dell'applicativo compresi eventuali dati caricati dall'utente (ad es. Upload dell'immagine di profilo) devono essere gestiti da un datastore di livello più elevato (es. Database relazionale o documentale). Scritture sul filesystem
  21. Scritture su disco: la gestione delle scritture su disco e la sincronizzazione delle stesse è estremamente complessa e causa di incongruenze tra i server: semplicemente, va evitata. Le scritture su disco devono essere limitate solo al codice dell'applicativo in caso di aggiornamento (ad es. Upload di file asp/php/rb/jsp/ecc.). Tutti i dati dinamici dell'applicativo compresi eventuali dati caricati dall'utente (ad es. Upload dell'immagine di profilo) devono essere gestiti da un datastore di livello più elevato (es. Database relazionale o documentale). Scritture sul filesystem
  22. Le scritture su database devono essere gestite con attenzione perchè anch'esse possono essere causa di possibili incongruenze. Le architetture “multimaster” in cui tutti i nodi del database sono utilizzabili per lettura e scrittura, sono comode ma spesso causa di incongruenze in caso di “split-brain”. Meglio una architettura master/slave che è meno soggetta ad errori in caso di perdita di connettività tra i server Scritture sul database
  23. Le scritture su database devono essere gestite con attenzione perchè anch'esse possono essere causa di possibili incongruenze. Le architetture “multimaster” in cui tutti i nodi del database sono utilizzabili per lettura e scrittura, sono comode ma spesso causa di incongruenze in caso di “split-brain”. Meglio una architettura master/slave che è meno soggetta ad errori in caso di perdita di connettività tra i server Scritture sul database
  24. Le scritture su database devono essere gestite con attenzione perchè anch'esse possono essere causa di possibili incongruenze. Le architetture “multimaster” in cui tutti i nodi del database sono utilizzabili per lettura e scrittura, sono comode ma spesso causa di incongruenze in caso di “split-brain”. Meglio una architettura master/slave che è meno soggetta ad errori in caso di perdita di connettività tra i server Scritture sul database
  25. Le scritture su database devono essere gestite con attenzione perchè anch'esse possono essere causa di possibili incongruenze. Le architetture “multimaster” in cui tutti i nodi del database sono utilizzabili per lettura e scrittura, sono comode ma spesso causa di incongruenze in caso di “split-brain”. Meglio una architettura master/slave che è meno soggetta ad errori in caso di perdita di connettività tra i server Scritture sul database
  26. In caso di perdita di connettività tra SRV01 e SRV02, SRV02 può leggere dalla copia locale del database, ma non può scrivere. L'applicazione, in questo caso, rimane bloccata! La conseguenza è che per gestire le scritture correttamente è necessario un sistema asincrono di code come XMPP o AMQP (Advanced Message Queuing Protocol), unito ad un sistema di gestione in background dei processi (taskqueue su Python, delayed_job e resque su Ruby...). Scritture sul database attraverso una coda in background
  27. In caso di perdita di connettività tra SRV01 e SRV02, SRV02 può leggere dalla copia locale del database, ma non può scrivere. L'applicazione, in questo caso, rimane bloccata! La conseguenza è che per gestire le scritture correttamente è necessario un sistema asincrono di code come XMPP o AMQP (Advanced Message Queuing Protocol), unito ad un sistema di gestione in background dei processi (taskqueue su Python, delayed_job e resque su Ruby...). Scritture sul database attraverso una coda in background
  28. In caso di perdita di connettività tra SRV01 e SRV02, SRV02 può leggere dalla copia locale del database, ma non può scrivere. L'applicazione, in questo caso, rimane bloccata! La conseguenza è che per gestire le scritture correttamente è necessario un sistema asincrono di code come XMPP o AMQP (Advanced Message Queuing Protocol), unito ad un sistema di gestione in background dei processi (taskqueue su Python, delayed_job e resque su Ruby...). Scritture sul database attraverso una coda in background
  29. In caso di perdita di connettività tra SRV01 e SRV02, SRV02 può leggere dalla copia locale del database, ma non può scrivere. L'applicazione, in questo caso, rimane bloccata! La conseguenza è che per gestire le scritture correttamente è necessario un sistema asincrono di code come XMPP o AMQP (Advanced Message Queuing Protocol), unito ad un sistema di gestione in background dei processi (taskqueue su Python, delayed_job e resque su Ruby...). Scritture sul database attraverso una coda in background
  30. Le sessioni Nelle Web Application spesso si usano le sessioni per memorizzare informazioni sull'utente. Bisogna prestare attenzione a non memorizzare queste informazioni in un posto esclusivo dell'application server (ad es. La RAM o il filesystem locale) ma usare un posto comune (ad es. Un cookie sul browser dell'utente, il database, un demone per gestire la cache condivisa...) In alternativa è necessario usare un load balancer con le “sticky session”, cioè in grado di ricordarsi a quale server è stato precedentemente reindirizzato un client. Le Sessioni e i cookies
  31. Per i dati memorizzati in forma criptata, prestare attenzione a non usare chiavi di criptaggio specifice del server (ad es. Il mac address dell'ethernet), ma usare una chiave condivisa tra i server. Per maggiore sicurezza è possibile memorizzare la chiave condivisa in un luogo comune, ma mantenendola a sua volta criptata con una chiave di criptaggio specifica del server. Le chiavi di criptaggio
  32. Pro: Numerose funzionalità Linguaggio standard e conosciuto Possibilità di mettere in relazione diverse basi dati (Join, Union, ecc.) Contro: Difficile scalabilità Pesantezza in caso di query complesse Non adatti a gestire oggetti di dimensione notevole (es. Memorizzare una immagine di qualche MB) Database relazionali
  33. Scalare lo storage di un database relazionale: operazione impossibile. Non è gestita direttamente dal database per cui verrebbe demandata al filesystem. I filesystem cluster sono scalabili ma troppo lenti per essere usati alla base di un database relazionale Database relazionali: Scalabilità
  34. Scalare la capacità computazionale di un database relazionale e semplice: basta aggiungere slave server e bilanciare il carico con un proxy. Database relazionali: Scalabilità
  35. Normalmente il carico di lavoro di un database è dato al 90% da query in lettura e non da operazioni di insert/update/delete Database relazionali: Scalabilità
  36. Migliorare le prestazioni con la cache: la cache permette di migliorare le prestazioni di un database relazionale memorizzando I risultati delle query. In un cloud computer anche la cache deve essere condivisa, per cui esistono demoni dedicati a questo scopo come memcached Database relazionali: velocità
  37. Pro: Elevata scalabilità di spazio Estrema velocità in lettura grazie all'utilizzo della RAM Adatti a gestire oggetti di dimensione notevole (es. memorizzare una immagine di qualche MB) Sono “schemaless”, per cui non si deve definire una schema di dati (tabella) a cui si rimane legati, ma lo schema cambia dinamicamente in base alle necessità Contro: Approccio al database non univoco (API, linuguaggi proprietari) Nessuna capacità relazionale Database documentali
  38. I database documentali scalano semplicemente aggiungendo server che possono essere usati sia per espandere lo storage, sia in configurazione master/slave per per migliorare la contemporaneità di lettura e per la sicurezza. I database documentali sono in grado di leggere un dato o una serie di dati che rispondono a determinati criteri, ma non hanno alcuna capacità computazionale e relazionale. Le “operazioni complesse” sono demandate quindi agli application server che, in caso, dovranno simulare operazioni come Join e Union. E' per questo che spesso vengono definiti con il termine NoSQL. Database documentali: scalabilità
  39. La velocità di lettura di un database documentale è condizionata esclusivamente dalla velocità dello storage sottostante. Nel caso di utilizzo di storage lenti, è possibile mantenere una copia dell'intero database in RAM che da “tramite” per le operazioni di I/O. Questa feature è stata introdotta da FourSquare su MongoDB a causa della lentezza dell'I/O su disco di Amazon. Database documentali: velocità
  40. Il webserver più usato sul cloud è nginx che ha un plugin per accedere direttamente a MongoDB. Con una simile configurazione è possibile servire i contenuti statici del sito (immagini, css, js, ecc.) presenti su MongoDB direttamente da web server, senza appesantire l'application server Quindi, tutti i contenuti del sito (file statici dati dinamici) possono risiedere in un cluster di server MongoDB che scala nello storage ed è replicabile in maniera consistente. Gli application server conterranno al loro interno solo gli script con il codice dell'applicativo Usare MongoDB per i contenuti statici
  41. E' possibile scalare orizzontalmente una applicazione in .net su più server IIS Microsoft asp e .net
  42. Il datastore su MS SQL deve essere di tipo federato e quindi distribuito tra i server Microsoft asp e .net
  43. Per gestire il “map reduce”, è necessario scrivere del codice specifico, oppure ospitare la propria applicazione su Microsoft Azure Microsoft asp e .net
  44. Valgono le considerazioni precedenti per lo sviluppo degli applicativi Per maggiori informazioni: http://msdn.microsoft.com/en-us/library/ff650667.aspx Microsoft asp e .net
  45. PHP è un linguaggio che non è nativamente orientato agli oggetti, ma e stata aggiunta questa funzionalità solo in seguito. PHP è molto usato e conosciuto per via della sua facilità di apprendimento in quanto lascia “le mani libere” su come scrivere il codice, senza imporre regole ferree. PHP e Zend
  46. Zend è più di un framework: è un PaaS commerciale per lo sviluppo di applicazioni PHP installabile sulla propria infrastruttura. Si compone di: Zend Core: versione di PHP certificata e supportata da Zend Zend Platform: la piattaforma di runtime per le applicazioni Zend PHP e Zend
  47. Zend è più di un framework: è un PaaS commerciale per lo sviluppo di applicazioni PHP installabile sulla propria infrastruttura. Si compone di: Zend Core: versione di PHP certificata e supportata da Zend Zend Platform: la piattaforma di runtime per le applicazioni Zend PHP e Zend
  48. Zend Platform esegue il monitoraggio dell'applicazione PHP attraverso un plugin del webserver. Eventuali anomalie (rallentamenti, errori, memoria, ecc.) vengono inoltrati al sistema di controllo che le rende disponibili tramite una interfaccia ed è in grado di eseguire operazioni preconfigurate Con l'anomalia vengono memorizzate tutte le informazioni utili per il debug (variabili, cookie, sessioni, ecc.) PHP e Zend
  49. Attraverso Zend è possibile “precompilare” uno script PHP per aumentare la velocità di esecuizione Zend ha delle API specifiche per gestire la cache: può essere usata sia per memorizzare il “precompilato” degli script PHP, sia per memorizzare i risultati delle query al database PHP e Zend
  50. Si occupa direttamente di gestire le sessioni condividendole tra tutti gli application server Incorpora un gestore di code e di processi in background multiserver a cui è possibile accedere tramite API PHP e Zend
  51. Si occupa direttamente di gestire le sessioni condividendole tra tutti gli application server Incorpora un gestore di code e di processi in background multiserver a cui è possibile accedere tramite API PHP e Zend
  52. Python è un linguaggio di scripting caratterizzato per il supporto di più paradigmi di programmazione tra cui OOP, strutturato, funzionale e orientato all'aspetto. Tutti gli script di configurazione di RedHat sono scritti in Python. Python impone una sintassi meno libera rispetto a PHP per cui a prima vista sembrerebbe di più difficile apprendimento Python è usato in molti siti ad elevato traffico come Disqus.com e instagram Python è il linguaggio principe per Google App Engine e per il suo clone OpenSource Appscale Python e Django
  53. Django è un framework costruito su Python per la realizzazione di web application Valgono le medesime raccomandazioni generali degli altri linguaggi, in quanto tutte le “funzionalità cloud” non sono contenute nel linguaggio o nel framework, ma sono compito del PaaS Python e Django
  54. Ruby è il linguaggio che sta soppiantando PHP oltre oceano. Twitter è stato scritto inizialmente in Ruby e ancora oggi è usato soprattutto per il frontend. Ruby, al contrario di PHP e in maniera ancora più accentuata rispetto a Python, impone una sua modalità di programmazione molto spinta agli oggetti che lo rendono a prima vista il linguaggio più ostico. Ruby e Rails
  55. Rails è un framework basato su ruby estensibile attraverso pacchetti aggiuntivi chiamati “gemme”. Tra le gemme disponibili, citiamo delayed_jobs e resque per la gestione di code e processi in background Rails gestisce direttamente le routing del sito in modo da realizzare “friendly URL”. Non è più necessario programmare complesse transcodifiche sul Web Server Anche in questo caso valgono le medesime raccomandazioni generali degli altri linguaggi, in quanto tutte le “funzionalità cloud” non sono contenute nel linguaggio o nel framework, ma sono compito del PaaS Ruby e Rails
  56. Rails impone la modalità MVC (Model View Controller) rendendo il codice dell'applicazione ordinato. Grazie a questa visione, nel controller posso scegliere la vista da inviare in base a numerosi criteri. In particolare si può avere un unico “motore” per il sito e differenziare l'output in base al dispositivo di navigazione (Pc/Smartphone) o al tipo di richiesta. Con rails si implementano nativamente le REST API senza aggiungere una riga di codice Ruby e Rails
  57. Scala è un “dialetto” di Java, quindi di facile apprendimento per chi conosce questo linguaggio Scala è “l'ultimo arrivato” e per questo non diffusissimo. Solo Foursquare lo sta utilizzando fin dall'inizio per ogni sua parte; nel 2009 Twitter ha annunciato la riscrittura di buona parte del suo backend in Scala. Anche il guardian sta seguendo le orme di twitter portando il sito a Scala. E' senza dubbio il futuro. Scala e Lift
  58. Scala eredita da Java le API per la programmazione concorrente, aggiungendo l'actor model ( http://en.wikipedia.org/wiki/Actor_model ) Scala utilizza un suo CSP (Communicating Sequential Processes) Communicating Scala Processes per la comunicazione tra gli oggetti Tutte queste caratteristiche rendono Scala il linguaggio più efficiente, al momento, per la realizzazione di web application. Scala, come Ruby e Python, non mette a disposizone alcun tool per la gestione multiserver, quindi valgono le solite considerazioni generali per scalare orizzontalmente. Scala e Lift