Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk melaksanakan pemprosesan transaksi teragih dalam bahasa Go?

Bagaimana untuk melaksanakan pemprosesan transaksi teragih dalam bahasa Go?

PHPz
PHPzasal
2023-06-10 18:16:372188semak imbas

Memandangkan skala aplikasi Internet terus berkembang dan perkhidmatan menegak dibahagikan secara beransur-ansur, pembangunan sistem teragih menjadi semakin penting. Persoalan yang timbul ialah bagaimana untuk menangani konsistensi transaksi dalam sistem sedemikian. Artikel ini akan memperkenalkan beberapa penyelesaian pemprosesan transaksi teragih arus perdana dalam bahasa Go dan prinsip pelaksanaannya.

Transaksi ACID tradisional

Dalam sistem yang berdiri sendiri, aplikasi biasanya menggunakan transaksi ACID tradisional untuk memastikan konsistensi data. ACID ialah singkatan daripada Atomicity, Consistency, Isolation, dan Durability, yang masing-masing mewakili empat atribut utama transaksi:

  • Atomicity (Atomicity): Satu siri operasi dalam transaksi, sama ada semuanya berjaya , atau semua Kegagalan, tiada keadaan perantaraan.
  • Ketekalan: Pelaksanaan transaksi tidak akan melanggar kekangan integriti dalam pangkalan data.
  • Pengasingan: Berbilang urus niaga yang dilaksanakan serentak adalah diasingkan dan tidak akan mengganggu satu sama lain.
  • Ketahanan: Setelah transaksi dilakukan, keputusannya adalah kekal.

Walau bagaimanapun, apabila aplikasi menjadi aplikasi yang diedarkan, lebih banyak kerumitan perlu diuruskan, termasuk kependaman rangkaian, pemesejan yang tidak boleh dipercayai, pemisahan data, dll. Jika masih menggunakan transaksi ACID tradisional akan meningkatkan kerumitan dan overhed sistem, mewujudkan kesesakan prestasi, dan mengehadkan kebolehskalaan sistem. Oleh itu, sistem teragih memerlukan penyelesaian baharu yang boleh mengurus konsistensi transaksi dalam persekitaran teragih.

Teori CAP

Dalam sistem teragih, teori CAP digunakan untuk menerangkan konflik dalam tiga elemen utama:

  • Ketekalan: dalam pengedaran Dalam persekitaran ini, semua nod mempunyai pandangan yang sama.
  • Ketersediaan: Aplikasi mengehadkan ketepatan yang sesuai dalam respons apabila diminta.
  • Toleransi Partition: Sistem boleh terus berfungsi apabila partition rangkaian berlaku antara mesin.

Teori CAP berpendapat bahawa dalam mana-mana sistem teragih, paling banyak dua elemen ini boleh dipenuhi secara serentak. Iaitu, jika kita ingin mencapai konsistensi dan ketersediaan dalam sistem teragih, kita mesti bertolak ansur dengan berlakunya partition rangkaian. Jika kita ingin mencapai konsistensi dan toleransi partition, kita perlu melepaskan ketersediaan dalam kes ini.

Transaksi BASE

Tidak seperti ACID, sistem yang diedarkan biasanya menggunakan urus niaga gaya BASE untuk mengendalikan konsistensi transaksi. BASE ialah singkatan kepada Basically Available, Soft state, Akhirnya konsisten.

  • Ada pada asasnya: Cuba pastikan ketersediaan sistem Walaupun sistem gagal, ia tidak akan menjejaskan ketersediaan keseluruhan sistem.
  • Keadaan lembut: Sistem akan menjadikan data keadaan tidak konsisten untuk satu tempoh masa dan tidak menjamin bahawa data keadaan akan konsisten dalam masa nyata. Akhirnya Konsisten: Sistem akhirnya akan mencapai keadaan yang konsisten.

Urus niaga BASE tidak menjamin konsistensi yang kukuh, tetapi mencapai konsistensi transaksi melalui konsistensi akhirnya. Transaksi BASE tidak sesuai untuk aplikasi yang perlu memenuhi kekangan, tetapi sesuai untuk aplikasi besar, gudang data dan projek lain yang perlu memproses jumlah data yang besar.

Penyelesaian pelaksanaan transaksi teragih

Dalam Go, pada masa ini terdapat tiga penyelesaian pelaksanaan transaksi teragih arus perdana:

  1. Protokol Komit Dua Fasa)

Protokol komit dua fasa ialah protokol penyegerakan yang digunakan untuk pengurusan transaksi yang diedarkan. Ia memastikan atomicity, konsistensi dan pengasingan transaksi yang diedarkan apabila dilaksanakan merentas berbilang nod. Antaranya, penyelaras bertanggungjawab untuk mengurus protokol komit global, dan setiap nod bertanggungjawab untuk melaksanakan protokol komit/balik semula.

Dalam protokol komit dua fasa, terdapat dua fasa:

1 fasa Persediaan: Penyelaras bertanya kepada semua nod yang mengambil bahagian sama ada mereka bersedia untuk melakukan transaksi. Jika semua nod sudah sedia, masukkan fasa penyerahan. Jika tidak, urus niaga akan ditarik balik.

2. Fasa komitmen: Semua nod yang mengambil bahagian mengeluarkan arahan "serahkan" atau "balik semula" kepada penyelaras. Jika semua nod berjaya diserahkan, transaksi yang diedarkan selesai. Jika sekurang-kurangnya satu nod gagal untuk melakukan, urus niaga akan ditarik balik.

Walau bagaimanapun, protokol komit dua fasa akan menghadapi masalah tersekat dalam fasa penyediaan (masalah sekatan dua fasa yang dipanggil pada masa ini, beberapa nod mungkin telah melakukan sementara nod lain). tersekat selepas fasa penyediaan. Ini menyebabkan beberapa nod mungkin tidak pernah mendapat arahan rollback, yang membawa kepada ketidakkonsistenan data. Oleh itu, protokol komit dua fasa bukanlah penyelesaian pemprosesan transaksi teragih yang sempurna.

2. Protokol Komit Tiga Fasa

Protokol komit tiga fasa ialah pengoptimuman protokol komit dua fasa, bertujuan untuk mengurangkan berlakunya masalah penyekatan dua fasa. Ia membahagikan fasa penyediaan protokol komit dua fasa kepada dua subfasa:

1. Fasa Tanya: Penyelaras bertanya nod yang mengambil bahagian sama ada mereka bersedia untuk melakukan transaksi.

2. Fasa penyediaan: Nod yang mengambil bahagian mengesahkan sama ada mereka bersedia untuk melakukan transaksi.

Seperti namanya, protokol penyerahan tiga fasa terdiri daripada tiga fasa:

  1. Fasa CanCommit: Penyelaras bertanya kepada setiap nod yang mengambil bahagian sama ada ia bersedia untuk melakukan transaksi.
  2. Fasa PraKomit: Jika semua nod sedia, masukkan fasa prakomit. Jika tidak, penyelaras menghantar mesej rollback.
  3. Fasa DoCommit: Jika setiap nod yang mengambil bahagian yakin bahawa tiada ralat akan berlaku semasa proses prakomit dan komit, ia menghantar mesej komit. Jika ralat berlaku semasa proses prakomit atau komit nod yang mengambil bahagian, mesej gulung balik dihantar.

Kelebihan protokol komit tiga fasa ialah berbanding protokol komit dua fasa, ia mengurangkan kemungkinan penyekatan dua fasa dan boleh bertindak balas terhadap kegagalan (seperti failover) dengan lebih cepat. Walau bagaimanapun, masih terdapat isu bahawa ia mungkin tidak dapat mengendalikan partition rangkaian.

3.Corak SAGA (Corak Saga)

Corak SAGA ialah skim pelaksanaan transaksi yang panjang dengan membahagikan urus niaga kepada satu siri langkah yang saling bergantung dan menukar setiap langkah menjadi atom Beroperasi untuk mencapai perkara berikut matlamat:

  • Kurangkan skop urus niaga setakat yang mungkin.
  • Tidak perlu menguatkuasakan konsistensi pada semua langkah.
  • Anda boleh berguling ke belakang sebahagian, bukan semua langkah.

Mod SAGA terdiri daripada beberapa peringkat, setiap peringkat melakukan sebahagian daripada operasi transaksi ini boleh menjadi sebarang operasi yang boleh mendapatkan jaminan mati pucuk (iaitu, operasi itu sendiri boleh dilaksanakan berulang kali tanpa akan mempunyai. kesan ke atas keputusan). Jika sesuatu peringkat gagal, mod SAGA akan melancarkan pentas ke hadapan atau ke belakang mengikut situasi pelaksanaan, dan akhirnya mencapai keadaan di mana operasi semua peringkat telah dilaksanakan dengan betul atau tidak boleh ditarik balik.

Melalui mod SAGA, kami boleh mencapai pembangunan, penggunaan dan pengembangan bebas bagi setiap modul perniagaan, dengan kos menyokong sekurang-kurangnya sebahagian daripada mod SAGA akan menjamin hasil akhir, jadi ia tidak perlu untuk memastikan bahawa semua langkah adalah benar-benar konsisten , yang membolehkannya berfungsi dalam persekitaran teragih tak segerak/segerak.

Ringkasan

Dalam bahasa Go, kami mempunyai banyak cara untuk mengendalikan pemprosesan transaksi teragih, seperti protokol teragih, skim transaksi panjang dan Saga. Setiap penyelesaian mempunyai kelebihan dan kekurangannya sendiri, dan digunakan secara optimum dalam senario yang sesuai. Dalam aplikasi praktikal, kita perlu membuat pilihan berdasarkan keadaan tertentu untuk mencapai pengurusan transaksi teragih dengan lebih baik.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pemprosesan transaksi teragih dalam bahasa Go?. 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