Docker Selbst Gehostet


Was ist Bencher?

Bencher ist eine Suite von kontinuierlichen Benchmarking-Tools. Hatten Sie jemals eine Performance Regression, die Ihre Nutzer beeinflusste? Bencher h├Ątte das verhindern k├Ânnen. Bencher erm├Âglicht es Ihnen, Leistungsregressionen vorher zu erkennen und zu verhindern, bevor sie in die Produktion gelangen.

  • Ausf├╝hren: F├╝hren Sie Ihre Benchmarks lokal oder in CI mit Ihren bevorzugten Benchmarking-Tools aus. Das bencher CLI umfasst einfach Ihr vorhandenes Benchmark-Harness und speichert die Ergebnisse.
  • Verfolgen: Verfolgen Sie die Ergebnisse Ihrer Benchmarks im Laufe der Zeit. ├ťberwachen, abfragen und grafisch darstellen der Ergebnisse mit der Bencher Web Konsole auf Basis des Quellzweigs, Testbetts und Ma├čnahme.
  • Auffangen: Fangen Sie Leistungsregressionen in CI ab. Bencher verwendet modernste, anpassbare Analysen, um Leistungsregressionen zu erkennen, bevor sie in die Produktion gelangen.

Aus denselben Gr├╝nden, warum Unit Tests in CI laufen, um Feature Regressionen zu verhindern, sollten Benchmarks in CI mit Bencher ausgef├╝hrt werden, um Leistungsregressionen zu verhindern. Performance-Bugs sind Fehler!


Bencher ist Open Source und selbst hostbar. Wenn Sie daran interessiert sind, Bencher Cloud zu nutzen, schauen Sie sich das Bencher Cloud Schnellstart-Tutorial an. Dieses Tutorial wird Ihnen helfen, Bencher Self-Hosted mit Docker einzurichten.

­čÉ░ Sobald Sie sich bei der Verwendung von Bencher Self-Hosted wohl f├╝hlen, sollten Sie die folgenden Ressourcen in Betracht ziehen:


Docker installieren

Um die UI- und API-Server in diesem Tutorial auszuf├╝hren, m├╝ssen Sie docker installiert haben. ├ťberpr├╝fen Sie, ob Sie docker installiert haben.

F├╝hren Sie aus: docker --version

Sie sollten etwas Ähnliches sehen:

$ docker --version
Docker version 20.10.17, build 100c701

Es ist in Ordnung, wenn Ihre Versionsnummer anders ist. Es ist nur wichtig, dass dieser Befehl funktioniert. Wenn nicht, folgen Sie den Anweisungen zur Installation von docker.


Installation des bencher CLI

Linux, Mac, & Unix

F├╝r Linux, Mac und andere Unix-├Ąhnliche Systeme f├╝hren Sie Folgendes in Ihrem Terminal aus:

Terminal window
curl --proto '=https' --tlsv1.2 -sSfL https://bencher.dev/download/install-cli.sh | sh

Windows

F├╝r Windows-Systeme f├╝hren Sie Folgendes in einem PowerShell-Terminal aus:

Terminal window
irm https://bencher.dev/download/install-cli.ps1 | iex

­čÉ░ Wenn Sie einen Fehler erhalten, der besagt Das Ausf├╝hren von Skripten ist auf diesem System deaktiviert:

  • ├ľffnen Sie Powershell mit Als Administrator ausf├╝hren
  • Ausf├╝hren: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  • Eingeben: Y
  • F├╝hren Sie dieses Skript erneut aus

F├╝r weitere Installationsm├Âglichkeiten, siehe wie man das bencher CLI installiert.

Nun, testen wir, ob wir das bencher CLI installiert haben.

F├╝hren Sie aus: bencher --version

Sie sollten sehen:

$ bencher --version
bencher 0.3.26

Bencher UI & API Server ausf├╝hren

Mit docker installiert, k├Ânnen wir nun den UI und API Server starten.

F├╝hren Sie aus: bencher up

Sie sollten so etwas sehen:

$ bencher up
Pulling `ghcr.io/bencherdev/bencher-api:latest` image...
Creating `bencher_api` container...
Starting `bencher_api` container...
Pulling `ghcr.io/bencherdev/bencher-console:latest` image...
Creating `bencher_console` container...
Starting `bencher_console` container...
­čÉ░ Bencher Self-Hosted is up and running!
Web Console: http://localhost:3000
API Server: http://localhost:61016
Press Ctrl+C to stop Bencher Self-Hosted.
­čÉ░ Bencher Self-Hosted logs...
Jan 08 16:49:07.727 INFO ­čÉ░ Bencher API Server v0.4.2
...

Es ist in Ordnung, wenn Ihre Ausgabe anders ist. Wichtig ist nur, dass dieser Befehl funktioniert.

­čÉ░ Wenn Sie einen Fehler von ghcr.io erhalten, der besagt: "authentication required" Versuchen Sie: docker logout ghcr.io auszuf├╝hren.

­čÉ░ Unter Windows, wenn Sie einen Fehler erhalten, der besagt: Das Betriebssystem des Images "linux" kann auf dieser Plattform nicht verwendet werden: Betriebssystem wird nicht unterst├╝tzt Versuchen Sie: & 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchLinuxEngine auszuf├╝hren.

Bencher API Server Protokolle

Da wir E-Mail/SMTP auf dem API-Server noch nicht eingerichtet haben, werden die Best├Ątigungscodes, die Sie sp├Ąter im Tutorial erhalten, in den Serverprotokollen angezeigt, wie oben gezeigt. Das hei├čt, die Authentifizierungsnachweise werden in der Ausgabe von bencher up angezeigt.


Bencher Host einstellen

Der Standardhost des bencher CLI ist Bencher Cloud (d.h. https://api.bencher.dev). Es ist also notwendig, Ihren Hostnamen einzustellen. Der einfachste Weg, dies zu tun, ist mit der Umgebungsvariable BENCHER_HOST.

├ľffnen Sie ein neues Terminalfenster.

Auf Linux, Mac und anderen Unix-├Ąhnlichen Systemen f├╝hren Sie aus: export BENCHER_HOST=http://localhost:61016

Auf Windows f├╝hren Sie aus: $env:BENCHER_HOST = "http://localhost:61016"

F├╝hren Sie dann echo $BENCHER_HOST oder Write-Output $env:BENCHER_HOST aus.

Sie sollten folgendes sehen:

$ echo $BENCHER_HOST
http://localhost:61016

Erstellen Sie einen Bencher Self-Hosted Account

Registrieren Sie sich f├╝r Bencher Self-Hosted


Erstellen Sie einen Account auf Ihrer lokalen Bencher Self-Hosted-Instanz, indem Sie zu folgender Adresse navigieren: http://localhost:3000/auth/signup

Nachdem Sie einen Account erstellt haben, navigieren Sie zurück zum Terminalfenster, in dem Sie bencher up ausgeführt haben. Sie sollten etwas Ähnliches sehen:

To: Saul Goodman <saul@bettercallsaul.com>>
Subject: Confirm Bencher Signup
Body:
Ahoy Saul Goodman,
Please, click the button below or use the provided token to signup for Bencher.
Confirm Email: http://localhost:3000/auth/confirm?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJhdXRoIiwiZXhwIjoxNzA0ODIwODIxLCJpYXQiOjE3MDQ4MTkwMjEsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC8iLCJzdWIiOiJzYXVsQGJldHRlcmNhbGxzYXVsLmNvbSIsIm9yZyI6bnVsbH0.CKW4-MyOqY0AnRbs9h8tBtyAB6ck51PytytTsZSBOiA
Confirmation Token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJhdXRoIiwiZXhwIjoxNzA0ODIwODIxLCJpYXQiOjE3MDQ4MTkwMjEsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC8iLCJzdWIiOiJzYXVsQGJldHRlcmNhbGxzYXVsLmNvbSIsIm9yZyI6bnVsbH0.CKW4-MyOqY0AnRbs9h8tBtyAB6ck51PytytTsZSBOiA
See you soon,
The Bencher Team
Bencher - Continuous Benchmarking
Manage email settings (http://localhost:3000/help)

Navigieren Sie zum Confirm Email-Link in Ihrem Browser oder kopieren Sie das Confirmation Token in das Confirm Token-Feld unter: http://localhost:3000/auth/confirm

Danach sollten Sie in Ihrem Bencher Self-Hosted-Account eingeloggt sein!


Erstellen Sie einen API-Token

Um die Bencher-API verwenden zu k├Ânnen, m├╝ssen Sie ein API-Token erstellen. Navigieren Sie zur Bencher Console. Fahren Sie mit der Maus ├╝ber Ihren Namen in der rechten oberen Ecke. Ein Dropdown-Men├╝ sollte erscheinen. W├Ąhlen Sie Tokens. Sobald Sie auf der API-Tokens-Seite sind, klicken Sie auf den Ô׼ Hinzuf├╝gen-Button.

Ein API-Token hinzuf├╝gen


Sobald Sie Ihr neues API-Token erstellt haben, m├╝ssen Sie es in Ihre Zwischenablage kopieren. In dem Terminal, in dem Sie arbeiten m├Âchten, exportieren Sie das API-Token als Umgebungsvariable.

F├╝hren Sie auf Linux-, Mac- und anderen Unix-├Ąhnlichen Systemen aus: export BENCHER_API_TOKEN=IHR_TOKEN

F├╝hren Sie auf Windows aus: $env:BENCHER_API_TOKEN = "IHR_TOKEN"

Wenn Sie dann echo $BENCHER_API_TOKEN oder Write-Output $env:BENCHER_API_TOKEN ausf├╝hren.

Sie sollten sehen:

$ echo $BENCHER_API_TOKEN
IHR_TOKEN

­čÉ░ Hinweis: Wenn Sie zu einem anderen Terminal wechseln, m├╝ssen Sie das API-Token erneut exportieren.


Erstellen Sie ein Projekt

Jetzt, da wir ein Benutzerkonto und ein API-Token haben, k├Ânnen wir ein Projekt erstellen. Zuerst m├╝ssen wir wissen, zu welcher Organisation unser neues Projekt geh├Ârt.

F├╝hren Sie aus: bencher org list

Sie sollten so etwas sehen:

$ bencher org list
[
{
"name": "Saul Goodman",
"slug": "saul-goodman",
"uuid": "4581feb0-6cac-40a9-bd8a-d7865183b01e"
"created": "2022-07-06T11:24:36Z",
"modified": "2022-07-06T11:24:36Z"
}
]

Ihre Ausgabe sollte leicht von der oben gezeigten abweichen:

  • Die uuid ist pseudorandom
  • Der name und slug basieren auf Ihrem Benutzernamen
  • Die created und modified Zeitstempel stammen von Ihrer Anmeldung

Wir k├Ânnen nun ein neues Projekt innerhalb Ihrer Organisation erstellen. Ersetzen Sie Ihren Organisations-slug durch das Argument organization (dh YOUR_ORG_SLUG) im unten stehenden Befehl.

F├╝hren Sie aus: bencher project create YOUR_ORG_SLUG --name "Save Walter White" --url http://www.savewalterwhite.com

Sie sollten so etwas sehen:

$ bencher project create saul-goodman --name "Save Walter White" --url http://www.savewalterwhite.com
{
"organization": "4581feb0-6cac-40a9-bd8a-d7865183b01e",
"name": "Save Walter White",
"slug": "save-walter-white-1234abcd",
"uuid": "c6c2a8e8-685e-4413-9a19-5b79053a71b1"
"url": "http://www.savewalterwhite.com",
"public": true,
"created": "2022-07-06T11:36:24Z",
"modified": "2022-07-06T11:36:24Z"
}

Wiederum sollte Ihr Ergebnis etwas anders aussehen als das oben gezeigte. Es ist nur wichtig, dass dieser Befehl funktioniert. Notieren Sie sich das Projekt slug Feld (z.B. save-walter-white-1234abcd).


F├╝hren Sie einen Bericht aus

Endlich sind wir bereit, einige Benchmark-Metriken zu sammeln! Um die Sache einfach zu halten, verwenden wir in diesem Tutorial Testdaten.

F├╝hren Sie aus: bencher mock

Sie sollten so etwas sehen:

$ bencher mock
{
"bencher::mock_0": {
"latency": {
"value": 3.7865423396154463,
"lower_value": 3.4078881056539014,
"upper_value": 4.165196573576991
}
},
"bencher::mock_1": {
"latency": {
"value": 16.398332128878437,
"lower_value": 14.758498915990593,
"upper_value": 18.03816534176628
}
},
"bencher::mock_2": {
"latency": {
"value": 20.88091359871672,
"lower_value": 18.792822238845048,
"upper_value": 22.969004958588393
}
},
"bencher::mock_3": {
"latency": {
"value": 33.88103801203782,
"lower_value": 30.492934210834036,
"upper_value": 37.2691418132416
}
},
"bencher::mock_4": {
"latency": {
"value": 40.90515638867921,
"lower_value": 36.81464074981129,
"upper_value": 44.99567202754713
}
}
}

Ihre Ausgabe sollte leicht von der oben gezeigten abweichen, da die Daten pseudorandom sind. Es ist nur wichtig, dass dieser Befehl funktioniert.


Jetzt f├╝hren wir einen Bericht mit Test-Benchmark-Messdaten aus. Ersetzen Sie Ihren Projekt slug durch das Argument --project (dh YOUR_PROJECT_SLUG) im unten stehenden Befehl.

F├╝hren Sie aus: bencher run --project YOUR_PROJECT_SLUG "bencher mock"

Sie sollten so etwas sehen:

$ bencher run save-walter-white-1234abcd "bencher mock"
{
"bencher::mock_0": {
"latency": {
"value": 0.15496641529475275,
"lower_value": 0.13946977376527747,
"upper_value": 0.17046305682422802
}
},
"bencher::mock_1": {
"latency": {
"value": 18.648298578180437,
"lower_value": 16.783468720362393,
"upper_value": 20.513128435998482
}
},
"bencher::mock_2": {
"latency": {
"value": 28.20328182167366,
"lower_value": 25.382953639506294,
"upper_value": 31.023610003841025
}
},
"bencher::mock_3": {
"latency": {
"value": 34.45732560787596,
"lower_value": 31.01159304708836,
"upper_value": 37.903058168663556
}
},
"bencher::mock_4": {
"latency": {
"value": 44.9237520767597,
"lower_value": 40.43137686908373,
"upper_value": 49.41612728443567
}
}
}
{
"branch": "master",
"end_time": "2023-07-18T14:21:27.796871Z",
"results": [
"{\n \"bencher::mock_0\": {\n \"latency\": {\n \"value\": 0.15496641529475275,\n \"lower_value\": 0.13946977376527747,\n \"upper_value\": 0.17046305682422802\n }\n },\n \"bencher::mock_1\": {\n \"latency\": {\n \"value\": 18.648298578180437,\n \"lower_value\": 16.783468720362393,\n \"upper_value\": 20.513128435998482\n }\n },\n \"bencher::mock_2\": {\n \"latency\": {\n \"value\": 28.20328182167366,\n \"lower_value\": 25.382953639506294,\n \"upper_value\": 31.023610003841025\n }\n },\n \"bencher::mock_3\": {\n \"latency\": {\n \"value\": 34.45732560787596,\n \"lower_value\": 31.01159304708836,\n \"upper_value\": 37.903058168663556\n }\n },\n \"bencher::mock_4\": {\n \"latency\": {\n \"value\": 44.9237520767597,\n \"lower_value\": 40.43137686908373,\n \"upper_value\": 49.41612728443567\n }\n }\n}\n"
],
"settings": {},
"start_time": "2023-07-18T14:21:27.773930Z",
"testbed": "base"
}
{
"uuid": "5554a92c-6f5c-481d-bd47-990f0a9bac6d",
"user": { ... },
"project": { ... },
"branch": { ... },
"testbed": { ...},
"start_time": "2023-07-18T14:21:27Z",
"end_time": "2023-07-18T14:21:27Z",
"adapter": "magic",
"results": [
[
{
"measure": { ... },
"threshold": null,
"benchmarks": [ ... ]
}
]
],
"alerts": [],
"created": "2023-07-18T14:21:27Z"
}
View results:
- bencher::mock_0: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=88375e7c-f1e0-4cbb-bde1-bdb7773022ae
- bencher::mock_1: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=e81c7863-cc4b-4e22-b507-c1e238871137
- bencher::mock_2: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=31dede44-d23a-4baf-b639-63f2ac742e42
- bencher::mock_3: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=c7e32369-f3dd-473d-99a3-6289ae32b38e
- bencher::mock_4: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=779bc477-4964-4bae-aa8c-4da3e388822c

Sie k├Ânnen nun die Ergebnisse aus jedem der Benchmarks im Browser anzeigen. Klicken Sie auf die Links unter View results oder kopieren und f├╝gen Sie sie ein. Es sollte nur einen einzigen Datenpunkt f├╝r jedes Benchmark geben, also lassen Sie uns mehr Daten hinzuf├╝gen!


Zuerst setzen wir unseren Projektslug als Umgebungsvariable, damit wir ihn nicht mit --project bei jedem einzelnen Lauf angeben m├╝ssen.

F├╝hren Sie aus: export BENCHER_PROJECT=save-walter-white-1234abcd

Wenn Sie dann ausf├╝hren: echo $BENCHER_PROJECT

Sollten Sie sehen:

$ echo $BENCHER_PROJECT
save-walter-white-1234abcd

Lassen Sie uns den gleichen Befehl erneut ohne --project ausf├╝hren, um mehr Daten zu generieren.

F├╝hren Sie aus: bencher run "bencher mock"


Jetzt generieren wir mehr Daten, aber diesmal leiten wir unsere Ergebnisse in bencher run um.

F├╝hren Sie aus: bencher mock | bencher run


Manchmal m├Âchten Sie vielleicht Ihre Ergebnisse in einer Datei speichern und bencher run holt sie ab.

F├╝hren Sie aus: bencher run --file results.json "bencher mock > results.json"


Ebenso k├Ânnte ein separater Prozess Ihre Benchmarks durchf├╝hren und Ihre Ergebnisse in einer Datei speichern. Dann holt bencher run sie einfach ab.

F├╝hren Sie aus: bencher mock > results.json && bencher run --file results.json


Schlie├člich lassen Sie uns eine Menge Daten mit dem Argument --iter von bencher run generieren.

F├╝hren Sie aus: bencher run --iter 16 "bencher mock"


­čÉ░ Tipp: Schauen Sie sich die Unterlagen zu bencher run CLI-Unterbefehl f├╝r einen vollst├Ąndigen ├ťberblick dar├╝ber, was bencher run alles kann!


Erstellen Sie einen Alert

Jetzt, da wir einige historische Daten f├╝r unsere Benchmarks haben, lassen Sie uns einen Alert generieren! Alerts werden erzeugt, wenn ein Benchmark-Ergebnis als Leistungsr├╝ckgang erkannt wird. Also simulieren wir einen Leistungsr├╝ckgang!

F├╝hren Sie aus: bencher run "bencher mock --pow 8"


Am Ende der Ausgabe sollte ein neuer Abschnitt namens View alerts:

View alerts:
- bencher::mock_0: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/b2329d5a-4471-48ab-bfbd-959d46ba1aa6
- bencher::mock_1: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/181b1cf5-d984-402a-b0f1-68f6f119fa66
- bencher::mock_2: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/b9b6c904-c657-4908-97db-dbeca40f8782
- bencher::mock_3: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/5567ff32-2829-4b6a-969a-af33ce3828db
- bencher::mock_4: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/49f2768f-ccda-4933-8e1d-08948f57a74d

Sie k├Ânnen nun die Alerts f├╝r jedes Benchmark im Browser anzeigen. Klicken Sie auf die Links unter View alerts oder kopieren und f├╝gen Sie sie ein.


­čÉ░ Tipp: Schauen Sie sich die Schwellenwert- & Alert-Dokumentation f├╝r einen vollst├Ąndigen ├ťberblick dar├╝ber an, wie Leistungsr├╝ckg├Ąnge erkannt werden!



­čÉ░ Herzlichen Gl├╝ckwunsch! Sie haben Ihren ersten Leistungseinbruch erkannt! ­čÄë


Weiter: ├ťbersicht ├╝ber Benchmarking Ô×í

­čĄľ Dieses Dokument wurde automatisch von OpenAI GPT-4 generiert. Es ist m├Âglicherweise nicht korrekt und kann Fehler enthalten. Wenn Sie Fehler finden, ├Âffnen Sie bitte ein Problem auf GitHub.


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Wed, March 27, 2024 at 7:50:00 AM UTC