Déploiement en production et exploitation des applications Vespa.

VespaClientConfig

VespaClientConfig

Configurez le backend de recherche avec les paramètres de connexion, les délais d’attente et les stratégies de reprise :

from mistralai.search.toolkit.plugins.vespa import VespaClientConfig
from vespa_app import app

collection_name = "my_collection"
config = VespaClientConfig(
    endpoint="http://localhost:8080",
    # Options avancées
    timeout=30,              # Délai d’attente de la requête en secondes
    max_retries=3,           # Reprise automatique des requêtes échouées
    verify_ssl=True,         # Vérification des certificats TLS
)

vector_store = app.get_search_index(config, collection_name=collection_name)

Paramètres de connexion :

ParamètreUtilitéPar défaut
endpointURL de l’endpoint de requête VespaObligatoire
timeoutDélai d’attente de la requête (secondes)30
max_retriesNombre de tentatives automatiques après échec3
verify_sslVérification des certificats TLSTrue

Configuration TLS/SSL (production) :

from mistralai.search.toolkit.plugins.vespa import VespaClientConfig
from vespa_app import app

config = VespaClientConfig(
    endpoint="https://vespa.example.com:8080",
    verify_ssl=True,
    # Certificat CA personnalisé
    ca_cert_path="/path/to/ca-bundle.pem",
)

vector_store = app.get_search_index(config, collection_name="my_collection")
Vérification d’état et disponibilité

Vérification d’état et disponibilité

Avant toute ingestion ou requête, vérifiez que Vespa est prêt :

import asyncio
from mistralai.search.toolkit.plugins.vespa import VespaClientConfig
from vespa_app import app

async def wait_for_vespa(endpoint: str, max_attempts=30):
    """Attend que Vespa soit prêt à fonctionner."""
    for attempt in range(max_attempts):
        try:
            async with aiohttp.ClientSession() as session:
                async with session.get(
                    f"{endpoint}/ApplicationStatus",
                    timeout=5
                ) as resp:
                    if resp.status == 200:
                        print("Vespa is ready")
                        return True
        except Exception as e:
            print(f"Attempt {attempt + 1}: {e}")
        await asyncio.sleep(2)

    raise RuntimeError("Vespa failed to become ready")

# Utilisation
endpoint = "http://localhost:8080"
await wait_for_vespa(endpoint)
config = VespaClientConfig(endpoint=endpoint)
vector_store = app.get_search_index(config, collection_name="my_collection")

Endpoints de vérification d’état :

# Statut de l’application
curl http://localhost:8080/ApplicationStatus

# Nombre de documents dans une collection
curl "http://localhost:8080/search/?yql=select%20*%20from%20my_collection%20limit%201"
Déploiement en production

Déploiement en production

Pour les environnements de production, appliquez les recommandations suivantes :

Configuration du cluster :

  • Déployez au moins 3 nœuds Vespa pour la redondance
  • Répartissez les nœuds entre différentes zones de disponibilité
  • Placez un load balancer avec vérification d’état devant les endpoints de requête

Configuration réseau :

  • Utilisez des réseaux privés pour la communication inter-nœuds
  • Exposez l’endpoint de requête via un reverse proxy (nginx, Cloudflare, etc.)
  • Mettez en place une limitation de débit et une protection DDoS

Exemple de configuration (déploiement distribué) :

from mistralai.search.toolkit.plugins.vespa import VespaClientConfig
from vespa_app import app

# Endpoint du load balancer (point d’entrée unique)
config = VespaClientConfig(
    endpoint="https://vespa-lb.example.com",
    timeout=30,
    max_retries=3,
    verify_ssl=True,
)

vector_store = app.get_search_index(config, collection_name="my_collection")

Supervision :

  • Suivez la latence et le débit d’ingestion
  • Surveillez la latence des requêtes et les taux d’erreur
  • Définissez des alertes sur les échecs de vérification d’état
  • Contrôlez l’utilisation du disque et l’évolution de la taille de l’index
Voir aussi

Voir aussi