谈谈分布式事务
只要牵涉到分布式系统,无论如何都会碰见分布式事务,当然你可以合理的拆分系统,规划表和库的结构,但是这只是减少分布式事务出现的次数,比方说你原来系统中有5处地方会有分布式事务,现在一优化可能只有3处地方有了,但是你要一点也没有,个人认为不大可
只要牵涉到分布式系统,无论如何都会碰见分布式事务,当然你可以合理的拆分系统,规划表和库的结构,但是这只是减少分布式事务出现的次数,比方说你原来系统中有5处地方会有分布式事务,现在一优化可能只有3处地方有了,但是你要一点也没有,个人认为不大可能
接下来谈谈什么情况下会产生分布式事务?
一: 同数据库,不同web容器
由上图可知,我们的订单系统和库存系统连着相同的数据源,该数据源里面也只有一个database,里面存放着订单表和库存表。因为订单系统和库存系统是两个不同的系统,部署在了两台服务器上面,他们之间通过接口进行调用,所以虽然它们两张表在同一个数据库里面,但是我们无法进行事务操控。从业务上来讲,当我们下单的时候,商品的库存一定要扣除,不能库存扣了,订单没生成,或者说订单生成了,库存没扣,这样不就乱套了么?所以扣库存和生成订单这两步操作,必须要么全做,要么全不做,这就牵涉到了分布式事务。
二 :不同数据源,相同web容器
这次我们把下单操作和扣库存的操作写在了同一个系统里面并且部署在了一台服务器上面,这个系统连接着两个数据源,分别是订单数据库和库存数据库。显然,虽说我们吧业务逻辑写在一个系统里面了,但是你连着两个数据源,所以又出现了分布式事务。
三不同数据库,不同web容器
第三种情况有点类似于,第一和第二种的结合。每个系统操纵自己的数据库,系统之间通过接口调用,很明显必然又要出现分布式事务
四 单表分片的情况
有的时候一张表的数量实在是太大了,而且增速过猛,那么无可奈何,只能把这张表拆分成好几份存放到不同的数据库服务器上面,有人会说这为什么也会产生分布式事务呢?根据上面那张图我举个例子,假如库存表分片1存的是上海仓库的商品库存信息,库存表分片2存的是北京仓库的商品库存信息,现在我要进行调货操作,从上海仓库调走500台iPhone手机到北京仓库,这个时候我们就要对分片1进行扣减500的操作,而对分片2进行增加500的操作,那么我们这个操作可以允许失败么?我分片1(上海仓库)的500台扣减掉了,但是分片2(北京仓库)没有增加成功?这显然是不可以的,所以这牵涉到了分布式事务,当然我这里只是举一个例子,因为你牵涉到了对同一张表的两条以上的记录进行修改操作,所以引出了分布式事务。
上面我们聊了什么样的情况下会出现分布式事务,接下来说下解决办法
一:jta(二阶段提交)
实际上jta严格来说不能解决分布式事务,比方说我上面举的第一种情况,我是单数据源,不同web容器,你用jta怎么解决?jta只能解决多数据源下的事务,而且对系统的吞吐量影响极大。
二:补偿法
这个是目前最常用的方法
首先我们需要把我们的业务划分到最细,让每个业务成为原子业务,比方说我们有一个业务现在可以划分成3个原子业务,业务A,业务B,业务C。这些业务操作可以是你直接操作数据库,也可以是调用别的系统的接口
假设我们现在业务A业务B都执行成功,但是业务C这里失败了。那么我们有两条路可以走。
第一条:把业务A和业务B回滚,也就是撤销业务A和业务B。
第二条:继续执行业务C直到成功为止
这两种方向我们也叫做正推和逆推,实际上第二种是我们常用的,如果你逆推的话把前面做的都撤销掉了,我感觉意义不大,当你产生补偿的行为的时候,我们的主流程实际上已经走通了,比方说你下单操作,用户点完下单之后,你告诉它你已经成功下单,好了接下来和用户没关系了,这个就叫主流程结束了。但是你的下单流程里面包含了库存的调配,比方说我在上海下的订单,要去北京库房调货,那么牵涉到分布式事务(可以参照分布式事务的第四种情况),好了现在调北京库房调用失败,那么我开始逆推把订单给删了,你觉得合适么?还是说我继续正推,直到我调用成功为止,用户那边我只要在订单上显示正在配货中就可以了,反正你要把订单都给删了,那会是一个很不好的体验

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









General Matrix Multiplication (GEMM) は、多くのアプリケーションやアルゴリズムの重要な部分であり、コンピューター ハードウェアのパフォーマンスを評価するための重要な指標の 1 つでもあります。 GEMM の実装に関する徹底的な調査と最適化は、ハイ パフォーマンス コンピューティングとソフトウェア システムとハードウェア システムの関係をより深く理解するのに役立ちます。コンピューター サイエンスでは、GEMM を効果的に最適化すると、計算速度が向上し、リソースが節約されます。これは、コンピューター システムの全体的なパフォーマンスを向上させるために非常に重要です。 GEMM の動作原理と最適化方法を深く理解することは、最新のコンピューティング ハードウェアの可能性をより有効に活用し、さまざまな複雑なコンピューティング タスクに対してより効率的なソリューションを提供するのに役立ちます。 GEMMのパフォーマンスを最適化することで

7月29日、AITO Wenjieの40万台目の新車のロールオフ式典に、ファーウェイの常務取締役、ターミナルBG会長、スマートカーソリューションBU会長のYu Chengdong氏が出席し、スピーチを行い、Wenjieシリーズモデルの発売を発表した。 8月にHuawei Qiankun ADS 3.0バージョンが発売され、8月から9月にかけて順次アップグレードが行われる予定です。 8月6日に発売されるXiangjie S9には、ファーウェイのADS3.0インテリジェント運転システムが初搭載される。 LiDARの支援により、Huawei Qiankun ADS3.0バージョンはインテリジェント運転機能を大幅に向上させ、エンドツーエンドの統合機能を備え、GOD(一般障害物識別)/PDP(予測)の新しいエンドツーエンドアーキテクチャを採用します。意思決定と制御)、駐車スペースから駐車スペースまでのスマート運転のNCA機能の提供、CAS3.0のアップグレード

Apple 16 システムの最適なバージョンは iOS16.1.4 です。iOS16 システムの最適なバージョンは人によって異なります。日常の使用体験における追加と改善も多くのユーザーから賞賛されています。 Apple 16 システムの最適なバージョンはどれですか? 回答: iOS16.1.4 iOS 16 システムの最適なバージョンは人によって異なる場合があります。公開情報によると、2022 年にリリースされた iOS16 は非常に安定していてパフォーマンスの高いバージョンであると考えられており、ユーザーはその全体的なエクスペリエンスに非常に満足しています。また、iOS16では新機能の追加や日常の使用感の向上も多くのユーザーからご好評をいただいております。特に最新のバッテリー寿命、信号性能、加熱制御に関して、ユーザーからのフィードバックは比較的好評です。ただし、iPhone14を考慮すると、

4月11日、ファーウェイはHarmonyOS 4.2 100台のアップグレード計画を初めて正式に発表し、今回は携帯電話、タブレット、時計、ヘッドフォン、スマートスクリーンなどのデバイスを含む180台以上のデバイスがアップグレードに参加する予定だ。先月、HarmonyOS4.2 100台アップグレード計画の着実な進捗に伴い、Huawei Pocket2、Huawei MateX5シリーズ、nova12シリーズ、Huawei Puraシリーズなどの多くの人気モデルもアップグレードと適応を開始しました。 HarmonyOS によってもたらされる共通の、そして多くの場合新しい体験を楽しむことができる Huawei モデルのユーザーが増えることになります。ユーザーのフィードバックから判断すると、HarmonyOS4.2にアップグレードした後、Huawei Mate60シリーズモデルのエクスペリエンスがあらゆる面で向上しました。特にファーウェイM

Linux と Windows は 2 つの一般的なオペレーティング システムで、それぞれオープン ソースの Linux システムと商用 Windows システムを表します。どちらのオペレーティング システムにも、ユーザーがオペレーティング システムと対話するためのコマンド ライン インターフェイスがあります。 Linux システムでは、ユーザーはシェル コマンド ラインを使用しますが、Windows システムでは、cmd コマンド ラインを使用します。 Linux システムのシェル コマンド ラインは、ほぼすべてのシステム管理タスクを完了できる非常に強力なツールです。

Oracle データベースでのシステム日付の変更方法の詳細説明 Oracle データベースでのシステム日付の変更方法は、主に NLS_DATE_FORMAT パラメータの変更と SYSDATE 関数の使用です。この記事では、読者が Oracle データベースのシステム日付を変更する操作をよりよく理解し、習得できるように、これら 2 つの方法とその具体的なコード例を詳しく紹介します。 1. NLS_DATE_FORMAT パラメータメソッドの変更 NLS_DATE_FORMAT は Oracle データです

MySQL トランザクション処理: 自動送信と手動送信の違い。MySQL データベースでは、トランザクションは一連の SQL ステートメントです。すべての実行が成功するか、すべての実行が失敗するかのいずれかで、データの一貫性と整合性が保証されます。 MySQL では、トランザクションは自動送信と手動送信に分けられ、その違いはトランザクション送信のタイミングとトランザクションの制御範囲にあります。以下では、自動送信と手動送信の違いを詳しく紹介し、具体的なコード例を示して説明します。 1. MySQL が表示されない場合は自動的に送信する

システム フォントはどのフォルダーにありますか? 現代のコンピューター システムでは、フォントは重要な役割を果たし、読書体験やテキスト表現の美しさに影響を与えます。パーソナライズやカスタマイズに熱心な一部のユーザーにとって、システム フォントの保存場所を理解することが特に重要です。では、システムフォントはどのフォルダーに保存されているのでしょうか?この記事では、それらを皆さんに一つずつ明らかにしていきます。 Windows オペレーティング システムでは、システム フォントは「Fonts」というフォルダーに保存されます。このフォルダーは、デフォルトでは Win C ドライブにあります。
