blog.notmyidea.org/service-de-nuages-perspectives-pour-lete-fr.html

226 lines
No EOL
16 KiB
HTML

<!DOCTYPE html>
<html lang="fr">
<head>
<title>
Service de nuages : Perspectives pour&nbsp;l&#8217;été - Alexis Métaireau </title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
href="https://blog.notmyidea.org/theme/css/main.css?v2"
type="text/css" />
<link href="https://blog.notmyidea.org/feeds/all.atom.xml"
type="application/atom+xml"
rel="alternate"
title="Alexis Métaireau ATOM Feed" />
</head>
<body>
<div id="content">
<section id="links">
<ul>
<li>
<a class="main" href="/">Alexis Métaireau</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/journal/index.html">Journal</a>
</li>
<li>
<a class="selected"
href="https://blog.notmyidea.org/code/">Code, etc.</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/weeknotes/">Notes hebdo</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/lectures/">Lectures</a>
</li>
<li>
<a class=""
href="https://blog.notmyidea.org/projets.html">Projets</a>
</li>
</ul>
</section>
<header>
<h1 class="post-title">Service de nuages : Perspectives pour&nbsp;l&#8217;été</h1>
<time datetime="2015-07-07T00:00:00+02:00">07 juillet 2015</time>
</header>
<article>
<p><em>Cet article est repris depuis le blog « Service de Nuages » de mon équipe à&nbsp;Mozilla</em></p>
<p>Mozilla a pour coutume d&#8217;organiser régulièrement des semaines de travail où tous les employés
sont réunis physiquement. Pour cette dernière édition, nous avons pu retrouver
nos collègues du monde entier à <a class="reference external" href="http://www.openstreetmap.org/node/268148288#map=4/50.12/-122.95">Whistler, en Colombie Britannique au Canada</a>&nbsp;!</p>
<img alt="«All Hands» talk about Lego, by &#64;davidcrob - CC0" class="align-center" src="https://blog.notmyidea.org/images/whistler/whistler-talks.jpg" />
<p>Ce fût l&#8217;occasion pour notre équipe de se retrouver, et surtout de partager notre
vision et nos idées dans le domaine du stockage, afin de collecter des cas d&#8217;utilisation pour
notre solution <a class="reference external" href="https://kinto.readthedocs.org">Kinto</a>.</p>
<p>Dans cet article, nous passons en revue les pistes que nous avons pour
les prochains&nbsp;mois.</p>
<div class="section" id="ateliers-et-promotion">
<h2>Ateliers et&nbsp;promotion</h2>
<p>Nicolas a présenté <a class="reference external" href="https://github.com/mozilla-services/kinto.js">Kinto.js</a> dans un atelier dédié, avec comme support de
présentation le <a class="reference external" href="http://kintojs.readthedocs.org/en/latest/tutorial/">tutorial d&#8217;introduction</a>.</p>
<p>L&#8217;application résultante, pourtant toute simple, permet d&#8217;appréhender les
concepts de synchronisation de Kinto. Le tout sans installation prélable,
puisque Rémy a mis en place un <a class="reference external" href="https://kinto.dev.mozaws.net/v1/">serveur de dev effacé tous les jours</a>.</p>
<p>Nous avions mis un point d&#8217;honneur à faire du Vanilla.<span class="caps">JS</span>, déjà pour éviter les
combats de clochers autour des frameworks, mais aussi pour mettre en évidence qu&#8217;avec
<span class="caps">HTML5</span> et <span class="caps">ES6</span>, on n&#8217;était plus aussi démunis qu&#8217;il y a quelques&nbsp;années.</p>
<p>Ce petit atelier nous a permis de nous rendre compte qu&#8217;on avait encore de
grosses lacunes en terme de documentation, surtout en ce qui concerne
l&#8217;éco-système et la vision globale des projets (Kinto, Kinto.js, Cliquet, &#8230;).
Nous allons donc faire de notre mieux pour combler ce&nbsp;manque.</p>
<img alt="Kinto.js workshop - CC0" class="align-center" src="https://blog.notmyidea.org/images/whistler/whistler-workshop.jpg" />
</div>
<div class="section" id="mozilla-payments">
<h2>Mozilla&nbsp;Payments</h2>
<p>Comme <a class="reference external" href="http://www.servicedenuages.fr/la-gestion-des-permissions">décrit précédemment</a>, nous avons mis en place un système de permissions pour répondre aux besoins de suivi des paiements et&nbsp;abonnements.</p>
<p>Pour ce projet, Kinto sera utilisé depuis une application Django, via un client&nbsp;Python.</p>
<p>Maintenant que les développements ont été livrés, il faut transformer l&#8217;essai, réussir l&#8217;intégration, l&#8217;hébergement et la montée en puissance. La solution doit être livrée à la fin de&nbsp;l&#8217;année.</p>
<div class="section" id="a-venir">
<h3>À&nbsp;venir</h3>
<p>Nous aimerions en profiter pour implémenter une fonctionnalité qui nous tient à coeur : la construction de la liste des enregistrements accessibles en lecture sur une collection&nbsp;partagée.</p>
<img alt="Whistler Alta Lake - CC0" class="align-center" src="https://blog.notmyidea.org/images/whistler/whistler-lake.jpg" />
</div>
</div>
<div class="section" id="firefox-os-et-stockage">
<h2>Firefox <span class="caps">OS</span> et&nbsp;stockage</h2>
<p>Nous avons eu beaucoup d&#8217;échanges avec l&#8217;équipe de Firefox <span class="caps">OS</span>, avec qui nous avions
déjà eu l&#8217;occasion de collaborer, pour le <a class="reference external" href="https://github.com/mozilla-services/msisdn-gateway">serveur d&#8217;identification BrowserID par <span class="caps">SMS</span></a> et pour <a class="reference external" href="https://github.com/mozilla-services/loop-server">Firefox Hello</a>.</p>
<div class="section" id="in-app-sync">
<h3>In-App&nbsp;sync</h3>
<p>Kinto, la solution simple promue pour la synchronisation de données dans les applications
Firefox <span class="caps">OS</span> ? La classe ! C&#8217;est ce qu&#8217;on avait en tête depuis longtemps, déjà à
l&#8217;époque avec <a class="reference external" href="http://daybed.readthedocs.org/">Daybed</a>. Voici donc une belle opportunité à saisir&nbsp;!</p>
<p>Il va falloir expliciter les limitations et hypothèses simplificatrices de notre
solution, surtout en termes de gestion de la concurrence. Nous sommes persuadés
que ça colle avec la plupart des besoins, mais il ne faudrait pas décevoir&nbsp;:)</p>
<p>Le fait que <a class="reference external" href="https://github.com/daleharvey">Dale</a>, un des auteurs de <a class="reference external" href="http://pouchdb.com/">PouchDB</a> et <a class="reference external" href="https://github.com/michielbdejong">Michiel de Jong</a>, un des auteurs de <a class="reference external" href="http://remotestorage.io/">Remote Storage</a>, nous aient encouragés sur nos premiers pas nous a bien motivé&nbsp;!</p>
</div>
<div class="section" id="cut-the-rope">
<h3>Cut the&nbsp;Rope</h3>
<p>Kinto devrait être mis à profit pour synchroniser les paramètres et les scores
du <a class="reference external" href="http://mozilla.cuttherope.net/">jeu</a>. Un premier exercice et une première vitrine sympas&nbsp;!</p>
</div>
<div class="section" id="syncto">
<h3>« SyncTo&nbsp;»</h3>
<p><a class="reference external" href="https://docs.services.mozilla.com/storage/apis-1.5.html">Firefox Sync</a> est la solution qui permet de synchroniser les données de Firefox (favoris, extensions, historique, complétion des formulaires, mots de passe, &#8230;) entre plusieurs périphériques, de manière&nbsp;chiffrée.</p>
<p>L&#8217;implémentation du client en JavaScript est relativement complexe et date un peu maintenant.
Le code existant n&#8217;est pas vraiment portable dans <em>Firefox <span class="caps">OS</span></em> et les tentatives de réécriture
n&#8217;ont pas&nbsp;abouti.</p>
<p>Nous souhaitons implémenter un pont entre <em>Kinto</em> et <em>Firefox Sync</em>, de manière
à pouvoir utiliser le client <em>Kinto.js</em>, plus simple et plus moderne, pour récupérer
les contenus et les stocker dans IndexedDB. Le delta à implémenter côté serveur est faible car nous nous étions
inspirés du protocole déjà éprouvé de Sync. Côté client, il s&#8217;agira surtout de
câbler l&#8217;authentification BrowserId et la&nbsp;Crypto.</p>
<p>Alexis a sauté sur l&#8217;occasion pour commencer l&#8217;écriture d&#8217;<a class="reference external" href="https://github.com/mozilla-services/syncclient">un client python pour Firefox Sync</a>, qui servira de brique de base pour l&#8217;écriture du&nbsp;service.</p>
</div>
<div class="section" id="cloud-storage">
<h3>Cloud&nbsp;Storage</h3>
<p>Eden Chuang et Sean Lee ont présenté les avancées sur l&#8217;intégration de services de stockages
distants (<em>DropBox, Baidu Yun</em>) dans <em>Firefox <span class="caps">OS</span></em>. Actuellement, leur preuve de
concept repose sur <a class="reference external" href="https://fr.wikipedia.org/wiki/Filesystem_in_Userspace"><span class="caps">FUSE</span></a>.</p>
<p>Nous avons évidemment en tête d&#8217;introduire la notion de fichiers attachés dans
<em>Kinto</em>, en implémentant la specification
<a class="reference external" href="https://tools.ietf.org/html/draft-dejong-remotestorage-05">*Remote Storage*</a>,
mais pour l&#8217;instant les cas d&#8217;utilisations ne se sont pas encore présentés&nbsp;officiellement.</p>
</div>
<div class="section" id="a-venir-1">
<h3>À&nbsp;venir</h3>
<p>Nous serons probablement amenés à introduire la gestion de la concurrence dans
le client <span class="caps">JS</span>, en complément de ce qui a été fait sur le serveur, pour permettre
les écritures simultanées et synchronisation en tâche de&nbsp;fond.</p>
<p>Nous sommes par ailleurs perpétuellement preneurs de vos retours — et bien
entendu de vos contributions — tant sur le code <a class="reference external" href="https://github.com/mozilla-services/kinto/">serveur</a>
que <a class="reference external" href="https://github.com/mozilla-services/kinto.js/">client</a>&nbsp;!</p>
<img alt="Firefox OS Cloud Storage Presentation - CC0" class="align-center" src="https://blog.notmyidea.org/images/whistler/whistler-cloud-storage.jpg" />
</div>
</div>
<div class="section" id="contenus-applicatifs-de-firefox">
<h2>Contenus applicatifs de&nbsp;Firefox</h2>
<p>Aujourd&#8217;hui Firefox a un cycle de release de six semaines. Un des objectifs
consiste à désolidariser certains contenus applicatifs de ces cycles
relativement longs (ex. <em>règles de securité, dictionnaires, traductions, &#8230;</em>) <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>.</p>
<p>Il s&#8217;agit de données <span class="caps">JSON</span> et binaire qui doivent être versionnées et synchronisées par
les navigateurs (<em>lecture seule</em>).</p>
<p>Il y a plusieurs outils officiels qui existent pour gérer ça (<em>Balrog</em>, <em>Shavar</em>, &#8230;),
et pour l&#8217;instant, aucun choix n&#8217;a été fait. Mais lors des conversations avec
l&#8217;équipe en charge du projet, ce fût vraiment motivant de voir que même pour
ce genre de besoins internes, <em>Kinto</em> est tout aussi pertinent&nbsp;!</p>
<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>La bonne nouvelle c&#8217;est que toutes les fonctionnalités <em>third-party</em> qui ont
été intégrées récemment vont redevenir des <em>add-ons</em> \o/.</td></tr>
</tbody>
</table>
<img alt="Landscape - CC0" class="align-center" src="https://blog.notmyidea.org/images/whistler/whistler-landscape.jpg" />
</div>
<div class="section" id="awesome-bar">
<h2>Awesome&nbsp;bar</h2>
<p>L&#8217;équipe <em>Firefox Labs</em>, le laboratoire qui élève des pandas roux en éprouvette,
serait vraiment intéressé par notre solution, notamment pour abreuver en données
un prototype pour améliorer <em>Awesome bar</em>, qui fusionnerait <span class="caps">URL</span>, historique et&nbsp;recherche.</p>
<p>Nous ne pouvons pas en dire beaucoup plus pour l&#8217;instant, mais les fonctionnalités
de collections d&#8217;enregistrements partagées entre utilisateurs de <em>Kinto</em>
correspondent parfaitement à ce qui est envisagé pour le futur du navigateur&nbsp;:)</p>
<div class="section" id="a-venir-2">
<h3>À&nbsp;venir</h3>
<p>Nous serons donc probablement amenés, avant de la fin de l&#8217;année, à introduire des
fonctionnalités d&#8217;indexation et de recherche <em>full-text</em> (comprendre <em>ElasticSearch</em>).
Cela rejoint nos plans précédents, puisque c&#8217;est quelque chose que nous avions dans
<em>Daybed</em>, et qui figurait sur notre feuille de route&nbsp;!</p>
<img alt="Firefox Labs Meeting - CC0" class="align-center" src="https://blog.notmyidea.org/images/whistler/whistler-labs.jpg" />
</div>
</div>
<div class="section" id="browser-html">
<h2>Browser.html</h2>
<p>L&#8217;équipe <em>Recherche</em> explore les notions de plateforme, et travaille notamment
sur l&#8217;implémentation d&#8217;un navigateur en <span class="caps">JS</span>/<span class="caps">HTML</span> avec <em>React</em>:
<a class="reference external" href="https://github.com/mozilla/browser.html">browser.html</a></p>
<p><em>Kinto</em> correspond parfaitement aux attentes
de l&#8217;équipe pour synchroniser les données associées à un&nbsp;utilisateur.</p>
<p>Il pourrait s&#8217;agir de données de navigation (comme Sync), mais aussi de collections
d&#8217;enregistrements diverses, comme par exemple les préférences du navigateur
ou un équivalent à <em>Alexa.com Top 500</em> pour fournir la complétion d&#8217;<span class="caps">URL</span> sans
interroger le moteur de&nbsp;recherche.</p>
<p>L&#8217;exercice pourrait être poussé jusqu&#8217;à la synchronisation d&#8217;états <em>React</em>
entre périphériques (par exemple pour les&nbsp;onglets).</p>
<div class="section" id="a-venir-3">
<h3>À&nbsp;venir</h3>
<p>Si <em>browser.html</em> doit stocker des données de navigation, il faudra ajouter
des fonctionnalités de chiffrement sur le client <span class="caps">JS</span>. Ça tombe bien, c&#8217;est un
sujet passionant, et <a class="reference external" href="http://www.w3.org/TR/WebCryptoAPI/">il y a plusieurs standards</a>&nbsp;!</p>
<p>Pour éviter d&#8217;interroger le serveur à intervalle régulier afin de synchroniser les
changements, l&#8217;introduction des <a class="reference external" href="https://w3c.github.io/push-api/">*push notifications*</a> semble assez naturelle.
Il s&#8217;agirait alors de la dernière pierre qui manque à l&#8217;édifice pour obtenir
un «<em>Mobile/Web backend as a service</em>»&nbsp;complet.</p>
<img alt="Roadmap - CC0" class="align-center" src="https://blog.notmyidea.org/images/whistler/whistler-roadmap.jpg" />
</div>
</div>
<div class="section" id="conclusion">
<h2>Conclusion</h2>
<p>Nous sommes dans une situation idéale, puisque ce que nous avions imaginé
sur <a class="reference external" href="https://github.com/mozilla-services/kinto/wiki/Roadmap">notre feuille de route</a> correspond à ce qui nous est demandé par les
différentes&nbsp;équipes.</p>
<p>L&#8217;enjeu consiste maintenant à se coordonner avec tout le monde, ne pas décevoir,
tenir la charge, continuer à améliorer et à faire la promotion du produit, se concentrer
sur les prochaines étapes et embarquer quelques contributeurs à nos cotés pour
construire une solution libre, générique, simple et auto-hébergeable pour le stockage
de données sur le Web&nbsp;:)</p>
<img alt="Friday Night Party - CC0" class="align-center" src="https://blog.notmyidea.org/images/whistler/whistler-top-roof.jpg" />
</div>
</article>
<footer>
<a id="feed" href="/feeds/all.atom.xml">
<img alt="RSS Logo" src="/theme/rss.svg" />
</a>
</footer>
</div>
</body>
</html>