Projet open source
facebook/fbthrift avatar
facebook/fbthrift

Apache Thrift : relier des services avec des contrats générés

Aperçu du projet : Une branche Apache Thrift maintenue par Facebook avec un serveur C++ refondu, prenant en charge des langages majeurs comme C++, Python, Hack et Java.

2 698 étoiles648 forksC++Apache-2.0
GitHub

En bref

De quoi s’agit-il ?
Le dépôt fbthrift de Meta fournit une implémentation Thrift et des outils de génération pour plusieurs langages et transports.
À qui s’adresse-t-il ?
Le projet convient aux équipes dont le besoin correspond précisément aux fonctions décrites pour fbthrift. Il convient moins à celles qui attendent un support ou une compatibilité absents du README.
Puis-je l’utiliser commercialement ?
Oui. Apache-2.0 est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
Est-il encore maintenu ?
Oui. Le dépôt a reçu de nouveaux commits au cours des dernières 24 heures.
En quel langage est-il écrit ?
Principalement C++, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

Une branche évoluée, pas une distribution

Le README commence par clarifier que Facebook Thrift n'est pas une distribution d'Apache Thrift. C'est une branche interne que Facebook a rééditée en open source en février 2014. À l'origine proche d'Apache Thrift, le projet a depuis évolué dans de nouvelles directions : le compilateur a été réécrit de zéro, et la nouvelle implémentation comprend un serveur Thrift entièrement asynchrone. La description du dépôt indique également qu'il inclut un nouveau serveur C++. Pour le contexte historique, le README renvoie à un article de blog Facebook Code sur la construction et l'ouverture de fbthrift.

Génération de code, sérialisation et RPC

Thrift est présenté comme trois grandes choses. Un générateur de code produit des structures de données sérialisables et des stubs client/serveur pour RPC, dans différents langages. Un framework de sérialisation fournit des protocoles pour sérialiser les structures générées entre les langages. Un framework RPC trame les messages entre clients et serveurs et appelle des fonctions définies par l'application à la réception. Le README indique que Thrift fonctionne dans tous les langages majeurs, avec un fort support pour C++, Python, Hack et Java. La plupart des services Facebook utilisent Thrift pour RPC, et certains systèmes de stockage l'utilisent pour sérialiser des enregistrements sur disque.

Quatre objectifs de conception énoncés

Le README énumère quatre objectifs clés. La facilité d'utilisation signifie que Thrift gère le code passe-partout de sérialisation et RPC, permettant aux développeurs de se concentrer sur les schémas et les interfaces de service. Le support inter-langages permet l'intercommunication, par exemple un client Python communiquant avec un serveur C++. La performance est une caractéristique de conception : les structures et services Thrift permettent une sérialisation et désérialisation rapides, et son protocole RPC et ses frameworks sont orientés performance. La compatibilité ascendante permet d'ajouter et de supprimer des champs dans les types sérialisables tout en préservant la compatibilité avant et arrière.

Construction à partir des sources avec getdeps.py

Les instructions de construction reposent sur un script appelé getdeps.py. Sur Linux ou macOS avec Homebrew, vous pouvez installer les dépendances système avec `./build/fbcode_builder/getdeps.py install-system-deps --recursive fbthrift` après le clonage. Sur d'autres plateformes, getdeps.py télécharge et construit la plupart des dépendances. La commande de construction est `./build/fbcode_builder/getdeps.py --allow-system-packages build fbthrift`. Les sorties incluent `installed/fbthrift/bin/thrift1` (le compilateur) et `installed/fbthrift/lib/libthriftcpp2.a` (bibliothèque client/serveur). Les dépendances couvrent les paquets système (Boost, CMake, OpenSSL, PThreads, Python, Zlib), les bibliothèques externes (fmt, GFlags, GLog, GTest et GMock) et les projets Facebook (Fizz, Folly, Wangle, Zstd). Le compilateur lui-même ne dépend que de Boost, CMake et {fmt}.

Intégration du code généré avec CMake

Pour les projets utilisant CMake, le README indique d'inclure `ThriftLibrary.cmake` puis d'utiliser la macro `thrift_library`. La macro accepte des arguments pour le nom de fichier, les services, le langage, les options, le chemin du fichier et le chemin de sortie. Elle génère une bibliothèque nommée `file_name-<language>` ; par exemple, `Test.thrift` compilé en cpp2 produit `Test-cpp2`. Cette bibliothèque doit être ajoutée comme dépendance à tout fichier source ou en-tête contenant du code généré. Le README mentionne également une option CMake `THRIFT_COMPILER_ONLY` pour construire uniquement le compilateur, et une option `enable_tests`.

Roue Python, réflexion statique et métriques serveur

Le README décrit une construction thrift-python qui produit une roue installable dans des environnements Python 3.8+. Il donne des commandes pour les constructions en conteneur avec Docker BuildKit, Docker hérité et Podman, ainsi que des constructions sans conteneur avec apt et conda. Après la construction, la roue peut être installée avec pip et vérifiée avec un import Python en une ligne. Pour la réflexion statique C++, le README renvoie à un README séparé dans `thrift/lib/cpp2/reflection/`. Pour les métriques serveur, le serveur C++ prend en charge une API observateur qui installe des rappels à des points d'exécution spécifiques, et les métriques peuvent être exposées via les interfaces fb303.

Licence · facebook fbthrift

Facebook Thrift est sous licence Apache 2.0, comme indiqué dans le README et le fichier LICENSE. La licence Apache 2.0 accorde une licence de droit d'auteur perpétuelle, mondiale, non exclusive, gratuite, sans redevance et irrévocable pour reproduire, préparer des œuvres dérivées, afficher, exécuter, sous-licencier et distribuer l'œuvre. Elle accorde également une licence de brevet, qui prend fin en cas de litige en matière de brevet. La licence exclut explicitement les garanties ; elle ne fournit aucune garantie ni support. Le README ne mentionne pas de garanties de sécurité ni de préparation à la production.

Tester fbthrift dans son contexte

Le fichier thrift de l’exemple, la commande de génération et le test du service doivent être exécutés pour vérifier les langages réellement disponibles. Cette séquence relie le comportement annoncé pour fbthrift aux fichiers et sorties observables. Elle ne permet pas d’inférer une compatibilité ou une garantie que le README ne décrit pas. Notez aussi les dépendances, la version utilisée et les erreurs exactes rencontrées, car elles déterminent la charge d’intégration.

Conclusion éditoriale

Le projet convient aux équipes dont le besoin correspond précisément aux fonctions décrites pour fbthrift. Il convient moins à celles qui attendent un support ou une compatibilité absents du README. Avant décision, Le fichier thrift de l’exemple, la commande de génération et le test du service doivent être exécutés pour vérifier les langages réellement disponibles.

Sources officielles

  1. Official README
  2. Project repository
  3. Release notes
Notes de la communauté

Notes de la communauté