Joffrey Fuhrer – MTI2012 – du 15/02/2012 au 15/08/2012




                                                         1
   Présentation de l’entreprise
   La team labs
   Travaux réalisés
   Conclusion



                                   2
•Historique
•Organisation




                3
   Fondée en France – 2008
   Y-Combinator – été 2010
   Financement:
     800 000$ - décembre 2010
     10 000 000$ - mars 2011
   Beta – premier PaaS multi-langage – janvier 2011
   GigaOM Structure People & Judge awards – juin 2011
   Support websockets et vertical scaling – mars 2012
                                                         4
   ~20 employés
   Principales divisions :
       Platform
       SRE (Site Reliability Engineers)
       Labs (discontinuée)
       Support
       Finances, Marketing…
                                           5
•Objectifs
•Composition
•Méthodologie




                6
 Produit focalisé
 Développeurs « full-stack »
 Participation à la construction
  communautaire…
 … En fonction de ses besoins


                                    7
   Supervision :
     Technique : Samuel Alba, engineering manager
     Produit : Solomon Hykes, CEO
   Autres membres :
     Yusuf Simonson, UNC graduate
     J.-R. Prévost, étudiant MTI-2012

                                                     8
   Scheduling :
     Product meeting 1/semaine
     Idem sprint planning
     Stand-up meeting 1/jour
   Travail :
     Expérimentations
     Interaction avec les utilisateurs
     Prise en compte des compétiteurs
                                          9
•stack.io 0.1
•Ember.js + Racer
•Stack composer
•dotcloud.js
    •Module db
    •Synchronisation
    •Considérations architecturales
    •Module Twitter
    •Authentification
•stack.io 0.2
                                      10
   Pré-existant :
       Node.js
       Communication client-serveur et serveur-serveur
       Transport : redis + websockets
       Couche évènements, couche RPC + streaming
   Réalisations :
     Interface EventEmitter
     Performance tweaks
     Bugfixing
                                                          11
   Ember.js
     SproutCore pour apps web modernes (Javascript)
     Tom Dale & Yehuda Katz
     Projet open-source
   Racer
     node.js
     Synchronisation de modèle client/serveur
     Utilisé par le framework derby
                                                       12
   Objectif : librairie d’interfaçage des deux
    systèmes
     Flexible
     Naturelle
   Résultat : projet open-source
     Présenté lors d’un meet-up Ember.js devant une
      audience de développeurs
     Publié sur github

                                                       13
   Objectif :
     Réalisation d’un outil de composition de stack
      technologique
     Intégration de services « processus », « database »
      et « services tiers »
     Déploiement automatique sur dotCloud

                                                            14
   Réalisations :
     Modèle de base de données
     Implémentation du modèle sur MongoDB
     Création d’une API REST (node.js/express/mongoose)
   Projet mis en hiatus :
     Cible mouvante
     Milestone imminente
                                                           15
   Objectif :
     Publication d’un produit réalisable en un temps court
     Proof of concept d’un produit ciblé sur les
      développeurs « full-stack »
     A l’origine, amélioration de la plateforme jsFiddle
      avec services « cloud ».
      ▪ Développement d’une extension Chrome
      ▪ Déploiement automatisé
     Open-source
                                                              16
 Sauvegarde des données dans une base de
  données MongoDB
 API simpliste, contraintes minimales
    dotcloud.db.insert(‘people’, {
        firstname : ‘John’,
        lastname : ‘Doe’,
        age : 22
    }, function(err, result) {
      if (!err)
        console.log(‘success !’);
    });
                                            17
   Objectifs :                            var people =
     Synchronisation des données en         dotcloud.sync.
      temps réel entre clients – serveur       synchronize(‘people’);

     Interface doit sembler naturelle     people.push({
      pour le développeur                    firstname: ‘John’,
                                             lastname: ‘Doe’,
   Réalisation :                            age: 22
     Module « sync »                      });

     Utilisation de stack.io + MongoDB    people.observe(function(type) {
     Interface « array-like »               if (type == ‘insert’)
                                               console.log(‘success!’)
                                           });

                                                                             18
Satellitaire




Mono-processus




                                19
   Communication avec l’API Twitter
   Abstraction du serveur
   Proof of Concept de l’intégration third party
   Support OAuth
    dotcloud.twitter.timeline(function(err, res) {
      if (err)
        return console.log('Error: ', err);

      res.forEach(function(x) {
        console.log(x.user.name, ': ', x.text);
      });
    });
                                                     20
   Ajout d’une notion de middleware dans stack.io 0.1
   … Puis portage dans version 0.2
   Création de collections privées dans sync et db
          dotcloud.db.private.insert(‘people’, {
              firstname : ‘John’,
              lastname : ‘Doe’,
              age : 22
          }, function(err, result) {
            if (!err)
              console.log(‘success !’);
          });
                                                         21
http://js.dotcloud.com


                         22
 Basé sur ZeroRPC
 Node.js + Client en Python
 Dépendance sur Redis retirée
 Couche évènementielle disparaît (peut être
  émulée grâce au streaming RPC)
 Middlewares
 Module d’authentification/autorisation + OAuth
 Meilleure stabilité mais plus complexe
                                                   23
24
   Très bonne expérience
     Start-up dynamique
     Exigence
     Responsabilisation
   Découvertes culturelles (USA/Californie/SF)
   Tremplin vers une position de platform
    engineer
                                                  25

Stage de fin d’études – dotcloud

  • 1.
    Joffrey Fuhrer –MTI2012 – du 15/02/2012 au 15/08/2012 1
  • 2.
    Présentation de l’entreprise  La team labs  Travaux réalisés  Conclusion 2
  • 3.
  • 4.
    Fondée en France – 2008  Y-Combinator – été 2010  Financement:  800 000$ - décembre 2010  10 000 000$ - mars 2011  Beta – premier PaaS multi-langage – janvier 2011  GigaOM Structure People & Judge awards – juin 2011  Support websockets et vertical scaling – mars 2012 4
  • 5.
    ~20 employés  Principales divisions :  Platform  SRE (Site Reliability Engineers)  Labs (discontinuée)  Support  Finances, Marketing… 5
  • 6.
  • 7.
     Produit focalisé Développeurs « full-stack »  Participation à la construction communautaire…  … En fonction de ses besoins 7
  • 8.
    Supervision :  Technique : Samuel Alba, engineering manager  Produit : Solomon Hykes, CEO  Autres membres :  Yusuf Simonson, UNC graduate  J.-R. Prévost, étudiant MTI-2012 8
  • 9.
    Scheduling :  Product meeting 1/semaine  Idem sprint planning  Stand-up meeting 1/jour  Travail :  Expérimentations  Interaction avec les utilisateurs  Prise en compte des compétiteurs 9
  • 10.
    •stack.io 0.1 •Ember.js +Racer •Stack composer •dotcloud.js •Module db •Synchronisation •Considérations architecturales •Module Twitter •Authentification •stack.io 0.2 10
  • 11.
    Pré-existant :  Node.js  Communication client-serveur et serveur-serveur  Transport : redis + websockets  Couche évènements, couche RPC + streaming  Réalisations :  Interface EventEmitter  Performance tweaks  Bugfixing 11
  • 12.
    Ember.js  SproutCore pour apps web modernes (Javascript)  Tom Dale & Yehuda Katz  Projet open-source  Racer  node.js  Synchronisation de modèle client/serveur  Utilisé par le framework derby 12
  • 13.
    Objectif : librairie d’interfaçage des deux systèmes  Flexible  Naturelle  Résultat : projet open-source  Présenté lors d’un meet-up Ember.js devant une audience de développeurs  Publié sur github 13
  • 14.
    Objectif :  Réalisation d’un outil de composition de stack technologique  Intégration de services « processus », « database » et « services tiers »  Déploiement automatique sur dotCloud 14
  • 15.
    Réalisations :  Modèle de base de données  Implémentation du modèle sur MongoDB  Création d’une API REST (node.js/express/mongoose)  Projet mis en hiatus :  Cible mouvante  Milestone imminente 15
  • 16.
    Objectif :  Publication d’un produit réalisable en un temps court  Proof of concept d’un produit ciblé sur les développeurs « full-stack »  A l’origine, amélioration de la plateforme jsFiddle avec services « cloud ». ▪ Développement d’une extension Chrome ▪ Déploiement automatisé  Open-source 16
  • 17.
     Sauvegarde desdonnées dans une base de données MongoDB  API simpliste, contraintes minimales dotcloud.db.insert(‘people’, { firstname : ‘John’, lastname : ‘Doe’, age : 22 }, function(err, result) { if (!err) console.log(‘success !’); }); 17
  • 18.
    Objectifs : var people =  Synchronisation des données en dotcloud.sync. temps réel entre clients – serveur synchronize(‘people’);  Interface doit sembler naturelle people.push({ pour le développeur firstname: ‘John’, lastname: ‘Doe’,  Réalisation : age: 22  Module « sync » });  Utilisation de stack.io + MongoDB people.observe(function(type) {  Interface « array-like » if (type == ‘insert’) console.log(‘success!’) }); 18
  • 19.
  • 20.
    Communication avec l’API Twitter  Abstraction du serveur  Proof of Concept de l’intégration third party  Support OAuth dotcloud.twitter.timeline(function(err, res) { if (err) return console.log('Error: ', err); res.forEach(function(x) { console.log(x.user.name, ': ', x.text); }); }); 20
  • 21.
    Ajout d’une notion de middleware dans stack.io 0.1  … Puis portage dans version 0.2  Création de collections privées dans sync et db dotcloud.db.private.insert(‘people’, { firstname : ‘John’, lastname : ‘Doe’, age : 22 }, function(err, result) { if (!err) console.log(‘success !’); }); 21
  • 22.
  • 23.
     Basé surZeroRPC  Node.js + Client en Python  Dépendance sur Redis retirée  Couche évènementielle disparaît (peut être émulée grâce au streaming RPC)  Middlewares  Module d’authentification/autorisation + OAuth  Meilleure stabilité mais plus complexe 23
  • 24.
  • 25.
    Très bonne expérience  Start-up dynamique  Exigence  Responsabilisation  Découvertes culturelles (USA/Californie/SF)  Tremplin vers une position de platform engineer 25