今天忽然想到一个问题
对于高并发条件下,后台对数据的更新和实例化是怎么进行的?
1、直接插入数据库,然后更新缓存?
这样这个更新操作将会有IO阻塞风险吧、
2、直接更新缓存,然后使用消息队列更新数据库?
只能延缓IO阻塞,并不能避免
3、直接更新缓存,定时批量更新数据库
这样IO的问题是解决了,但是数据在缓存里感觉很慌。
也没实践过真正的高并发系统,这种情况怎么解决?
----------补充----------
总结一下
就是已知直接插入和更新数据库将面临IO阻塞的风险,那么将数据最终实例化到数据库的过程是怎么样的。
Kolam perantaraan, tembolok, redis, itulah maksudnya; tidak kira betapa besar mangkuk itu, kemudian cari sepuluh lelaki kurus dengan mulut ceri atau lelaki gemuk besar dengan mulut terbuka;
Kemas kini:
Ia tidak boleh dielakkan secara langsung semasa menulis operasi Jika anda sentiasa mempertimbangkan "kes yang melampau", anda akan terlepas titik masalah.
Mula-mula tulis ke cache, dan kemudian kekalkan ke cakera Adakah penulis bimbang pelayan cache akan menutup telefon dan menyebabkan kehilangan data?
Dalam persekitaran pengeluaran umum, sama ada pelayan aplikasi, pelayan pangkalan data atau pelayan cache, ia tidak akan dan tidak sepatutnya menjadi pelayan yang berdiri sendiri Sekurang-kurangnya ia adalah struktur tuan-hamba Jika satu gagal, yang lain akan mengambil alih. Apabila beban adalah normal, kebarangkalian satu mesin gagal adalah tidak terlalu tinggi, apatah lagi dua mesin gagal pada masa yang sama, ia boleh digunakan sebagai kluster, jadi jika penyebaran adalah normal , kemungkinan masalah ini agak rendah.
Poster boleh pergi dan belajar tentang teori
CAP
Menurut penerangan anda, kesan yang anda ingin capai adalah serupa dengan apa yangCAP
jelaskan.Terima kasih atas jemputan, tetapi saya tidak mempunyai pengalaman dalam menangani masalah ini, jadi saya hanya boleh bercakap mengenainya secara teori
Pertama sekali, caching tidak dapat dielakkan Direktori cache adalah untuk menyimpan sementara perkara yang tidak boleh diproses untuk memanjangkan masa menunggu. Sebagai contoh, konkurensi tinggi selama 10 minit secara tiba-tiba menyebabkan pengumpulan masalah yang perlu ditangani Melalui caching, kandungan 10 minit boleh diproses dalam masa setengah jam. Sudah tentu, terdapat andaian di sini, iaitu, selepas 10 minit konkurensi tinggi, tidak akan ada terlalu banyak masalah yang perlu ditangani.
Maka persoalannya, bagaimana jika kelajuan aliran masuk berikutnya masih sangat tinggi dan tidak boleh diproses langsung? Saya baru belajar perkataan baru-baru ini, tekanan belakang Cara paling langsung untuk menangani tekanan belakang adalah dengan membuang sebahagian daripada kandungan. Sudah tentu, untuk data, anda pastinya tidak mahu membuangnya, jadi anda hanya boleh memikirkan cara dari perspektif kecekapan pemprosesan, jadi gunakan banyak teknologi pemprosesan serentak seperti pengembangan, pengelompokan dan pemunggahan
Perkara di atas adalah pemahaman peribadi, menggunakan perkataan biasa, tidak cukup profesional, dan hanya untuk rujukan
Ini adalah masalah besar, dan terdapat penyelesaian berbeza untuk konkurensi tinggi dalam senario yang berbeza.
Sebagai contoh, Weibo sangat bersesuaian, dan sistem kewangan juga sangat bersesuaian Yang pertama bukanlah masalah besar walaupun maklumat hilang, manakala yang kedua mempunyai keperluan yang ketat untuk ketekunan maklumat.
Selain itu, adakah bacaan berkonkurensi tinggi atau tulisan berkonkurensi tinggi ini?
Adakah ia konkurensi tinggi dalam tempoh masa tertentu atau konkurensi tinggi berterusan?
Bagaimana orang boleh menjawab jika prasyarat tidak dinyatakan?
Ini sebenarnya soalan yang bagus.
Jika ia adalah operasi baca, sepatutnya tiada masalah, kerana bagi kebanyakan pangkalan data semasa, kebanyakannya data dikemas kini apabila ditulis (Salin pada Tulis), kerana kebanyakan pangkalan data arus perdana semasa sudah boleh berfungsi dengan baik di pangkalan data Tahap. Konkurensi tinggi menyokong bacaan serentak Perkara utama ialah bagaimana memastikan ketekalan data untuk operasi tulis dan memastikan bahawa cache juga dikemas kini apabila data dikemas kini. Ini dijamin oleh teori ACID pangkalan data.
Untuk operasi tulis, ACID pangkalan data Internet semasa adalah sangat konsisten Ia bercakap tentang konsistensi muktamad data, bukannya konsistensi tradisional Ini boleh memastikan permintaan pengguna dapat dijawab dengan cepat. Artikel ini ialah pengenalan kepada CAP, http://blog.csdn.net/starxu85... Sebagai rujukan
Soalan anda sebenarnya sepadan dengan jualan kilat "Double Eleven", dengan ribuan orang atau lebih Jika anda mahu tergesa-gesa untuk membeli satu lagi produk, jika pangkalan data menulis dengan kerap, ia pasti akan membawa kepada mengunci jadual dan menyekat operasi lain Mujurlah, sesetengah pangkalan data mempunyai pengoptimuman prestasi untuk senario ini (seperti sumber terbuka baru AliSQL berdasarkan MySQL yang dioptimumkan. untuk jualan kilat). ), permintaan ini boleh dibariskan mesej dalam cache pangkalan data, dan kemudian dikemas kini sekaligus untuk memastikan keselarasan yang tinggi. Sudah tentu, terdapat sokongan teori lain di tengah, seperti paras air tinggi dan rendah, kolam benang, dll.
Di atas adalah pendapat saya yang rendah hati. Saya bukan DBA profesional Jika terdapat kesilapan teori, anda dialu-alukan untuk menambahnya.
Masalah yang ditimbulkan oleh poster ini adalah perkara biasa dalam kebanyakan aplikasi, dan ia mempunyai sedikit kaitan dengan sama ada sistem mempunyai keselarasan tinggi Saya pernah memikirkan masalah yang sama sebelum ini
Perbincangan ringkas tentang caching (2)
Izinkan saya bercakap mengenainya dahulu, dalam kebanyakan kes, program kami sebenarnya mempunyai "kebergantungan yang lemah" pada cache Bagaimana untuk memahami "pergantungan yang lemah" ini?
Pemahaman saya ialah ketepatan data kami. program terletak pada Dalam kebanyakan kes, ia tidak akan dinilai oleh data dalam cache Contohnya, "harga produk pada halaman butiran produk" sebenarnya adalah data dalam cache, tetapi jumlah harga apabila kami menjana. pesanan mesti dimasukkan dalam pangkalan data Sudah tentu, saya bercakap tentang kebanyakan kes, tetapi terdapat beberapa kes di mana ketepatan data tidak begitu ketat (contohnya, abstraksi, bilangan hadiah saguhati boleh dimuatkan ke dalam. cache terlebih dahulu, dan keperluan perniagaan seterusnya boleh terus melalui hadiah dalam cache Dikira mengikut kuantiti, kerana menurut perniagaan am, hadiah saguhati adalah beberapa faedah tambahan yang bermanfaat kepada peniaga, seperti potongan 5 yuan untuk pembelian lebih. 100. Walaupun cache gagal pada masa ini, menyegarkannya semula akan memberi sedikit kesan kepada pedagang)
Adakah terdapat sebarang cara untuk memastikan konsistensi yang kukuh antara pangkalan data dan cache Proses ini melibatkan transaksi yang diedarkan, dan kedua-dua pihak melaksanakan protokol X/Open XA, tetapi
redis
protokol ini masih belum dilaksanakan, dan disebabkan olehnya memerlukan masa yang lama untuk mengunci sumber dalam keseluruhan pengedaran, jadi kaedah ini tidak disyorkan (konsistensi akhirnya juga boleh menyebabkan ketidakkonsistenan data untuk satu tempoh masa, yang akan meningkatkan kerumitan redis dengan banyak)Jadi dalam situasi biasa, kami biasanya memastikan data pangkalan data adalah betul, kemudian mengemas kini cache secara serentak/tidak sah/tak segera