Terima kasih~ Sebenarnya pemahaman anda salah~ Saya tidak tahu di mana anda melihat maklumat ini... Sebenarnya... menyelesaikan masalah konkurensi... bukan sekadar kunci pangkalan data yang mudah... ia adalah perlu Ia direalisasikan melalui satu siri caching, lencongan, penapisan, dan lain-lain. apabila pengguna membuat pesanan secara liar, hanya satu yang akan berkuat kuasa dalam amalan... Penyelesaiannya sangat mudah ~ terbahagi kepada dua lapisan... titik kawalan bahagian hadapan tidak boleh diklik lagi... bahagian belakang secara unik mengenal pasti permintaan ~ dan kemudian menyimpannya dalam cache ~ hanya satu yang akan benar-benar berkuat kuasa selepas itu ~
Saya rasa soalan yang anda ajukan beberapa kali ini lebih seperti apa yang dibincangkan dalam buku teks, ia adalah jauh daripada itu Prinsip jualan kilat yang ditulis oleh Taobao Alibaba Cloud baru-baru ini menerbitkan Seni bina sistem sampul merah di bawah konkurensi tinggi dan maklumat praktikal lain yang diringkaskan dalam pengeluaran sebenar~
Idempotence ialah janji (bukan pelaksanaan) yang dibuat oleh antara muka sistem kepada dunia luar Ia menjanjikan bahawa selagi antara muka berjaya dipanggil, berbilang panggilan luaran akan mempunyai kesan yang sama pada sistem sebagai idempotent akan menganggap kegagalan panggilan luaran sebagai Normal, dan pasti akan ada percubaan semula selepas kegagalan.
Untuk mencegah pemecahan pesanan yang anda nyatakan, apa yang saya tahu ialah ia bergantung pada urus niaga saya tidak tahu apa yang mereka gunakan dalam persekitaran konkurensi tinggi seperti Alipay.
public class Main {
private int i = 0;
//这个方法不具有幂等性,每调用一次,它就会改变Main的状态(即改变了i)
public void idempotent() {
i++;
}
//幂等性,无论这个方法调用多少次,它都不会改变Main类的状态。
public void simple() {
System.out.println(i);
}
}
Saya faham bahawa pesanan cetakan memerlukan idempotensi, iaitu keadaan di mana data tidak boleh dicetak semasa mencetak pesanan Tidak kira berapa kali pesanan yang sama dicetak, ia tidak akan menjejaskan cetakan pesanan lain. Ini mudah dikawal. Jangan ubah suai data dalam pangkalan data semasa mencetak pesanan Ambil data ke bahagian aplikasi dan prosesnya, supaya ia tidak menyebabkan pemecahan pada bahagian pangkalan data.
Kesaksamaan merujuk kepada panggilan ke sistem perniagaan Jika berbilang panggilan berlaku, tidak akan ada kesan ke atas sistem perniagaan. Keperluan ini sangat penting dalam sistem teragih, kerana dalam sistem teragih, pangkalan data itu sendiri tidak dapat melengkapkan kawalan transaksi Beberapa baris gilir mesej dan panggilan tak segerak akan digunakan untuk membuat panggilan jauh apabila menghadapi beberapa situasi tidak normal. ia akan cuba menghubungi perkhidmatan jauh sekali lagi Jika perkhidmatan itu tidak mempunyai jaminan kesaksamaan, mekanisme cuba semula tidak boleh digunakan.
Senario membuat pesanan adalah tidak saksama Jika ia dipanggil beberapa kali, beberapa pesanan akan muncul. Pendekatan biasa adalah untuk membuat pertanyaan berdasarkan maklumat yang diluluskan sebelum membuat pesanan Jika ia telah dilaksanakan, teruskan kembali maklumat panggilan yang berjaya untuk mengelakkan pesanan pendua.
Mati pucuk boleh difahami sebagai permintaan GET dalam HTTP (jangan katakan bahawa kadangkala kandungannya berbeza apabila anda melawat URL yang sama), dan permintaan POST adalah bukan idempoten. Jadi kebanyakan masa, menggunakan GET adalah bagus! Jangan fikir POST selamat kerana ia menyembunyikan data badan.
Mati pucuk menyelesaikan masalah yang jika sebab rangkaian seperti tamat masa berlaku dalam sistem yang diedarkan, pelanggan tidak tahu sama ada pelayan telah melaksanakan dengan jayanya atau gagal. Pada masa ini, pelanggan perlu mencuba semula. Jika antara muka tidak idempoten. Akan menghasilkan hasil yang dijangkakan berbeza.
Ringkasnya, jika antara muka adalah idempoten, kesannya akan sama jika anda memanggilnya sekali atau beberapa kali. Contohnya
Terima kasih~ Sebenarnya pemahaman anda salah~ Saya tidak tahu di mana anda melihat maklumat ini...
Saya rasa soalan yang anda ajukan beberapa kali ini lebih seperti apa yang dibincangkan dalam buku teks, ia adalah jauh daripada itu Prinsip jualan kilat yang ditulis oleh Taobao Alibaba Cloud baru-baru ini menerbitkan Seni bina sistem sampul merah di bawah konkurensi tinggi dan maklumat praktikal lain yang diringkaskan dalam pengeluaran sebenar~Sebenarnya... menyelesaikan masalah konkurensi... bukan sekadar kunci pangkalan data yang mudah... ia adalah perlu Ia direalisasikan melalui satu siri caching, lencongan, penapisan, dan lain-lain. apabila pengguna membuat pesanan secara liar, hanya satu yang akan berkuat kuasa dalam amalan... Penyelesaiannya sangat mudah ~ terbahagi kepada dua lapisan... titik kawalan bahagian hadapan tidak boleh diklik lagi... bahagian belakang secara unik mengenal pasti permintaan ~ dan kemudian menyimpannya dalam cache ~ hanya satu yang akan benar-benar berkuat kuasa selepas itu ~
.
Idempotence ialah janji (bukan pelaksanaan) yang dibuat oleh antara muka sistem kepada dunia luar Ia menjanjikan bahawa selagi antara muka berjaya dipanggil, berbilang panggilan luaran akan mempunyai kesan yang sama pada sistem sebagai idempotent akan menganggap kegagalan panggilan luaran sebagai Normal, dan pasti akan ada percubaan semula selepas kegagalan.
Untuk mencegah pemecahan pesanan yang anda nyatakan, apa yang saya tahu ialah ia bergantung pada urus niaga saya tidak tahu apa yang mereka gunakan dalam persekitaran konkurensi tinggi seperti Alipay.
Menggunakan token bukan sahaja boleh menghalang CSRF, tetapi juga menghalang main semula di peringkat UI.
Contoh mudah untuk memahami mati pucuk
Saya faham bahawa pesanan cetakan memerlukan idempotensi, iaitu keadaan di mana data tidak boleh dicetak semasa mencetak pesanan Tidak kira berapa kali pesanan yang sama dicetak, ia tidak akan menjejaskan cetakan pesanan lain. Ini mudah dikawal. Jangan ubah suai data dalam pangkalan data semasa mencetak pesanan Ambil data ke bahagian aplikasi dan prosesnya, supaya ia tidak menyebabkan pemecahan pada bahagian pangkalan data.
Kesaksamaan merujuk kepada panggilan ke sistem perniagaan Jika berbilang panggilan berlaku, tidak akan ada kesan ke atas sistem perniagaan.
Keperluan ini sangat penting dalam sistem teragih, kerana dalam sistem teragih, pangkalan data itu sendiri tidak dapat melengkapkan kawalan transaksi Beberapa baris gilir mesej dan panggilan tak segerak akan digunakan untuk membuat panggilan jauh apabila menghadapi beberapa situasi tidak normal. ia akan cuba menghubungi perkhidmatan jauh sekali lagi Jika perkhidmatan itu tidak mempunyai jaminan kesaksamaan, mekanisme cuba semula tidak boleh digunakan.
Senario membuat pesanan adalah tidak saksama Jika ia dipanggil beberapa kali, beberapa pesanan akan muncul. Pendekatan biasa adalah untuk membuat pertanyaan berdasarkan maklumat yang diluluskan sebelum membuat pesanan Jika ia telah dilaksanakan, teruskan kembali maklumat panggilan yang berjaya untuk mengelakkan pesanan pendua.
Mati pucuk boleh difahami sebagai permintaan GET dalam HTTP (jangan katakan bahawa kadangkala kandungannya berbeza apabila anda melawat URL yang sama), dan permintaan POST adalah bukan idempoten. Jadi kebanyakan masa, menggunakan GET adalah bagus! Jangan fikir POST selamat kerana ia menyembunyikan data badan.
Mati pucuk menyelesaikan masalah yang jika sebab rangkaian seperti tamat masa berlaku dalam sistem yang diedarkan, pelanggan tidak tahu sama ada pelayan telah melaksanakan dengan jayanya atau gagal. Pada masa ini, pelanggan perlu mencuba semula. Jika antara muka tidak idempoten. Akan menghasilkan hasil yang dijangkakan berbeza.
Ringkasnya, jika antara muka adalah idempoten, kesannya akan sama jika anda memanggilnya sekali atau beberapa kali. Contohnya
KEMASKINI SET jadual NAME="LILEI" WHERE UID='1'