Bir süredir müşterisi olan bir web sitesinde bir süredir çalışıyorum ve sitenin popülerliği büyük ölçüde arttı. Şu anda siteye ev sahipliği yaptığımız tek makinenin istekleri yerine getirmekte zorlandığı aşamadayız ve siteyi olabildiğince optimize ettik (önbellekleme vb.).
Şimdi, soruma yol açan fazladan zorlamayı almak için başka bir sunucu eklemeye ihtiyaç duyduğumuz aşamadayız - bir web çiftliğine taşırken veya kümelenmiş bir barındırmada hangi potansiyel tuzaklar ve uyarılardan haberdar olmam veya siteyi test etmem gerekiyor? Çevre, ortam?
Birkaç olası uyarı var:
Sessions
Oturumlar sunucu tarafında saklanıyorsa, (yani PHP), her iki sunucunun paylaşılan bir oturum depolama yoluna erişmesi gerekir. Aksi takdirde, yük dengeleyici bir sunucudan diğerine istek gönderdiğinde veya muhtemelen (gasp) iki benzersiz oturumu olan bir kullanıcı olduğunda oturumları kaybedersiniz. Bu, AJAX ile özellikle sinir bozucu olabilir. Yük dengeleyicinize bağlı olarak 'yapışkan' oturumlar da mümkün olabilir.
Geçici Dosyalar
Her iki sunucu da aynı/tmp dizinini paylaşmalıdır, eğer istekleri yerine getirmek için çalışırken herhangi bir geçici dosya kullanıyorsanız. Bu, indirmek için sıkıştırılmış geçici bir arşiv olabilir, herhangi bir şeyi izleyen düz bir dosya DB olabilir.
SQLite Kilitleme
SQLite3 kullanıyorsanız, özellikle veritabanı dosyalarını sunucular arasında paylaşmak için NFS gibi bir şey kullanıyorsanız, daha önce hiç su yüzüne çıkmayan bazı tuhaflıklar görebilirsiniz. NFS bu konuda yavaştır, bu yüzden başka bir şey kullanmanızı öneririm. Luster gibi dağıtılmış dosya sistemlerinin kurulması kolaydır veya GFS/OCFS2'yi kullanabilirsiniz.
SSL
Muhtemelen, yük dengeleyicisinin SSL anlaşmasının işleyişini olmasını istersiniz, bu da isteği kendinden imzalı herhangi bir sertifikayı kullanarak arka uç sunuculara yapar.
Bazı genel notlar:
Belirtildiği gibi, dizinleri paylaşmak için yüksek performanslı bir dosya sistemi kullanın. Paylaşılan tüm dosyalar web sunucularından biri değil ağ deposunda yaşamalıdır. Aksi halde, eğer biri düşerse, her ikisi de işe yaramaz, bir nevi amaç yenilir.
Site bir RDBMS kullanıyorsa, iki seçeneğiniz vardır. Her iki düğümde de çalıştırın ve bir master-master senkronizasyonu kullanın ya da DB sunucusunu kendi evine yerleştirin. İkincisini tavsiye ederim çünkü bu, web sunucularınıza daha fazla dirsek odası çalışması için imkan sağlar.
Yük dengeleyiciler de fazlalık gerektiriyor.
Çoğu durumda, asıl site/uygulamanın kendisinde çok az değişiklik yapmadan veya hiç değişiklik yapmadan tek bir sunucudan yük dengeli bir gruba gidebilirsiniz, ancak tüm düğümlerin aynı dosyaları okuyabildiğinden ve yazabildiğinden emin olmanız gerekir. Bu, uygulamanın kendisinde kilitleme için bir mantık eklemenizi gerektirebilir.
Oturum durumu (eğer bir sorunsa) potansiyel bir konudur. Yük dengeleme cihazlarının çoğu yapışkan oturumlar kullanabilir; bu, SERVER1'i başlatmak için biten bir kullanıcının, genellikle tarayıcı hafızasında saklanan bir çerez kullanımı yoluyla SERVER1 üzerinde kalacağı anlamına gelir. Bununla ilgili tek uyarı, SERVER1 herhangi bir nedenle çevrimdışı olduğunda, bu kullanıcının başka bir sunucuda tekrar oturum açması gerektiğidir.
Bunu sunucu grubumdaki oturumları paylaşarak uygulamalarımda (CF uygulamaları) atladım. Bu nedenle bir makinenin düşmesi kullanıcı deneyimini etkilemeyecektir.
İçeriği gruptaki tüm sunuculara doğru şekilde kopyalarken karşılaştığım diğer tek zorluk. Bunu yapmak için bir yazılım var (robokopi, NCH yazılımından Fling kullandım iki tane), ancak senkronizasyonun zamanın% 100'ünde çalışmadığı durumlar var.
Uygulamanız devleti önemsiyor mu? Bir kullanıcının bir makine tarafından sunulan ve başka biri tarafından sunulan başka bir isteği varsa, fark eder mi? Talepler arasında bir çeşit devleti sürdürmeniz gerekiyorsa, her şey daha karmaşıktır ve sorunla başa çıkmanın çeşitli yolları vardır.
Durum hakkında endişelenmenize gerek kalmazsa, sitenizi oluşturmak için iyi bir iş çıkarsınız ve işler bir proxy ve birkaç arka uç sunucusu ile nispeten iyi durumda olmalıdır.
Sürekliliği sürdürmeniz gerekiyorsa, proxy üzerinden yapışkan bir oturum oluşturmanın çeşitli yolları vardır, böylece aynı arka uç sunucusu tek bir kullanıcıdan gelen tüm istekleri yerine getirir, ancak bu oturumların yapışkan kalmasını zorlaştıran birçok şey de vardır. .
Durumu arka uçtaki ortak bir ortamda da kaldırabilirsiniz, böylece her sunucu aynı kullanıcı için aynı durumu yükler. Bunu bir veritabanıyla (çok yavaş) veya memcached gibi bir şeyle yapabilirsiniz.
Siz de veritabanı sunucularının sayısını arttırıyor musunuz? Bu endişe etmek için başka bir sürü problem getirecek.
Oturum sorunlarından bazıları Yığın Taşması Podcast'inde tartışılmıştır Sayı 6
Testler için, benzer bir test kümesine çok çarptığınızdan emin olun, böylece taleplerinizin birçok sunucuya yönlendirildiklerinde nasıl yapıldığını görebilirsiniz, çünkü aynı istemciden farklı arka uçlara yapılan birçok istek, sorun yaşamanız muhtemeldir, Test planınızdaki bir şey bunun gerçekleşmesine neden olur.
Ayrıca Yığın Taşması hakkında okumak isteyebilirsiniz network config