Retour d’expérience sur la mise en production, la croissance puis la monétisation de MailClark, le Slack Bot qui permet de recevoir et d’envoyer des emails et des tweets directement dans Slack. MailClark est développé en PHP sous un modèle de micro-services orchestrés par Docker et qui communiquent entre-eux via des queues et consumers RabbitMQ. Le cœur de la solution est un service gérant plus de 5000 connexions WebSocket avec Slack grâce au framework React-PHP, orienté asynchrone. Venez écouter comment nous avons géré la croissance de ce service basé en grande partie sur des technologies émergentes.
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
My slack bot speaks PHP
1. #PHPTour Nantes 18 mai 2017
Gilles Félix, cofounder & Engineer
gilles@mailclark.ai @felixgilles
My Slack bot speaks PHP
2.
3. ● MailClark est installé dans 6800 teams
● Microsoft Teams depuis une semaine
● Plus de 3.5 millions d’emails reçus
● Plus de 300 000 emails envoyés
● Plus 600 comptes twitter et facebook
17. $loop = ReactEventLoopFactory::create();
$client = new ClientWebSocket($websocket_server_url);
$client->on("connect", function() {
// Avertir le pilote
});
$client->on("message", function($message) use ($rabbitmq){
$rabbitmq->publishString($queue_name, $message->getData());
});
$client->on("close", function() {
// Gérer la reconnexion
});
$client->open()->otherwise(function($e) {
// Gérer l’erreur, éventuellement bot revoked
});
$loop->addPeriodicTimer(60, function() {
// Envoi de stats au pilote
});
$loop->run();
18. Blinder les filets de sécurités.
● Surveillance des points névralgiques
● Des logs, des logs, des logs
● Différents niveaux d’alertes
● Maximum d’auto-fix
● DM avec chaque client
Bonjour à tous,
Merci d’être ici
Merci à Vincent pour sa présentation
Je m’appelle Gilles Félix
Je suis co-fondateur et ingénieur chez MailClark
Et je vais donc vous expliquer pourquoi et comment on a créé notre Slack bot, MailClark, en PHP
Bonjour à tous,
Merci d’être ici
Merci à Vincent pour sa présentation
Je m’appelle Gilles Félix
Je suis co-fondateur et ingénieur chez MailClark
Et je vais donc vous expliquer pourquoi et comment on a créé notre Slack bot, MailClark, en PHP
* Impossible de présenter Slack pour ceux qui connaissent pas
* Mais démo de MailClark pour comprendre à quoi sert notre bot
* une fois le bot installé dans votre team, vous allez l’inviter dans un channel
Introduction slide suivante : Des metrics pour avoir les ordres de grandeur
Introduction slide suivante : Pour résumer MailClark en une image, Mailclark c’est ça
Un énorme rond point avec des entrées sorties que sont Slack, twitter, facebook, l’email
Trafic permanent, venant de toute la planête
Et le policier au millieu qui doit gérer les accidents, les embouteillages, les travaux sur chacune des voix d’accès
Il faut déjà être un peu inconscient pour aller se fourrer là
---------
Introduction slide suivant : Pour vous montrer notre niveau d’inconscience
* Slack team dev4slack, communauté des développeurs d’intégrations Slack
* Channel #language-php dédié à ceux qui développe pour Slack en PHP
* Comparer avec #language-js ou #language-phyton
---------
* PHP n’est pas mainstream pour développer des bots
---------
Introduction slide suivante : Mais alors, à part l’inconscience, pourquoi avoir choisi PHP ?
Pour 2 raisons
Introduction slide suivante : D’abord c’est l’histoire
* screenshot de Clubble.com
* Clubble.com webapp lancé fin 2014 avec 3 ex-collègue
* Clubble.com = Google group modernisé et plus sexy
* Ancienne équipe logiciels d’une web agency, longue histoire avec le PHP donc choix dans la continuité
---------
* Ressemblance avec interface Slack
* Ressemblence également remarquée par les investisseurs rencontrés
* Slack est LE phénomène. 1 millions d’utilisateurs quotidien en moins d’un an
* Une sorte d’énorme paquebot lancé à la vitesse d’un hors bord et dont les vagues générées qui coule tous les concurrents dans son sillage.
* Plutôt que de couler avec les autres, on décide d’attraper le paquebot, et se servir de sa traction pour sortir de l’eau.
---------
Second affichage : email = backend = PHP => CQFD
* Pas qu’un choix par défaut
* PHP a beaucoup évolué (performant, composer gestion des dépendances, frameworks dont Silex, démonisation possible)
* Maîtrise, à l’aise donc efficace
---------
Efficacité important pour une startup
* Pour ceux qui ne connaissent pas, travailler dans une startup c’est ça
---------
* Flux tendu / Accélération permanente
* Changer de cap en quelques minutes
* Horizon a 2/3 mois et donc fatalement
* Peu de tests automatisés - délégation de traitement à des services tiers
---------
Contexte à garder à l’esprit pour la suite, ce que je présente a été construit au fil de l’eau
---------
Introduction slide suivante : On est pas passé du jour au lendemain de Clubble.com à MailClark
Clubble.io
Intégration Slack basée sur les slash commands (webhooks)
Transformation d’une webapp classique en un service beaucoup plus modulaire
On sort du schéma requête en entrée, response en sortie. Les deux peuvent être décorélées
Structure de l’application MailClark
Un système de Services asynchrones en cascade
Mutualisation de brique et meilleur gestion des problèmes
RabbitMq : php-amqplib
---------
* Cas d’erreurs : service (interne ou externe) ne répond pas ou répond une erreur,
* Retries avec délais de plus en plus long
* Différents exemples d’événements
---------
* Séparation par team pour ne pas pénaliser toutes les teams en cas de raz de marée sur une team
* Consumer et queue par team détruient après un temps d’inactivité
----------
Introduction slide suivante : retour à clubble.io
Structure de l’application MailClark
Un système de Services asynchrones en cascade
Mutualisation de brique et meilleur gestion des problèmes
RabbitMq : php-amqplib
---------
* Cas d’erreurs : service (interne ou externe) ne répond pas ou répond une erreur,
* Retries avec délais de plus en plus long
* Différents exemples d’événements
---------
* Séparation par team pour ne pas pénaliser toutes les teams en cas de raz de marée sur une team
* Consumer et queue par team détruient après un temps d’inactivité
----------
Introduction slide suivante : retour à clubble.io
Après quelques mois de clubble.io, on sent que pour pleinenement décoler il faut qu’on en passe par un bot
Qui dit bot, dit Webscoket
Changement backend écarté
Tests librairies Websocket PHP
Introduction slide suivante : Nouvelle poussée d’inconscience, Banco, on crée bot2hook
* Rester dans le schéma services asynchrone en cascade de clubble.io
* Avoir quelque chose qui puisse monter en charge
* Supervisor comme commande du container, outil “process supervision“
* Supervisor = gestionnaire de processus, donc plusieurs services dans le container
* Websocket avec Devistro/phpws avec ReactPHP
---------
* Pourquoi 20 batchs : Si tombe redémarrage automatique (supervisor) et que 300 à 400 teams impactées
* Reconnections automatiques et optimisées (Migration Slack)
* Batch redemarré mais Pilote tourne non stop
---------
Introduction slide suivante : coder de l’asynchrone en PHP
* EventLoop : La boucle d'événement est le noyau de ReactPHP sur laquelle viennent s’appuyer traitements asynchrones,
* Définition des callbacks sur les différents événements websocket
* Ouverture de connection et gestion d’erreur
* Démarrage de la boucle
Introduction slide suivante : Pour finir, on est pas totalement inconscient
* L’objectif de ces filets de sécurités c’est d’être réactif
* Tout le monde fait des erreurs, même des très bon comme nous :-)
* problème est d’autant moins gros qu’on le détecte tôt et qu’on agit vite
* Aucune perte de données
* Mieux vaut un délai plutôt que rien
* exemple du collègue dans Slack
* exemple de la boite d’envoi du mailer
Qui utilise Slack, MSTeams, MailClark ?
RabbitMQ : fonctionnalité des délais, mainstream, test de SQS peu concluant