URL: https://linuxfr.org/users/zebul0n/journaux/s-il-vous-plait-architecture-moi-un-kanboard Title: S’il vous plaît... architecture-moi un Kanboard ! Authors: zebul0n Date: 2014年02月26日T12:06:40+01:00 License: CC By-SA Tags: kanban, kanboard, elasticsearch, mongodb, couchdb, cassandra et redis Score: 31 [0xfg](https://linuxfr.org/users/0xfg) nous a fait le plaisir de partager son "gestionnaire de tâches visuel qui permet de gérer facilement des petits projets de manière collaborative" : [Kanboard](http://kanboard.net/) Comme il l’explique dans sa [dépêche](https://linuxfr.org/news/kanboard-un-logiciel-libre-pour-gerer-ses-projets-avec-la-methode-kanban), la pile logicielle utilisée est :> D'un point de vue technique, Kanboard est une application web développée en PHP et utilise Sqlite pour enregistrer ses données. Avec du vanilla javascript (pas de framework) pour gérer les interactions côté client. S’ensuit alors une discussion sur la merditude de PHP qui ne peut mener nul part, puisque le langage parfait n’existant pas, on trouverait toujours à redire sur le choix de la techno employée. C’est le but inavoué de ce journal. Pour autant, sans vouloir argumenter de la supériorité, des manques ou des faiblesses d’un langage par rapport à un autre, on peut tout à fait exprimer ses choix en matière de technologie à utiliser. Enfin, je vous encourage à argumenter, c’est juste que : c’est horrible, c’est lent, le code est pas beau, c’est quoi [la différence entre un bon ~~chasseur~~développeur et un mauvais ~~chasseur~~développeur](https://www.youtube.com/watch?v=QuGcoOJKXT8), ce sont des arguments d’une portée limitée ... Je commence par vous présenter le choix de [Fog Creek](http://www.fogcreek.com/) pour son application [Trello](https://trello.com/). C’est _assez_ ressemblant avec Kanboard, même si les finalités ne sont pas les mêmes. Vous trouverez la démarche et les explications de ce choix sur leur blog : [Trello Stack](http://blog.fogcreek.com/the-trello-tech-stack/) Serveur ======= * **[node.js](https://fr.wikipedia.org/wiki/Nodejs)** parce que : * propagation instantanée des mises à jour * gére les évènements coté serveur de façon non blocante * adapté aux applications [SPA](https://en.wikipedia.org/wiki/Single-page_application) avec le framework [Express](http://expressjs.com/) pour gérer les routes et le middleware [Connect](http://www.senchalabs.org/connect/) pour l’auth et la gestion des cookies * [Cluster](http://learnboost.github.io/cluster/) pour gérer les instances nodejs * Le tout écrit en [CoffeeScript](http://coffeescript.org/) qui compile vers javascript * **[HAProxy](http://haproxy.1wt.eu/)** pour : * la répartition de charge * **[Redis](http://redis.io/)** pour : * gérer de façon rapide les données éphémères partagées entre les différentes instances * le [PubSub](https://fr.wikipedia.org/wiki/PubSub) pour renvoyer les modifications aux clients * **[mongoDB](http://www.mongodb.org/)** pour : * une base de données orientée documents leur permettant de faire tourner différente versions de codes sans avoir à gérer les migrations de schéma que pourraient subir une base de données classique SQL Il existe de nombreuses solutions NoSQL, ce [blog](http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis) vous en propose une comparaison : Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Couchbase vs Neo4j vs Hypertable vs ElasticSearch vs Accumulo vs VoltDB vs Scalaris Client ======= * **[mustache](http://mustache.github.io/)** pour : * le système de micro templating afin de générer le HTML * **[Less](http://lesscss.org/)** : * Less est un préprocesseur CSS, ce genre d’outil évite de se répéter dans son code et permet de pallier au manque de CSS tels que les variables ou les calculs. D’autres solutions existent telles que : - [Saas](http://sass-lang.com/)/[compass](http://compass-style.org/) - [stylus](http://learnboost.github.io/stylus/) * **[Backbone.js](http://backbonejs.org/)** pour : * gérer les évènements du DOM * regénérer le HTML produit par mustache en cas de changement * **[pushState](https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history)** pour : * pour executer les changements de pages dans le cadre d’une SPA en conservant la possibilité d’obtenir des liens propres (bookmark) en appelant le controller Backbone.js adéquat * Pour les mises à jour de l’interface en temps réel : * [Socket.IO](http://socket.io/) pour gérer les connections [WebSocket](https://fr.wikipedia.org/wiki/WebSocket) dans les navigateurs récents * Du polling AJAX pour les navigateurs plus anciens ou IE ne supportant pas les WebSocket Le monde des frameworks MVC côté javascript évoluant à un rythme effréné, il est tout à fait envisageable de se tourner vers d’autres solutions : - [angularjs](http://angularjs.org/) (Google) - [emberjs](http://emberjs.com/) (Tilde) - [React](http://facebook.github.io/react/) (Facebook) Si vous cherchez bien, vous trouverez de nombreuses querelles de clocher concernant ces solutions, comme d'habitude en somme ... J’ai bien compris la démarche de [0xfg](https://linuxfr.org/users/0xfg) exprimé dans [ce commentaire](https://linuxfr.org/nodes/101308/comments/1521618) :> Au départ j'avais hésité à le faire en Python ou en Golang mais finalement je l'ai fais en PHP pour que se soit vraiment simple à installer partout. Quitte à faire un logiciel libre pour soit même autant qu'il serve aux autres également... On est donc loin de l’esprit de Fog Creek en ce qui concerne Trello, puisque eux même expliquent que [le logiciel n’a pas pour but d’être distribué](http://joelonsoftware.com/items/2012/01/06.html) mais uniquement à être utilisé en solution [SaaS](https://fr.wikipedia.org/wiki/Logiciel_en_tant_que_service). Disons que je suis curieux et que j’aimerais connaître vos choix sur les briques logicielles que vous affectionnez. Merci de partager vos connaissances ou réflexions. Et vous, si vous deviez écrire ce Kanboard de zéro, quels seraient vos choix en matière de langage, framework ou architecture en général ?