Sistem cache yang diedarkan adalah bahagian yang sangat diperlukan dalam seni bina tiga tinggi, yang sangat meningkatkan keselarasan dan kelajuan tindak balas keseluruhan projek, tetapi ia juga membawa masalah baharu yang perlu diselesaikan, iaitu: Penembusan cache , pecahan cache , salji cache dan isu konsistensi cache.
Masalah besar pertama ialah penembusan cache. Konsep ini lebih mudah difahami dan berkaitan dengan kadar hit. Jika kadar pukulan rendah, maka tekanan akan tertumpu pada lapisan kegigihan pangkalan data.
Jika kami dapat mencari data yang berkaitan, kami boleh cachenya. Tetapi masalahnya ialah permintaan ini tidak mencecah cache atau lapisan kegigihan Keadaan ini dipanggil penembusan cache.
Sebagai contoh, seperti yang ditunjukkan dalam gambar di atas, dalam sistem log masuk, terdapat serangan luaran, dan ia terus mencuba untuk log masuk menggunakan pengguna yang tidak wujud pengguna adalah maya dan tidak boleh Ia dicache dengan berkesan dan akan ditanya dalam pangkalan data setiap kali, yang akhirnya akan menyebabkan kegagalan prestasi perkhidmatan.
Terdapat banyak penyelesaian untuk masalah ini, mari kita perkenalkan secara ringkas.
Yang pertama ialah cache objek kosong. Bukankah lapisan kegigihan tidak dapat mencari data? Kemudian kita boleh menetapkan hasil permintaan ini kepada null dan memasukkannya ke dalam cache. Dengan menetapkan masa tamat tempoh yang munasabah, keselamatan pangkalan data bahagian belakang boleh dipastikan.
Mencache objek kosong akan menduduki ruang cache tambahan, dan juga akan ada tetingkap masa untuk ketidakkonsistenan data, jadi kaedah kedua ialah menggunakan penapis Bloom untuk memproses sejumlah besar nilai kunci biasa.
Kewujudan atau ketiadaan rekod ialah nilai Bool yang boleh disimpan menggunakan 1 bit sahaja. Penapis Bloom boleh memampatkan operasi ya dan tidak ini ke dalam struktur data. Sebagai contoh, data seperti nombor telefon bimbit dan jantina pengguna sangat sesuai untuk menggunakan penapis Bloom.
Pecahan cache juga merujuk kepada situasi di mana permintaan pengguna jatuh pada pangkalan data Dalam kebanyakan kes, ia disebabkan oleh tamat tempoh masa cache.
Kami biasanya menetapkan masa tamat tempoh untuk data dalam cache. Jika sejumlah besar data diperoleh daripada pangkalan data pada masa tertentu dan masa tamat tempoh yang sama ditetapkan, ia akan tamat tempoh pada masa yang sama, menyebabkan kerosakan cache.
Untuk data panas, kami boleh menetapkannya untuk tidak tamat tempoh; atau mengemas kini masa tamatnya apabila diakses item cache yang diimport ke dalam pangkalan data dalam kelompok juga harus cuba memperuntukkan masa tamat tempoh yang agak purata untuk mengelakkan Tidak sah pada; masa yang sama.
Perkataan avalanche nampak menakutkan, tetapi keadaan sebenar memang lebih serius. Caching digunakan untuk mempercepatkan sistem, dan pangkalan data bahagian belakang hanyalah sandaran data, bukan alternatif ketersediaan tinggi.
Apabila sistem cache gagal, trafik akan dipindahkan serta-merta ke pangkalan data bahagian belakang. Tidak lama kemudian, pangkalan data akan ditenggelami oleh trafik yang padat dan menutup talian Kegagalan perkhidmatan yang melata ini boleh dipanggil dengan jelas.
Pembinaan cache dengan ketersediaan tinggi adalah sangat penting. Redis menyediakan mod induk-hamba dan kluster Mod kluster mudah digunakan, dan setiap serpihan juga boleh bertindak sebagai hamba induk secara bebas, memastikan ketersediaan yang sangat tinggi.
Selain itu, kami mempunyai penilaian umum tentang kesesakan prestasi pangkalan data. Jika sistem cache ranap, anda boleh menggunakan komponen pengehad semasa untuk memintas permintaan yang mengalir ke pangkalan data.
Selepas komponen cache diperkenalkan, satu lagi masalah sukar ialah ketekalan cache.
Mari kita lihat dahulu bagaimana masalah itu berlaku. Untuk item cache, terdapat empat operasi yang biasa digunakan: tulis, kemas kini, baca dan padam.
Penulisan: Cache dan pangkalan data adalah dua komponen berbeza Selagi penulisan berganda terlibat, terdapat kemungkinan hanya satu daripada penulisan akan berjaya, menyebabkan data tidak konsisten.
Kemas kini: Situasi kemas kini adalah serupa, dua komponen berbeza perlu dikemas kini.
Baca: Baca untuk memastikan bahawa maklumat yang dibaca daripada cache adalah yang terkini dan konsisten dengan maklumat dalam pangkalan data.
Padam: Apabila memadam rekod pangkalan data, bagaimana untuk memadam data dalam cache?
Kerana logik perniagaan agak kompleks dalam kebanyakan kes. Operasi kemas kini sangat mahal Contohnya, baki pengguna ialah nombor yang dikira dengan mengira satu siri aset. Jika aset berkaitan ini perlu memuat semula cache setiap kali ia ditukar, struktur kod akan menjadi sangat mengelirukan dan mustahil untuk dikekalkan.
Saya mengesyorkan menggunakan kaedah ketekalan cache yang dicetuskan Menggunakan kaedah pemuatan malas boleh menjadikan penyegerakan cache sangat mudah:
Apabila membaca cache Pada masa itu, jika ada. tiada data yang berkaitan dalam cache, logik perniagaan yang berkaitan dilaksanakan, data cache dibina dan disimpan dalam sistem cache;
Apabila sumber yang berkaitan dengan item cache berubah, item cache yang sepadan terlebih dahulu dipadamkan, kemudian sumber tersebut dikemas kini dalam pangkalan data, dan akhirnya item cache yang sepadan dipadamkan.
Selain model pengaturcaraan mudah, operasi ini mempunyai manfaat yang jelas. Saya hanya memuatkan cache ini ke dalam sistem cache apabila saya menggunakannya. Jika sumber dicipta dan dikemas kini setiap kali pengubahsuaian dibuat, akan terdapat banyak data sejuk dalam sistem cache. Ini sebenarnya melaksanakan Corak Cache-Aside, yang memuatkan data daripada storan data ke dalam cache atas permintaan Kesan terbesar ialah meningkatkan prestasi dan mengurangkan pertanyaan yang tidak perlu.
Tetapi masih ada masalah dengan ini. Senario yang diperkenalkan seterusnya juga merupakan soalan yang sering ditanya dalam temu bual.
Tindakan kemas kini pangkalan data dan tindakan pemadaman cache yang kami nyatakan di atas jelas sekali bukan dalam transaksi yang sama. Ia boleh menyebabkan kandungan pangkalan data dan kandungan dalam cache menjadi tidak konsisten semasa proses kemas kini.
Dalam temu bual, selagi anda menunjukkan soalan ini, penemuduga akan memberikan ibu jari ke atas.
Anda boleh menggunakan kunci teragih untuk menyelesaikan masalah ini Anda boleh menggunakan kunci untuk mengasingkan operasi pangkalan data dan operasi cache daripada operasi baca cache yang lain. Secara umumnya, operasi baca tidak perlu dikunci Apabila ia menemui kunci, ia akan mencuba semula dan menunggu sehingga tamat.
Atas ialah kandungan terperinci Apakah empat masalah utama yang perlu diselesaikan oleh sistem cache yang diedarkan Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!