Accueil Nos publications Blog [Devoxx 2013] Go See All The Ships Around The World

[Devoxx 2013] Go See All The Ships Around The World

devoxx 2013Francesc Campoy Flores travaille chez Google en tant que Développeur Go (le langage). Il a été amené à travailler sur une interface pour afficher des informations sur tous les bateaux du monde, ce qui peut représenter un gros, très gros, volume de données. Quels sont les problématiques que son équipe a rencontré et quels services a-t-il utilisé pour faire tourner l’ensemble de ce projet? C’est justement le thème de sa session à l’édition 2013 de Devoxx, à Anvers.

Get Data

Les bateaux de par le monde utilisent un système d’authentification, AIS, qui permet d’avoir plusieurs informations comme le nom du navire, sa position, etc. C’est comparable à un GPS pour les bateaux. Le problème de ce système est qu’il n’est pas fiable : deux bateaux peuvent avoir le même identifiant à deux endroits dans le monde. En fait, ce système est surtout utilisé pour éviter les collisions entre bateaux.

Pour l’analyse de données, les ingénieurs de Google ont donc préférer une autre source, plus fiable : Space Quest. Cette agence a permit de récupérer l’ensemble des données des bateaux parcourant les océans, du moins les plus gros, les petits navires n’étant pas référencés par ce système.

Storing Data

L’ensemble des datas sont sockées sur Google Cloud Storage, qui est rapide, capable de gérer de gros volumes d’informations, jusqu’à 4 Petabytes, mais possédant aussi une gestion d’ACL : il est possible de gérer finement qui peut accéder, ou non, à certaines données.

Les données stockées dans Google Cloud Storage ne sont pas complètement exploitables. En effet, elles sont dans un format spécifique qui n’est pas aisément manipulable. L’équipe de Google a converti ces données dans un format qu’elle considère plus facilement manipulable, en CSV. Pour cela, un service de conversion a été développé sur la plateforme Google Compute Engine. Les données converties sont alors reversées dans Google Cloud Storage.

Serving Data

Une requête complexe, exécutée via BigQuery, sur l’ensemble des données stockées, prend environs 5 à 10 secs. Étant donné le volume d’information, c’est rapide. Pourtant, ça ne l’est pas suffisamment si le service est beaucoup requêté. Un service a été ajouté entre l’utilisateur final et le résultat de la requête : cela n’accélère pas l’ensemble du système : au contraire, mais il va permettre de régulièrement mettre sur un datastore un ensemble de données restreint. Ce sont alors ces données qui seront interrogées et non plus la base de données sources contenant toutes les informations sur les navires.

Un overhead important est créé par la conversion de nombre en text des données, données étant ensuite envoyées au browser qui se met alors à faire la conversion inverse : chaîne de caractères en entier. Par exemple, la vitesse d’un bateau est transformée en chaîne de caractère pour être envoyé au navigateur web, qui va devoir le transformer à nouveau en nombre et ainsi traiter cette information comme étant la vitesse d’un bateau. Pour éviter cela, les données ne sont plus transmises par le backend en texte, mais sous forme binaire, le client se chargera de décoder ça.

L’application poussant les données dans le datastore, envoyant les données sous forme binaire, etc, est un service réalisé en Go, et déployé sur App Engine. Fransesc met en avant le fait que c’est un langage adapté au cloud : c’est un langage rapide, utilisant peu de ressource, et gérant très bien la concurrence.

Displaying Data

La description de cette partie a été vite éludé par Fransec, qui a tout de même donné quelques observations, non pas sur la partie technique mais sur l’analyse des données : il semble étonnant que des bateaux de pêche à proximité de zone protégée voient subitement leurs signaux se perdre…

Mixing Data

L’ensemble de ce projet tourne sur des technologies Cloud de Google : AppEngine, BigQuery… Bien que très performante, elles ne font pas tout : il est possible d’avoir un peu de développement à mettre en place, selon son application, si ces données ne sont pas bien formatées, un gain de réactivité nécessaire, etc. Toujours est-il que Google offre un ensemble de services à votre disposition dans le cloud. Si vous avez un volume de données important à traiter (générer une carte avec l’ensemble de vos camions de livraisons) sans en avoir l’infrastructure, cet ensemble de services peut être une alternative à regarder de plus près.

Pour voir la session sur ce thème qui a eu lieu à Google I/O :

https://developers.google.com/live/shows/505972914/