Mendistribusikan beban sesi-php pada larik memcache

2

Sampai saat ini pengaturan kami terdiri dari 4 sesi berbagi server web ke satu server yang menjalankan memcache. Kami di-host di cloud Amazon dan mengalami crash pada saat beban puncak pada 2 hari berturut-turut. Masalahnya adalah layanan memcache macet (beban ke situs kami terus meningkat).

Jadi, kami mengambil langkah-langkah berikut:

1) Menambahkan 2 server lagi untuk menyimpan sesi

2) Tetapkan variabel berikut dalam file php ini di semua server web

session.save_handler = memcache

session.save_path = tcp://ip1.port, tcp://ip2.port, tcp://ip3:port

memcache.hash_strategy = consistent

memcache.allow_failover = 1

Semuanya berjalan beres sekarang. Untuk memastikan ketersediaan, kami mencoba pengujian dengan secara acak membunuh salah satu server sesi kami, dan situs tetap berjalan (beberapa pengguna keluar, yang dapat diterima secara bisnis saat ini).

Tetapi ada satu masalah besar. Saya berharap beban pada server memcache akan lebih atau kurang terdistribusi secara merata. Tapi ternyata tidak!

Jika saya melihat "Max Network Out (Bytes)" di CloudWatch, maka saya dapat melihat bahwa bebannya kira-kira dalam perbandingan 10: 5: 1. Dengan kata lain, bandwidth jaringan Masuk dan Keluar, server pertama 10 kali lebih banyak dari yang ketiga. Dan server kedua adalah 5 kali lebih banyak dari yang ketiga.

Ada ide?

Kundra
sumber
1
Empat webserver front-end berhasil menabrak server memcached yang hanya menyimpan sesi? Saya ragu.
womble
@ Womble: Baiklah, izinkan saya lebih tepat. Server menyimpan data sesi, dan juga cache (kami menyimpan banyak hal). Sekarang kita membagi sesi pada 3 server (seperti dijelaskan di atas), dan juga cache pada 3 server tambahan. Perilaku ini sama pada server cache juga -> beban dibagi dalam rasio 10: 5: 1 (kurang-lebih).
Kundra

Jawaban:

0

Mengubah urutan IP memcache untuk session.save_pathparameter mungkin mengubah rasio distribusi sesi dari server memcache. Misalnya pada server web 1:

session.save_path = tcp://ip1.port, tcp://ip2.port, tcp://ip3:port

di server web ke-2:

session.save_path = tcp://ip2.port, tcp://ip3.port, tcp://ip1:port

di server web ke-3:

session.save_path = tcp://ip3.port, tcp://ip1.port, tcp://ip2:port

di server web ke-4:

session.save_path = tcp://ip1.port, tcp://ip3.port, tcp://ip2:port
Uğur Aslan
sumber