Sailhouse ist eine ereignisgesteuerte Infrastrukturplattform für Entwickler, in deren Mittelpunkt die "Agent Control Plane" steht. Die Plattform soll Entwicklern helfen, schnell und zuverlässig KI-Agenten und asynchrone Anwendungen aller Art zu erstellen und freizugeben. Während die herkömmliche Entwicklung von Intelligenz oft komplexe Orchestrierungs-Frameworks oder Nachrichtenwarteschlangen erfordert, bietet Sailhouse eine leichtere Lösung. Es orchestriert die Zusammenarbeit zwischen mehreren Intelligenzen oder Diensten über ein ereignisgesteuertes Modell, das es Entwicklern ermöglicht, dynamische Workflows zu definieren. Egal, ob es sich um eine geplante Aufgabe handelt, die pünktlich ausgeführt werden muss, oder um einen komplexen Workflow, bei dem mehrere Schritte parallel verarbeitet werden müssen, Sailhouse bietet die entsprechenden Werkzeuge. Die Plattform unterstützt die Bereitstellung auf den wichtigsten Cloud-Diensten wie AWS, GCP, Vercel usw. und ist unabhängig von bestimmten Programmiersprachen, so dass Entwickler ihren eigenen vertrauten Technologie-Stack für die Entwicklung verwenden können.
Funktionsliste
- ZeitauslöserCron: Unterstützt die Einrichtung von zeitlich festgelegten Ereignissen und Cron-Aufgaben, die automatisch zu einem bestimmten Zeitpunkt in der Zukunft oder in einem festen Zyklus ausgelöst werden können.
- Wartende GruppenFan-out: Ermöglicht die Kombination mehrerer paralleler Aufgaben (Fan-out) und das Abwarten, bis alle Aufgaben abgeschlossen sind, bevor ein neues Ereignis ausgelöst wird (Fan-in), was sich für die Handhabung komplexer mehrstufiger Arbeitsabläufe eignet.
- Plattformübergreifende KompatibilitätSailhouse schränkt die Umgebung, in der der Code ausgeführt werden kann, nicht ein. Egal, ob es sich um die großen Cloud-Anbieter wie AWS, Azure, GCP oder Serverless-Plattformen wie Vercel, Netlify usw. handelt, es funktioniert problemlos.
- Flexibler Modus für den Empfang von EreignissenSowohl der "Push"- als auch der "Pull"-Modus werden unterstützt. Entwickler können entweder einen HTTP-Endpunkt für den Empfang von Push-Ereignissen konfigurieren oder einen Worker schreiben, der aktiv Ereignisse aus der Warteschlange abruft.
- Ereignis-FilterungFilterregeln können bei der Anmeldung festgelegt werden, um nur geeignete Ereignisse zu empfangen und die Verarbeitung irrelevanter Nachrichten zu vermeiden.
- TempolimitSie können die Geschwindigkeit, mit der Ereignisse verarbeitet werden, steuern, um zu verhindern, dass nachgelagerte Dienste aufgrund von Verkehrsüberlastung zusammenbrechen.
Hilfe verwenden
Sailhouse wurde mit der Idee entworfen, die Entwicklung von ereignisgesteuerten Anwendungen zu vereinfachen, indem es Entwicklern ermöglicht, sich auf die Geschäftslogik zu konzentrieren, ohne sich um die zugrunde liegende komplexe Infrastruktur kümmern zu müssen. Im folgenden Abschnitt wird ausführlich beschrieben, wie die Kernfunktionen von Sailhouse genutzt werden können.
Grundlegende Konzepte
Es ist wichtig, dass Sie drei grundlegende Konzepte verstehen, bevor Sie sie verwenden:
- VeranstaltungenEreignis: Ein Ereignis ist eine Aufzeichnung eines Ereignisses, das im System stattgefunden hat, wie z. B. "Benutzer hat Zahlung abgeschlossen" oder "muss eine Datei bearbeiten". Es enthält normalerweise Daten, die das Ereignis beschreiben.
- ThemenThemen: Themen sind kategorisierte Kanäle für Veranstaltungen. Produzenten posten bestimmte Arten von Ereignissen in den entsprechenden Themen. Zum Beispiel können alle Ereignisse über Code-Reviews in einem Thema namens
code-review
Thema. - AbonnementsAbonnements sind die Art und Weise, wie Verbraucher Ereignisse konsumieren. Verbraucher erhalten Ereignisse, an denen sie interessiert sind, indem sie sich für ein oder mehrere Themen anmelden.
Installation und Konfiguration
Sailhouse interagiert mit der Anwendung des Nutzers in erster Linie über sein offiziell bereitgestelltes SDK.
- Registrieren Sie sich für ein KontoZunächst müssen Sie ein Konto auf der offiziellen Sailhouse-Website registrieren und sich in die Konsole einloggen.
- Anwendungen erstellenIn der Konsole müssen Sie eine Anwendung (App) erstellen. Nach der Erstellung generiert das System einen eindeutigen API-Schlüssel (API Key), der die Anmeldeinformationen für Ihre Anwendung zur Kommunikation mit dem Sailhouse-Dienst darstellt.
- Installieren des SDKSailhouse stellt entsprechende SDKs für verschiedene Programmiersprachen zur Verfügung. z.B. JavaScript/TypeScript, die Sie mit npm oder yarn installieren können:
npm install @sailhouse/client
Grundlegende Operationen: Senden und Empfangen von Ereignissen
1. ein Ereignis veröffentlichen
Das Senden von Ereignissen ist ziemlich einfach. Zuerst initialisieren Sie den Sailhouse-Client in Ihrem Code, dann rufen Sie diepublish
Methoden.
Beispielcode (JavaScript).
import { Sailhouse } from '@sailhouse/client';
// 使用你在控制台获取的API密钥初始化客户端
const sailhouse = new Sailhouse({ apiKey: 'YOUR_API_KEY' });
async function publishReviewTask() {
await sailhouse.publish({
topic: 'security-review', // 指定要发布到的主题
data: { // 附带的数据
commitId: 'a1b2c3d4',
repo: 'my-project'
}
});
console.log('安全审查任务事件已发送。');
}
publishReviewTask();
2. empfangene Ereignisse
Sailhouse bietet zwei Möglichkeiten, Ereignisse zu empfangen: Push und Pull.
Methode 1: Push-Abonnement
Dies ist der einfachste Weg. Sie müssen lediglich einen öffentlichen HTTP(S)-API-Endpunkt (auch bekannt als Webhook) bereitstellen. Wenn ein neues Ereignis in einem von Ihnen abonnierten Thema gepostet wird, sendet Sailhouse das Ereignis sofort als HTTP-POST-Anfrage an diesen Endpunkt.
- Arbeitsablauf:
- Erstellen Sie eine API-Route in Ihrem Projekt, zum Beispiel
/api/webhooks/sailhouse
. - Erstellen Sie ein Abonnement in der Sailhouse-Konsole, wählen Sie den "Push"-Modus und geben Sie Ihre API-Endpunkt-URL ein.
- Ihr API-Endpunkt empfängt JSON-Daten in einem ähnlichen Format wie das folgende:
{ "id": "event_id_string", "topic": "security-review", "data": { "commitId": "a1b2c3d4", "repo": "my-project" } }
- Ihr serverseitiger Code empfängt die Anfrage und analysiert die
data
Felder und führen die entsprechende Geschäftslogik aus.
- Erstellen Sie eine API-Route in Ihrem Projekt, zum Beispiel
Modus 2: Pull-Abonnement
Wenn sich Ihr Dienst hinter einer Firewall befindet oder keine feste öffentliche IP hat, ist der Pull-Modus die bessere Option. Ihre Anwendung (oft Worker genannt) wird aktiv Ereignisse von Sailhouse anfordern.
- Arbeitsablauf:
- Erstellen Sie ein Abonnement in der Sailhouse-Konsole und wählen Sie den "Pull"-Modus.
- Verwenden Sie in Ihrem Worker-Code die SDK-Funktion
pull
Methode, um das Ereignis zu erhalten. Das SDK kümmert sich um Details wie langes Polling, um die Entwicklung zu vereinfachen.
Beispielcode (JavaScript Worker):: 1.1.1.1.1
import { Sailhouse } from '@sailhouse/client';
const sailhouse = new Sailhouse({ apiKey: 'YOUR_API_KEY' });
async function processEvents() {
console.log('Worker启动,开始拉取事件...');
// 循环拉取指定订阅的事件
for await (const event of sailhouse.pull({ subscription: 'security-review-worker' })) {
try {
console.log('收到事件:', event.data);
// 在这里执行你的业务逻辑
// ...
// 任务处理完成后,确认事件已被成功处理
await event.ack();
} catch (error) {
console.error('处理事件失败:', error);
// 如果处理失败,可以选择让事件重新入队
await event.nack();
}
}
}
processEvents();
Erweiterte Funktionen: Wartegruppen verwenden
Wartende Gruppen ist eine Sailhouse-Funktion zur Koordinierung mehrerer paralleler Aufgaben. Diese Funktion ist nützlich, wenn Sie sicherstellen müssen, dass eine Gruppe von Aufgaben alle abgeschlossen sind, bevor Sie mit dem nächsten Schritt fortfahren.
Ein Antrag auf Zusammenführung von Code muss beispielsweise sowohl die Sicherheitsüberprüfung als auch die Code Style Review durchlaufen. Sie können verwendensailhouse.wait
um diesen Arbeitsablauf zu orchestrieren.
Beispielcode (JavaScript).
import { Sailhouse } from '@sailhouse/client';
const sailhouse = new Sailhouse({ apiKey: 'YOUR_API_KEY' });
async function startCodeReviewWorkflow() {
// `wait`方法会做两件事:
// 1. 立即将两个审查任务事件分别发送到'security-review'和'style-review'主题。
// 2. 创建一个监听器,等待这两个任务都完成后,自动向'code-review-complete'主题发送一个新事件。
await sailhouse.wait(
'code-review-complete', // 当所有任务完成后,向此主题发送事件
[
{
topic: 'security-review', // 第一个任务
data: { commitId: 'a1b2c3d4', repo: 'my-project' },
},
{
topic: 'style-review', // 第二个任务
data: { commitId: 'a1b2c3d4', repo: 'my-project' },
},
]
);
console.log('代码审查工作流已启动。');
}
startCodeReviewWorkflow();
Auf diese Weise müssen Sie keine eigene komplexe Zustandsverwaltungslogik schreiben, um den Fortschritt von mehreren parallelen Aufgaben zu verfolgen.
Anwendungsszenario
- KI-Intelligenz Körper Workflow-Orchestrierung
Sailhouse kann als Brennpunkt für eine komplexe Aufgabe dienen, die die Zusammenarbeit mehrerer KI-Intelligenzen mit unterschiedlichen Funktionen erfordert. Eine Aufgabe zur "automatisierten Berichterstellung" kann zum Beispiel Folgendes umfassen: Datenerfassungsintelligenz, Datenanalyseintelligenz, Diagrammerstellungsintelligenz und Textschreibintelligenz, und Sailhouse kann die Wartegruppenfunktion verwenden, um sicherzustellen, dass die vorherigen Aufgaben alle abgeschlossen sind, bevor die nachfolgenden Aufgaben ausgelöst werden und schließlich alle Ergebnisse zusammengefasst werden. - Asynchrone Verarbeitung von Hintergrundaufgaben
In Webanwendungen sind bestimmte Vorgänge (z. B. das Versenden von E-Mails, die Videotranskodierung, die Erstellung von Datenberichten) sehr zeitaufwändig und sollten nicht synchron mit Benutzeranfragen ausgeführt werden. Entwickler können diese Aufgaben als Ereignisse in Sailhouse veröffentlichen, die vom Worker-Dienst abonniert und asynchron im Hintergrund verarbeitet werden. Dies kann die Reaktionsfähigkeit der Anwendung und die Benutzerfreundlichkeit erheblich verbessern. - Synchronisierung der geplanten Aufgaben und Daten
Für Aufgaben, die regelmäßig ausgeführt werden müssen, wie z. B. die Sicherung der Datenbank in den frühen Morgenstunden, die stündliche Synchronisierung von Daten aus einer Drittanbieter-API oder das Versenden von Marketing-E-Mails an Abonnenten zu einem bestimmten Datum, können Sie Sailhouse's Cron Scheduled Tasks oder Timed Events Funktion verwenden. Entwickler definieren einfach den Ausführungszeitraum und den Inhalt der Aufgabe, und Sailhouse sorgt dafür, dass die Aufgabe pünktlich ausgelöst wird.
QA
- Was versteht Sailhouse unter "Steuerungsebene"?
Im Kontext von Sailhouse bezieht sich die "Steuerungsebene" auf eine Infrastrukturebene, die verteilte Komponenten (d.h. Intelligenzen oder Dienste) orchestriert und verwaltet. Sie greift weder in Ihren Geschäftscode ein, noch ist sie ein "Rahmenwerk", dessen Regeln Sie befolgen müssen. Stattdessen bietet sie eine Reihe von Tools (z. B. Ereignis-Routing, Timer, Workflow-Orchestrierung), die es den einzelnen Diensten ermöglichen, miteinander zu kommunizieren und zusammenzuarbeiten, so dass Sie sich nur auf die Logik der einzelnen Dienste selbst konzentrieren müssen. - Welche Programmiersprachen und Cloud-Plattformen werden von Sailhouse unterstützt?
Sailhouse ist so konzipiert, dass es sprach- und plattformunabhängig ist. Im Kern interagiert es über eine HTTP-API oder ein SDK, so dass theoretisch jede Sprache, die HTTP-Anfragen senden kann, es nutzen kann. Um die Entwicklung zu vereinfachen, werden offizielle SDKs für die wichtigsten Sprachen bereitgestellt. Was die Bereitstellung betrifft, so können Ihre Intelligenzen oder Dienste überall laufen, einschließlich großer Cloud-Plattformen wie AWS, GCP, Azure, serverloser Plattformen wie Vercel, Netlify und sogar lokaler Entwicklungsmaschinen. - Was ist der Unterschied zwischen Push- und Pull-Abonnementmodellen und wie sollte ich mich entscheiden?
Im Push-Modus sendet Sailhouse aktiv Ereignisse an eine von Ihnen angegebene URL. Dieser Ansatz hat eine geringe Latenz, ist einfach zu implementieren und eignet sich für Dienste mit festen öffentlichen IPs (z. B. APIs, die auf Servern oder Serverless-Funktionen bereitgestellt werden). Im Pull-Modus fordert Ihre Anwendung aktiv Ereignisse von Sailhouse an. Dieser Ansatz ist flexibler und eignet sich für Dienste, die in einer Intranet-Umgebung laufen, für Entwicklungsumgebungen oder für Dienste, die nicht gerne öffentliche Ports preisgeben. Wenn Ihr Dienst nur über eine begrenzte Verarbeitungsleistung verfügt, können Sie im Pull-Modus auch die Rate, mit der Sie Ereignisse abrufen, anhand Ihrer eigenen Auslastung steuern.