ホームページ >バックエンド開発 >Golang >go-zero を使用して分散トランザクション処理を簡単に実装する

go-zero を使用して分散トランザクション処理を簡単に実装する

PHPz
PHPzオリジナル
2023-06-23 09:40:152083ブラウズ

インターネットの発展とデジタル化に伴い、分散アプリケーションの需要がますます高まっており、分散トランザクション処理は避けられない問題となっています。多くの開発者は、分散トランザクションを扱う際に自分の経験に頼って手動でコードを作成しますが、このアプローチには大きなリスクと複雑さが伴い、維持や拡張が困難です。トランザクション中心のフレームワーク go-zero は、開発者にシンプルで使いやすいソリューションを提供します。

go-zero は、golang 言語で書かれた分散アプリケーション開発フレームワークであり、現在の go 言語テクノロジーの最高レベルを表します。基盤となるアーキテクチャに関しては、開発用のプロトコルおよびデータ対話フレームワークとして grpc を使用し、ビジネス ロジック レベルでは、統合されたマイクロサービス モデルを使用してアプリケーションを構築します。 go-zeroの設計コンセプトは軽量で使いやすく、様々なシーンで優れたパフォーマンスを発揮するため、産業分野での使用率が高いです。

分散トランザクション処理に関して、go-zero は補償メカニズムを使用してトランザクションの一貫性と信頼性を実現します。いわゆる補償メカニズムとは、操作中にサービスの実行に失敗した場合、操作の一貫性と回復可能性を確保するために、対応するいくつかの補償操作を実行する必要があることを意味します。たとえば、注文の支払いが成功した後、在庫の差し引き操作が行われますが、在庫の差し引きが失敗した場合は、注文の支払い操作をロールバックし、同時に在庫を補正する必要があります。

分散トランザクションを実装する場合、ゴーゼロに関係する補償メカニズムには、TCC 補償と SAGA 補償という 2 つの主な方法があります。このうちTCC補償は、「Try-confirm-Cancel」という3段階のサブミッションプロトコルを実装しており、業務遂行時に積極的な確認・キャンセル操作を行うことを原則としている。 SAGA 補償はイベント駆動型の補償モデルです。つまり、ビジネス実行中にイベントを送信することによって後続の操作が実行されます。

TCC 補償を例にとると、その一般的な実装プロセスは次のとおりです:

1. ビジネスは Try オペレーションを開始します、つまり、対応するビジネス オペレーションを実行します。

2. Try 操作が正常に実行された後、企業は confirm 操作を開始します、つまり、操作結果を送信します。

3. 確認操作が成功すると、ビジネス プロセスは終了します。

4. 確認操作が失敗した場合、ビジネスはキャンセル操作を開始します。つまり、操作は取り消されます。

この 3 フェーズの送信モデルを通じて、分散システム内の異なるサービス間のデータの一貫性が保証され、それによって分散トランザクションの問題が解決されます。

go-zero に TCC 補償メカニズムを実装するには、一元化されたフレームワーク、つまり go-zero 独自のフレームワーク コンポーネントを使用する必要があります。 go-zero フレームワーク コンポーネントでは、TCC トランザクションは標準の Try、confirm、および Cancel メソッドの 3 つの部分で構成されており、これらのメソッドは登録センターを通じて統一的に管理されます。具体的な実装方法は以下の通りです:

1. ビジネスインターフェースを定義し、「go-zero/gateway/pkg/tcc.Tcc」インターフェースを継承します。

type DemoTcc インターフェイス {

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. フレームワークは自動的に Tcc サービス コードを生成します

$ goctl tcc Demon

3ビジネス ロジック コードを servicehandler ディレクトリに記述し、Tcc インターフェイスの Try、confirm、および Cancel メソッドを実装します。

func (s Service) Try(ctx context.Context, req logic.OrderLogic) エラー {

//执行业务逻辑

}

func (s Service) 確認(ctx context.Context, req logic.OrderLogic) エラー {

//确认操作

}

func (s Service) Cancel(ctx context.Context, req logic.OrderLogic) エラー {

//取消操作

}

4. Tcc サービスをフレームワークに登録します。

//Tcc サービス デモの登録
service.RegisterTccCompensateDemo(zrpc.MustNewClient(zrpc.RpcClientConf{

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

}))

上記の手順を完了すると、次のことが可能になります。分散トランザクション用の Tcc 補償メカニズムの実装が完了しました。

go-zeroを利用して分散トランザクション処理を簡単に実装することで、プログラムの保守性や拡張性が向上するだけでなく、開発者の開発コストやシステム保守の難易度も大幅に軽減されます。最も人気のある Go 言語分散アプリケーション開発フレームワークの 1 つとして、go-zero は安定した開発フレームワークと充実した開発環境を提供することができ、ますます多くの開発者や企業の最初の選択肢となっています。

以上がgo-zero を使用して分散トランザクション処理を簡単に実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。