Berapa banyak server web yang dimiliki StackOverflow / ServerFault?
Jika jawabannya adalah 'lebih dari satu', apakah itu mencapai Session Stickiness saat pemungutan suara DNS?
domain-name-system
web-server
p.campbell
sumber
sumber
Jawaban:
Situs web besar mungkin "memuat keseimbangan" di beberapa mesin. Dalam banyak pengaturan yang seimbang, pengguna dapat menekan salah satu mesin backend selama sesi. Karena itu, sejumlah metode ada untuk memungkinkan banyak mesin berbagi sesi pengguna.
Metode yang dipilih akan tergantung pada gaya penyeimbangan beban yang digunakan, serta ketersediaan / kapasitas penyimpanan backend:
Informasi sesi disimpan hanya dalam cookie : Informasi sesi (bukan hanya pengidentifikasi sesi) disimpan dalam cookie pengguna. Misalnya, cookie pengguna mungkin berisi isi keranjang belanja mereka. Untuk mencegah pengguna merusak data sesi, HMAC dapat diberikan bersama dengan cookie. Metode ini mungkin paling tidak cocok untuk sebagian besar aplikasi:
Load balancer selalu mengarahkan pengguna ke mesin yang sama : Banyak penyeimbang muatan dapat mengatur cookie sesi mereka sendiri, yang menunjukkan mesin backend mana yang membuat permintaan dari pengguna, dan mengarahkan mereka ke mesin itu di masa mendatang. Karena pengguna selalu diarahkan ke mesin yang sama, sesi berbagi antara beberapa mesin tidak diperlukan. Ini mungkin baik dalam beberapa situasi:
Basis data backend bersama atau penyimpanan kunci / nilai : Informasi sesi disimpan dalam basis data backend, yang semua akses weber memiliki akses ke permintaan dan pembaruan. Browser pengguna menyimpan cookie yang berisi pengidentifikasi (seperti ID sesi), menunjuk ke informasi sesi. Ini mungkin metode paling bersih dari ketiganya:
Secara keseluruhan, sebagian besar aplikasi web yang dinamis melakukan sejumlah permintaan basis data atau permintaan toko kunci / nilai, sehingga basis data atau penyimpanan kunci / nilai adalah lokasi penyimpanan logis dari data sesi.
sumber
Jika pertanyaan Anda adalah bagaimana mempertahankan sesi di beberapa server web front-end, maka jawabannya biasanya menggunakan database terpusat. Alih-alih mengandalkan contoh server web untuk melacak file sesi pada sistem file lokal, Anda akan menulis id sesi dan data ke dalam DB pusat, dan semua server web akan mengambil data dari sana sebagai gantinya.
sumber
Menggunakan nemcached tampaknya menjadi solusi yang baik tidak seperti yang disebutkan oleh @ David Pashley
Ini berarti memiliki instance memcached jarak jauh yang dibagikan oleh semua server dan menggunakan ekstensi PECL memcache yang menyediakan pengendali sesi sendiri.
Hanya perlu mengubah dua parameter dalam konfigurasi php!
Berikut ini adalah tutorial yang bagus http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/
sumber
IIRC, di DotNetRocks # 440 mereka mengatakan satu periode server. Tidak tahu apakah itu masih terjadi.
Sunting: Sebenarnya itu adalah Hanselmin # 134 . Maaf.
sumber
Anda dapat mengatur cookie.
Anda dapat menghitung hash IP jarak jauh (pada host jarak jauh yang paling sederhana dan ganjil pergi ke server A, bahkan host bernomor pergi ke server B).
Sepertinya Anda juga dapat melakukannya melalui beberapa nilai yang tetap dengan sistem sumber jika Anda menggunakan terowongan ssl.
Biasanya masing-masing mekanisme di atas memerlukan server "reverse proxy" atau semacam penyeimbang beban. Penyeimbang beban menerima lalu lintas dan kemudian mengarahkannya ke server mana saja yang awalnya memiliki sesi, berdasarkan pada salah satu kriteria di atas.
Namun, saya tidak yakin apa yang Anda maksud dengan "polling DNS"
sumber
a) Anda dapat menyimpan informasi sesi dalam cookie pengguna. Lihat cookie yang diperkeras tanpa kewarganegaraan, yang tidak menyimpan data di sisi server, tetapi mempertahankan status sesi http://www.cl.cam.ac.uk/~sjm217/papers/protocols08cookies.pdf . b) Anda dapat mengubah penyimpanan backend sesi ke database atau memcached. Untuk menghilangkan satu titik kegagalan, Anda dapat mengatur replikasi basis data atau beberapa simpul yang telah di-cache. Perhatikan, memcached direkomendasikan dalam pengaturan seperti itu di mana kehilangan status pengguna dalam sesi bukanlah kesalahan besar dan tidak membuatnya sangat tidak senang. Untuk kasus-kasus di mana kondisi pengawetan sangat penting, gunakan basis data. Baik PHP, Django dan Rails memungkinkan pengembang untuk menulis backend sesi kustom.
sumber