Retour à la constellationPROARKHEAtlas personnel

Systèmes distribués

MyTinyX

Un réseau social simplifié construit comme un système distribué.

2026Terminé
PROARKHEL'origine

MyTinyX était un projet de groupe beaucoup plus grand que ceux auxquels j'étais habitué. Nous étions entre douze et quatorze à recréer une version simplifiée de Twitter/X en répartissant les responsabilités entre plusieurs services.

À cette échelle, le défi n'était plus seulement d'écrire du code qui fonctionne. Il fallait aussi comprendre les contrats entre les équipes, les événements disponibles et le moment où chaque service devenait réellement testable.

POSTLIKEFOLLOW
TIMELINE
SERVICE
PERSONALFOLLOWED
REDISMONGODB

J'avais la responsabilité du service Timeline, c'est-à-dire la partie qui détermine ce qu'un utilisateur voit. J'ai séparé les actions personnelles de celles provenant des comptes suivis dans deux collections MongoDB, avec les informations nécessaires pour conserver l'ordre chronologique et l'origine de chaque interaction.

Les timelines étaient mises à jour de manière asynchrone via Redis. Le service réagissait aux créations et suppressions de posts, aux likes et unlikes, mais aussi aux follows et unfollows. Cela demandait de gérer des cas où plusieurs événements différents pouvaient modifier le même résultat visible.

Une timeline paraît simple lorsqu'on ne voit que la liste finale. Dès qu'on suit les événements qui la construisent, elle devient un problème de cohérence : recevoir une suppression après un like, reconstruire le flux après un nouvel abonnement ou éviter qu'une même action apparaisse deux fois. C'est précisément cette mécanique invisible qui m'a retenu sur le projet.

Responsable du service Timeline : modélisation des flux personnels et des abonnements dans MongoDB, puis synchronisation asynchrone via Redis lors des créations, suppressions, likes, unlikes, follows et unfollows.

La difficulté principale a été de développer un service qui dépendait de nombreuses parties réalisées par d'autres. J'ai appris à avancer avec des hypothèses claires, à tester les événements séparément puis à intégrer progressivement le comportement complet.

C'est le projet qui m'a le mieux fait comprendre la différence entre découper une application en services et construire réellement un système distribué cohérent.

MMongoDBRRedisDDockerµMicroservices
Projet suivantNLP Translation Chain