Warning: Undefined variable $post in /var/www/saksenengku/wp-content/plugins/simple-google-schema/index.php on line 140

Warning: Attempt to read property "ID" on null in /var/www/saksenengku/wp-content/plugins/simple-google-schema/index.php on line 140
Tuning Performa untuk Redis – Saksenengku Network
Site icon Saksenengku Network

Tuning Performa untuk Redis

Redis Cache

Dalam pengaturan basis data apa pun, kinerja selalu menjadi tantangan dan sebagian besar waktu selalu dihadapi oleh administrator dan pengembang basis data terutama untuk produksi dan lingkungan yang besar. Perlu dicatat bahwa penyetelan kinerja Redis yang sederhana dapat mempercepat aplikasi Anda secara signifikan. Saat menyetel Redis, itu mencakup semua level yang harus dipertimbangkan dari klien pergi ke server.

Penyetelan kinerja harus bertahap, dapat diubah, dan sensitif. Ini bukan tindakan terus-menerus yang akan bertahan sampai selamanya. Setiap kali terjadi perubahan, terutama perubahan drastis yang mencakup aplikasi, perangkat lunak dan perangkat keras, serta jaringan, Anda perlu melakukan pengujian yang ketat kemudian menyesuaikan penyetelan sesuai dengan dampak perubahan. Setiap perubahan pada konfigurasi Redis Anda dapat memengaruhi kinerjanya, dan dampak ini dapat menurunkan atau meningkatkan kinerja. Jadi penyetelan terutama di lingkungan produksi membutuhkan keputusan yang cermat dan terencana. Sementara sebelum menyetel, penting bagi Anda untuk melakukan tindakan sebelumnya dan memeriksa kinerja database Anda saat ini.

Kinerja Redis sebelum penyetelan dapat terlihat seperti ini:
– Verifikasi kesehatan host Anda dengan melihat data server
– Pastikan virtualisasi Anda berfungsi dengan baik dengan menganalisis metrik mesin virtual
– Optimalkan akses database dengan data aplikasi
– Menganalisis dampak jaringan dari komunikasi basis data dengan data jaringan

Kita akan membahas alur penting untuk menyetel kinerja Redis Anda.

Manajemen memori


Redis adalah penyimpanan data dalam memori dengan beberapa opsi persistensi opsional. Jika Anda berencana untuk membandingkannya dengan server transaksional (MySQL, PostgreSQL, MongoDB, dll …), maka Anda harus mempertimbangkan untuk mengaktifkan AOF dan memutuskan kebijakan fsync yang sesuai.

Menonaktifkan THP

Kecepatan RAM dan bandwidth memori tampaknya kurang penting untuk kinerja global terutama untuk objek kecil. Untuk objek besar (>10 KB), mungkin terlihat. Biasanya, tidak terlalu hemat biaya untuk membeli modul memori cepat yang mahal untuk mengoptimalkan Redis. Misalnya, dalam skenario kasus dunia, memang benar bahwa kernel Linux telah mengaktifkan halaman besar yang transparan. Redis menimbulkan penalti latensi besar setelah panggilan fork digunakan untuk bertahan di disk. Halaman besar adalah penyebab masalah berikut:

fork is called, two processes with shared huge pages are created.
In a busy instance, a few event loop runs will cause commands to target a few thousand of pages, causing the copy-on write of almost the whole process memory.

This will result in big latency and big memory usage.

Pastikan untuk menonaktifkan halaman besar transparan menggunakan perintah berikut:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

Menghindari OOM

Redis berjalan lebih lambat pada VM dibandingkan dengan berjalan tanpa virtualisasi menggunakan perangkat keras yang sama.
Jika Anda memiliki kesempatan untuk menjalankan Redis pada mesin fisik, ini lebih disukai. Namun ini tidak berarti bahwa Redis lambat di lingkungan tervirtualisasi, kinerja yang disampaikan masih sangat baik dan sebagian besar masalah kinerja serius yang mungkin Anda alami di lingkungan tervirtualisasi disebabkan oleh penyediaan yang berlebihan, disk non-lokal dengan latensi tinggi, atau disk lama perangkat lunak hypervisor yang memiliki implementasi syscall fork yang lambat.

Mengaktifkan overcommit_memory
Untuk menambahkan lebih banyak penyimpanan Redis Anda, praktik terbaiknya adalah menghindari masalah ruang memori. Disarankan untuk mengatur parameter kernel untuk menghindari OOM. Jika nilai memori overcommit adalah 0 maka ada kemungkinan Redis Anda akan mendapatkan kesalahan OOM (Out of Memory). Untuk menghindarinya, Anda dapat melakukan hal berikut:

$ echo 1 > /proc/sys/vm/overcommit_memory
## Set it persistently
$ echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf

Perlu dicatat bahwa instans Redis 32 dan 64 bit tidak memiliki jejak memori yang sama.

Set swappiness paling sedikit bobotnya

Redis sangat bergantung pada sebagian besar sumber daya memori Anda. Jika memori sangat dikonsumsi oleh proses aktif yang berjalan di host database tempat Redis dihosting, ia akan mulai menggunakan ruang swap yang menggunakan disk sebagai sumber daya untuk menyimpan alokasi memori sementara. Meskipun itu berarti masih memungkinkan tugas Anda untuk diselesaikan atau dijalankan tanpa menghentikan seluruh sistem, ini menurunkan kinerja Redis Anda dari lambat menjadi drastis dan bukan itu yang Anda inginkan terutama untuk lingkungan beban lalu lintas yang sibuk dan tinggi. Untuk menghindarinya, jalankan yang berikut ini:

$ echo 1 > /proc/sys/vm/swappiness
## Set it persistently
$ echo 'vm.swappiness = 1' >> /etc/sysctl.conf

Memilih pengalokasi memori yang tepat

Bergantung pada platform, Redis dapat dikompilasi terhadap pengalokasi memori yang berbeda (libc malloc, jemalloc, tcmalloc), yang mungkin memiliki perilaku berbeda dalam hal kecepatan mentah, fragmentasi internal dan eksternal. Jika Anda tidak mengkompilasi Redis sendiri, Anda dapat menggunakan perintah INFO untuk memeriksa bidang mem_allocator. Harap perhatikan bahwa sebagian besar tolok ukur tidak berjalan cukup lama untuk menghasilkan fragmentasi eksternal yang signifikan (bertentangan dengan instans Redis produksi).

Pengalokasi memori yang didukung oleh Redis memang memiliki perbedaan dalam hal hasil fragmentasi memori saat mengalokasikan blok memori yang besar atau bahkan dengan blok memori yang kecil. Jika Anda membutuhkan kinerja, menyetel Redis Anda mengharuskan Anda melakukan tes dengan data asli Anda sendiri dan melakukan benchmark untuk memilih pengalokasi memori yang paling cocok untuk data Anda sendiri.

Penggunaan Memori

Redis akan menggunakan semua memori yang tersedia di server kecuali jika ini dikonfigurasi. Ini adalah sifat default Redis, jadi mengaturnya untuk mengambil sekitar 75-85% dari memori Anda yang didedikasikan untuk Redis masuk akal. Pastikan Redis tidak berjalan di server bersama tetapi pada pengaturan lingkungan khusus. Untuk mengubah ini, edit redis.conf Anda seperti di bawah ini,

# Setting it to 16Gib
maxmemory 17179869184

Atau, Anda juga dapat menjalankan perintah di bawah ini untuk mengaturnya secara dinamis dan juga menerapkan perubahan di redis.conf Anda

CONFIG SET maxmemory 
CONFIG REWRITE

Tuning Redis Config

Ada parameter penting yang dapat Anda atur untuk menyempurnakan kinerja Redis Anda. Parameter ini membantu meningkatkan kinerja Redis Anda terutama untuk menangani lalu lintas besar dan mengelola objek data besar.

TCP-KeepAlive


Keepalive adalah metode untuk mengizinkan koneksi TCP yang sama untuk percakapan HTTP alih-alih membuka yang baru dengan setiap permintaan baru.

Dengan kata sederhana, jika keepalive dimatikan, Redis akan membuka koneksi baru untuk setiap permintaan yang akan memperlambat kinerjanya. Jika keepalive aktif maka Redis akan menggunakan koneksi TCP yang sama untuk permintaan.

Untuk mengaktifkan TCP keepalive, edit file konfigurasi redis Anda dan aktifkan atau perbarui nilai ini seperti yang ditunjukkan di bawah ini:

## Editing default config file /etc/redis/redis.conf
# Update the value to 0
tcp-keepalive 0

Nonaktifkan menyimpan redis ke disk di redis.conf


Redis akan mencoba untuk menyimpan data ke disk. Sementara redis garpu untuk proses ini, masih memperlambat semuanya.

Komentari baris yang dimulai dengan save

#save 900 1
#save 300 10
#save 60 10000

Jika Anda perlu mempertahankan data, jalankan slave dan gunakan itu untuk menyimpan data karena akan menyebabkan lebih sedikit pelambatan.

TCP-backlog


Versi redis yang lebih baru memiliki backlog sendiri yang disetel ke 511 dan Anda akan membutuhkan ini lebih tinggi jika Anda memiliki banyak koneksi. Untuk melakukan ini, edit file konfigurasi redis Anda dan tambahkan yang berikut ini misalnya,

# TCP listen() backlog.
# In high requests-per-second environments you need an high backlog in order
# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
tcp-backlog 65536

Set maxclients


Standarnya adalah 10.000 dan jika Anda memiliki banyak koneksi, Anda mungkin perlu lebih tinggi. Sebaliknya jika Anda memiliki sumber daya yang rendah tetapi menjalankan sharding yang efisien secara horizontal menggunakan cluster Redis, kemudian turunkan ke bawah untuk memastikan tidak menghasilkan kemacetan. Untuk melakukan itu, cukup edit atau ubah nilai di konfigurasi redis Anda sebagai berikut,

# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
maxclients 10000

Redis Persistence


Saat menggunakan Redis untuk penyimpanan persistensi, opsi terbaik untuk Redis yang optimal dan berkinerja adalah mengaktifkan AOF dan RDB. Menggunakan RDB atau AOF saja memiliki kelemahannya sendiri dan mungkin menempatkan Anda pada pertemuan kritis. Ini adalah indikasi umum bahwa Anda harus menggunakan kedua metode ketekunan jika Anda menginginkan tingkat keamanan data yang sebanding dengan apa yang dapat diberikan PostgreSQL kepada Anda.

Jika Anda sangat peduli dengan data Anda, tetapi masih dapat hidup dengan beberapa menit kehilangan data jika terjadi bencana, Anda cukup menggunakan RDB saja. Ada banyak pengguna yang menggunakan AOF saja, tetapi komunitas Redis tidak menyarankannya karena memiliki snapshot RDB dari waktu ke waktu adalah ide bagus untuk melakukan pencadangan basis data, untuk memulai ulang lebih cepat, dan jika terjadi bug di mesin AOF.

Kemungkinan juga bahwa dalam rilis Redis di masa mendatang, mereka kemungkinan akan menyatukan AOF dan RDB menjadi model persistensi tunggal dan untuk rencana jangka panjang.

Semoga Bermanfaat..

Exit mobile version