Rumah  >  Artikel  >  Java  >  Urus niaga yang diedarkan: skim ketekalan akhirnya mesej yang boleh dipercayai

Urus niaga yang diedarkan: skim ketekalan akhirnya mesej yang boleh dipercayai

Java后端技术全栈
Java后端技术全栈ke hadapan
2023-08-24 15:27:42678semak imbas


Semua orang mesti biasa dengan hal ehwal, seperti ACID, tetapi untuk Kandungan transaksi yang diedarkan, mari kita bincangkannya dahuluACID, dan kemudian memperkenalkan apa itu Transaksi teragih, dan akhirnya fokus pada Berita yang boleh dipercayaiPenyelesaian transaksi yang diedarkan. ACID,但是为了后续的分布式事务的内容,我们先来聊聊 ACID,然后再介绍下什么是分布式事务,最后着重讲下基于可靠消息的分布式事务解决方案。

什么是事务

严格意义上的事务应该是具备原子性、一致性、隔离性和持久性,简称 ACID

Apakah itu transaksi

Transaksi dalam erti kata yang ketat harus mempunyai atomicity, konsistensi, pengasingan dan ketahanan, dirujuk sebagai ACID. 🎜
  1. Atomicity ( Atomicity), yang boleh difahami kerana semua operasi dalam transaksi sama ada dilaksanakan atau tidak dilaksanakan.
  2. 原子性(Atomicity),可以理解为一个事务内的所有操作要么都执行,要么都不执行。
  • 一致性(Consistency),可以理解为数据是满足完整性约束的,也就是不会存在中间状态的数据,比如你钱包有100,我钱包有100,你给我打50块,此时你钱包的钱应该是50,我钱包的钱应该是150,不会存在我钱加了,你钱没扣的中间状态。
  • 隔离性(Isolation),指的是多个事务并发执行的时候不会互相干扰,即一个事务内部的数据对于其他事务来说是隔离的。
  • 持久性(Durability),指的是一个事务完成了之后数据就被永远保存下来,之后的其他操作或故障都不会对事务的结果产生影响。
  • 而通俗意义上事务就是为了使得一些更新操作要么都成功,要么都失败

    什么是分布式事务

    分布式事务顾名思义就是要在分布式系统中实现事务,它其实是由多个本地事务

    Ketekalan boleh difahami kerana data memenuhi kekangan integriti, iaitu, tidak akan ada data dalam keadaan pertengahan. Contohnya, dompet anda ada 100, dompet saya ada 100, anda berikan kepada saya Bayar 50 yuan Pada masa ini, wang dalam dompet anda sepatutnya 50, dan wang dalam dompet saya hendaklah 150. Tidak akan ada keadaan pertengahan di mana wang saya ditambah dan wang anda tidak ditolak. 🎜🎜Pengasingan merujuk kepada fakta bahawa berbilang transaksi tidak akan mengganggu satu sama lain apabila dilaksanakan serentak, iaitu, data dalam transaksi diasingkan daripada transaksi lain. 🎜🎜Durability (Durability) bermaksud bahawa selepas transaksi selesai, data disimpan selama-lamanya dan operasi atau kegagalan lain yang berikutnya tidak akan menjejaskan hasil transaksi.

    Dalam erti kata yang popular, urus niaga adalah untuk membolehkan beberapa operasi kemas kiniSama ada kedua-duanya berjaya atau kedua-duanya gagal. 🎜

    Apakah transaksi teragih

    Transaksi teragih Seperti namanya, ia adalah untuk melaksanakan transaksi dalam sistem yang diedarkan Ia sebenarnya terdiri daripada berbilang Transaksi setempat digabungkan. 🎜

    Sesuatu operasi besar terdiri daripada operasi kecil yang berbeza, yang diedarkan pada pelayan yang berbeza Transaksi yang diedarkan perlu memastikan bahawa operasi kecil ini sama ada semuanya berjaya atau semuanya gagal. Pada asasnya, Transaksi teragih adalah untuk memastikan bahawa <code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background -warna: rgba(27, 31, 35, 0.05);font-family: " operator mono consolas monaco menlo monospace break-all rgb><code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin- untuk pangkalan data berbeza left: 2px ;warna latar belakang: rgba(27, 31, 35, 0.05);keluarga fon: " operator mono consolas monaco menlo monospace break-all rgb>Ketekalan data. 分布式事务需要保证这些小操作要么全部成功,要么全部失败。从本质上来说,分布式事务就是为了保证不同数据库数据一致性

    常见的分布式事务的解决方案有以下几种:2PC,3PC,TCC,本地消息表、可靠消息最终一致性、尽最大努力通知

    今天我们就着重讲讲可靠消息最终一致性的解决方案

    什么是可靠消息最终一致性方案

    可靠消息最终一致性方案是指当事务发起方执行完成本地事务后发出消息到消息中间件事务参与方(消息消费者)一定能够接收到消息并处理事务成功,此方案强调的是只要消息发给事务参与方,则最终事务要达到一致

    Penyelesaian transaksi teragih biasa termasuk yang berikut:2PC, 3PC, TCC, jadual mesej setempat, ketekalan akhir mesej yang boleh dipercayai, pemberitahuan usaha terbaik, dsb.🎜🎜Hari ini kita akan menumpukan pada Penyelesaian untuk konsistensi akhirnya mesej yang boleh dipercayai 🎜

    Apakah skema ketekalan akhirnya mesej yang boleh dipercayai

    🎜 Skim ketekalan akhir mesej yang boleh dipercayai bermakna apabila pemula transaksi melengkapkan transaksi setempat, ia menghantar mesej ke Mesej middleware, Peserta transaksi (pengguna mesej) mesti boleh menerima mesej dan memproses Transaksi Kejayaan, penyelesaian ini menekankan . 🎜

    Apakah masalah dengan kaedah ini?

    Penyelesaian ini dilaksanakan melalui perisian tengah mesej Pemula transaksi (pengeluar mesej) menghantar mesej kepada perisian tengah mesej, dan peserta urus niaga menerima mesej daripada perisian tengah mesej Disebabkan oleh ketidakpastian komunikasi rangkaian, pengedaran akan berlaku Taip masalah transaksi, seperti yang ditunjukkan di bawah:

    Urus niaga yang diedarkan: skim ketekalan akhirnya mesej yang boleh dipercayai

    1. Transaksi tempatan dan masalah atomicity mesej

    Urus niaga yang diedarkan: skim ketekalan akhirnya mesej yang boleh dipercayai

    Seperti yang ditunjukkan dalam gambar di atas dalam kotak bertitik, terdapat situasi berikut:

    ) Transaksi tempatan Jika penyerahan gagal, mesej tidak dihantar.
    2) Urus niaga tempatan berjaya, penghantaran mesej gagal, dan transaksi tempatan ditarik balik.

    3) Mesej tempatan berjaya, mesej tamat masa, transaksi tempatan digulung semula dan akhirnya mesej gagal.
    4) Mesej tempatan berjaya, mesej tamat tempoh, transaksi tempatan digulung semula dan akhirnya mesej berjaya.


    Ringkasnya, terdapat Situasi keempat mengakibatkan transaksi tempatan yang tidak konsisten dengan transaksi peserta mesej.

      第四种情况,造成本地事务,与消息参与方的事务不一致。

      1. 事务参与方接收消息的可靠性。

      消息中间件与事务参与方要确保能够成功消费到消息。

      1. 消息重复消费

      注意事务参与方的接口幂等性Kebolehpercayaan mesej yang diterima oleh peserta transaksi.

      🎜🎜🎜🎜Mesej middleware dengan Peserta transaksi mesti memastikan bahawa Berjaya menggunakan mesej itu. 🎜
        🎜🎜Penggunaan mesej berulang🎜🎜🎜🎜🎜Perhatikan Idepot antara muka masalah. Peserta mesej mungkin telah berjaya menggunakannya. Disebabkan masalah rangkaian, middleware mesej percaya bahawa mesej belum digunakan dan masalah itu berlaku selepas memulakan percubaan semula. 🎜

        Solution

        1. Local Message Table

        Kunci ke Jadual Mesej Tempatan ialah terdapat jadual rekod tempatan yang menyimpan log mesej. rekod log untuk memastikan Mesej boleh dihantar. Proses khusus adalah seperti berikut:

        Urus niaga yang diedarkan: skim ketekalan akhirnya mesej yang boleh dipercayai

        Proses dalam gambar di atas:

        1) Transaksi tempatan pemula transaksi berjaya dilaksanakan dan log mesej direkodkan dalam jadual mesej tempatan.
        2) Mulakan tugas berjadual dan imbas jadual mesej setempat secara kitaran.
        3) Apabila tugas yang dijadualkan mengimbas mesej, ia menghantar mesej ke perisian tengah mesej.
        4) Perisian tengah mesej menerima mesej dan berjaya mengembalikan mesej untuk menghantar pemberitahuan yang berjaya kepada pemula transaksi.
        5) Pemula transaksi memadamkan mesej log selepas menerima mesej dan menghantarnya dengan jayanya.
        6) Peserta transaksi melanggan mesej dan menggunakan mesej.
        7) Peserta transaksi mengendalikan hal ehwal tempatan.
        8) Transaksi tempatan berjaya diproses dan ack yang berjaya dihantar ke middleware mesej.

        Perhatian:
        Peserta transaksi menjamin mati pucuk antara muka. 事务参与方保证接口幂等性

        1. RocketMq事务消息方案

        Apache RocketMQ 4.3之后的版本正式支持事务消息,为分布式事务实现提供了便利性支持。在RocketMQ 4.3后实现了完整的事务消息,实际上其实是对本地消息表的一个封装,将本地消息表移动到了MQ内部,解决 Producer 端的消息发送与本地事务执行的原子性

          Penyelesaian mesej transaksi RocketMqUrus niaga yang diedarkan: skim ketekalan akhirnya mesej yang boleh dipercayai

          🎜🎜🎜Apache RocketMQ Versi selepas 4.3 secara rasmi menyokong Mesej transaksi menyediakan sokongan mudah untuk pelaksanaan transaksi yang diedarkan. Mesej transaksi lengkap dilaksanakan selepas RocketMQ 4.3, yang sebenarnya Enkapsulasi jadual mesej setempat, mengalihkan jadual mesej setempat ke MQ internal, menyelesaikan masalah penghantaran mesej dan pelaksanaan transaksi setempat di sebelah ProducerAtomicityisu. 🎜🎜🎜🎜

          Proses pelaksanaan:

          1) Pemula transaksi menghantar SeparuhMesej transaksiHalf事务消息
          2)RocketMq回复Half发送成功
          3)事务发起方执行本地事务
          4)事务发起方执行本地事务成功,发送commit到RocketMq,mq投递消息到事务参与方;事务发起方执行本地事务失败,发送rollback到RocketMq,mq删除消息。
          5)当RocketMq一定时间内未收到来自事务发起方的确认信息,会对事务发起方进行事务回查
          6)事务发起方查询本地事务状态。
          7)事务发起方根据查询到的事务状态发送commint/rollback到RocketMq。
          8)当RocketMq发起commit后,收到失败或一定时间未收到成功ack,则会发起重试。

          优点

          消息数据独立存储,降低业务系统与消息系统之间的耦合。
          吞吐量优于本地消息表方案。

          缺点2) Balas RocketMqSeparuh berjaya dihantar

          3) Pemula transaksi melaksanakan transaksi tempatan

          4) Pemula transaksi melaksanakan transaksi tempatan dengan jayanya dan menghantar komit kepada RocketMq , penghantaran mq Mesej dihantar kepada peserta transaksi; pemula transaksi gagal melaksanakan transaksi setempat dan menghantar rollback ke RocketMq, mq memadamkan mesej.
          5) Apabila RocketMq tidak menerima maklumat pengesahan daripada pemula transaksi dalam tempoh masa tertentu, ia akan melaksanakan Semakan transaksi.

          6) Pemula transaksi menanyakan status transaksi setempat.

          7) Pemula transaksi menghantar commin/rollback ke RocketMq.

          8) Apabila RocketMq memulakan komit, jika kegagalan diterima atau ack yang berjaya tidak diterima untuk tempoh masa tertentu, percubaan semula akan dimulakan.
    Kelebihan: 🎜🎜Data mesej disimpan secara berasingan, mengurangkan gandingan antara sistem perniagaan dan sistem mesej. 🎜Penghasilan lebih baik daripada penyelesaian jadual mesej tempatan. 🎜🎜Kelemahan kod>: 🎜🎜Satu penghantaran mesej memerlukan dua permintaan rangkaian (separuh mesej + commit/rollback). 🎜Perlu melaksanakan antara muka semakan mesej. 🎜🎜Malah, setiap penyelesaian transaksi yang diedarkan mempunyai kelebihan dan kekurangan Kita perlu menimbang kebaikan dan keburukan dan memilih yang paling sesuai untuk senario perniagaan. 🎜🎜🎜

    Atas ialah kandungan terperinci Urus niaga yang diedarkan: skim ketekalan akhirnya mesej yang boleh dipercayai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:Java后端技术全栈. Jika ada pelanggaran, sila hubungi admin@php.cn Padam