Mit der Entwicklung des Internets und der Digitalisierung steigt der Bedarf an verteilten Anwendungen, und die verteilte Transaktionsverarbeitung ist zu einem unvermeidlichen Problem geworden. Viele Entwickler verlassen sich beim Umgang mit verteilten Transaktionen auf ihre eigene Erfahrung und schreiben Code manuell. Allerdings birgt dieser Ansatz große Risiken und Komplexität und ist schwierig zu pflegen und zu erweitern. Das transaktionszentrierte Framework Go-Zero kann Entwicklern eine einfache und benutzerfreundliche Lösung bieten.
go-zero ist ein verteiltes Anwendungsentwicklungsframework, das in der Golang-Sprache geschrieben ist und das höchste Niveau der aktuellen Go-Sprachtechnologie darstellt. In Bezug auf die zugrunde liegende Architektur wird grpc als Protokoll- und Dateninteraktions-Framework für die Entwicklung verwendet, und auf der Ebene der Geschäftslogik wird ein einheitliches Microservice-Modell zum Erstellen von Anwendungen verwendet. Da das Designkonzept von go-zero leichtgewichtig und benutzerfreundlich ist und in einer Vielzahl von Szenarien gut funktioniert, wird es häufig in industriellen Bereichen eingesetzt.
Im Hinblick auf die verteilte Transaktionsverarbeitung verwendet Go-Zero einen Kompensationsmechanismus, um Transaktionskonsistenz und -zuverlässigkeit zu erreichen. Der sogenannte Kompensationsmechanismus bedeutet, dass einige entsprechende Kompensationsvorgänge durchgeführt werden müssen, wenn ein Dienst während eines Vorgangs nicht ausgeführt werden kann, um die Konsistenz und Wiederherstellbarkeit des Vorgangs sicherzustellen. Nach erfolgreicher Auftragszahlung ist beispielsweise der Bestandsabzugsvorgang erforderlich. Wenn der Bestandsabzug fehlschlägt, muss der Auftragszahlungsvorgang zurückgesetzt und gleichzeitig der Bestand ausgeglichen werden.
Bei der Implementierung verteilter Transaktionen gibt es zwei Hauptmethoden für Kompensationsmechanismen, die bei Go-Zero beteiligt sind, nämlich die TCC-Kompensation und die SAGA-Kompensation. Zu den TCC-Vergütungen gehört die Implementierung des dreistufigen Übermittlungsprotokolls, d. Die SAGA-Vergütung ist ein ereignisgesteuertes Vergütungsmodell, das heißt, nachfolgende Vorgänge werden durch das Senden von Ereignissen während der Geschäftsausführung ausgeführt.
Nehmen Sie die TCC-Vergütung als Beispiel:
1 Das Unternehmen initiiert einen Try-Vorgang, dh führt den entsprechenden Geschäftsvorgang aus.
2. Nachdem der Try-Vorgang erfolgreich ausgeführt wurde, initiiert das Unternehmen den Bestätigungsvorgang, dh das Operationsergebnis wird übermittelt.
3. Wenn der Bestätigungsvorgang erfolgreich ist, endet der Geschäftsprozess.
4. Wenn der Bestätigungsvorgang fehlschlägt, leitet das Unternehmen den Abbruchvorgang ein, d. h. der Vorgang wird widerrufen.
Durch dieses dreiphasige Übermittlungsmodell kann die Datenkonsistenz zwischen verschiedenen Diensten in einem verteilten System sichergestellt und so das Problem verteilter Transaktionen gelöst werden.
Die Implementierung des TCC-Vergütungsmechanismus in Go-Zero erfordert die Verwendung eines zentralisierten Frameworks, d. h. der Framework-Komponenten, die mit Go-Zero geliefert werden. In der Go-Zero-Framework-Komponente besteht die TCC-Transaktion aus drei Teilen: den Standardmethoden „Try“, „Confirm“ und „Cancel“, und diese Methoden werden einheitlich über das Registrierungscenter verwaltet. Die spezifische Implementierungsmethode lautet wie folgt:
1. Definieren Sie die Geschäftsschnittstelle und erben Sie die Schnittstelle „go-zero/gateway/pkg/tcc.Tcc“.
type DemoTcc-Schnittstelle {
tcc.Tcc Try(ctx context.Context, req *logic.OrderLogic) error Confirm(ctx context.Context, req *logic.OrderLogic) error Cancel(ctx context.Context, req *logic.OrderLogic) error
Service) Try(ctx context.Context, req logic.OrderLogic) Fehler {
//执行业务逻辑
Service) Confirm(ctx context.Context, req logic.OrderLogic) Fehler {
//确认操作
Service) Cancel(ctx context.Context, req logic.OrderLogic) Fehler {
//取消操作
service.RegisterTccCompensateDemo(zrpc.MustNewClient(zrpc.RpcClientConf{
Name: conf.ReorderService.Service.Name(), Balancer: conf.ReorderService.Service.Balancer, Direct: true, Timeout: time.Second, Mode: zrpc.BROADCAST,
Das obige ist der detaillierte Inhalt vonVerwenden Sie Go-Zero, um die verteilte Transaktionsverarbeitung einfach zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!