ホームページ システムチュートリアル Linux 信頼性の高いメッセージング サービスの実装を検討する

信頼性の高いメッセージング サービスの実装を検討する

Jan 09, 2024 pm 07:49 PM
linux レッドハット

###導入### 分散トランザクションは、多くの場合、サービス指向の問題点です。多くのシナリオでは、ビジネスを通じて分散トランザクションを回避していますが、分散トランザクションに依存する必要があるシナリオもまだいくつかあります。分散トランザクションの処理方法について話しましょう1 一般的なソリューション
分散トランザクションの問題を解決するには多くの方法があり、インターネット上にはさまざまな解決策を提供するブログが多数あります。まとめると、大きく次の 2 つの方法に分けられます。 1. 2 フェーズ コミット (略して 2PC): これは一般的な分散トランザクション ソリューションです。この方法では、コーディネーター ノードは参加者ノードの操作を調整し、コミットまたはロールバック時にすべてのノードが合意に達することを保証します。 厳格な分散トランザクションと 2 フェーズ コミットは、強整合性を実現するメカニズムです。 厳格な分散トランザクションとは、分散システム内の複数の参加ノードによって実行される一連の操作を指し、アトミック性、つまりすべてが成功するかすべてが失敗するかを保証する必要があります。このメカニズムでは、すべての参加ノードがトランザクション実行中に同じプロトコルに従い、コーディネーター ノードのガイダンスを通じてトランザクション

を実装する必要があります。

柔軟な分散トランザクションは、分散システムでトランザクションを処理する方法です。ベストエフォート型のコミット戦略が採用されています。つまり、トランザクションの送信を完了するために最善を尽くしますが、一部の操作の失敗も許容されます。柔軟な分散トランザクションでは、通常、トランザクション管理の実装に TCC (試行-確認-キャンセル) モードが使用されます。 TCC モデルは、トランザクションを試行、確認、キャンセルの 3 つのフェーズに分解します。

まず、分散トランザクションの前提条件の保証を解決します。メッセージの繰り返しの送信がビジネスに影響を与えるのを防ぐために、インターフェースは冪等である必要があります。

2 信頼性の高いメッセージ システムの設計 (これは良い感じで比較的シンプルなので共有します)

上に示したとおり

実行の開始例: 信頼性の高いメッセージング サービスの実装を検討する ###試す{### if(prepare()) { //送信前フェーズ

doService(); //ビジネスロジックを実行

updateMsgStatus();//ステータスを確認するためにメッセージを更新

}

}

1 メッセージの事前送信、試行フェーズ。メッセージの事前送信が失敗した場合、ビジネスはまだ実行されていないため、システム A と B は依然として一貫性があり、処理は必要ありません。
これはわかりやすいですね

2 現在送信されたメッセージは成功し、ビジネス ロジックの実行が開始されます。実行が成功すると、更新された送信前メッセージのステータスが送信確認に変更されます。このときビジネスロジックの実行に失敗すると、送信済みのメッセージは新たなステータスに更新されず、この時点でメッセージ確認システムが動作し、業務システム1に戻ってメッセージのステータスを確認することになります。業務実行が失敗したことが判明した場合は、送信前ステータスを失敗ステータスに更新します。
###3 この時点でビジネスの実行が成功し、送信を確認するためにメッセージが更新されていれば、問題はありません。メッセージの更新が失敗した場合でも、メッセージ確認システムはステータスをチェックし、メッセージが削除されたか送信が確認されたかを更新します。

4 メッセージ送信者は

を消費し始めます

1> たとえば、消費が失敗して不整合が発生した場合、メッセージ回復システムはメッセージのステータスを検出し、メッセージを再送信します。

2>ビジネスの実行が失敗した場合、メッセージは確認されません。メッセージ回復システムは引き続きメッセージのステータスを検出し、メッセージを再送信します

3>アスクが失敗した場合は、上記のロジックで再送しますが、もちろん再送回数には制限があり、毎回送信できるわけではありません。最大回数を超えた場合は再送を行ってください。 、デッドレターキューに入り、手動介入を待ちます。

4> 質問が成功すると、メッセージは正常に消費されます。これは完璧であり、信頼性の高いメッセージ サービスの問題を解決します。

3 頑張って提出してください

これは比較的単純です。リアルタイム パフォーマンスが低い一部のシナリオでは、失敗したメッセージを繰り返し送信して、メッセージのプッシュが確実に成功するようにします。

たとえば、トランザクションが完了すると、サードパーティのメッセージがプッシュされます。現時点では、努力の提出

を使用できます。

この記事はオープンソースチャイナコミュニティ[http://www.oschina.net]からの転載です。

以上が信頼性の高いメッセージング サービスの実装を検討するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

Docker環境にPECLを使用して拡張機能をインストールするときにエラーが発生するのはなぜですか?それを解決する方法は? Docker環境にPECLを使用して拡張機能をインストールするときにエラーが発生するのはなぜですか?それを解決する方法は? Apr 01, 2025 pm 03:06 PM

エラーの原因とソリューションPECLを使用してDocker環境に拡張機能をインストールする場合、Docker環境を使用するときに、いくつかの頭痛に遭遇します...

ランプアーキテクチャの下でnode.jsまたはPythonサービスを効率的に統合する方法は? ランプアーキテクチャの下でnode.jsまたはPythonサービスを効率的に統合する方法は? Apr 01, 2025 pm 02:48 PM

多くのウェブサイト開発者は、ランプアーキテクチャの下でnode.jsまたはPythonサービスを統合する問題に直面しています:既存のランプ(Linux Apache MySQL PHP)アーキテクチャWebサイトのニーズ...

APSChedulerタイミングタスクをMACOSのサービスとして構成する方法は? APSChedulerタイミングタスクをMACOSのサービスとして構成する方法は? Apr 01, 2025 pm 06:09 PM

nginと同様に、APSChedulerタイミングタスクをサービスとして構成する場合、APSChedulerタイミングタスクをMACOSプラットフォームでサービスとして構成します...

マルチスレッドをC言語で実装する4つの方法 マルチスレッドをC言語で実装する4つの方法 Apr 03, 2025 pm 03:00 PM

言語のマルチスレッドは、プログラムの効率を大幅に改善できます。 C言語でマルチスレッドを実装する4つの主な方法があります。独立したプロセスを作成します。独立して実行される複数のプロセスを作成します。各プロセスには独自のメモリスペースがあります。擬似マルチスレッド:同じメモリ空間を共有して交互に実行するプロセスで複数の実行ストリームを作成します。マルチスレッドライブラリ:pthreadsなどのマルチスレッドライブラリを使用して、スレッドを作成および管理し、リッチスレッド操作機能を提供します。 Coroutine:タスクを小さなサブタスクに分割し、順番に実行する軽量のマルチスレッド実装。

PythonインタープリターはLinuxシステムで削除できますか? PythonインタープリターはLinuxシステムで削除できますか? Apr 02, 2025 am 07:00 AM

Linux Systemsに付属するPythonインタープリターを削除する問題に関して、多くのLinuxディストリビューションは、インストール時にPythonインタープリターをプリインストールし、パッケージマネージャーを使用しません...

web.xmlを開く方法 web.xmlを開く方法 Apr 03, 2025 am 06:51 AM

web.xmlファイルを開くには、次の方法を使用できます。テキストエディター(メモ帳やテキストエディットなど)を使用して、統合開発環境(EclipseやNetBeansなど)を使用してコマンドを編集できます(Windows:Notepad web.xml; Mac/Linux:Open -A Textedit Web.xml)

See all articles