SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
@xebiconfr #xebiconfr
Cédric
Hauber
React Realtime
@ scale
@xebiconfr #xebiconfr
1
Cédric Hauber
Cloud Builder @ wescale
Scaling addict
Code lover
Beer drinker
@xebiconfr #xebiconfr
Le temps réel
@xebiconfr #xebiconfr
1a
- Une meilleure expérience web
Pourquoi ?
5
- Mieux capter l’attention de l’utilisateur
- Accumuler plus de données
@xebiconfr #xebiconfr
1b
- Plus qu’une fonctionnalité, un type d’application
Comment ?
6
- Pas de technologies « magiques » mais bien choisies
- Ce n’est pas si compliqué qu’il n’y paraît.
@xebiconfr #xebiconfr
2React, Redux, RethinkDB,
Kubernetes… késako ?
@xebiconfr #xebiconfr
2a
- Une bibliothèque javascript
- Écrit par Facebook
- Des composants réutilisables
- Pas de templates, une syntaxe simple (JSX) ressemblant a du
HTML
- 52 000+ stars, 9 000+ forks, 800+ contributeurs
React
8
@xebiconfr #xebiconfr
2b À quoi ressemble React
9
render() {

return <div>

<Likes likes={this.props.likes}/>

<LikeButton onIncrement={this.like}>Like</LikeButton>

</div>

}
@xebiconfr #xebiconfr
2c
- Une bibliothèque JavaScript
- Un état global pour votre application
- Permet de découpler nos composants
- Permet de restituer l’était d’une application à n‘importe quel moment
- Une forte communauté 24 000+ stars, 4 000+ forks, 300+
contributeurs
Redux
10
@xebiconfr #xebiconfr
2d À quoi ressemble Redux
11
export const incrementLike = (increment) => {

return {

type: INCREMENT_LIKES,

payload: increment

};

};



const ACTION_HANDLERS= {

[INCREMENT_LIKES]: (state, action) => action.payload + state

};



export default function likesReducer(state = 0, action) {

const handler = ACTION_HANDLERS[action.type];

return handler ? handler(state, action) : state

}
@xebiconfr #xebiconfr
2e
- Une base de donnéeS NoSQL
- Très bien codée
- Fait pour le temps réel
- JavaScript friendly
- Scaling horizontal et linéaire
- 16 500+ stars, 1 300+ forks et 100+ contributeurs
RethinkDB
12
@xebiconfr #xebiconfr
2f À quoi ressemble RethinkDB
13
r.table("likes").get(1).update((item) => {

item.getField("value").add(1);

}).run(conn)
@xebiconfr #xebiconfr
2g
- L’orchestrateur par excellence de conteneurs Docker / Rkt
- Initiative lancée par Google
- 17 000+ stars, 5 700+ forks et 900+ contributeurs
- Pokemon Go possède le plus gros cluster Kubernetes hébergé chez
Google !
Kubernetes
14
@xebiconfr #xebiconfr
3Voyons cela en détail
@xebiconfr #xebiconfr
3a
export const rethinkMiddleware = store => next => action => {

if (!action) return;

if (!action.server)

return next(action);

if (isConnected) {

sendMessage(action);

} else {

onConnect.push(action);

}

};
Redux middleware
16
@xebiconfr #xebiconfr
3b
const watchLikes = action => dispatch => {

RethinkDB.execute((r, conn) => {

return r.table("likes").get(1).run(conn)

.then((counter) => dispatch({ type: UPDATE_LIKES_COUNT, payload: counter.value}))

.then(() => {

return r.table(« likes »).get(1).changes({squash: true}).run(conn)
.then((cursor) => {

cursor.each((err, doc) => {

if (err) return;

dispatch({

type: UPDATE_LIKES_COUNT,

payload: doc.new_val.value

});

});

});

});

});
};



export default {

[WATCH_LIKES]: watchLikes

};
Server-side
17
@xebiconfr #xebiconfr
4La montée en charge
@xebiconfr #xebiconfr
4a Pourquoi Docker et Kubernetes
19
- Le meilleur moyen de packager une application
- Parce que nous voulons monter en charge rapidement
- Sans Kubernetes, orchestrer des conteneurs est un enfer.
@xebiconfr #xebiconfr
4b Notre architecture
20
RethinkDB
Replicas
RethinkDB
Proxy
API FEED
NGINX
FRONTEND
@xebiconfr #xebiconfr
4c
Test 1 :
- 1 conteneur API
- 1 conteneur FEED
- 1 frontend
- 500 clients / sec
Résultat :
132ms / requête
0 Timeout / 0 Erreurs 500 / 0 Network errors
Résultats
21
@xebiconfr #xebiconfr
4d
Test 2:
- 10 conteneur API
- 1 conteneur FEED
- 1 frontend
- 5000 clients / sec
Résultat :
206ms / requête
0 Timeout / 0 Erreurs 500 / 0 Network errors
Résultats
22
@xebiconfr #xebiconfr
5Conclusion

Contenu connexe

Tendances

Tendances (8)

Automatiser l'ère post-dev
Automatiser l'ère post-devAutomatiser l'ère post-dev
Automatiser l'ère post-dev
 
Be zend docker
Be zend dockerBe zend docker
Be zend docker
 
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
 
Pachyderm big data de l'ère docker
Pachyderm big data de l'ère dockerPachyderm big data de l'ère docker
Pachyderm big data de l'ère docker
 
Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017
 
Mybatis : Spring Data à la rescousse
Mybatis : Spring Data à la rescousse Mybatis : Spring Data à la rescousse
Mybatis : Spring Data à la rescousse
 
Elasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautésElasticsearch 5.0 les nouveautés
Elasticsearch 5.0 les nouveautés
 
Consul @Criteo - usages et patches
Consul @Criteo - usages et patchesConsul @Criteo - usages et patches
Consul @Criteo - usages et patches
 

En vedette

James W. Berry
James W. BerryJames W. Berry
James W. Berry
Berry W
 
quistes de coledoco
quistes de coledocoquistes de coledoco
quistes de coledoco
mafersc6
 

En vedette (12)

James W. Berry
James W. BerryJames W. Berry
James W. Berry
 
Devoxx France - Nouvelles du Front
Devoxx France - Nouvelles du FrontDevoxx France - Nouvelles du Front
Devoxx France - Nouvelles du Front
 
Pequeños talentos. grupo 2 final
Pequeños talentos. grupo 2 finalPequeños talentos. grupo 2 final
Pequeños talentos. grupo 2 final
 
Sistema de entrenamiento
Sistema de entrenamientoSistema de entrenamiento
Sistema de entrenamiento
 
Gestión financiera y pública clase 1
Gestión financiera y pública clase 1Gestión financiera y pública clase 1
Gestión financiera y pública clase 1
 
quistes de coledoco
quistes de coledocoquistes de coledoco
quistes de coledoco
 
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
 
Log I am your father
Log I am your fatherLog I am your father
Log I am your father
 
XebiCon'16 : Data Lake Done Right ! Par Matthieu Blanc, Data Architect chez X...
XebiCon'16 : Data Lake Done Right ! Par Matthieu Blanc, Data Architect chez X...XebiCon'16 : Data Lake Done Right ! Par Matthieu Blanc, Data Architect chez X...
XebiCon'16 : Data Lake Done Right ! Par Matthieu Blanc, Data Architect chez X...
 
Ứng dụng thiền định vào công việc và học tập
Ứng dụng thiền định vào công việc và học tậpỨng dụng thiền định vào công việc và học tập
Ứng dụng thiền định vào công việc và học tập
 
XebiCon'16 : PMU et le Big Data - d'une approche mono projet à une démarche e...
XebiCon'16 : PMU et le Big Data - d'une approche mono projet à une démarche e...XebiCon'16 : PMU et le Big Data - d'une approche mono projet à une démarche e...
XebiCon'16 : PMU et le Big Data - d'une approche mono projet à une démarche e...
 
So Sánh building sections, wall sections, detail view, plan callout, detail c...
So Sánh building sections, wall sections, detail view, plan callout, detail c...So Sánh building sections, wall sections, detail view, plan callout, detail c...
So Sánh building sections, wall sections, detail view, plan callout, detail c...
 

Similaire à XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez WeScale

Similaire à XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez WeScale (20)

XebiCon'16 : GraphQL et Falcor, un nouveau regard sur les architectures REST ...
XebiCon'16 : GraphQL et Falcor, un nouveau regard sur les architectures REST ...XebiCon'16 : GraphQL et Falcor, un nouveau regard sur les architectures REST ...
XebiCon'16 : GraphQL et Falcor, un nouveau regard sur les architectures REST ...
 
Hands on drone challenge - xebicon'18
Hands on  drone challenge - xebicon'18Hands on  drone challenge - xebicon'18
Hands on drone challenge - xebicon'18
 
Self-Service infrastructure pour GCP avec Terraform et Gitlab
Self-Service infrastructure pour GCP avec Terraform et GitlabSelf-Service infrastructure pour GCP avec Terraform et Gitlab
Self-Service infrastructure pour GCP avec Terraform et Gitlab
 
Kubernetes University - Cap sur l'orchestration
Kubernetes University - Cap sur l'orchestrationKubernetes University - Cap sur l'orchestration
Kubernetes University - Cap sur l'orchestration
 
Kubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerKubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration Docker
 
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
 
La réalité mélangée dans vos applications
La réalité mélangée dans vos applicationsLa réalité mélangée dans vos applications
La réalité mélangée dans vos applications
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
 
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016
 
la réalité mélangée de A a Z
la réalité mélangée de A a Zla réalité mélangée de A a Z
la réalité mélangée de A a Z
 
XebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéXebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilité
 
AR / VR / XR dans les navigateurs
AR / VR / XR dans les navigateursAR / VR / XR dans les navigateurs
AR / VR / XR dans les navigateurs
 
Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
SkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React NativeSkillValue LesJeudis Master Class React Native
SkillValue LesJeudis Master Class React Native
 
Devoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudDevoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le Cloud
 
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
 
Devoxx 17 - Orchestration de conteneurs : le choix des armes !
Devoxx 17 - Orchestration de conteneurs : le choix des armes !Devoxx 17 - Orchestration de conteneurs : le choix des armes !
Devoxx 17 - Orchestration de conteneurs : le choix des armes !
 
la realite a l assaut du web
la realite a l assaut du webla realite a l assaut du web
la realite a l assaut du web
 

Plus de Publicis Sapient Engineering

Plus de Publicis Sapient Engineering (20)

XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainXebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
 
Xebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to CloudXebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to Cloud
 
XebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern InfrastructureXebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern Infrastructure
 
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
 
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
 
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
 
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
 
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéXebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
 
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
 
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
 
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizXebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
 
XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture
 
XebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectXebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID Connect
 
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
 
XebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an aprèsXebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an après
 
XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018
 
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
 
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
 
XebiCon'18 - La guerre des Frameworks n'aura pas lieu
XebiCon'18 - La guerre des Frameworks n'aura pas lieuXebiCon'18 - La guerre des Frameworks n'aura pas lieu
XebiCon'18 - La guerre des Frameworks n'aura pas lieu
 
XebiCon'18 - Orchestration : Conteneurs vs Musique
XebiCon'18 - Orchestration : Conteneurs vs MusiqueXebiCon'18 - Orchestration : Conteneurs vs Musique
XebiCon'18 - Orchestration : Conteneurs vs Musique
 

XebiCon'16 : Realtime React par Cédric Hauber, Cloud Designer et Builder chez WeScale

  • 2. @xebiconfr #xebiconfr 1 Cédric Hauber Cloud Builder @ wescale Scaling addict Code lover Beer drinker
  • 5. @xebiconfr #xebiconfr 1a - Une meilleure expérience web Pourquoi ? 5 - Mieux capter l’attention de l’utilisateur - Accumuler plus de données
  • 6. @xebiconfr #xebiconfr 1b - Plus qu’une fonctionnalité, un type d’application Comment ? 6 - Pas de technologies « magiques » mais bien choisies - Ce n’est pas si compliqué qu’il n’y paraît.
  • 7. @xebiconfr #xebiconfr 2React, Redux, RethinkDB, Kubernetes… késako ?
  • 8. @xebiconfr #xebiconfr 2a - Une bibliothèque javascript - Écrit par Facebook - Des composants réutilisables - Pas de templates, une syntaxe simple (JSX) ressemblant a du HTML - 52 000+ stars, 9 000+ forks, 800+ contributeurs React 8
  • 9. @xebiconfr #xebiconfr 2b À quoi ressemble React 9 render() {
 return <div>
 <Likes likes={this.props.likes}/>
 <LikeButton onIncrement={this.like}>Like</LikeButton>
 </div>
 }
  • 10. @xebiconfr #xebiconfr 2c - Une bibliothèque JavaScript - Un état global pour votre application - Permet de découpler nos composants - Permet de restituer l’était d’une application à n‘importe quel moment - Une forte communauté 24 000+ stars, 4 000+ forks, 300+ contributeurs Redux 10
  • 11. @xebiconfr #xebiconfr 2d À quoi ressemble Redux 11 export const incrementLike = (increment) => {
 return {
 type: INCREMENT_LIKES,
 payload: increment
 };
 };
 
 const ACTION_HANDLERS= {
 [INCREMENT_LIKES]: (state, action) => action.payload + state
 };
 
 export default function likesReducer(state = 0, action) {
 const handler = ACTION_HANDLERS[action.type];
 return handler ? handler(state, action) : state
 }
  • 12. @xebiconfr #xebiconfr 2e - Une base de donnéeS NoSQL - Très bien codée - Fait pour le temps réel - JavaScript friendly - Scaling horizontal et linéaire - 16 500+ stars, 1 300+ forks et 100+ contributeurs RethinkDB 12
  • 13. @xebiconfr #xebiconfr 2f À quoi ressemble RethinkDB 13 r.table("likes").get(1).update((item) => {
 item.getField("value").add(1);
 }).run(conn)
  • 14. @xebiconfr #xebiconfr 2g - L’orchestrateur par excellence de conteneurs Docker / Rkt - Initiative lancée par Google - 17 000+ stars, 5 700+ forks et 900+ contributeurs - Pokemon Go possède le plus gros cluster Kubernetes hébergé chez Google ! Kubernetes 14
  • 16. @xebiconfr #xebiconfr 3a export const rethinkMiddleware = store => next => action => {
 if (!action) return;
 if (!action.server)
 return next(action);
 if (isConnected) {
 sendMessage(action);
 } else {
 onConnect.push(action);
 }
 }; Redux middleware 16
  • 17. @xebiconfr #xebiconfr 3b const watchLikes = action => dispatch => {
 RethinkDB.execute((r, conn) => {
 return r.table("likes").get(1).run(conn)
 .then((counter) => dispatch({ type: UPDATE_LIKES_COUNT, payload: counter.value}))
 .then(() => {
 return r.table(« likes »).get(1).changes({squash: true}).run(conn) .then((cursor) => {
 cursor.each((err, doc) => {
 if (err) return;
 dispatch({
 type: UPDATE_LIKES_COUNT,
 payload: doc.new_val.value
 });
 });
 });
 });
 }); };
 
 export default {
 [WATCH_LIKES]: watchLikes
 }; Server-side 17
  • 19. @xebiconfr #xebiconfr 4a Pourquoi Docker et Kubernetes 19 - Le meilleur moyen de packager une application - Parce que nous voulons monter en charge rapidement - Sans Kubernetes, orchestrer des conteneurs est un enfer.
  • 20. @xebiconfr #xebiconfr 4b Notre architecture 20 RethinkDB Replicas RethinkDB Proxy API FEED NGINX FRONTEND
  • 21. @xebiconfr #xebiconfr 4c Test 1 : - 1 conteneur API - 1 conteneur FEED - 1 frontend - 500 clients / sec Résultat : 132ms / requête 0 Timeout / 0 Erreurs 500 / 0 Network errors Résultats 21
  • 22. @xebiconfr #xebiconfr 4d Test 2: - 10 conteneur API - 1 conteneur FEED - 1 frontend - 5000 clients / sec Résultat : 206ms / requête 0 Timeout / 0 Erreurs 500 / 0 Network errors Résultats 22