Apache Thrift est un framework RPC multi-langages conçu pour établir des communications efficaces et fiables dans les systèmes distribués. Son langage de définition d’interface (IDL) permet de décrire des services et structures de données indépendamment du langage utilisé côté client ou serveur.
Types fondamentaux de l'IDL Thrift
L'IDL supporte plusieurs types primitifs :
- Valeurs booléennes : bool
- Nombres entiers : byte / i8, i16, i32, i64
- Nombres à virgule flottante : double
- Chaînes de caractères : string
- Données binaires : binary
Pour les structures complexes :
- Listes ordonnées : list<T>
- Ensembles sans doublons : set<T>
- Tables associatives : map<K,V>
Définitions avancées dans l'IDL
Utilisation du mot-clé typedef pour créer des alias :
typedef i32 UserId
Constantes définies avec const, pouvant inclure des collections :
const i32 DEFAULT_TIMEOUT = 30;
const map<string, string> ERROR_MESSAGES = {"404": "Not Found", "500": "Internal Error"};
Structures et énumérations
Les enums facilitent la gestion des états discrets :
enum Priority {
LOW = 1,
MEDIUM = 2,
HIGH = 3
}
Les structs encapsulent les données avec des identifiants numériques requis pour le sérialiseur :
struct TaskRequest {
1: string title,
2: Priority level,
3: optional string description
}
Gestion des erreurs via exceptions
Les exceptions personnalisées sont déclarées ainsi :
exception ServiceError {
1: i32 errorCode,
2: string message
}
Services et méthodes distantes
Un service expose les fonctions accessibles à distance :
service TaskManager {
bool submitTask(1: TaskRequest req),
list<TaskRequest> getTasksByPriority(1: Priority p) throws (1: ServiceError err),
oneway void logEvent(1: string event)
}
Certains points clés :
- Chaque paramètre doit avoir un numéro unique.
- Les méthodes marquées
onewayn’attendent pas de réponse. - Les exceptions possibles doivent être explicitement déclarées avec
throws.
Architecture sous-jacente de Thrift
Le fonctionnement repose sur une pile modulaire :
- Transport Layer : Gère les canaux réseau (TCP, HTTP).
- Protocol Layer : Détermine comment les objets sont sérialisés (binaire, JSON, compact).
- Processor & Server : Exécute les requêtes selon différents modèles (synchrone/asynchrone).
Workflow complet : Du fichier IDL au déploiement
- Installation du compilateur : Suivre les instructions officielles.
- Création du .thrift : Structurer les interfaces comme dans
tutorial.thrift. - Génération du code : ```
thrift --gen py example.thrift
- Implémentation métier : Compléter les classes générées avec la logique applicative.
Bonnes pratiques et astuces
- Ne jamais réutiliser un identifiant de champ supprimé.
- Privilégier
optionalpour les nouveaux champs afin d’assurer la compatibilité ascendante. - Sélectionner le protocole adapté en fonction des besoins réseau (ex. Compact vs Binary).
- Diviser les grandes interfaces en services spécialisés.
Avec ces bases, vous êtes prêt à concevoir des interfaces RPC robustes grâce à Thrift, tout en bénéficiant d'une interopérabilité native entre différents langages de programmation.