ENbext.dev

Traduction automatique depuis l’anglais. Consulter l’original.

Sur cette page

Modes de déploiement

bext prend en charge trois modes de déploiement qui couvrent tout, depuis un seul projet parallèle jusqu'à une flotte distribuée à l'échelle mondiale. Chaque mode utilise le même binaire : seule la configuration change.

Mode application unique (par défaut)#

Le moyen le plus simple d’exécuter bext. Pointez-le vers un répertoire contenant votre application framework et il gère le reste : détection, construction et service.

bash
bext run .

bext lit bext.config.toml à partir de la racine du projet. Une configuration minimale suffit :

toml
[server]
listen = "0.0.0.0:3061"
static_dir = "./dist/static"

[cache.isr]
default_ttl_ms = 60000
default_swr_ms = 3600000

Le mode application unique est le bon choix lorsque vous déployez une application par serveur ou conteneur. C'est également ce que bext dev utilise lors du développement. L'ensemble du cycle de vie de la demande (terminaison TLS, compression, SSR, mise en cache) se déroule au sein d'un processus unique sans aucune surcharge de processus inter.

Quand utiliser : projets solo, microservices derrière un équilibreur de charge, pods Docker / Kubernetes où chaque réplica exécute une application.

Mode multi-applications (hôtes virtuels)#

Lorsque vous devez servir plusieurs applications à partir d'une seule instance bext, passez en mode multi-applications. Définissez chaque application dans la table [apps] d'un fichier platform.toml et commencez par bext serve :

bash
bext serve --platform-config platform.toml
toml
[platform]
listen = "0.0.0.0:443"
data_dir = "/var/lib/bext"
max_apps = 50

[apps.marketing]
source = "/srv/marketing"
domains = ["example.com", "www.example.com"]
runtime = "nextjs"

[apps.marketing.cache]
default_ttl = "60s"
max_entries = 10000

[apps.blog]
source = "/srv/blog"
domains = ["blog.example.com"]
runtime = "hono"

[apps.blog.cache]
default_ttl = "300s"

[apps.api]
source = "/srv/api"
domains = ["api.example.com"]
runtime = "express"

bext achemine les requêtes entrantes en faisant correspondre l'en-tête Host à la liste domains de chaque application à l'aide d'un routeur hôte virtuel basé sur des trie. Chaque application dispose de son propre espace de noms de cache ISR, d'un limiteur de débit, d'un pool de tâches et d'une configuration facultative de plug-in par application.

Paramètres par application que vous pouvez personnaliser :

Paramètre Description
cache.default_ttl TTL du cache ISR pour cette application
cache.max_entries Nombre maximum d'entrées ISR avant l'expulsion de LRU
rate_limit.rpm Plafond de requêtes par minute
isolate.workers Nombre de travailleurs RSS
isolate.memory_limit Mémoire maximale par travailleur (par exemple, "256mb" )
deploy.keep_versions Combien de versions précédentes conserver
hooks.pre_build Commande Shell à exécuter avant la construction
hooks.post_deploy Commande Shell à exécuter après le déploiement

Quand l'utiliser : hébergeant plusieurs sites sur un seul VPS, une plate-forme interne en tant que service, des environnements de transfert dans lesquels plusieurs branches de fonctionnalités partagent un serveur.

Mode Edge (distribué avec Redis L2)#

Le mode Edge étend le mode multi-application ou mono-application avec un backend Redis partagé pour la synchronisation du cache sur plusieurs instances bext. Il s'agit d'une fonctionnalité Pro.

toml
[server]
listen = "0.0.0.0:443"

[redis]
url = "redis://redis.internal:6379"
prefix = "bext:"

[cache.isr]
max_entries = 50000
default_ttl_ms = 60000
default_swr_ms = 3600000

Lorsque la section [redis] est présente et que url est résolue, bext active le mode cluster :

  • Cache hiérarchisé L1 + L2 - DashMap en mémoire en tant que L1, Redis en tant que L2. Les hits L2 sont automatiquement promus en L1.
  • Invalidation distribuée : l'invalidation des balises de cache est diffusée sur Redis Pub/Sub afin que toutes les instances soient purgées simultanément.
  • Limitation de débit partagée : les compteurs de limite de débit utilisent Redis INCR afin que la limite s'applique à l'ensemble de votre flotte, et non à chaque instance.
  • Cohérence des écritures : chaque écriture du cache ISR est conservée dans Redis de manière synchrone (configurable).

Lorsque Redis est inaccessible, bext se dégrade progressivement : L1 continue de diffuser le contenu mis en cache et les nouveaux rendus fonctionnent toujours. La reconnexion est automatique.

bash
# Instance A (us-east)
REDIS_URL=redis://redis.internal:6379 bext run .

# Instance B (eu-west)
REDIS_URL=redis://redis.internal:6379 bext run .

Les deux instances partagent le même cache. Une page rendue par l'instance A est immédiatement disponible pour l'instance B via la couche Redis L2.

Quand utiliser : déploiements multirégionaux derrière un équilibreur de charge global, configurations à haute disponibilité où la cohérence du cache est importante, tout déploiement où vous avez besoin d'une mise à l'échelle horizontale au-delà d'un seul serveur.

Choisir le bon mode#

Considération Application unique Multi-application Bord
Nombre d'applications 1 Beaucoup 1 ou plusieurs
Serveurs 1 1 2+
Cache partagé entre les instances Non N/A Oui
Redis requis Non Non Oui
Niveau de licence Communauté Communauté Pro
Fichier de configuration bext.config.toml platform.toml bext.config.toml + [redis]

Vous pouvez toujours commencer avec le mode application unique et migrer ultérieurement vers le mode multi-applications ou Edge : les paramètres bext.config.toml restent inchangés.

Conseil

Le mode Edge utilise Redis pour le cache distribué et l'état de limite de débit. Lorsque Redis est inaccessible, bext se dégrade gracieusement : le cache L1 et le rendu SSR continuent de fonctionner, mais l'invalidation distribuée et la limitation de débit partagé font une pause jusqu'à ce que Redis se reconnecte.

En rapport#

Modifier cette page ↗Besoin d’aide ? ↗
Rechercher dans la documentation

Saisissez un sujet, une commande ou une question.