Connect with us

Technologie

Créer un service web ultra-disponible sans base de données : le défi à relever !

Vous avez déjà créé un service web ou une application web ? Vous connaissez alors le processus habituel : choisir une base de données, un framework de service web… Mais est-ce toujours la meilleure méthode ? La technologie évolue rapidement et de nombreuses innovations ont vu le jour ces dernières années. Imaginez un monde où votre base de données et votre service web ne font qu’un. Grâce à des algorithmes comme Raft, il est désormais possible de créer des architectures plus simples et plus efficaces. Prêt à explorer cette nouvelle approche ?

Published

on

Créer un service web ultra-disponible sans base de données : le défi à relever !

Technologie

Si vous avez déjà développé un service web ou une application web, vous connaissez le processus : choisir une base de données, sélectionner un framework de service web (et de nos jours, choisir également un framework front-end, mais ne nous attardons pas là-dessus).

Cela fait des décennies que ce schéma est en place, et peu de personnes remettent en question s’il s’agit toujours de la meilleure méthode pour créer une application web. Cependant, de nombreux changements ont eu lieu au cours de la dernière décennie :

  • Les disques sont désormais beaucoup plus rapides (NVMe).
  • Les disques sont également plus robustes (EBS/EFS, etc.).
  • La RAM est très abordable ; pour la plupart des startups, il est probable que toutes vos données puissent tenir dans la RAM.
  • Vous pouvez louer une machine avec des centaines de cœurs si vous le souhaitez.

Ce n’était pas le cas lorsque j’ai commencé à travailler dans une startup Rails en 2010. Mais surtout, un changement majeur s’est produit au cours de la dernière décennie :

  • L’algorithme de consensus Raft a été publié en 2014, avec de nombreuses implémentations robustes facilement accessibles.

Dans cet article, nous allons explorer une nouvelle architecture pour le développement web. Nous l’utilisons avec succès pour Screenshotbot, et nous espérons que vous l’adopterez également.

Je vais diviser cet article en trois parties : Explorer, Élargir et Extraire, en faisant référence aux 3X de Kent Beck. Vos besoins varieront à chaque étape de votre startup, et je vais démontrer comment utiliser cette architecture dans chacune de ces phases.

Explorer la Technologie

Vous êtes une nouvelle startup. Vous itérez sur un produit, vous n’avez aucune idée de la manière dont les gens vont l’utiliser, ni même s’ils vont l’utiliser.

Pour la plupart des startups aujourd’hui, cela signifierait choisir Rails, Django, Node ou un autre framework, soutenu par une base de données comme MySQL, PostgreSQL ou MongoDB.

« Gardez-le simple », dites-vous, et cela semble suffisamment simple.

Mais est-ce vraiment aussi simple que cela pourrait l’être ? Pourrions-nous simplifier encore davantage ? Que se passerait-il si le service web et l’instance de base de données n’étaient qu’un seul et même élément ? Je ne parle pas d’utiliser quelque chose comme SQLite, où vos données sont toujours sérialisées, mais plutôt de considérer que toute la mémoire de votre RAM est votre base de données.

Imaginez toutes les choses incroyables que vous pourriez créer si vous n’aviez jamais à sérialiser des données en requêtes SQL. Tout d’abord, vous n’avez pas besoin de plusieurs serveurs front-end communiquant avec une seule base de données ; il vous suffit d’obtenir un serveur plus puissant avec plus de RAM et de CPU si nécessaire. Qu’en est-il des index ? Vous pouvez utiliser des index en mémoire, essentiellement des tables de hachage pour rechercher des objets. Vous n’avez pas besoin d’index sophistiqués comme les B-arbres, optimisés pour la latence des disques. (En fait, vous pouvez utiliser certains index qui n’étaient probablement pas possibles avec des bases de données traditionnelles. Un index utilisant des collections fonctionnelles a été crucial pour la scalabilité de Screenshotbot.)

Vous n’aurez également pas besoin d’architectures spéciales pour réduire les allers-retours vers votre base de données. En particulier, vous n’aurez pas besoin de cette gestion asynchrone, car vos threads ne sont plus limités par les entrées/sorties. Récupérer des données devient simplement une question de lecture de la RAM. Le débogage du code devient également beaucoup plus simple.

Vous n’avez pas besoin de services pour exécuter des tâches en arrière-plan, car ces tâches sont simplement des threads s’exécutant dans ce grand processus.

Vous n’avez pas besoin de protocoles de concurrence complexes, car la plupart de vos exigences en matière de concurrence peuvent être satisfaites par de simples mutex en mémoire et des variables de condition.

Mais vient alors la question cruciale : comment récupérer lorsque votre processus plante ? La réponse est simple : prenez périodiquement un instantané de tout ce qui se trouve dans la RAM.

Attendez, que se passe-t-il si vous avez apporté des modifications depuis le dernier instantané ? Voici l’astuce : chaque fois que vous modifiez des parties de la RAM, vous écrivez une transaction sur le disque. Ainsi, si vous avez une ligne comme foo.setBar(2), cela écrira d’abord une transaction indiquant que nous avons changé le champ bar de foo à 2, puis définira effectivement le champ à 2. Une opération comme new Foo() écrira une transaction sur le disque pour indiquer qu’un objet Foo a été créé, puis renverra le nouvel objet.

Ainsi, si votre processus plante et redémarre, il recharge d’abord l’instantané, puis rejoue les journaux de transactions pour récupérer complètement l’état. (Notez que les modifications d’index n’ont pas besoin de faire partie du journal des transactions. Par exemple, s’il y a un index sur le champ bar de Foo, alors setBar devrait simplement mettre à jour l’index, qui sera mis à jour qu’il soit lu à partir d’un instantané ou d’une transaction.)

Enfin, cette architecture permet d’écrire un nouveau type de code qui n’était pas possible auparavant. Étant donné que toutes les requêtes sont traitées par le même processus, qui ne se fait généralement pas tuer, cela signifie que vous pouvez stocker des fermetures en mémoire qui peuvent être utilisées pour servir des pages. Par exemple, sur Screenshotbot, si vous voyez un URL comme « https://screenshotbot.io/n/nnnnnnn », il s’agit en réalité d’une fermeture sur le serveur, où nnnnnnn correspond à une fermeture interne. Étonnamment, ce simple changement signifie que nous n’avons pas besoin de sérialiser des objets lors des transitions de page. La fermeture a des références aux objets, donc nous n’avons pas besoin de transmettre des identifiants d’objet à chaque requête. En JavaScript, cela pourrait hypothétiquement ressembler à :

function renderMyObject(obj) {
   return ...
             obj.delete())>Supprimer
            ...

}

Tout cela signifie que vous pouvez itérer rapidement. Si vous devez déboguer, il n’y a qu’un seul service à déboguer. Si vous devez profiler le code, il n’y a qu’un seul service à profiler (plus besoin des journaux de requêtes lentes de MySQL). Il n’y a qu’un seul service à surveiller : si ce service tombe en panne, le site sera également hors ligne, mais comme il n’y a qu’un seul service et un seul serveur, la probabilité de défaillance est également beaucoup plus faible. Si le serveur tombe, AWS mettra automatiquement en ligne un nouveau serveur pour le remplacer en quelques minutes.

Il est également beaucoup plus facile d’écrire du code de test, car vous n’avez plus besoin de simuler des bases de données.

Élargir la Technologie

Vous avancez rapidement, itérant et développant des idées, tout en attirant lentement des clients en cours de route.

Puis un jour, vous obtenez un client de renom. Bingo, vous entrez maintenant dans la phase d’Élargissement de votre startup.

Mais il y a un hic : ce client de renom exige une disponibilité de 99,999 %.

Il est certain que l’architecture que nous venons de décrire ne peut pas gérer cela. Si le serveur tombe, nous devrions attendre plusieurs minutes qu’AWS le remette en ligne. Une fois qu’il est de nouveau opérationnel, nous pourrions attendre plusieurs minutes pour que notre processus restaure même l’instantané depuis le disque. Même les redéploiements sont délicats :

Optimisation de l’Architecture des Services Web

Redémarrer un service peut entraîner une interruption du serveur pendant plusieurs minutes.

C’est ici qu’intervient le Protocole de Consensus Raft.

Raft est un algorithme et un protocole remarquables. Il prend votre machine à états finis (votre serveur web/base de données) et réplique essentiellement le journal des transactions. Ainsi, nous pouvons étendre notre architecture simple sur trois machines. Si le leader tombe en panne, un nouveau leader est élu en quelques secondes et continue de traiter les requêtes.

Nous avons transformé notre service basique en une base de données hautement disponible, sans modifier fondamentalement la manière dont les développeurs écrivent leur code.

Avec ce mécanisme, il est également possible de déployer progressivement sans jamais arrêter le serveur. (Bien que nous redémarrions rarement nos processus serveur, nous en parlerons plus tard.) Étant donné qu’il n’y a qu’un seul service, il est également facile de calculer vos garanties de disponibilité.

Préparation à la Croissance

Votre startup connaît un bon développement et vous avez des milliers de clients importants.

Pour être franc, Screenshotbot n’est pas encore à ce stade, mais nous nous préparons à cette éventualité, avec une surveillance en place pour anticiper les goulets d’étranglement.

La solution ici est quelque chose que les grandes entreprises appliquent déjà à leurs bases de données : le sharding. Vous pouvez diviser vos services web en fragments, chaque fragment étant son propre cluster. En particulier, chez Screenshotbot, nous appliquons déjà cette méthode : chacun de nos clients d’entreprise dispose de son propre cluster dédié. (Petite anecdote : Meta a adopté Raft pour gérer la réplication de chacun de ses clusters MySQL, donc nous faisons essentiellement la même chose sans utiliser de base de données distincte.)

Je ne sais pas à quoi m’attendre, car je suis plutôt du genre à résoudre les problèmes au fur et à mesure. Le principal goulet d’étranglement que je prévois est l’évolutivité du fil de validation. Les fils de lecture se parallélisent très bien. Il y a un fil de validation qui applique chaque transaction une à une. Il s’avère que la latence du disque est sans importance ici, puisque l’algorithme Raft peut simplement valider plusieurs transactions ensemble sur le disque. Ma principale préoccupation est que le coût CPU pour appliquer les transactions dépasse la performance d’un seul cœur. Je doute fortement que cela se produise, mais c’est une possibilité. À ce stade, nous pourrions profiler le coût des validations et l’améliorer (par exemple, déplacer une partie du travail hors du fil de transaction), ou nous pourrions simplement envisager le sharding. Je prévois probablement d’écrire un autre article de blog lorsque cela se produira.

Notre Technologie

Maintenant que j’ai expliqué le concept, laissez-moi vous parler de notre stack technologique et pourquoi elle s’est révélée si adaptée à cette architecture.

Nous utilisons Common Lisp. Mon implémentation initiale de Screenshotbot utilisait MySQL, mais je l’ai rapidement remplacée par bknr.datastore précisément parce que gérer la concurrence avec MySQL était difficile et Screenshotbot est une application hautement concurrente. BKNR Datastore est une bibliothèque qui gère l’architecture décrite dans la section Explorer, mais conçue pour Common Lisp. (Il existe des bibliothèques similaires pour d’autres langages, mais elles sont peu nombreuses.)

Common Lisp est également fortement multithreadé, ce qui est crucial pour cette architecture, car vos requêtes web sont traitées par des fils dans un seul processus. Ruby ou Python ne conviendraient pas à cette exigence.

Nous utilisons également le concept de fermetures que j’ai mentionné précédemment. Cela signifie que nous ne pouvons pas redémarrer le serveur fréquemment (si vous redémarrez le serveur, vous perdez les fermetures). Donc, recharger le code se fait simplement par un rechargement à chaud dans le processus en cours. Il s’avère que Common Lisp excelle dans ce domaine : une grande partie de la norme concerne le rechargement du code. (Par exemple, si la définition de classe change, comment mettre à jour les objets de cette classe ? Il existe une norme pour cela.)

Il nous arrive de redémarrer les serveurs. Actuellement, il semble que nous ne redémarrions les serveurs qu’une fois tous les mois ou deux mois. Lorsque cela est nécessaire, nous procédons simplement à un redémarrage progressif avec notre cluster Raft. Nous utilisons un cluster de 3 serveurs par installation, ce qui permet à un serveur de tomber en panne. Nous n’utilisons pas Kubernetes, car nous n’en avons pas besoin (du moins, pas encore).

Pour l’implémentation de Raft, nous avons écrit notre propre bibliothèque personnalisée basée sur bknr.datastore. Nous avons construit et open-sourcé bknr.cluster, qui utilise en arrière-plan la fantastique bibliothèque Braft de Baidu. Braft est extrêmement solide, et je le recommande vivement. Braft gère également les instantanés en arrière-plan, ce qui signifie que pendant que nous prenons des instantanés, le serveur peut continuer à traiter des requêtes.

Pour stocker des fichiers image ou des blobs qui ne devraient pas faire partie de la base de données, nous utilisons EFS (un NFS hautement disponible) partagé entre les trois serveurs. EFS est plus facile à utiliser que S3, car nous n’avons pas à gérer les conditions d’erreur. EFS rend également notre code plus testable, car nous n’interagissons pas avec un serveur externe, mais écrivons simplement sur le disque.

Quelle est notre capacité d’évolutivité ? Nous avons quelques grands clients d’entreprise, mais un client en particulier est très connu. Screenshotbot fonctionne sur leur CI, donc nous recevons des requêtes API des centaines de fois pour chaque commit et Pull Request. Malgré cela, nous n’avons besoin que d’une machine de 4 cœurs et 16 Go pour traiter leurs requêtes. (Et des machines similaires pour les répliques, principalement en veille.) Même avec cela, l’utilisation du CPU atteint un maximum de 20 %, mais même alors, la plupart de cela provient du traitement d’images, donc nous avons beaucoup de marge pour évoluer avant d’avoir besoin d’augmenter le nombre de cœurs.

Conclusion sur notre Architecture

Je pense que cette architecture est excellente pour les nouvelles startups, et j’espère que davantage d’entreprises l’adopteront. Évidemment, vous devrez développer certains des outils que nous avons créés pour le langage de votre choix. (Cependant, si vous choisissez d’utiliser Common Lisp, tout est à votre disposition et entièrement open-source.)

Nous sommes très reconnaissants envers les personnes derrière bknr.datastore, Braft et Raft, car sans leur travail, nous ne pourrions pas réaliser tout cela.

Si vous avez trouvé cela utile ou intéressant, n’hésitez pas à le partager sur les réseaux sociaux. Pour toute question, vous pouvez me contacter à [email protected].

Général

Anker SOLIX dévoile la Solarbank 2 AC : la nouvelle ère du stockage d’énergie ultra-compatible !

Découvrez le Solarbank 2 AC, une véritable révolution dans le domaine de l’énergie solaire ! Grâce à ses batteries au phosphate de fer lithium, ce système s’adapte parfaitement à vos besoins. Avec une puissance impressionnante de 2400 watts et la possibilité d’ajouter jusqu’à cinq batteries supplémentaires, il assure un stockage optimal. Sa compatibilité avec le compteur Anker SOLIX Smart favorise une gestion intelligente de votre consommation énergétique. Ne ratez pas l’offre spéciale « early bird », disponible dès maintenant pour seulement 999 euros ! Saisissez cette chance unique !

Published

on

Anker SOLIX dévoile la Solarbank 2 AC : la nouvelle ère du stockage d’énergie ultra-compatible !

Le Solarbank 2 AC : Une Révolution dans le Stockage Énergétique

Batteries au Lithium Fer Phosphate

Le Solarbank 2 AC se démarque par l’utilisation de batteries au lithium fer phosphate (LFP), reconnues pour leur sécurité et leur efficacité. Ce modèle est particulièrement innovant grâce à son système de couplage alternatif, qui lui permet de s’adapter facilement à divers systèmes solaires déjà en place.Que ce soit pour des installations sur toiture, des systèmes solaires compacts pour balcons ou d’autres configurations réduites, il peut fonctionner avec un micro-onduleur de 800 Watts.

Capacité et flexibilité Énergétique

Avec une capacité maximale d’injection dans le réseau domestique atteignant 1200 watts,le Solarbank 2 AC peut être associé à deux régulateurs solaires MPPT. Cela ouvre la possibilité d’ajouter jusqu’à 1200 watts supplémentaires via des panneaux solaires additionnels, portant ainsi la puissance totale à un impressionnant 2400 watts. Pour les utilisateurs nécessitant davantage de stockage énergétique, il est possible d’intégrer jusqu’à cinq batteries supplémentaires de 1,6 kilowattheure chacune, augmentant la capacité totale à 9,6 kilowattheures.

Intégration dans un Écosystème Intelligent

Le Solarbank 2 AC s’intègre parfaitement dans un écosystème énergétique intelligent grâce à sa compatibilité avec le compteur Anker SOLIX Smart et les prises intelligentes proposées par Anker. cette fonctionnalité permet une gestion optimisée de la consommation électrique tout en réduisant les pertes énergétiques inutiles. De plus, Anker SOLIX prévoit d’étendre cette compatibilité aux dispositifs Shelly.

Durabilité et Résistance aux Intempéries

Anker SOLIX met également l’accent sur la longévité du Solarbank 2 AC. Conçu pour supporter au moins 6000 cycles de charge, cet appareil a une durée de vie estimée dépassant quinze ans. Il est accompagné d’une garantie fabricant décennale et possède une certification IP65 qui assure sa résistance face aux intempéries tout en étant capable de fonctionner dans des températures variant entre -20 °C et +55 °C.

Disponibilité et Offres Promotionnelles

Le solarbank 2 AC est disponible sur le site officiel d’Anker SOLIX ainsi que sur Amazon au prix standard de 1299 euros. Cependant, une offre promotionnelle « early bird » sera active du 20 janvier au 23 février 2025, permettant aux acheteurs intéressés d’acquérir cet appareil dès 999 euros ! Cette promotion inclut également un compteur Anker SOLIX Smart offert pour chaque commande passée durant cette période spéciale.

le Solarbank 2 AC représente une avancée significative dans le domaine du stockage énergétique domestique grâce à ses caractéristiques techniques avancées et son engagement envers la durabilité environnementale.

Continue Reading

Technologie

Ne manquez pas cette offre incroyable : le Air Fryer Moulinex Easy Fry Max à -42% sur Amazon !

Les soldes d’hiver sont là ! Ne ratez pas l’incroyable offre d’Amazon sur le Moulinex Easy Fry Max, à seulement 69 euros au lieu de 119 euros, soit une réduction sensationnelle de -42% ! Avec sa capacité généreuse de 5 L, cette friteuse sans huile est idéale pour régaler jusqu’à 6 convives. Grâce à ses 10 programmes de cuisson et son interface tactile intuitive, préparez des plats sains et savoureux en un clin d’œil. Dépêchez-vous, les stocks s’épuisent vite et cette offre est limitée dans le temps !

Published

on

Ne manquez pas cette offre incroyable : le Air Fryer Moulinex Easy Fry Max à -42% sur Amazon !

Technologie

Les soldes d’hiver sont en cours, et Amazon en profite pour offrir des promotions intéressantes, notamment sur les friteuses à air. Actuellement, le Moulinex Easy Fry Max est proposé à un prix attractif de 69 euros au lieu de 119 euros, ce qui représente une réduction immédiate de 42 %. C’est une occasion parfaite pour acquérir une friteuse sans huile XL d’une capacité généreuse de 5 L, idéale pour préparer des repas pour jusqu’à six personnes à un tarif très compétitif.

Étant donné que cette offre est limitée dans le temps,il est conseillé d’agir rapidement si vous souhaitez en bénéficier. De plus, avec un tel prix, les stocks pourraient s’épuiser rapidement. Ce modèle se classe parmi les meilleures ventes sur Amazon avec plus de 1000 unités écoulées le mois dernier.

Profitez des offres sur Amazon

Amazon propose également la livraison gratuite et rapide pour cet article qui bénéficie d’une garantie de deux ans. En outre, il existe une option de paiement échelonné en quatre fois sans frais sur ce modèle. Enfin, sachez que vous avez la possibilité de changer d’avis et retourner le produit gratuitement dans un délai de 30 jours afin d’obtenir un remboursement intégral.

Moulinex Easy Fry Max : cuisinez sainement pour toute la famille

Le moulinex Easy Fry Max fonctionne comme un four à air chaud permettant la préparation de plats savoureux tout en utilisant peu ou pas du tout d’huile. En plus des frites croustillantes qu’il réalise parfaitement, cet appareil se révèle très polyvalent et peut cuisiner une multitude d’autres recettes.

avec ses dix programmes prédéfinis adaptés à divers ingrédients tels que poulet,steak,poisson ou légumes ainsi que des options pour bacon et desserts comme les pizzas ,cet appareil répond aux besoins variés des familles modernes. De plus, Moulinex met à disposition un livre numérique rempli de recettes accessible via QR Code afin que vous puissiez facilement trouver l’inspiration culinaire lorsque nécessaire.

Sa capacité généreuse permet non seulement la préparation rapide mais aussi économique : jusqu’à 70 % moins énergivore et presque deux fois plus rapide qu’un four traditionnel ! Son interface intuitive avec écran tactile facilite son utilisation quotidienne.

en outre, le panier antiadhésif compatible lave-vaisselle simplifie grandement l’entretien après chaque utilisation. N’oubliez pas qu’il s’agit là encore d’une offre temporaire ; ne tardez donc pas si vous souhaitez profiter du meilleur prix possible sur cette friteuse innovante !

Pour accéder à cette remise exceptionnelle :

Continue Reading

Technologie

TikTok revient en force aux États-Unis, mais pas sur l’App Store !

Le suspense autour de TikTok est à son comble ! En avril 2024, le Congrès américain a voté une loi obligeant l’application à changer de propriétaire avant le 19 janvier. Les utilisateurs ont anxieusement attendu la décision finale. Bien que TikTok ait brièvement cessé ses activités, elle est revenue en ligne, mais absente de l’App Store. Apple justifie cette décision par des obligations légales. Cependant, les utilisateurs peuvent toujours accéder à leur compte… sans mises à jour. L’avenir de TikTok pourrait prendre un tournant décisif avec les promesses du nouveau président.

Published

on

TikTok revient en force aux États-Unis, mais pas sur l’App Store !

Technologie

En avril 2024, le Congrès américain a adopté une législation obligeant TikTok à trouver un nouvel acquéreur, ByteDance étant accusé d’activités d’espionnage. Les utilisateurs de l’submission aux États-Unis ont donc attendu avec impatience le week-end précédent la date limite du 19 janvier pour savoir si TikTok serait interdit dans le pays.

Bien que TikTok n’ait pas réussi à dénicher un repreneur avant cette échéance, l’application a temporairement suspendu ses activités… mais seulement pour quelques heures. le réseau social est désormais de retour en ligne, mais il n’est plus accessible sur l’App Store.

Retour de TikTok : Une Absence Persistante sur l’App Store

Apple a expliqué sa décision de retirer TikTok de son App store par un communiqué officiel. « Apple doit respecter les lois en vigueur dans les régions où elle opère. Selon la loi Protecting Americans from Foreign Adversary Controlled Applications act, les applications développées par ByteDance ltd., y compris TikTok et ses filiales comme CapCut et Lemon8, ne pourront plus être téléchargées ou mises à jour sur l’App Store pour les utilisateurs américains après le 19 janvier 2025 », précise la société.

Il est crucial de souligner que les utilisateurs américains ayant déjà installé TikTok peuvent toujours accéder au service. Cependant, ils ne recevront plus aucune mise à jour future de l’application. L’avenir du réseau social pourrait dépendre des décisions du nouveau président des États-Unis.

DÉCLARATION DE TIKTOK :

>

En collaboration avec nos partenaires techniques, nous travaillons activement à rétablir notre service. Nous remercions le président Trump pour avoir clarifié la situation et rassuré nos partenaires qu’ils ne subiront aucune sanction en continuant d’offrir TikTok aux plus de 170 millions d’utilisateurs…

Le successeur de Joe Biden sera investi comme président ce lundi 20 janvier et prévoit d’émettre un décret afin d’accorder un délai supplémentaire à TikTok pour trouver un acquéreur potentiel.Donald Trump propose même que les États-Unis détiennent une participation significative dans cette application.

« Je souhaite que les États-Unis possèdent une part importante dans une coentreprise avec cet outil numérique afin que nous puissions préserver son intégrité tout en lui permettant d’évoluer […]. Ainsi,notre pays détiendrait la moitié des parts dans une coentreprise établie entre nous et tout acheteur sélectionné »,a déclaré Donald Trump.

L’avenir immédiat de TikTok pourrait donc connaître des évolutions majeures très prochainement. Il convient également de noter qu’une rumeur circulait selon laquelle Elon Musk envisagerait d’acquérir des parts dans la plateforme,mais celle-ci a été rapidement démentie par un porte-parole officiel.

Continue Reading

Trending

Copyright © 2024 Tecknews.