Rumah  >  Artikel  >  pangkalan data  >  Apakah mekanisme tak segerak Redis

Apakah mekanisme tak segerak Redis

王林
王林ke hadapan
2023-06-01 20:14:401300semak imbas

1. Titik penyekat Redis

Objek yang berinteraksi dengan kejadian Redis dan operasi yang berlaku semasa interaksi:

  • Pelanggan: rangkaian IO, nilai kunci Sebagai tambahan, operasi pemadaman, pengubahsuaian dan pertanyaan, operasi pangkalan data; slave Node: Pustaka utama menjana dan menghantar fail RDB, menerima fail RDB daripada pustaka, mengosongkan pangkalan data dan memuatkan fail RDB

  • Menghiris contoh kluster: menghantar maklumat slot cincang kepada yang lain; contoh, migrasi data .

  • Hubungan antara 4 jenis objek interaktif dan operasi khusus:

  • Menyekat apabila berinteraksi dengan klien Point:

IO Rangkaian kadangkala perlahan, tetapi Redis menggunakan mekanisme pemultipleksan IO untuk mengelakkan utas utama menunggu sambungan rangkaian atau permintaan tiba, jadi rangkaian IO

bukan Apakah mekanisme tak segerak Redis faktor yang menyebabkan Redis menyekat.

Tugas utama utas utama Redis adalah untuk melaksanakan operasi penambahan, pemadaman, pengubahsuaian dan pertanyaan pasangan nilai kunci yang berinteraksi dengan klien. Operasi tambah, padam, ubah suai dan pertanyaan yang sangat kompleks pasti akan menyekat Redis. Kriteria untuk menilai kerumitan operasi: lihat sama ada

kerumitan operasi ialah O(N)

. Titik sekatan pertama Redis: pertanyaan koleksi penuh dan operasi pengagregatan:

Kerumitan operasi yang melibatkan koleksi dalam Redis biasanya O(N), jadi anda perlu memberi perhatian apabila menggunakannya .

Contohnya, elemen tetapkan

pertanyaan penuh operasi HGETALL, SMEMBERS dan statistik pengagregatan

operasi set, seperti persilangan, kesatuan dan perbezaan.

Titik sekatan kedua Redis: operasi pemadaman kunci besar


Operasi pemadaman koleksi itu sendiri juga mempunyai potensi risiko menyekat. Intipati operasi pemadaman adalah untuk melepaskan ruang memori yang diduduki oleh pasangan nilai kunci. Melepaskan memori hanyalah langkah pertama Untuk mengurus ruang memori dengan lebih cekap, apabila aplikasi mengeluarkan memori, sistem pengendalian perlu memasukkan blok memori yang dikeluarkan ke dalam senarai terpaut blok memori percuma untuk pengurusan dan pengagihan semula seterusnya. Proses ini sendiri mengambil masa tertentu dan akan menyekat aplikasi yang sedang mengeluarkan memori Jika sejumlah besar memori dikeluarkan serentak, masa operasi senarai terpaut blok memori percuma akan meningkat, yang akan sewajarnya menyebabkan utas utama Redis disekat. Masa untuk melepaskan sejumlah besar memori: Apabila memadamkan sejumlah besar pasangan nilai kunci, memadamkan koleksi yang mengandungi sejumlah besar elemen juga dipanggil

pemadaman kunci besar

.

Masa yang digunakan dalam operasi pemadaman untuk koleksi dengan bilangan elemen yang berbeza:

Tiga kesimpulan dibuat:

Apabila bilangan elemen meningkat daripada 100,000 kepada 1 juta, masa pemadaman empat jenis koleksi utama meningkat daripada 5 kali kepada hampir 20 kali ganda;

Apakah mekanisme tak segerak RedisApabila memadamkan set yang mengandungi 1 juta elemen, masa pemadaman maksimum jenis Hash telah mencapai nilai mutlak 1.98 saat. Dalam keadaan biasa, masa tindak balas Redis berada pada tahap mikrosaat, tetapi jika operasi mengambil masa hampir 2 saat untuk dilaksanakan, ia akan menyekat utas utama, yang tidak dapat dielakkan.

    Titik sekatan ketiga Redis: mengosongkan pangkalan data
  • Memandangkan pemadaman kerap pasangan nilai kunci merupakan titik sekatan yang berpotensi, dalam operasi peringkat pangkalan data Redis, Membilas pangkalan data (seperti operasi FLUSHDB dan FLUSHALL) juga merupakan potensi risiko menyekat kerana ia melibatkan pemadaman dan pelepasan semua pasangan nilai kunci.

  • Titik sekatan keempat Redis: Penulisan penyegerakan log AOF
  • IO Cakera secara amnya memakan masa dan intensif buruh serta memerlukan perhatian khusus. Pembangun Redis telah lama menyedari bahawa cakera IO boleh menyebabkan penyekatan, jadi Redis direka bentuk untuk menggunakan sub-proses untuk menjana fail syot kilat RDB dan melaksanakan operasi penulisan semula log AOF. Proses anak bertanggungjawab untuk pelaksanaan, dan IO cakera perlahan tidak akan menyekat utas utama.

  • Jika Redis merekodkan log AOF secara langsung, ia akan menggunakan strategi tulis yang berbeza untuk menulis data ke cakera. Operasi tulis cakera segerak mengambil masa kira-kira 1 hingga 2 ms Jika sejumlah besar operasi tulis perlu direkodkan dalam log AOF dan ditulis semula secara serentak, benang utama akan disekat.
  • Titik sekatan kelima Redis: memuatkan fail RDB daripada pustaka hamba

  • Dalam kelompok hamba induk, pustaka induk perlu menjana fail RDB dan memindahkannya ke pustaka hamba.

Semasa proses penyalinan pustaka utama,

mencipta dan memindahkan fail RDB dilengkapkan dengan sub-proses

dan tidak akan menyekat urutan utama.

Tetapi selepas menerima fail RDB, perpustakaan hamba perlu menggunakan arahan FLUSHDB untuk mengosongkan pangkalan data semasa, yang kebetulan mencecah titik sekatan ketiga.

Selepas mengosongkan pangkalan data semasa, perpustakaan hamba perlu memuatkan fail RDB ke dalam ingatan Kelajuan proses ini berkait rapat dengan saiz fail RDB, semakin perlahan proses pemuatan.

Titik sekatan apabila mengiris tika gugusan berinteraksi

Apabila menggunakan gugusan penghirisan Redis, maklumat slot cincang yang diperuntukkan pada setiap tika Redis perlu dipindahkan antara tika yang berbeza Apabila pengimbangan beban diperlukan atau apabila terdapat penambahan atau pemadaman contoh, data akan dipindahkan antara kejadian yang berbeza. Walau bagaimanapun, jumlah maklumat dalam slot cincang tidak besar, dan pemindahan data dilakukan secara beransur-ansur. Kedua-dua jenis operasi ini mempunyai risiko yang kecil untuk menyekat urutan utama Redis.

Jika penyelesaian Redis Cluster digunakan dan bigkey dipindahkan pada masa yang sama, utas utama akan disekat kerana Redis Cluster menggunakan migrasi segerak.

Lima mata sekatan:

  • Tetapkan pertanyaan penuh dan operasi pengagregatan;

  • Kosongkan pangkalan data;

  • Tulisan segerak log AOF;

  • Muat fail RDB daripada perpustakaan .

  • 2. Titik sekatan yang boleh dilaksanakan secara tak segerak

  • Untuk mengelakkan operasi menyekat, Redis menyediakan mekanisme utas tak segerak:

Redis akan bermula beberapa sub-sistem Benang, dan kemudian menyerahkan beberapa tugasan kepada sub-benang ini untuk menyelesaikannya di latar belakang, bukannya utas utama yang melaksanakan tugasan ini. Ini mengelakkan daripada menyekat benang utama.

Keperluan untuk pelaksanaan operasi tak segerak:

Operasi yang boleh dilaksanakan secara tak segerak bukanlah operasi pada laluan kritikal utas utama Redis (selepas pelanggan menghantar permintaan kepada Redis, ia menunggu operasi Redis yang mengembalikan hasil data).

Selepas utas utama menerima operasi 1, operasi 1 tidak perlu memulangkan data khusus kepada klien Urusan utama boleh menyerahkannya kepada sub-utas latar belakang selesai. Pada masa yang sama, selagi Hanya kembalikan hasil "OK" kepada pelanggan.

Apabila urutan kanak-kanak menjalankan operasi 1, pelanggan menghantar operasi 2 kepada tika Redis Pelanggan perlu menggunakan hasil data yang dikembalikan oleh operasi 2. Jika operasi 2 tidak mengembalikan hasil, pelanggan akan sentiasa menunggu. negeri. Apakah mekanisme tak segerak Redis

Operasi 1 tidak dianggap sebagai operasi pada laluan kritikal, kerana ia tidak perlu mengembalikan data khusus kepada klien, jadi ia boleh dilaksanakan secara tak segerak oleh sub-benang latar belakang.

Operasi 2 perlu mengembalikan hasilnya kepada klien Ia adalah operasi pada laluan kritikal, jadi utas utama mesti menyelesaikan operasi ini dengan segera.


Operasi baca Redis ialah operasi laluan kritikal yang tipikal, kerana selepas klien menghantar operasi baca, ia akan menunggu sehingga data baca dikembalikan untuk pemprosesan data seterusnya. Titik sekatan pertama Redis, "mengumpul pertanyaan penuh dan operasi pengagregatan", kedua-duanya melibatkan operasi baca dan operasi tak segerak tidak boleh dilakukan.

  • Padam operasi yang tidak memerlukan keputusan data khusus untuk dikembalikan kepada klien bukanlah operasi laluan kritikal. "Kedua-dua 'pemadaman kunci besar' dan 'pembersihan pangkalan data' melibatkan pemadaman data, tetapi mereka tidak berada di laluan kritikal.". Anda boleh menggunakan sub-benang latar belakang untuk melaksanakan operasi pemadaman secara tidak segerak.

  • "Tulisan segerak log AOF". Untuk memastikan kebolehpercayaan data, tika Redis perlu memastikan bahawa rekod operasi dalam log AOF telah diletakkan pada cakera Walaupun operasi ini memerlukan contoh untuk menunggu, ia tidak Keputusan data tertentu akan dikembalikan kepada contoh. Oleh itu, benang kanak-kanak boleh dimulakan untuk melakukan penulisan segerak log AOF.

  • Untuk menyediakan perkhidmatan akses data kepada pelanggan, fail RDB yang lengkap mesti dimuatkan. Operasi ini juga merupakan operasi pada laluan kritikal dan mesti dilaksanakan oleh utas utama perpustakaan hamba.

  • Kecuali untuk "pengumpulan pertanyaan penuh dan operasi pengagregatan" dan "memuatkan fail RDB dari pustaka", operasi yang terlibat dalam tiga titik sekatan yang lain tidak berada di laluan kritikal gunakan subrutin tak segerak Redis digunakan untuk melaksanakan pemadaman kunci besar, pangkalan data kosong dan penulisan segerak log AOF.

  • 3. Mekanisme sub-benang tak segerak

Selepas utas utama Redis dimulakan, ia akan menggunakan fungsi pthread_create yang disediakan oleh sistem pengendalian untuk mencipta 3 sub-benang, bertanggungjawab untuk

Operasi penulisan log AOF, pasangan nilai kunci Pelaksanaan pemadaman tidak segerak dan penutupan fail

.

Urut utama berinteraksi dengan urutan anak melalui baris gilir tugas dalam bentuk senarai terpaut. Apabila menerima operasi pemadaman pasangan nilai kunci dan mengosongkan pangkalan data, utas utama akan merangkum operasi itu ke dalam tugasan, memasukkannya ke dalam baris gilir tugasan, dan kemudian mengembalikan mesej penyelesaian kepada klien, menunjukkan bahawa pemadaman telah selesai.

Tetapi sebenarnya, pemadaman masih belum dilaksanakan pada masa ini Selepas sub-utas latar belakang membaca tugasan daripada baris gilir tugas, pasangan nilai kunci sebenarnya dipadamkan dan ruang memori yang sepadan dikeluarkan. . Pemadaman tak segerak ini juga dipanggil

pemadaman malas

(percuma malas).

Apabila log AOF dikonfigurasikan dengan pilihan everysec, utas utama akan merangkum operasi penulisan log AOF ke dalam tugasan dan meletakkannya dalam baris gilir tugas. Satu cara untuk menulis semula ialah: Apabila sub-benang latar belakang membaca tugas, ia mula merakam ke log AOF dengan sendirinya dan utas utama boleh terus berjalan tanpa bergantung pada log AOF. Mekanisme pelaksanaan sub-benang tak segerak dalam Redis:

Pemadaman pasangan nilai kunci tak segerak dan operasi pembersihan pangkalan data adalah fungsi yang disediakan selepas Redis 4.0 Redis juga menyediakan arahan baharu untuk melaksanakan dua operasi ini:

  • Pemadaman pasangan nilai kunci: Apabila. terdapat sejumlah besar elemen dalam jenis koleksi (contohnya, terdapat berjuta-juta atau berpuluh-puluh juta elemen) yang perlu dipadamkan, disyorkan untuk menggunakan arahan UNLINK; 🎜>Kosongkan pangkalan data: anda boleh menggunakan arahan FLUSHDB dan FLUSHALL Kemudian tambahkan pilihan ASYNC untuk membenarkan sub-benang latar belakang mengosongkan pangkalan data secara tidak segerak.

  • FLUSHDB ASYNC 
    FLUSHALL AYSNC

Atas ialah kandungan terperinci Apakah mekanisme tak segerak Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam