Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Met belastingstests worden de maximale query's per seconde (QPS) gevonden die uw Databricks Apps-agent kan ondersteunen voordat de prestaties afnemen. Op deze pagina ziet u hoe u het volgende kunt doen:
- Implementeer een mockversie van uw agent om de doorvoer van de infrastructuur te isoleren van LLM-latentie.
- Voer een ramp-to-saturation load test uit met Locust.
- Analyseer resultaten met een interactief dashboard.
U kunt het door AI ondersteunde pad volgen met behulp van een Claude Code-vaardigheid of elke stap handmatig instellen.
Geanimeerd voorbeeld van het dashboard voor loadtests waarin de QPS-, latentie- en rampvoortgangsdiagrammen over rekenconfiguraties worden getoond.
Vereisten
- Een Azure Databricks werkruimte met Databricks-apps ingeschakeld.
- Een agent-app die is geïmplementeerd (of gereed voor implementatie) in Databricks-apps met behulp van de OpenAI Agents SDK, LangGraph of een aangepast framework. Zie Een AI-agent ontwerpen en implementeren in Databricks-apps.
- De Databricks CLI is geïnstalleerd en geverifieerd. Zie De Databricks CLI installeren of bijwerken.
- Python 3.10+ met
uvpackage manager. - (Voor het door AI ondersteunde pad) Claude Code geïnstalleerd.
- (Voor belastingstests langer dan ~1 uur) Een service-principal met M2M OAuth-referenties (
client_idenclient_secret). Zie Autorisatie van toegang voor de service-principal tot Azure Databricks met OAuth.- Voor korte belastingstests (minder dan ~1 uur) werken uw bestaande OAuth-referenties
databricks auth login(U2M) prima. Voor langere tests gebruikt u M2M OAuth met een service-principal, omdat U2M-tokens tijdens lange uitvoeringen verlopen, wat fouten tijdens de test veroorzaakt. Voor het maken van een service-principal is beheerderstoegang tot de werkruimte vereist.
- Voor korte belastingstests (minder dan ~1 uur) werken uw bestaande OAuth-referenties
Door AI ondersteunde installatie (aanbevolen)
Als u Claude Code gebruikt, automatiseert de /load-testing vaardigheid de werkstroom. De code leest uw agentcode, genereert een mock, maakt scripts voor belastingtests en begeleidt u bij de implementatie.
Tip
Laat Claude Code het voor u doen:
Clone https://github.com/databricks/app-templates and run the /load-testing skill against the {your-template} template.
Of volg de onderstaande stappen.
Stap 1: Een agentsjabloon klonen
De /load-testing vaardigheid is opgenomen in de opslagplaats databricks/app-templates , zowel als de vaardigheid op het hoogste niveau agent-load-testing en vooraf gesynchroniseerd in elke afzonderlijke agentsjabloon. Als u al een project van app-templates hebt, dan bezit u de vaardigheid al.
Kloon de repository en navigeer naar de sjabloonmap voor de agent die u wilt loadtesten:
git clone https://github.com/databricks/app-templates.git
cd app-templates/{your-template}
Stap 2: De belastingtestvaardigheid uitvoeren
Voer in Claude Code het volgende uit:
/load-testing
De vaardigheid begeleidt u interactief door de volgende stappen. U kunt mocking overslaan om uw echte agent te testen of implementatie overslaan als uw apps al worden uitgevoerd.
- Parameters verzamelen: vraagt om uw implementatiestatus, rekengrootten, werkrolconfiguraties en OAuth-referenties.
-
Scripts voor belastingstests maken: genereert
locustfile.py,run_load_test.pyendashboard_template.pyis afgestemd op uw project. - Mocking van uw LLM: maakt een mock-client die specifiek is voor uw SDK (OpenAI Agents SDK, LangGraph of aangepast). Deze vervangt echte LLM-aanroepen door configureerbare streamingvertragingen.
- Test-apps implementeren: begeleidt u bij het implementeren van meerdere app-configuraties met verschillende rekengrootten en werkrollen.
- Tests uitvoeren: voert de loadtest uit met M2M OAuth-verificatie en opbouw naar verzadiging.
- Resultaten genereren: produceert een interactief HTML-dashboard met metrische gegevens over QPS, latentie en fouten.
Handmatige installatie
Volg deze stappen om belastingstests in te stellen en uit te voeren zonder AI-hulp.
Stap 1: De LLM-aanroepen van uw agent mocken (optioneel)
Sla deze stap over als je end-to-end resultaten wilt die de werkelijke latentie van LLM bevatten. Als u de doorvoer van de databricks-apps-infrastructuur geïsoleerd wilt meten, moet u de LLM simuleerden zodat de latentie per aanvraag (meestal 1-30 seconden) niet het knelpunt wordt.
Een mock retourneert reacties met een configureerbare streamingvertraging, waarbij de volledige aanvraag-/antwoordpijplijn (SSE-streaming, verzenden van hulpprogramma's, SDK-runner) behouden blijft en waarbij alleen de LLM wordt verwisseld. Hiermee wordt de maximale QPS die het Databricks Apps-platform kan leveren zichtbaar gemaakt en worden de kosten van Foundation Model API-tokens tijdens belastingstests vermeden.
De timing van de mock wordt beheerd door twee omgevingsvariabelen:
| Variabele | Verstek | Description |
|---|---|---|
MOCK_CHUNK_DELAY_MS |
10 |
Vertraging in milliseconden tussen gestreamde tekstsegmenten |
MOCK_CHUNK_COUNT |
80 |
Aantal tekstsegmenten per antwoord |
Met de standaardwaarden duurt elk mock-antwoord ongeveer 800 ms (10 ms x 80 chunks), aanzienlijk sneller dan een echt LLM-antwoord (3-15 seconden). Doorvoernummers weerspiegelen vervolgens het platform, niet het model.
Maak een mockclient die de echte LLM-client vervangt. De rest van uw agentcode blijft ongewijzigd en de benadering is afhankelijk van uw SDK. Zie voor OpenAI de mock_openai_client.py referentie-implementatie in databricks/app-templates. Hetzelfde patroon past zich aan andere SDK's aan.
OpenAI Agents SDK
agent_server/mock_openai_client.py Maak een MockAsyncOpenAI-klasse die chat.completions.create() implementeert met streaming. Het retourneert direct segmenten voor het aanroepen van hulpprogramma's (simuleren van de LLM die besluit een hulpprogramma aan te roepen) en segmenten voor tekstreacties met configureerbare vertraging van MOCK_CHUNK_DELAY_MS en MOCK_CHUNK_COUNT omgevingsvariabelen.
Wissel deze in uw agent:
from agent_server.mock_openai_client import MockAsyncOpenAI
from agents import set_default_openai_client, set_default_openai_api
set_default_openai_client(MockAsyncOpenAI())
set_default_openai_api("chat_completions")
De rest van uw agentcode (handlers, hulpprogramma's, streaminglogica) blijft ongewijzigd.
LangGraph
Vervang het ChatDatabricks model door een mock die vooraf gemaakte AIMessage objecten retourneert:
# Before:
# model = ChatDatabricks(endpoint="databricks-claude-sonnet-4")
# After:
from agent_server.mock_llm import MockChatModel
model = MockChatModel()
De mock moet AIMessage objecten retourneren met hulpprogramma-aanroepen bij de eerste aanroep en tekstinhoud bij volgende aanroepen, met vertragingen die configureerbaar zijn voor streaming.
Op maat gemaakte agenten
Omhul welke externe API-aanroepen uw agent ook doet (LLM, vectorzoekopdracht, tool-API's) met mock-implementaties die realistische reactiestructuren retourneren met aanpasbare vertragingen.
Stap 2: Scripts voor loadtests opzetten
Maak een load-test-scripts/ map in uw project. Het framework voor belastingtests bestaat uit drie scripts die frameworkneutraal zijn en werken met een Databricks Apps-agent.
<project-root>/
agent_server/ # Your existing agent code
load-test-scripts/ # Load testing scripts (create this)
run_load_test.py # CLI orchestrator
locustfile.py # Locust test with SSE streaming + TTFT tracking
dashboard_template.py # Interactive HTML dashboard generator
load-test-runs/ # Results (auto-created per run)
<run-name>/
dashboard.html # Interactive dashboard
test_config.json # Test parameters for reproducibility
<label>/ # Per-config Locust CSV output
Het framework bevat de volgende bestanden:
-
locustfile.py: Een locust-belastingstest diePOST /invocationsaanvragen verzendt, SSE-streamsstream: trueparseert, de tijd bijhoudt tot het eerste token (TTFT) als aangepaste metriek, M2M OAuth-tokenuitwisseling met automatische vernieuwing gebruikt, en eenStepRampShapeimplementeert dat gebruikers vanstep_sizenaarmax_usersopschaalt, waarbij elk niveaustep_durationseconden wordt aangehouden. -
run_load_test.py: Een CLI-orchestrator die elke app-URL opeenvolgend test met geïsoleerde metrische gegevens per configuratie. Het verwerkt het vernieuwen van OAuth-token, voert een statuscontrole en warmup uit voor elke test en slaat resultaten opload-test-runs/<run-name>/<label>/. -
dashboard_template.py: Genereert een zelfstandig HTML-dashboard met behulp van Chart.js met KPI-kaarten, staafdiagrammen (QPS, latentie, TTFT per config), QPS-voortgangslijndiagrammen en een volledige resultatentabel. Kan zelfstandig worden uitgevoerd:uv run dashboard_template.py ../load-test-runs/<run-name>/.
Afhankelijkheden installeren
De scripts voor belastingtests gebruiken hun eigen pyproject.toml binnen load-test-scripts/ om de productieafhankelijkheden van uw agent niet te vervuilen. Maken load-test-scripts/pyproject.toml:
[project]
name = "load-test-scripts"
version = "0.1.0"
requires-python = ">=3.10"
dependencies = [
"locust>=2.32,<2.40",
"urllib3<2.3",
"requests",
]
Opmerking
Bevestig locust aan <2.40. Nieuwere versies (>=2.43) hebben een bekende RecursionError die lange belastingstests onderbreekt.
Installeren vanuit de load-test-scripts/ map:
cd load-test-scripts/
uv sync
Stap 3: Test-apps met verschillende configuraties implementeren
Implementeer meerdere Databricks-apps met verschillende rekengrootten en werkrollen om de optimale configuratie voor uw workload te vinden.
Aanbevolen testmatrix
De onderstaande configuraties richten zich op de sweet spot die is geïdentificeerd uit eerdere tests. Als u een bredere dekking wilt, voegt u aan beide zijden één configuratie toe (bijvoorbeeld medium-w1 of large-w12), maar de zes hieronder zijn meestal voldoende.
| Grootte berekenen | Medewerkers | Voorgestelde app-naam |
|---|---|---|
| Gemiddeld | 2 | <your-app>-medium-w2 |
| Gemiddeld | 3 | <your-app>-medium-w3 |
| Gemiddeld | 4 | <your-app>-medium-w4 |
| Groot | 6 | <your-app>-large-w6 |
| Groot | 8 | <your-app>-large-w8 |
| Groot | 10 | <your-app>-large-w10 |
Rekenkracht configureren
Gebruik de Databricks CLI om de rekengrootte in te stellen bij het maken of bijwerken van een app:
# Create a new app with Medium compute
databricks apps create <app-name> --compute-size MEDIUM
# Update an existing app to Large compute
databricks apps update <app-name> --compute-size LARGE
Aantal werknemers configureren met declaratieve Automationbundels
start-server (via AgentServer.run()) accepteert rechtstreeks een --workers vlag. Geef het aantal werknemers in de command array door met behulp van een DAB-variabele.
variables:
app_name:
default: 'my-agent-medium-w2'
workers:
default: '2'
resources:
apps:
load_test_app:
name: ${var.app_name}
source_code_path: .
config:
command: ['uv', 'run', 'start-server', '--workers', '${var.workers}']
env:
- name: MOCK_CHUNK_DELAY_MS
value: '10'
- name: MOCK_CHUNK_COUNT
value: '80'
targets:
medium-w2:
default: true
variables:
app_name: 'my-agent-medium-w2'
workers: '2'
large-w8:
variables:
app_name: 'my-agent-large-w8'
workers: '8'
Implementeren en verifiëren
Implementeer elk doel met de Databricks CLI:
databricks bundle deploy --target medium-w2
databricks bundle run load_test_app --target medium-w2
Controleer of apps actief zijn voordat u belastingstests uitvoert:
databricks apps get <app-name> --output json | jq '{app_status, compute_status, url}'
Opmerking
Wacht totdat alle apps de status bereiken ACTIVE voordat u doorgaat. Apps die nog in de opstartfase zitten, leveren misleidende resultaten op.
Stap 4: Uitvoeren van belastingproeven
Authenticatie instellen
Selecteer uw verificatie op basis van hoe lang u van plan bent om uit te voeren:
-
Korte tests (minder dan ~1 uur): gebruik uw bestaande gebruikersreferenties van
databricks auth login. Er is geen extra installatie vereist. - Lange tests (langer dan ongeveer 1 uur, zoals 's nachts uitvoeren): gebruik M2M OAuth met een service principal. U2M-tokens verlopen en onderbreken uw test halverwege de uitvoering. Voor het maken van een serviceprincipal is beheerderstoegang tot de werkruimte vereist.
Voor M2M OAuth moet u de referenties van de service-principal exporteren voordat u de tests uitvoert.
export DATABRICKS_HOST=https://your-workspace.cloud.databricks.com
export DATABRICKS_CLIENT_ID=<your-client-id>
export DATABRICKS_CLIENT_SECRET=<your-client-secret>
Parametersreferentie
| Kenmerk | Verplicht | Verstek | Description |
|---|---|---|---|
--app-url |
Yes | — | App-URL('s) om te testen (herhaalbaar) |
--client-id |
Voor lange tests |
DATABRICKS_CLIENT_ID Env |
Client-ID van service-identiteit (M2M OAuth) |
--client-secret |
Voor lange tests |
DATABRICKS_CLIENT_SECRET Env |
Clientgeheim van service-principal (M2M OAuth) |
--label |
No | Automatisch afgeleid van URL | Menselijk-leesbaar label per app (herhaalbaar) |
--compute-size |
No | Automatisch gedetecteerd of medium |
Rekengroottetag per app: medium, large (herhaalbaar) |
--max-users |
No | 300 |
Maximum aantal gelijktijdige gesimuleerde gebruikers |
--step-size |
No | 20 |
Gebruikers toegevoegd per stap voor ramp |
--step-duration |
No | 30 |
Seconden per stap voor ramp |
--spawn-rate |
No | 20 |
Snelheid van gebruikersaanmaak (gebruikers per seconde) |
--run-name |
No | <timestamp> |
Naam voor deze uitvoering — resultaten opgeslagen in load-test-runs/<run-name>/ |
--dashboard |
No | Uit | Interactief HTML-dashboard genereren nadat de tests zijn voltooid |
Voorbeeldopdrachten
Snelle test met één app (korte uitvoering: maakt gebruik van uw databricks auth login sessie):
cd load-test-scripts/
uv run run_load_test.py \
--app-url https://my-app.aws.databricksapps.com \
--dashboard --run-name quick-test
Volledige matrix in de aanbevolen 6 configuraties (lange uitvoering: M2M-referenties doorgeven). Geef vlaggen door --compute-size in dezelfde volgorde als --app-url:
uv run run_load_test.py \
--app-url https://my-app-medium-w2.aws.databricksapps.com \
--app-url https://my-app-medium-w3.aws.databricksapps.com \
--app-url https://my-app-medium-w4.aws.databricksapps.com \
--app-url https://my-app-large-w6.aws.databricksapps.com \
--app-url https://my-app-large-w8.aws.databricksapps.com \
--app-url https://my-app-large-w10.aws.databricksapps.com \
--compute-size medium --compute-size medium --compute-size medium \
--compute-size large --compute-size large --compute-size large \
--client-id $DATABRICKS_CLIENT_ID \
--client-secret $DATABRICKS_CLIENT_SECRET \
--dashboard --run-name overnight-sweep
Meerdere uitvoeringen voor statistische consistentie:
for RUN in r1 r2 r3 r4 r5; do
uv run run_load_test.py \
--app-url https://my-app.aws.databricksapps.com \
--client-id $DATABRICKS_CLIENT_ID \
--client-secret $DATABRICKS_CLIENT_SECRET \
--max-users 1000 --step-size 20 --step-duration 10 \
--run-name my_test_${RUN} --dashboard || break
done
Wat gebeurt er tijdens een uitvoeringsproces?
-
Gezondheidscontrole: controleert of de app correct streamt (ontvangt gegevens).
[DONE] - Opwarmen: verzendt sequentiële aanvragen om de app op te warmen.
-
Ramp-to-verzadiging: verhoogt het aantal gelijktijdige gebruikers elke
step_durationseconden. - nl-NL: Verzadigingsdetectie: wanneer het QPS een plateau bereikt ondanks de toevoeging van meer gebruikers, is het doorvoermaximum bereikt.
Geschatte duur
Elke app die wordt getest, wordt uitgevoerd via een eigen ramp, dus de totale uitvoeringstijd wordt geschaald met het aantal configuraties in uw matrix. Gebruik de onderstaande formule om het uitvoeringsvenster te plannen.
Duur per app: (max_users / step_size) * step_duration seconden.
Met standaardinstellingen (--max-users 300 --step-size 20 --step-duration 30):
- 15 stappen x 30 seconden = ongeveer 7,5 minuten per app
- Voor de aanbevolen 6-configuratiematrix: ongeveer 45 minuten per uitvoering
Stap 5: Resultaten weergeven en interpreteren
Open het dashboard:
open load-test-runs/<run-name>/dashboard.html(Optioneel) Genereer het dashboard opnieuw op basis van bestaande gegevens, bijvoorbeeld na het bijwerken van de sjabloon:
cd load-test-scripts/ uv run dashboard_template.py ../load-test-runs/<run-name>/
Dashboard secties
Het interactieve dashboard bevat:
- KPI-kaarten: beste configuratie (op basis van de hoogste geslaagde QPS), totale piek QPS, laagste latentie en totale aanvragen die worden afgeleverd.
- QPS per Config: gegroepeerd staafdiagram met mediaan QPS, piek QPS met uitzondering van fouten en piek QPS naast elkaar voor elke configuratie.
- Latentie per configuratie: gegroepeerde balken met p50- en p95-latentie.
- TTFT by Config: time to first token (p50 en p95).
- Totaal aantal verzonden aanvragen: aantal aanvragen per configuratie.
- Voortgang van QPS-ramp: lijndiagrammen met tabbladen voor QPS, QPS (met uitzondering van fouten), latentie en fouten. Bevat een schuifregelaar voor maximale gebruikers om in te zoomen op lagere gelijktigheidsniveaus. Grafieken worden gegroepeerd op rekengrootte (gemiddeld en groot naast elkaar).
- Volledige resultatentabel: alle configuraties met piek-QPS, gebruikers met piek, latentie percentielen en foutpercentage.
- Testparameters: configuratieoverzicht voor reproduceerbaarheid.
Resultaten interpreteren
- Piek QPS: het maximale QPS dat is bereikt bij een hellingsstap. Dit is het doorvoermaximum voor die configuratie.
- Gebruikers bij Piek: het aantal gelijktijdige gebruikers wanneer piek in QPS is bereikt. Als u meer gebruikers toevoegt dan dit punt, wordt de doorvoer niet verhoogd.
- Foutpercentage: moet 0% of zeer laag zijn. Een hoge foutsnelheid betekent dat de app overbelast is op dat gelijktijdigheidsniveau.
- QPS-rampdiagram: zoek waar de lijn afvlakt. Dat is het verzadigingspunt: het toevoegen van meer gebruikers verhoogt de doorvoer niet.
Troubleshooting
| Issue | Solution |
|---|---|
| Authenticatietoken is halverwege de test verlopen | Voor tests die langer dan ~1 uur duren, schakelt u over van U2M naar M2M OAuth door door te geven --client-id en --client-secret |
| Healthcheck mislukt | Controleer of de app ACTIEF is: databricks apps get <name> --output json |
| 0 QPS of geen resultaten | Controleer load-test-runs/<run-name>/<label>/locust_output.log op fouten |
| Lage QPS ondanks een hoog aantal gebruikers | De app is verzadigd. Probeer meer werknemers of meer rekenkracht. |
| Hoog foutpercentage | De app is overbelast. Verminder --max-users of verhoog het aantal werkers/rekenkracht. |
| Dashboard toont geen rampgegevens | Controleren of results_stats_history.csv in elke resultaatsubmap bestaat |
Volgende stappen
- Test met echte LLM-aanroepen: sla de mockingstap over en implementeer uw werkelijke agent om de end-to-end latentie te meten, inclusief de LLM-reactietijd.
- Aantal werkrollen afstemmen: gebruik de resultaten van de testmatrix om het optimale aantal werkrollen voor uw rekenkracht te vinden.
- Zelfstudie: Een GenAI-toepassing evalueren en verbeteren om de nauwkeurigheid, relevantie en veiligheid naast doorvoer te meten.