neden ssl dengeleme yatay ölçeklenebilir yazılım yük dengeleyici örnekleri yok?


9

SSL, yerel oturumlar ve yük dengeleme açısından birbirine bağlı gibi görünen bir sürü sorum var, bu yüzden bu sorunun uzunluğu için şimdiden özür dilerim.

Dosya tabanlı oturumlar kullanan bir web sitem var. Sitenin doğası, çoğunun http olması, ancak bazı bölümlerin SSL olmasıdır. Şu anda, dosya tabanlı oturumlar nedeniyle, herhangi bir SSL isteğinin önceki http istekleriyle aynı sunucuya çarpması gerekir.

Zaman kısıtlamaları nedeniyle, denge artışı http ve SSL trafiğini yüklemek için mümkün olan en kolay şeyi yapmak istiyorum.

Yapışkan yük dengeleme algoritmaları için 2 seçenek var gibi görünüyor:

  • ip tabanlı
  • çerez tabanlı

IP tabanlı çözüm muhtemelen işe yarayacaktır, ancak karma algoritması, bir sunucu çöktüğünde veya eklendiğinde mevcut dosya tabanlı oturum kurulumuyla istenmeyen bir kullanıcının sunucuyu potansiyel olarak değiştirecektir. Ayrıca, bir kullanıcının bir web sitesini tararken ips'i meşru bir şekilde değiştirmesinin teknik olarak mümkün olduğunu da varsayalım.

Çerez tabanlı algoritma daha iyi görünüyor, ancak ssl tarafından şifrelendiğinde çerezi denetleyememe, kendi sorunlarını ortaya koyuyor.

Denge ssl yükleme örnekleri için googling ve ben çerez tabanlı yük dengeleme yapabilir ve başka bir ssl kod çözücü ekleyerek artan ssl yük ile başa çıkabilirim kurulum herhangi bir açık örnekleri bulamıyorum görünmüyor.

Gördüğüm açık örneklerin çoğu, tarayıcı istemcisi ve yük dengeleyici arasında oturan ssl kod çözücüsüne (genellikle donanım, apache_mod_ssl veya nginx) sahiptir. Örnekler genellikle böyle bir şeye sahiptir ( http://haproxy.1wt.eu/download/1.3/doc/architecture.txt adresinden değiştirildi ):

      192.168.1.1 192.168.1.11-192.168.1.14
 ------- + ----------- + ----- + ----- + ----- +
        | | | | |       
     + - + - + + - + - + + - + - + + - + - + + - + - +    
     | LB1 | | A | | B | | C | | D |    
     + ----- + + --- + + --- + + --- + + --- +    
     apache 4 ucuz web sunucuları
     mod_ssl
     HAProxy 

Yukarıdaki örnekte ssl kod çözme kısmı, yatay olarak ölçeklenemeyen potansiyel bir darboğaz gibi görünmektedir.

Ben haproxy baktım, ve birden fazla ssl kod çözücüleri var izin verecek böyle bir şey izin verecek bir 'mod tcp' seçeneği var gibi görünüyor:

              HAProxy
                 |
            -------------
            | |
ssl-dekoder-1 ssl-dekoder2
            | |
        -------------------
        | | |  
      web1 web2 web3

Ancak, böyle bir kurulumda, istemcinin ip'ini kaybedeceğiniz anlaşılıyor çünkü haproxy ssl kodunu çözmüyor: https://cloud-support.engineyard.com/discussions/problems/335-haproxy-not-passing-x-forwarded -için

Ayrıca nginx'e baktım ve yatay olarak ölçeklenebilir ssl-kod çözücülerin açık örneklerini de görmüyorum. Potansiyel bir darboğaz olarak nginx'e sahip birçok insan örneği var gibi görünüyor. Ve en azından bu bağlantı bile seçeneğine sahip olmadığını nginx önermek görünüyor HAProxy benzeri o nginx "bir arka uca TCP bağlantılarını geçen şeffaf desteklemiyor" diyerek ip kaybedecek kurulum nasıl Apache geçmek SSL trafiği üzerinden nginx proxy? .

Sorular:

  • Neden artan trafik ile başa çıkmak için daha fazla SSL kod çözücü ekleyerek kurulumların daha fazla örneği yok gibi görünüyor?
  • SSL kod çözme adımı sadece teorik bir darboğaz olduğu ve pratik olarak konuşursak, gülünç trafiği olan siteler dışında bir kod çözücü esasen yeterli olacak mı?
  • Akla gelen bir başka olası çözüm, belki de bu kadar ssl ihtiyacı olan herkesin merkezi bir oturum deposuna sahip olmasıdır, bu nedenle istemcinin sıralı istekler üzerine hangi web sunucusuna isabet ettiği önemli değildir. Ardından her web sunucusunda mod_ssl veya eşdeğerini etkinleştirebilirsiniz.
  • Yukarıda belirtilen haproksi çözümü işe yarıyor gibi görünüyor (istemci IP sorununun yanı sıra), ancak istemci IP'sini korurken kod çözücü sayısını artırarak çalışacak yapışkan çerez tabanlı bir yazılım yük dengeleyici çözümüne rastlayan biri var, ya da belki de teknik olarak değil mümkün (istemci IP'sini alma isteğini deşifre etmeniz gerektiğinden, bu durumda bir kod çözücü darboğazımız vardır).

Söylediğim her şeyin doğru olduğunu varsayarsak, bunlar benim seçeneklerim gibi görünüyor:

  • ip hashing kullan (potansiyel olarak ips'i potansiyel olarak değiştiren kullanıcılar ve sunucu ekleme ve bırakma senaryoları için kötü)
  • ssl isteğine dokunan ilk program olarak nginx veya mod_ssl kullanın, bu potansiyel bir ssl kod çözme darboğazı olacaktır
  • ssl isteğine dokunarak, yatay ssl ölçeklenebilirliği kazanarak 1. program olarak haproxy kullanın, ancak ssl istekleri için web sunucusu düzeyinde oturum açmış ips olmadan yaşayın (muhtemelen geçici olarak tamam)
  • uzun vadede mobil veya merkezi bir oturum mağazasına geçerek yapışkan oturumları gereksiz hale getirir

Ben womble aslında en basit şey merkezi bir oturum mağaza taşımak için doğru olduğunu düşünüyorum. Muhtemelen başka rastgele düşüncelerle ilgilenmeme rağmen cevabını doğru olarak işaretleyeceğim.
Ocak'ta nerede

Yanıtlar:


8

"En basit şey", tüm ciddiyetiyle, merkezi bir oturum mağazasına taşınmaktır. Gördüğüm her oturum işleme kodu, farklı depolama motorlarını takmayı neredeyse gerektirmediğinde, tüm bu tesisatları yük dengeleyicileri, haproksi, SSL ve geri kalanı ile ayarlamanız gerekir. biraz kod ve çok, çok az ekstra karmaşıklık tüm sorunları çözer.


8

womble, paylaşılan oturum mağazasında her şeyi kolaylaştırır. Cevabına ek olarak, sorunun yük dengeleme kısımlarında biraz genişletebilirim:

Neden artan trafik ile başa çıkmak için daha fazla SSL kod çözücü ekleyerek kurulumların daha fazla örneği yok gibi görünüyor?

Modern çok çekirdekli bilgisayarlar saniyede birkaç bin SSL işlemi yapabilir . Ve bu bir darboğaz haline gelirse, F5 , Citrix, Cisco veya benzeri özel bir cihaz daha da hızlı olabilir. Bu yüzden çoğu site hiçbir zaman iyi bir tek cihaz SSL ve yük dengeleme çözümünü aşmaz.

Söylediğim her şeyin doğru olduğunu varsayarsak, bunlar benim seçeneklerim gibi görünüyor:

İhtiyacınız olursa SSL şifre çözme işlemini yatay olarak ölçekleme seçenekleri vardır.

Yaygın yaklaşım, yüksek kullanılabilirlikteki SSL hızlandırıcı çiftleri için DNS Round Robin kullanmaktır, yani her IP adresi bir çift SSL hızlandırıcısına işaret eden alan adı için birden fazla IP adresi yayınlamaktır.

Bu durumda, kullanıcı oturumunun ortasında DNS TTL zaman aşımına uğrayarak kullanıcıyı başka bir uygulama sunucusuna çarptırabilirsiniz. Bu yaygın bir olay olmamalı, ancak olabilir. Paylaşılan bir oturum deposu ortak çözümdür, ancak başka şekillerde de ele alınabilir.

Örnek olarak, SSL şifre çözme işlemini uygulama sunucusu dengelemesinden ayırabilirsiniz. SSL kullanımı temel yük dengelemeden daha fazla CPU yoğundur, bu nedenle tek bir yük dengeleyici birkaç SSL hızlandırıcısını doyurabilmelidir. Bunun gibi:

Internet --> DNS round robin to multiple SSL accelerators --> plain HTTP to a single HTTP load balancer --> plain HTTP to multiple application servers

Başlangıçta belirtildiği gibi, paylaşılan bir oturum mağazası birçok şeyi basitleştirir ve SSL / yük dengeleme katmanınıza çok fazla karmaşıklık koymaktan neredeyse kesinlikle daha iyi uzun vadeli bir çözümdür.


DNS round robin için +1. Örneğin AWS elastik yük dengelemesinin kullandığı budur.
Alex

3

Ürünler geliştiğinde bunun gibi 2 yıllık sorulara cevap vermek eğlencelidir. Şu anda haproxy, istemcinin IP'sini saf TCP modunda bile bir sonraki atlamaya geçirmesine izin veren PROXY protokolünü desteklemektedir. Ayrıca, SSL grubunun (muhtemelen haproxy sunucularından yapılmış) önünde ilk katman olarak kullanmak istiyorsanız yerel SSL'nin yanı sıra SSL yapışkanlığını da destekler. Görünüşe göre isteğiniz zamanın çok ötesindeydi ve uygulamalara yetişti :-)


1

Burada womble ve Jesper'a katılıyorum. En kolay / en iyi yol kodu düzeltmektir. Tabii ki sistem yöneticileri olarak bu seçeneğe sahip değiliz, ancak bu durumda bile, gerçekten yatay olmasa bile yeterince ucuz modern donanım elde etmek için çekebileceğiniz yeterli numaralar vardır.

Ben sadece istemci-ip kaybetme konusunda endişeleriniz hakkında yorum göndermek istedim. Büyük L7 / proxy çözümlerinden herhangi birinde, istekte bir X-Forwarded-For (veya ne istersen) üstbilgisi ekleyebilirsiniz. Daha sonra isteği alan arka uç web sunucusunda, layer3 istemci ipini günlüğe kaydetmek için kullanılan dosyada aynı değeri günlüğe kaydetmek için günlük dosyası biçimini değiştirebilirsiniz. Bu şekilde herhangi bir günlük ayrıştırma yazılımı farkı görmez (ne zaman kuyrukta ne de size).

Her şey için ödünler var ve bilmeniz gereken kurulum hakkında yeterince şey duymadık, ama yanlış-ha-proxy, nginx ve vernik yanlış üçlüsü ile yük dengelemenizi hareket ettirmek iyi bir fikir olabilir bir proxy katman aracına. Bu, SSL sorununuzu çözmenin yanı sıra önbellekleme, içerik değiştirme ve başlık manipülasyonu gibi bir dizi yeni seçenek sunacaktır.


1

Bazı rastgele düşünceler;)

İlk olarak, dosya tabanlı oturum verilerini kullanmaya karar veren kişiyi vurun. Bir dosya sisteminden veri okumak / yazmak, ihtiyacınız olan verileri çekmek için kaynağa geri dönmekten daha hızlı olamaz. Bu, en KÖTÜ yolu hakkında.

Şahsen bir oturumda veri depolamanın, gerektiğinde doğrudan veritabanından çekmekten daha iyi olduğu bir durum görmedim. Bununla birlikte, memcache veya benzer önbellek stratejilerinin kullanılmasının bir sitenin milyonlarca kullanıcıya ölçeklenmesine yardımcı olabileceğini gördüm, ancak bu, oturumları kullanmakla aynı top parkında bile değil.

İkinci olarak, oturumları hiç kullanmamanın bir numaralı nedenini buldunuz: yük dengeleme. FYI - Yapışkan Stuck olduğu anlamına gelmez. Yapışkan oturumlar açıkken bile, uygulamanızı kullanmanın ortasında kullanıcının başka bir sunucuya karıştırılması olasılığını gerçek anlamda çalıştırırsınız. Bu en uygunsuz zamanlarda olacak. Yapışkan, yük dengeleyicinin kullanıcıyı başladığı sunucuya geri itmeye çalışacağı anlamına gelir , ancak hiçbir şekilde bir garanti değildir.

Bu nokta genellikle oturum geri veritabanında depolamaya yol açar ... Bence bu tamamen başarısız . Oturumun çalışması için her sayfa isteğine yüklenmeli ve yazılmalıdır. Bir veritabanında (yük dengeli sunucular için gerekli) depolandığında, bu iki sunucu sorgusu gerektirir: ilki verileri almak için, ikincisi herhangi bir güncellemeyi yazmak için.

Başarısız olan kısım, kullanıcıların genellikle oturumları kullanmasıdır, bu nedenle kullanıcıların adı gibi şeyleri çekmek için veritabanına geri dönmek zorunda kalmazlar ... Ancak sayfa bir oturumu yüklemek için veritabanını sorgulamak zorundaysa ... mantık problemini burada görebilmelisiniz.

Sadece oturumlar için daha kötü ... çünkü sayfa işlemcisi oturum verisini sayfa yaşam döngüsünün sonunda veritabanına geri yazmak zorunda kalıyor .. bir şey değiştiğinde. Bu, kullanıcının sorgusunu çekmek için tek bir sorgu yerine iki ile sonuçlanır. Her bir sayfa yüklemesi için. Ayrıca, kendi performans etkisi olan verilerin serileştirilmesi ve serileştirilmesi anlamına gelir.

Demek istediğim şu: oturum kötü ve genellikle onsuz daha iyi durumdasınız. Yalnızca bir web sunucusunda çalışan düşük trafikli sitelerin gerçekleşebilecek performans artışına ihtiyacı yoktur; ve bir web çiftliğinde çalışan yüksek trafikli siteler bu nedenle ölçeklendirmede sınırlıdır.


0

Önde Haproxy kullanmak yerine, birden fazla SSL kod çözücüsü arasında kaba dengeleme yapmak için yuvarlak robin DNS'yi kullanabilirsiniz, ardından uygun yük dengelemesi için haproksiye geçirebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.