Backends pluggables pool Décidé
Le segment scellé — immuable, auto-vérifiant, borné — est le colis universel : 1 segment = 1 objet. Quatre verbes suffisent, les segments ouverts restent locaux, la redondance appartient au backend, et le WORM se délègue au fournisseur.
L’abstraction — quatre verbes, trois implémentations
Le coup de chance de nos décisions passées : un segment scellé est immuable, auto-vérifiant, de taille bornée — exactement ce qu’un object store sait stocker. Le trait se réduit à : put(segment) · get(id, range) (le Range GET sert les lectures unitaires à l’offset près) · delete(id) · list().
| Backend | Pour qui | Redondance |
|---|---|---|
| Brique native (JBOD) | le SaaS de l’éditeur, les gros auto-hébergés | notre EC 8+3 |
| Répertoire FS | le petit auto-hébergé — un chemin, point | celle du FS dessous (à lui de voir) |
| S3-compatible | revendeurs avec object storage existant | celle du fournisseur — voir décision 2 |
GCS et Azure Blob passent par des adaptateurs — le trait est si petit qu’on ne se marie avec personne. Écosystème Rust : Apache OpenDAL (la couche d’abstraction objet de référence — S3, GCS, Azure, FS et des dizaines d’autres), object_store (Arrow) en alternative solide.
Les cinq décisions
- 1 — Les segments ouverts restent locaux, toujours. L'append ne se mappe pas sur un objet immuable — et n'a pas à le faire :
OUVERT(disque local, fsync) →SCELLÉ→ PUT vers le backend. En mode objet, le scellement devient plus fréquent (seuil taille ou temps, ~64-256 Mio / ~30 s) et le contrat durable-avant-ack s'applique au PUT : quelques secondes de latence par chunk, que le pipeline client fenêtré absorbe sans perte de débit. - 2 — La redondance appartient au backend. Sur le natif, l'EC 8+3 est à nous. Sur S3, le fournisseur vend déjà ses onze neufs : refaire notre EC par-dessus = payer la redondance deux fois — exactement l'erreur bannie avec le RAID. Le profil de redondance est une propriété du backend (natif = notre EC ; objet = durabilité fournisseur, + copie vers un second backend pour le géo si souhaité).
- 3 — Le WORM délégué. S3 Object Lock (mode compliance) = notre plancher d'immuabilité appliqué par le fournisseur : même l'opérateur Cairn du revendeur ne peut pas effacer sous la fenêtre. L'argument anti-ransomware gagne un étage indépendant, gratuit sur les backends qui le supportent.
- 4 — La compaction devient backend-aware. Sur S3, compacter = GET + PUT + DELETE = des requêtes facturées (et de l'egress si le serveur n'est pas chez le même fournisseur). Le seuil de compaction du GC est donc un paramètre par backend : agressif sur le natif (les octets sont à nous), paresseux sur l'objet — on ne réorganise pas un garde-meuble facturé au geste.
- 5 — Les pools par tenant : la résidence matérialisée. Un déploiement mélange les backends : la DB de contrôle mappe
tenant → pool de stockage. C'est le mécanisme concret de la résidence des données — le tenant santé → pool EEE avec Object Lock, documenté pour HDS.