Rumah >rangka kerja php >ThinkPHP >Bagaimana untuk melaksanakan pemprosesan transaksi teragih dalam ThinkPHP6?

Bagaimana untuk melaksanakan pemprosesan transaksi teragih dalam ThinkPHP6?

王林
王林asal
2023-06-12 09:39:592107semak imbas

Dengan pembangunan Internet dan pengembangan berterusan senario aplikasi, keperluan untuk prestasi dan kebolehpercayaan sistem menjadi lebih tinggi dan lebih tinggi. Dalam senario perniagaan yang kompleks, berbilang perkhidmatan selalunya perlu diselesaikan secara kolaboratif, yang memerlukan transaksi yang diedarkan untuk diproses. Artikel ini akan memperkenalkan cara melaksanakan pemprosesan transaksi teragih dalam ThinkPHP6.

1. Konsep asas transaksi teragih

1. Urus niaga teragih

Sistem teragih merujuk kepada program dan sumber data pada berbilang komputer, yang dijalankan melalui rangkaian Sambung dan berkomunikasi , dan bekerjasama untuk menyelesaikan tugas. Dalam kes ini, jika berbilang transaksi perlu melibatkan berbilang sumber, penyelarasan transaksi teragih diperlukan. Urus niaga teragih merujuk kepada urus niaga yang diselesaikan secara kolaboratif oleh berbilang transaksi dan perlu memenuhi sifat ACID.

2. Atribut ACID

Dalam pangkalan data, ACID merujuk kepada empat sifat atomicity, konsistensi, pengasingan dan ketahanan.

Atomicity: Merujuk kepada fakta bahawa urus niaga ialah unit kerja yang tidak boleh dibahagikan, sama ada siap sepenuhnya atau tidak selesai sama sekali, dan tidak ada penyelesaian separa.

Ketekalan: merujuk kepada keadaan pangkalan data mesti kekal konsisten sebelum dan selepas urus niaga dilaksanakan Contohnya, dalam transaksi pemindahan, jumlah baki akaun kekal tidak berubah sebelum dan selepas pemindahan dilaksanakan.

Pengasingan: Apabila berbilang transaksi dilaksanakan secara selari, pelaksanaan satu transaksi tidak boleh diganggu oleh transaksi lain.

Ketahanan: bermakna setelah transaksi diserahkan, keputusannya hendaklah disimpan secara kekal dalam pangkalan data.

2. Pelaksanaan transaksi teragih dalam ThinkPHP6

1 Masalah dengan transaksi teragih

Dalam pangkalan data hubungan tradisional, pelaksanaan transaksi teragih memerlukan penggunaan dua Fasa Komit ( 2PC), tetapi kaedah ini mempunyai beberapa masalah, seperti titik kegagalan tunggal, kesesakan prestasi, dll. Oleh itu, dalam data besar dan senario aplikasi konkurensi tinggi, kaedah lain perlu digunakan untuk melaksanakan transaksi teragih.

2. Penyelesaian transaksi teragih

Untuk melaksanakan pemprosesan transaksi teragih dalam ThinkPHP6, anda boleh menggunakan perisian tengah seata sumber terbuka membahagikan aplikasi kepada tiga peranan, iaitu TC ( Transaction Coordinator), TM (Pengurus Urus Niaga) dan RM (Pengurus Sumber):

TC (Penyelaras Urus Niaga): Penyelaras Transaksi, bertanggungjawab untuk menyelaraskan sumber modul transaksi yang diedarkan dan mencapai konsistensi transaksi.

TM (Pengurus Urus Niaga): Pengurus urus niaga, bertanggungjawab untuk operasi berkaitan transaksi seperti pembukaan transaksi, penyerahan, pengembalian, dsb.

RM (Pengurus Sumber): Pengurus sumber, bertanggungjawab mengurus sumber, seperti operasi pangkalan data, operasi MQ, dsb.

3. Penggunaan seata

Sebelum menggunakan seata, anda perlu memasang dan mengkonfigurasi seata, termasuk mencipta TC, RM dan sumber lain. Selepas pemasangan dan konfigurasi selesai, anda boleh menggunakan seata untuk memproses transaksi yang diedarkan.

Dalam modul yang memerlukan transaksi teragih, anda perlu menambah konfigurasi berikut dalam application.properties:

<!-- seata依赖库 -->
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-all</artifactId>
    <version>${seata.version}</version>
</dependency>

(3) Pada permulaan transaksi, dayakannya secara global

Pada permulaan transaksi, anda perlu mendayakannya secara global:

# 配置seata的全局事务ID生成器
seata.tx-service-group=my_group
# type,AT表示AT模式,XA表示XA模式
seata.tx-type=AT
# 自动代理数据源
seata.autoproxy.datasource=true

(4) Menggunakan RM dalam transaksi

Apabila menggunakan RM dalam transaksi (seperti pangkalan data RDMS), anda perlu menggunakan ejen yang disediakan oleh seata , uruskan sumber:

// 开启全局事务
GlobalTransactionContext.begin(transactionName);

(5) Pada akhir transaksi, lakukan komitmen global

Pada akhir transaksi, komitmen global diperlukan:

// 使用代理获取connection
conn = ((DataSourceProxy) dataSource).getConnection();

kerana seata akan Kandungan transaksi yang diedarkan terkandung dalam middleware, jadi apabila menggunakan seata, logik perniagaan dan pemprosesan transaksi yang diedarkan boleh diasingkan untuk memudahkan pengurusan dan penyelenggaraan.

3. Ringkasan

Artikel ini menggabungkan ThinkPHP6 dan middleware seata untuk memperkenalkan proses pemprosesan transaksi teragih dalam sistem teragih dan penggunaan perisian tengah seata. Dalam aplikasi sebenar, adalah perlu untuk memilih antara prestasi dan kebolehpercayaan mengikut senario perniagaan tertentu untuk pemprosesan transaksi teragih.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pemprosesan transaksi teragih dalam ThinkPHP6?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn