Heim >Backend-Entwicklung >Golang >Verwenden Sie Go-Zero, um die verteilte Transaktionsverarbeitung einfach zu implementieren

Verwenden Sie Go-Zero, um die verteilte Transaktionsverarbeitung einfach zu implementieren

PHPz
PHPzOriginal
2023-06-23 09:40:152083Durchsuche

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

2. Das Framework generiert automatisch Tcc-Servicecode

$ goctl tcc demo

3. Schreiben Sie Geschäftslogikcode in das Servicehandler-Verzeichnis und implementieren Sie die Methoden „Try“, „Confirm“ und „Cancel“. Tcc-Schnittstelle.

func (s

Service) Try(ctx context.Context, req logic.OrderLogic) Fehler {

//执行业务逻辑

}

func (s

Service) Confirm(ctx context.Context, req logic.OrderLogic) Fehler {

//确认操作

}

func (s

Service) Cancel(ctx context.Context, req logic.OrderLogic) Fehler {

//取消操作

}

4. Registrieren Sie den Tcc-Dienst im Framework.

//Tcc-Dienstdemo registrieren

service.RegisterTccCompensateDemo(zrpc.MustNewClient(zrpc.RpcClientConf{

Name:       conf.ReorderService.Service.Name(),
Balancer:   conf.ReorderService.Service.Balancer,
Direct:     true,
Timeout:    time.Second,
Mode:       zrpc.BROADCAST,

}))

Durch die oben genannten Schritte kann die Implementierung des Tcc-Kompensationsmechanismus für verteilte Transaktionen abgeschlossen werden.

Die Verwendung von Go-Zero zur einfachen Implementierung der verteilten Transaktionsverarbeitung kann nicht nur die Wartbarkeit und Skalierbarkeit des Programms verbessern, sondern auch die Entwicklungskosten für Entwickler und die Schwierigkeiten bei der Systemwartung erheblich reduzieren. Als eines der beliebtesten Frameworks für die verteilte Anwendungsentwicklung in der Go-Sprache kann Go-Zero ein stabiles Entwicklungsframework und eine umfangreiche Entwicklungsumgebung bereitstellen und ist für immer mehr Entwickler und Unternehmen zur ersten Wahl geworden.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn