Persyaratan: Gunakan Nginx untuk membangun proxy terbalik, bertanggung jawab untuk menjadwalkan semua permintaan, backend dikembangkan oleh ASP.NET MVC, dan disebarkan ke beberapa server yang berbeda, membentuk kluster backendInformasi sesi tidak dapat dibagikan, mengakibatkan beberapa permintaan tidak diproses dengan benar。 Masalah berikut akan muncul:
ASP.NET Situs web dapat disebut sebagai berikut:
Solusi yang umum digunakan adalah sebagai berikut:
Gunakan database untuk menyimpan SESSION
Karena setiap server perlu menggunakan sesi yang sama, kita dapat menyimpan sesi dalam database yang sama, setiap kali kita mengakses, kita pergi ke database untuk memeriksa apakah ada sesi ini atau apakah sesi ini telah kedaluwarsa, dan kemudian kita dapat menyinkronkan sesi beberapa server;
Merit:Menggunakan metode ini sederhana, nyaman, dan mudah untuk memulai;
Kekurangan:Menggunakan database untuk menyinkronkan sesi akan meningkatkan IO database dan meningkatkan beban pada database. Pada saat yang sama, setiap akses perlu mencegat permintaan dan mengkueri database, menghasilkan lapisan akses tambahan dan waktu sesi database yang terbuang.
Gunakan mekanisme caching seperti Memcache atau Redis untuk menyimpan SESSION
Menggunakan mekanisme caching terdistribusi seperti memcache atau redis untuk menyimpan data sesi adalah solusi populer untuk penyeimbangan beban dan sesi sinkron di banyak proyek skala besar. Prinsipnya adalah bahwa proyek menggunakan cache memcache atau redis di tempat yang sama, ketika pengguna masuk, sesi akan disimpan di cache, dan kemudian tidak peduli server proyek mana yang diakses, cache sesi akan diperoleh dari tempat yang sama, sehingga sinkronisasi sesi mudah direalisasikan;
Merit:Menggunakan cache untuk menyinkronkan sesi tidak akan meningkatkan beban pada database, Anda juga tidak perlu menilai secara manual apakah sesi ada atau kedaluwarsa, menghilangkan beberapa logika bisnis.
Kekurangan:Memcache atau Redis membagi memori menjadi banyak spesifikasi blok penyimpanan, dan ada blok dengan ukuran, yang juga menentukan bahwa memcache atau Redis tidak dapat memanfaatkan memori sepenuhnya, yang akan menghasilkan fragmentasi memori, dan jika blok penyimpanan tidak mencukupi, juga akan terjadi luapan memori.
Manfaatkan pola ip_hash di Nginx
Teknik ini, juga dikenal sebagai pemeliharaan sesi, adalah teknologi ip_hash dalam nginx yang memungkinkan Anda untukPermintaan dari alamat IP tertentu disematkan ke server aplikasi backend yang sama, sehingga klien dan backend di bawah IP ini dapat membuat sesi yang stabil.
(Tetapi ada juga kerugian, jika jaringan operator lebih fluktuatif dan tidak stabil,IP keluar bersifat dinamisYa, akan ada masalah dengan metode ini. )
Metode pengujiannya adalah membuka dua situs berdasarkan buruh pelabuhan,Anda perlu membuat file index.html baru di bawah direktori /data/testsite/a dan /data/testsite/b, masing-masing, perintahnya adalah sebagai berikut:
Akses melalui browser seperti gambar di bawah ini:
Jika Anda membuat kontainer nginx baru berdasarkan Docker, tanpa menggunakan teknologi ip_hash, permintaan dapat dikirim ke server backend yang berbeda, seperti yang ditunjukkan pada gambar di bawah ini:
Dengan menggunakan teknologi ip_hash, buat file /data/testsite/nginx.conf baru dengan konfigurasi berikut:
Perintah startup Docker adalah sebagai berikut:
(Penyimpanan sesi berbasis cookie, yang dapat dikonsultasikan dalam modul lengket, dihilangkan)
Konfigurasi Nginx:Login hyperlink terlihat.
(Akhir)
|