Stabiles Prozent-Bucket für Feature-Rollouts berechnen
Ein prozentualer Rollout ist nur dann nützlich, wenn dieselbe Person bei jeder Anfrage dieselbe Entscheidung erhält.
Im Browser ausführen – kostenlos
Dieser Rechner bildet eine stabile Benutzer-, Konto-, Geräte- oder Mandantenkennung auf eines von 10,000 deterministischen Buckets ab und vergleicht es mit dem angegebenen Prozentsatz. Zurückgegeben werden der vorzeichenlose Hash, das lesbare Prozent-Bucket und die endgültige Aufnahmeentscheidung. Weder Zufallswert noch Uhrzeit, Netzwerkanfrage oder gespeicherte Zuweisung beeinflussen das Ergebnis, sodass identische Eingaben stets dieselbe Ausgabe liefern.
Wählen Sie eine Kennung für das Subjekt des Rollouts
Beginnen Sie mit einer stabilen Kennung, die auf der gewünschten Zuweisungsebene eindeutig und überall verfügbar ist, wo die Entscheidung getroffen wird. Eine Benutzer-ID eignet sich für ein persönliches Oberflächenexperiment. Eine Konto- oder Mandanten-ID ist meist besser, wenn sämtliche Mitglieder einer Organisation dasselbe Verhalten sehen sollen. Gerätekennungen können bei anonymen Erlebnissen funktionieren, doch das Löschen lokaler Daten kann die Zuweisung verändern. Der Rechner behandelt die Kennung als exakten Text: Groß- und Kleinschreibung, Leerzeichen, Satzzeichen und Unicode-Zeichen fließen vollständig in den Hash ein. Normalisieren Sie Kennungen daher vor dem Aufruf, wenn verschiedene Systeme sie unterschiedlich darstellen könnten. Legen Sie beispielsweise fest, ob E-Mail-ähnliche Kennungen kleingeschrieben werden, ob numerische IDs führende Nullen enthalten und ob ein Namensraum wie Produktion oder Test zur Kennung gehört. Verwenden Sie keine veränderlichen Profildaten wie einen Anzeigenamen. Wenn Sie eine Konvention gewählt haben, behalten Sie sie bei, denn eine Änderung der Kennung verändert auch das Bucket.
Verstehen Sie die deterministische Bucket-Berechnung
Die Fähigkeit codiert die Kennung als UTF-8 und wendet den 32-Bit-Hashalgorithmus FNV-1a an. Der vorzeichenlose Hash wird auf eines von 10,000 Basispunkt-Buckets reduziert und als Zahl zwischen 0 und 99.99 dargestellt. Ein Subjekt wird aufgenommen, wenn sein Bucket strikt kleiner als der angeforderte Prozentsatz multipliziert mit 100 ist. Diese Grenzregel gewährleistet sinnvolle Endpunkte: Null Prozent nimmt niemanden auf, hundert Prozent dagegen alle. Außerdem sind Änderungen in Schritten von 0.01 Prozentpunkten möglich. Da das Verfahren weder Zufalls-Seed noch Zeit, Speicherung oder Netzwerkzugriff nutzt, erzeugen dieselbe Kennung und derselbe Prozentsatz stets dieselbe Antwort. Wenn Sie den Prozentsatz erhöhen, bleiben alle bereits aufgenommenen Subjekte erhalten und Kennungen aus dem nächsten Bucket-Bereich kommen hinzu; eine Senkung entfernt Subjekte am oberen Ende. Der Hash eignet sich für operative Rollout-Zuweisungen, nicht für kryptografische Sicherheit. Behandeln Sie den Wert nicht als Geheimnis und nutzen Sie ihn weder zum Verbergen von Kennungen noch für Autorisierungsentscheidungen.
Setzen Sie das Ergebnis sicher im Release-Prozess ein
Verwenden Sie den booleschen Aufnahmewert als eine Eingabe für die Feature-Auslieferung, gemeinsam mit ausdrücklichen Berechtigungsregeln, Umgebungsprüfungen und Notfallüberschreibungen. Ein typischer Dienst schließt zunächst nicht unterstützte Tarife oder Regionen aus und berechnet anschließend die prozentuale Zuweisung für die verbleibende Zielgruppe. Speichern Sie die Rollout-Konfiguration und nicht für jeden Benutzer eine gesonderte Zufallszuweisung, da die deterministische Berechnung die Entscheidung jederzeit wiederherstellt. Vergleichen Sie vor einer Ausweitung technische und geschäftliche Kennzahlen berechtigter Kohorten und bereiten Sie eine schnelle globale Abschaltung vor. Wenn mehrere unabhängige Features allein dieselbe Kennung verwenden, korreliert ihre Bucket-Reihenfolge. Ergänzen Sie deshalb einen stabilen Feature-Schlüssel, etwa Feature-Name, Trennzeichen und Benutzer-ID, sofern jeder Rollout eine unabhängige Zielgruppe benötigt. Behalten Sie diesen Schlüssel während des gesamten Rollouts bei. Der Endpunkt weist Prozentsätze unter null oder über hundert zurück, statt sie unbemerkt zu begrenzen; Konfigurationsfehler werden dadurch sichtbar. Jeder Aufruf kostet $0.002; die Browser-Version nutzt dieselbe reine Berechnung.
Anwendungsfälle
Produktionsfreigabe stufenweise ausrollen
Stellen Sie ein neues Feature einem stabilen Anteil der berechtigten Zielgruppe bereit und erhöhen Sie den Prozentsatz ohne Umsortierung bereits aufgenommener Personen.
Mandanten einheitlich behandeln
Hashen Sie eine Konto- oder Mandantenkennung, damit sämtliche Mitglieder einer Organisation dieselbe Entscheidung erhalten.
Rollout-Konfiguration nachvollziehen
Berechnen Sie das Bucket einer gemeldeten Person erneut, um zu erklären, ob der prozentuale Schwellenwert sie hätte aufnehmen sollen.
Häufige Fragen
Erhält dieselbe Kennung immer dasselbe Ergebnis?
Ja. Identischer Kennungstext und Prozentsatz liefern dieselbe Ausgabe, weil das Verfahren weder Zufall, Datum, Netzwerk noch gespeicherten Zustand nutzt.
Was geschieht bei null und hundert Prozent?
Null Prozent nimmt keine Kennung auf, während hundert Prozent alle gültigen Kennungen aufnimmt.
Kann ich einen Rollout ohne Umsortierung bestehender Benutzer erweitern?
Ja. Eine höhere Schwelle behält alle bisher aufgenommenen Buckets und ergänzt Buckets aus dem neu geöffneten Bereich.
Ist der Hash kryptografisch sicher?
Nein. FNV-1a ist ein schneller Hash für deterministische Verteilungen. Er darf nicht für Passwörter, Autorisierung, Geheimhaltung oder Anonymisierung verwendet werden.
Wie bleiben Rollouts verschiedener Features unabhängig?
Ergänzen Sie die stabile Subjektkennung um einen dauerhaften Feature-Schlüssel und ein Trennzeichen und behalten Sie diese Konvention bei.
Was kostet ein API-Aufruf?
Jede Anfrage kostet $0.002. Der Browser-Rechner führt dieselbe deterministische Berechnung lokal aus.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/dev/feature-toggle-rollout-percent \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"identifier":"user_48291","rollout_percentage":25}'const res = await fetch("https://api.kit.forhosting.com/dev/feature-toggle-rollout-percent", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"identifier": "user_48291",
"rollout_percentage": 25
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/feature-toggle-rollout-percent",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"identifier": "user_48291",
"rollout_percentage": 25
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/feature-toggle-rollout-percent", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"identifier":"user_48291","rollout_percentage":25}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"identifier":"user_48291","rollout_percentage":25}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/feature-toggle-rollout-percent", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"identifier": "user_48291",
"rollout_percentage": 25
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.feature_toggle_rollout_percent",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |