Gereksinimler: Tüm isteklerin zamanlamasından sorumlu olan ters proxy oluşturmak için Nginx kullanın, arka uç ASP.NET MVC tarafından geliştirilir ve birden fazla farklı sunucuya dağıtılır, böylece bir arka uç kümesi oluştururOturum bilgileri paylaşılamaz, bu da bazı taleplerin doğru şekilde işlenmemesine neden olur。 Aşağıdaki sorunlar ortaya çıkacaktır:
ASP.NET Web sitesi şu şekilde adlandırılabilir:
Yaygın kullanılan çözümler şunlardır:
SESSION'u depolamak için veritabanını kullanın
Her sunucunun aynı oturumu kullanması gerektiğinden, oturumu aynı veritabanında depolayabiliriz, her eriştiğimizde veritabanına gidip bu oturumun olup olmadığını veya süresinin dolup olmadığını kontrol ederiz ve ardından birden fazla sunucunun oturumunu senkronize edebiliriz;
Liyakat:Bu yöntemi kullanmak basit, pratik ve başlamak kolaydır;
Eksiklik:Veritabanını oturumları senkronize etmek için kullanmak, veritabanının ameliyat oranını artırır ve veritabanı üzerindeki yükü artırır. Aynı zamanda, her erişimin talepleri engellemesi ve veritabanını sorgulaması gerekir; bu da ek bir erişim katmanı ve veritabanı oturum süresinin boşa gitmesine yol açar.
SESSION'u depolamak için Memcache veya Redis gibi önbellek mekanizması kullanın
Memcache veya Redis gibi dağıtık önbellek mekanizmalarının kullanılması, birçok büyük ölçekli projede yük dengeleme ve senkron oturumlar için popüler bir çözümdür. Projenin prensibi, memcache veya redis önbelleğini aynı yerde kullanması, kullanıcı giriş yaptığında oturumun önbellekte saklanması ve projenin hangi sunucusuna erişilirse girilsin, oturum önbelleği aynı yerden alınarak oturum senkronizasyonunun kolayca gerçekleşmesi;
Liyakat:Oturumları senkronize etmek için önbellek kullanmak veritabanına yük artırmaz, ayrıca oturumun var olup olmadığını manuel olarak değerlendirmenize gerek kalmaz, bu da bazı iş mantığını ortadan kaldırır.
Eksiklik:Memcache veya Redis, belleği birçok depolama bloğu spesifikasyonuna böler ve boyutları olan bloklar da vardır; bu da Memcache veya Redis'in belleği tam olarak kullanamadığını belirler; bu da bellek parçalanmasına yol açar ve depolama blokları yetersizse bellek taşması da meydana gelir.
Nginx'te ip_hash deseninden faydalanın
Bu teknik, oturum tutma olarak da bilinir ve nginx'te size şunları sağlayan ip_hash teknolojidirBelirli bir IP adresinden gelen talepler aynı arka uç uygulama sunucusuna sabitlenir, böylece bu IP altında bir istemci ve bir backend kararlı bir oturum oluşturabilir.
(Ancak bir dezavantaj da vardır; operatörün ağı daha değişken ve kararsızsa,Çıkış IP'si dinamiktirEvet, bu yöntemle ilgili sorunlar olacak. )
Test yöntemi, docker temelli iki site açmaktır,/data/testsite/a ve /data/testsite/b dizinleri altında yeni bir index.html dosyası oluşturmanız gerekir, komut şöyledir:
Aşağıda gösterildiği gibi bir tarayıcı üzerinden erişim:
Docker tabanlı yeni bir nginx konteyner oluşturursanız, ip_hash teknolojisi kullanmadan, istek aşağıdaki şekilde gösterildiği gibi farklı arka uç sunuculara gönderilebilir:
ip_hash teknolojisini kullanarak, aşağıdaki yapılandırmayla yeni bir /data/testsite/nginx.conf dosyası oluşturun:
Docker başlatma komutu aşağıdaki gibidir:
(Yapışkan modülde danışılabilen çerez tabanlı oturum tutma maddesi çıkarılmıştır)
Nginx konfigürasyonu:Bağlantı girişi görünür.
(Son)
|