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 nouvelle tentative :

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

collection_name = "my_collection"
config = VespaClientConfig(
    endpoint="http://localhost:8080",
    # Advanced options
    timeout=30,              # Request timeout in seconds
    max_retries=3,          # Retry failed requests
    verify_ssl=True,        # Verify TLS certificates
)

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

Paramètres de connexion :

ParamètreObjectifValeur par défaut
endpointURL de l’endpoint de requête VespaObligatoire
timeoutDélai d’attente de la requête en secondes30
max_retriesTentatives de nouvelle tentative automatiques en cas d’échec3
verify_sslVérifier les 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,
    # Custom CA certificate
    ca_cert_path="/path/to/ca-bundle.pem",
)

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

Vérifications d’état et disponibilité

Avant d’ingérer ou d’interroger des données, assurez-vous 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):
    """Wait for Vespa to be ready for operations."""
    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")

# Usage
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 :

# Application status
curl http://localhost:8080/ApplicationStatus

# Document count in 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, suivez ces bonnes pratiques :

Configuration du cluster :

  • Déployez au moins 3 nœuds Vespa pour la redondance
  • Répartissez les nœuds dans plusieurs zones de disponibilité
  • Utilisez un équilibreur de charge avec vérifications 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 proxy inverse (nginx, Cloudflare, etc.)
  • Mettez en place une limitation de débit et une protection contre les attaques DDoS

Exemple de configuration (déploiement distribué) :

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

# Load balancer endpoint (single entry point)
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")

Surveillance :

  • Suivez la latence et le débit d’ingestion
  • Surveillez la latence des requêtes et les taux d’erreurs
  • Configurez des alertes en cas d’échec des vérifications d’état
  • Surveillez l’utilisation du disque et la croissance de la taille de l’index
Voir aussi

Voir aussi