Rumah > Soal Jawab > teks badan
今天忽然想到一个问题
对于高并发条件下,后台对数据的更新和实例化是怎么进行的?
1、直接插入数据库,然后更新缓存?
这样这个更新操作将会有IO阻塞风险吧、
2、直接更新缓存,然后使用消息队列更新数据库?
只能延缓IO阻塞,并不能避免
3、直接更新缓存,定时批量更新数据库
这样IO的问题是解决了,但是数据在缓存里感觉很慌。
也没实践过真正的高并发系统,这种情况怎么解决?
----------补充----------
总结一下
就是已知直接插入和更新数据库将面临IO阻塞的风险,那么将数据最终实例化到数据库的过程是怎么样的。
天蓬老师2017-04-18 10:25:14
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:
如果真的高并发的话,首先先确定高并发是持久还是偶尔暴涨的;
1,如果暴涨的话,使用二级池还是可以缓解的;具体实现:应用=>redis=>数据库三层方式解决;一般推荐redis与数据库可或两台处理;应用一台;加一台分发+逆向代理或动静态分流;实现应用+数据的双层池;1*Reverse&HTTP+1*Redis+1*DataBase
2,如果持久高并发,应结合您应用拓扑结构上,考虑使用集群从逻辑、应用层、分层降低单点的应用压力;具体实现:
1,同大1,特点简单;1*Reverse+n*HTTP+n/y*Redis+N/x*DataBase+1*MainDataBase;
2,应用模块化;单台服务为应用+数据库,前端使用逆向代理实现负载平衡,后端使用一台服务器实现全数据同步;特点,比较粗暴适合应用全部逻辑层都负载很平均都很高的情况;劣势是,可能为了适应负载点高部分,负载点低部分的性能会浪费掉;1*Reverse+n*Service+1*MainDataBase;
3,根据应用的逻辑分层,例如用户+逻辑1+逻辑2+订单+论坛这种方法,每种逻辑一台服务器;这种分发需要比较细致、全面的负载测试;但是再次大规模拓容比较费力;而且需要很强的负载预估能力;具体实现同2,只是中间部分每台服务器仅负担应用单层负载;特点,可以很精确的适应应用;劣势是:忒复杂;1*Reverse+N*1Service+N*2Service+N*3Service...+N*Redis+N*DataBase+*MainDataBase;
以上几种方法,个人认为应从实际出发选择适合自己的拓容方式;只有优劣选择,没有孰好孰坏;仅此...**楼歪了~怎么说道负载均衡了?**
黄舟2017-04-18 10:25:14
Ia tidak boleh dielakkan secara langsung semasa menulis operasi Jika anda sentiasa mempertimbangkan "kes yang melampau", anda akan terlepas titik masalah.
高洛峰2017-04-18 10:25:14
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 yang CAP
jelaskan.
巴扎黑2017-04-18 10:25:14
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
ringa_lee2017-04-18 10:25:14
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?
PHPz2017-04-18 10:25:14
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.
伊谢尔伦2017-04-18 10:25:14
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