
VFS SQLite avec des requêtes JOIN à froid en moins de 100 ms depuis S3 + compression et chiffrement au niveau des pages
turbolite est un VFS SQLite en Rust qui sert des recherches ponctuelles et des jointures directement depuis S3 avec une latence à froid inférieure à 250 ms.
Ce dépôt est un espace de travail Cargo avec deux crates :
turbolite — Bibliothèque Rust pure. VFS SQLite avec compression au niveau de la page, chiffrement et hiérarchisation S3.turbolite-ffi — FFI C / extension chargeable + liaisons de langage (Python, Node.js, Go).Il offre également une compression au niveau de la page (zstd) et un chiffrement (AES-256) pour l'efficacité et la sécurité au repos, qui peuvent être utilisés séparément de S3.
Expérimental. turbolite est en développement actif et contient des bugs. Soyez prudent.
Le stockage d'objets devient rapide. S3 Express One Zone fournit des GET en quelques millisecondes et Tigris est également extrêmement rapide. L'écart entre le disque local et le stockage cloud se réduit, et turbolite en tire parti.
La conception et le nom sont inspirés par l'approche de turbopuffer qui consiste à architecturer sans pitié autour des contraintes du stockage cloud. L'objectif initial du projet était de battre les démarrages à froid de plus de 500 ms de Neon. Objectif atteint.
Si vous avez une base de données par serveur, utilisez un volume. turbolite explore comment avoir des centaines ou des milliers de bases de données (une par locataire, une par espace de travail, une par appareil), sans vouloir un volume pour chacune, et vous acceptez une source d'écriture unique.
turbolite est distribué sous forme de bibliothèque Rust, d'extension chargeable SQLite (.so/.dylib), et de paquets de langage pour Python et Node.js, ainsi que des dépendances Github pour Go. Tout stockage compatible S3 fonctionne (AWS S3, Tigris, R2, MinIO, etc.). C'est un VFS SQLite standard opérant au niveau de la page, donc la plupart des fonctionnalités SQLite devraient fonctionner : FTS, R-tree, JSON, mode WAL, etc.
turbolite fait partie de l'écosystème plus large hadb. turbolite autonome est un VFS de stockage avec un seul écrivain sûr ; si vous voulez une élection de leader HA plus une réplication WAL continue, utilisez-le via haqlite-turbolite, qui superpose HaQLite et walrust. Ce chemin HA est encore très expérimental.
Si vous souhaitez contribuer à turbolite ou trouver des bugs, veuillez créer une pull request ou ouvrir une issue.
| Requête | Type | À froid (S3 Express) | À froid (Tigris) |
|---|---|---|---|
| Publication + utilisateur | recherche ponctuelle + jointure | 86ms | 172ms |
| Profil | jointure multi-table (5 JOINs) | 251ms | 479ms |
| Qui a aimé | recherche d'index + jointure | 206ms | 302ms |
| Amis communs | jointure multi-recherche | 19ms | 49ms |
| Filtre indexé | analyse d'index couvert | 79ms | 88ms |
| Analyse complète + filtre | analyse complète de table | 476ms | 532ms |
1M publications / 100K utilisateurs (~1,5 Go stockés) sans rien en cache, chaque octet depuis S3. EC2 c5.2xlarge + S3 Express One Zone (même AZ, ~4ms de latence GET). Fly performance-8x + Tigris (~25ms de latence GET). Les deux : 8 vCPU dédiés, 16 Go de RAM, 7 threads de travail de prélecture. Voir Benchmarking et Le backend de stockage compte.
Les benchmarks sont organisés par niveau de cache (ce qui est déjà sur le disque local lorsque la requête s'exécute) :
| Niveau de cache | Ce qui est mis en cache | Ce qui est récupéré depuis S3 | Quand cela se produit |
|---|---|---|---|
| aucun | rien | tout | Premier démarrage, cache vide |
| intérieur | pages d'arbre B intérieures | pages d'index + de données | Première requête après ouverture de connexion |
| index | pages intérieures + d'index | pages de données uniquement | Fonctionnement normal de turbolite |
| données | tout | rien | Équivalent à SQLite local |
intérieur est le benchmark à froid le plus réaliste : les pages intérieures se chargent avec impatience à l'ouverture de la connexion, donc au moment où vous exécutez votre première requête, elles sont mises en cache. Les pages d'index sont agressivement préchargées au premier accès en arrière-plan et peuvent ne pas être encore prêtes.
100K lignes, Fly.io performance-2x (vCPU dédié, NVMe, IAD) :
| Opération | SQLite | turbolite | Surcharge |
|---|---|---|---|
| Recherche ponctuelle | 145K/s | 73K/s | 2.0x |
| Analyse de plage | 8.8K/s | 8.3K/s | parité |
| Analyse complète de table | 56/s | 60/s | parité |
| INSERT | 19K/s | 23K/s | parité |
| MISE À JOUR par PK | 40K/s | 27K/s | 1.5x |
| INSERT par lots (dans txn) | 685K/s | 740K/s | parité |
Les recherches ponctuelles ont la surcharge par page la plus élevée (~2x). Tout le reste approche ou dépasse la parité. L'architecture de cache sans verrou signifie que les lectures concurrentes ne bloquent jamais les écritures.
| Après | Local | S3 (RustFS même région) |
|---|---|---|
| 1 000 insertions | 19ms | 38ms |
| Lot de 10 000 | 17ms | 114ms |
| 1 000 mises à jour | 9ms | 36ms |
Les écritures sont toujours à la vitesse locale. Le coût S3 est uniquement au point de contrôle. Nombres avec RustFS dans la même région Fly (~2ms RTT). S3 Express One Zone serait comparable.
pip install turbolite
**Avantages de l'utilisation d'une CA comme étape préalable à la simulation d'accès initial :**
> * Augmente la discrétion de l'infrastructure de l'attaquant par rapport à l'envoi direct d'un e-mail.
> * Les étapes de vérification nécessaires pour valider le domaine cible créent une piste d'audit de la maturité de sécurité des équipes bleues de la cible.
> * La corrélation des correctifs et mises à jour de sécurité avec le cycle de développement des logiciels malveillants d'accès initial de l'acteur malveillant et l'évolution des charges utiles de phishing aide à déterminer l'état de la posture de sécurité de la cible.
> * Donne à l'infrastructure d'attaque le temps de mûrir, en s'assurant que les domaines sont catégorisés et que les services de vérification de réputation ont le temps de se mettre à jour, ce qui peut faire la différence entre une campagne de phishing réussie et une campagne bloquée par les passerelles de messagerie sécurisées (SEG).
C'est la raison pour laquelle des organisations comme `PwC` et `KPMG` interdisent à leurs équipes rouges d'envoyer des e-mails directement ; c'est trop risqué et ne fournit pas suffisamment de données. Dans de nombreux cas, les tests sont réalisés avec la connaissance du phishing par les défenseurs (brèche présumée ou travail en collaboration avec l'équipe de sécurité interne), mais le test ne couvre pas l'ensemble de la chaîne d'attaque, laissant un angle mort. Dans les cadres réglementaires tels que `CBEST`, `TIBER-EU`, `iCAST` et `AASE`, le purple teaming et la simulation d'adversaire sont combinés à la veille sur les menaces pour garantir un test réaliste de l'ensemble de la surface d'attaque, réalisé selon les normes les plus élevées.
[PhishMailer](https://github.com/BiZken/PhishMailer) a été testé avec :
* Hotmail
* Outlook
* Gmail
* Yahoo
* ProtonMail ([ULA](https://github.com/BiZken/PhishMailer/issues/119))
* Orange.fr
* ...
* ... et bien d'autres