12 mars 2022

ZStandard, la compression Facebook standard qui n'est pas si standard.

Vous êtes-vous déjà demandé quel est le meilleur algorithme de compression de données qui peut vous faire gagner de l'espace et du temps ?

Bannière de logo ZStandard

Il arrive très fréquemment lors de nos activités ponctuelles de support système dans des entreprises externes (entreprises qui ont déjà leurs ingénieurs système dans l'entreprise mais qui peuvent demander de l'aide sur quelque chose de spécifique) de tomber sur des scripts shell (généralement pour la version bash) qui utilisent la sauvegarde et procédures et routines de stockage.

En plus des diverses horreurs vues comme celles qui font des sauvegardes avec rsync ou rsnapshot au lieu d'utiliser le moderne Borg Archiver, ou ceux qui restaient encore en 1996 qui croient que pour faire une sauvegarde d'une base de donn√©es MySQL de 40 Go, il suffit d'utiliser mysqldump plut√īt que l'excellent Percona XtraBackup dont nous avons parl√© dans cet article : Sauvegarde MySQL lente et serveur en panne lorsque Google passe, une erreur STANDARD (nous utiliserons souvent ce mot dans cet article) que nous remarquons est celui de l'ing√©nieur syst√®me qui pr√©tend faire du stockage d'archives en utilisant le classique et d√©sormais obsol√®te et obsol√®te tar.gz selon le format nomearchivio.tar.gz

Le problème de la compression des données

La compression des données est un gros problème. C'est l'un des problèmes les plus anciens et les plus étudiés en informatique. Facebook a développé son propre algorithme de compression appelé ZStandard ou "zstd" qui peut être plus rapide et plus efficace que d'autres algorithmes de compression tels que gzip, tar et bzip2.

Ils ont tous tort.

Et par tous aujourd'hui, nous entendons vraiment tout le monde. Allez lire les scripts de votre ingénieur système dans l'entreprise ou interrogez-le sur l'histoire, et vous ne pourrez qu'être d'accord avec nous.

La raison est assez facile √† expliquer, √©tant une combinaison de facteurs : l'ing√©nieur syst√®me n'√©crit souvent pas ses propres scripts (et nous non plus) mais "se limite" √† chercher quelque chose de pr√™t √† personnaliser, sur un site comme StackOverflow par exemple. Ces exemples sont souvent g√©n√©r√©s par d'autres ing√©nieurs syst√®mes qui √† leur tour sont partis d'une base commune qui tr√®s souvent sont des bases archa√Įques communes (1990 - 2000 environ), notamment pour ce qui concerne les syst√®mes Linux qui ont eux aussi h√©rit√© de scripts de gestion d'anciens" fr√®res" tels que les syst√®mes UNIX.

Il en serait autrement pour ceux qui recherchent des démonstrations sur React, node js ou Angular js par exemple qu'étant - pour l'instant - de nouveaux langages, ils ne pourraient pas pour des raisons logiques évidentes avoir des exemples et de la documentation "obsolète" au sens le plus littéral du terme .

Une autre raison pratique pour laquelle vous continuez à utiliser le .tar.gz habituel est que cela fonctionne réellement, et ce n'est pas rien d'avoir quelque chose qui fonctionne de nos jours.

L'ingénieur système en tant que figure professionnelle peut s'ennuyer et être démotivé s'il n'est pas animé par une réelle passion et/ou un gros salaire, c'est pourquoi la plupart se limitent à faire leur travail d'une manière qui soit fonctionnelle aux objectifs commerciaux de l'entreprise, mais pas le plus fonctionnel.

En outre, il n'arrive pas souvent qu'un ing√©nieur syst√®me (sauf si vous travaillez pour un centre de donn√©es avec des milliers de machines) doive g√©rer la compression des donn√©es et en faire un probl√®me. Une PME italienne normale compte de 3 √† 10 employ√©s, sans parler de la probl√©matique de cette base de donn√©es de 1 Go de clients et de fournisseurs. Bref, nul besoin d'entrer dans une logique op√©rationnelle pour maximiser les profits tout en minimisant les co√Ľts.

Sulle grandi realtà con centinaia o migliaia di dipendenti il tutto viene gestito in outsourcing o alla solita società di consulenza magari con 2 o 3 subappalti, o al grande gruppo multinazionale di consulenza che prende in mano la gestione senza spiegare ne troppo il perchè ne troppo il comme, comment. Le fait est que dans ces très nobles cabinets de conseil, on voit rarement des ingénieurs systèmes seniors dépasser les 2 mille euros/mois de salaire mensuel et cet aspect en dit aussi long sur la motivation qu'un être humain peut mettre dans quelque chose qui est consciemment vécu comme une exploitation . .

Enfin, avouons-le, même les ingénieurs système les plus courageux qui aiment l'expérimentation et s'aventurent comme un Indiana Jones expérimenté à la recherche du compresseur de données perdu, après quelques faux positifs, arrêtez tout et revenez au classique .tar.gz

Parce que même lorsque vous allez tester d'autres alternatives, vous arrivez presque toujours à évaluer et à tester les bzip, px, rar, zip habituels et à la fin des tests, vous arrivez toujours à quelques conclusions :

  1. Le logiciel fait bien son boulot en compressant "assez" mais avec une compression et/ou un temps CPU très élevé.
  2. Le logiciel est assez rapide mais il ne me sauve aucune donnée par rapport à mon .tar.gz

Raison pour laquelle à la fin des jeux il vous reste un .tar.gz et tous les scripts système calibrés sur cette technologie.

ZStandard, compression de données made in Facebook

C'est toujours un plaisir de pouvoir embrasser ou simplement étudier des technologies produites par de grandes actions technologiques telles que Facebook, car cela dénote immédiatement de grandes idées suivies d'une exécution impeccable. Avec les meilleurs ingénieurs du marché et d'importants investissements économiques en recherche et développement, c'est toujours une garantie.

Zstandard, ou zstd pour sa version abrégée, est un algorithme de compression rapide sans perte, qui vise des scénarios de compression en temps réel de niveau zlib et des taux de compression bien meilleurs.

Il offre une très large gamme de compromis entre compression et débit, tout en étant épaulé par un décodeur très rapide. Il offre également un mode spécial pour les petites données, appelé compression de dictionnaire, et peut créer des dictionnaires à partir de n'importe quel ensemble d'échantillons.

Facebook a ouvert Zstandard il y a pr√®s de six ans dans le but de surpasser Zlib en termes de rapidit√© et d'efficacit√©. Zstandard 1.5 am√©liore la vitesse de compression √† des niveaux de compression interm√©diaires, le taux de compression √† des niveaux plus √©lev√©s et apporte une vitesse de d√©compression plus rapide.

zstandard prend en charge les niveaux de compression jusqu'√† 22. Gr√Ęce √† un nouveau chercheur de correspondance pr√©d√©fini, Zstardard 1.5 atteint un taux de compression plus √©lev√© pour les niveaux entre 5 et 12 et les entr√©es sup√©rieures √† 256K. Selon les benchmarks de Facebook, les am√©liorations vont de +25% √† +140% sans pertes significatives en termes de taux de compression. 

Facebook revendique des résultats encore meilleurs sur des machines fortement chargées en cas de conflit de cache important.

En plus d'améliorer les performances de compression, Zstandard 1.5 est compilé par défaut avec un support multithread, standardise certaines nouvelles API et déprécie un certain nombre d'anciennes. Vous pouvez trouver tous les détails dans les notes de version officielles.

En fait, Zstandard a été créé par Yann Collet chez Facebook et est utilisé dans l'environnement de production de Facebook depuis 2015.

En plus de l'outil de ligne de commande, Zstandard est fourni sous forme de bibliothèque pour que vous puissiez l'intégrer facilement dans vos projets.

La bibliothèque Zstandard est fournie en tant que logiciel open source utilisant une licence BSD.

Veuillez vous référer au lien Facebook officiel qui peut vous présenter non seulement le projet mais l'énorme polyvalence du projet lui-même qui a été adopté par une mer d'autres projets :.

5 façons dont Facebook a amélioré la compression à grande échelle avec Zstandard

 

Sauvegardes plus rapides

L'un des principaux avantages de zstd est qu'il peut compresser les données en paquets plus petits plus rapidement que les autres algorithmes, ce qui accélère les sauvegardes. De nombreuses entreprises ont des téraoctets de données à sauvegarder chaque jour, donc tout moyen d'accélérer les sauvegardes est une grande victoire pour elles.

Selon les benchmarks de Facebook, Zstandard surpasse zlib pour toute combinaison de taux de compression et de bande passante.

 

En particulier, Zstandard a montr√© des performances exceptionnelles par rapport √† zlib lors de l'utilisation de la compression standard sans perte :

  • il √©tait environ 3 √† 5 fois plus rapide au m√™me taux de compression
  • produit des fichiers 10 √† 15 % plus petits au m√™me taux de compression
  • il d√©compresse 2x plus vite quel que soit le taux de compression
  • il est adapt√© √† un taux de compression beaucoup plus √©lev√© (~ 4x contre ~ 3,15).

Zusages standards entropie un √©tat fini, bas√© sur les travaux de Jarek Duda sui syst√®mes de nombres asym√©triques (ANS) pour le codage entropique. ANS vise √† "mettre fin au compromis entre vitesse et vitesse" et peut √™tre utilis√© √† la fois pour un codage pr√©cis et un codage tr√®s rapide, avec prise en charge du cryptage des donn√©es. Mais derri√®re les meilleures performances de Zstandard se cachent un certain nombre d'autres choix de conception et d'impl√©mentation :

  • Alors que zlib est limit√© √† une fen√™tre de 32 Ko, Zstandard tire parti d'une plus grande disponibilit√© de m√©moire dans les environnements modernes, y compris les environnements mobiles et embarqu√©s, et n'impose aucune limitation inh√©rente.
  • un nouveau d√©codeur Huffman, Huff0 , permet de d√©coder des symboles en parall√®le gr√Ęce √† plusieurs ALU r√©duire les d√©pendances de donn√©es entre les op√©rations arithm√©tiques
  • Zstandard essaie d'√™tre aussi d√©pourvu de branchement que possible, minimisant ainsi le rin√ßage co√Ľteux des tuyaux d√Ľ √† une pr√©vision de branchement incorrecte. Par exemple, voici comment c'est whileIl est possible de r√©√©crire une boucle sans utiliser de branches :
    /* classic version */
    while (nbBitsUsed >= 8) { /* each while test is a branch */
      accumulator <<= 8;
      accumulator += *byte++;
      nbBitsUsed  -= 8;
    }
    
    /* branch-less version */
    nbBytesUsed = nbBitsUsed >> 3;
    nbBitsUsed &= 7;
    ptr += nbBytesUsed;
    accumulator = read64(ptr);
  • la mod√©lisation repcode am√©liore consid√©rablement la compression des s√©quences qui ne diff√®rent que de quelques octets

Zstandard est √† la fois un outil en ligne de commande et une biblioth√®que, tous deux √©crits en C. Il fournit plus de 20 niveaux de compression qui permettent d'optimiser avec pr√©cision son utilisation pour le mat√©riel concret disponible, les donn√©es √† compresser et les goulots d'√©tranglement √† optimiser. Facebook recommande de commencer par le niveau 3 par d√©faut, qui convient √† la plupart des cas, puis d'essayer des niveaux sup√©rieurs jusqu'au niveau 9 pour assurer un compromis raisonnable entre la vitesse et l'espace, ou sup√©rieur pour de meilleurs taux de compression., √©conomisant plus de 20 niveaux pour les cas o√Ļ vous ne vous souciez pas de la vitesse de compression.

Collet et Turner ont également fourni quelques conseils sur ce que les futures versions de Zstandard apporteront, y compris la prise en charge du multi-threading et de nouveaux niveaux de compression qui permettent des compressions plus rapides et des ratios plus élevés.

Faisons un vrai test

 

Au-delà de toutes les dissertations théoriques que l'on peut produire, ce qui compte pour un ingénieur système, c'est de pouvoir disposer d'un outil à usage humain et extrêmement efficace dans l'exercice de son métier.

On parle d'un système 6core/12 threads avec FS en RAID6 avec disques SATA et non nVME. L'utilitaire zstd a été installé sur CentOS7 via le référentiel REMI via : yum install zstd.

Nous avons donc réalisé cette documentation à partir de ce test qui cible le répertoire /var/lib/mysql d'un SGBD MariaDB tout à fait normal d'un de nos vrais clients.

Ce répertoire a une taille de 80 Go et est d'abord compressé par les utilitaires tar et gz, puis par l'utilitaire tar ztds.

Dans chaque phase de compression nous allons mesurer trois paramètres fondamentaux :

  1. La syntaxe donnée de la commande
  2. Le taux de compression
  3. La taille de l'archive produite

Compression via tar et gzip

 

temps tar czvf test.tar.gz / var / lib / mysql

réel 19m19.862s

10.121.258.046 11 mars 16:28 test.tar.gz

Nous pouvons voir comment l'opération de compression a pris 19 minutes et 19 secondes et a produit un fichier de 10,12 gigaoctets

Compression via tar et zstd

 

temps tar ‚Äďuse-compress-program zstd -cf test.tar.zst / var / lib / mysql

réel 6m24.006s

5.727.249.564 11 16 47 XNUMX mars XNUMX:XNUMX test.tar.zst

Nous pouvons voir comment l'opération de compression a pris 6 minutes et 24 secondes et a produit un fichier de 5,7 gigaoctets

 

Conclusions de l'épreuve

Même si un seul test sur une base de données SQL et donc principalement du texte avec une forte redondance, les résultats sont sans appel, ZStandard a produit en à peine un tiers du temps par rapport à tar et gzip une archive qui pèse la moitié de celle produite avec tar et gzip.

Vous comprendrez à quel point il peut être important pour nos politiques de sauvegarde et de reprise après sinistre sur plus d'un millier de machines avec une conservation des données de 60 jours d'avoir un système rapide et efficace comme celui-ci.

 

 

Informations sur l'auteur

Vous avez des doutes ? Vous ne savez pas par o√Ļ commencer ? Contactez-nous !

Nous avons toutes les réponses à vos questions pour vous aider à faire le bon choix.

Discute avec nous

Discutez directement avec notre support avant-vente.

0256569681

Contactez-nous par téléphone pendant les heures de bureau 9h30 - 19h30

Contactez-nous en ligne

Ouvrez une demande directement dans l'espace contact.

INFORMATIONS

Managed Server Srl est un acteur italien leader dans la fourniture de solutions syst√®me GNU/Linux avanc√©es orient√©es vers la haute performance. Avec un mod√®le d'abonnement peu co√Ľteux et pr√©visible, nous garantissons que nos clients ont acc√®s √† des technologies avanc√©es en mati√®re d'h√©bergement, de serveurs d√©di√©s et de services cloud. En plus de cela, nous proposons des conseils syst√®me sur les syst√®mes Linux et une maintenance sp√©cialis√©e en SGBD, s√©curit√© informatique, Cloud et bien plus encore. Nous nous distinguons par notre expertise dans l'h√©bergement de CMS Open Source de premier plan tels que WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart et Magento, soutenus par un service d'assistance et de conseil de haut niveau adapt√© aux administrations publiques, aux PME et √† toutes tailles.

Red Hat, Inc. d√©tient les droits de Red Hat¬ģ, RHEL¬ģ, RedHat Linux¬ģ et CentOS¬ģ ; AlmaLinux‚ĄĘ est une marque commerciale d'AlmaLinux OS Foundation ; Rocky Linux¬ģ est une marque d√©pos√©e de la Rocky Linux Foundation ; SUSE¬ģ est une marque d√©pos√©e de SUSE LLC ; Canonical Ltd. d√©tient les droits sur Ubuntu¬ģ ; Software in the Public Interest, Inc. d√©tient les droits sur Debian¬ģ ; Linus Torvalds d√©tient les droits sur Linux¬ģ ; FreeBSD¬ģ est une marque d√©pos√©e de la FreeBSD Foundation ; NetBSD¬ģ est une marque d√©pos√©e de la Fondation NetBSD ; OpenBSD¬ģ est une marque d√©pos√©e de Theo de Raadt. Oracle Corporation d√©tient les droits sur Oracle¬ģ, MySQL¬ģ et MyRocks¬ģ ; Percona¬ģ est une marque d√©pos√©e de Percona LLC ; MariaDB¬ģ est une marque d√©pos√©e de MariaDB Corporation Ab ; REDIS¬ģ est une marque d√©pos√©e de Redis Labs Ltd. F5 Networks, Inc. d√©tient les droits sur NGINX¬ģ et NGINX Plus¬ģ ; Varnish¬ģ est une marque d√©pos√©e de Varnish Software AB. Adobe Inc. d√©tient les droits sur Magento¬ģ ; PrestaShop¬ģ est une marque d√©pos√©e de PrestaShop SA ; OpenCart¬ģ est une marque d√©pos√©e d'OpenCart Limited. Automattic Inc. d√©tient les droits sur WordPress¬ģ, WooCommerce¬ģ et JetPack¬ģ ; Open Source Matters, Inc. d√©tient les droits sur Joomla¬ģ ; Dries Buytaert d√©tient les droits sur Drupal¬ģ. Amazon Web Services, Inc. d√©tient les droits sur AWS¬ģ ; Google LLC d√©tient les droits sur Google Cloud‚ĄĘ et Chrome‚ĄĘ ; Facebook, Inc. d√©tient les droits sur Facebook¬ģ ; Microsoft Corporation d√©tient les droits sur Microsoft¬ģ, Azure¬ģ et Internet Explorer¬ģ ; La Fondation Mozilla d√©tient les droits sur Firefox¬ģ. Apache¬ģ est une marque d√©pos√©e de The Apache Software Foundation ; PHP¬ģ est une marque d√©pos√©e du groupe PHP. CloudFlare¬ģ est une marque d√©pos√©e de Cloudflare, Inc. ; NETSCOUT¬ģ est une marque d√©pos√©e de NETSCOUT Systems Inc. ; ElasticSearch¬ģ, LogStash¬ģ et Kibana¬ģ sont des marques d√©pos√©es d'Elastic NV. Ce site n'est affili√©, sponsoris√© ou autrement associ√© √† aucune des entit√©s mentionn√©es ci-dessus et ne repr√©sente aucune de ces entit√©s de quelque mani√®re que ce soit. Tous les droits sur les marques et noms de produits mentionn√©s sont la propri√©t√© de leurs titulaires respectifs des droits d'auteur. Toutes les autres marques mentionn√©es appartiennent √† leurs titulaires. MANAGED SERVER¬ģ est une marque d√©pos√©e au niveau europ√©en par MANAGED SERVER SRL Via Enzo Ferrari, 9 62012 Civitanova Marche (MC) Italie.

Retour en haut de page