Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk melaksanakan pemprosesan transaksi teragih dalam bahasa Go?
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:
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:
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.
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:
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:
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:
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!