English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

konuk
1 / ?
derslere geri dön

Almost Every Web Servisi Önünde Ne Durur

Hoşgeldiniz

Eğer bir tarayıcıda example.com girersen, gerçekten uygulayı çalıştıran makineye neredeyse hiç ulaşmazsın. Gerçekleştiren bir makineye ulaşır ve bu makineyi forward yapar. Bu yönlendirme makinesi bir adı vardır: geriye yönelik proxy.

Bu ders, ne yapar öğrenir, hemen her public web hizmeti neden bir geriye yönelik proxy önünde saklanır ve aynı anda kenar katmanında ne kadar üç işi üstlenir.

Sonunda anlaman:

- client, proxy ve origin arasındaki farkı

- Bir köke yönelik bir proxy önünde koruma, ölçeklendirme ve parçaları değiştirmeyecek şekilde kimseye fark etmeden ne işe yarar

- Geriye yönelik bir proxy aynı anda üstlenen üç işi: köke saklamak, TLS sonlandırma ve klonlar arasında yükü dağıtma

- Bir istekte tarayıcıdan proxyye, upstream'a ve geri, atlamalarla ne kadar yol kat eder

Sonunda, proxy yerleştirme konusunda emin bir şekilde düşünmeye, kenar katmanında ayrımcılık konusunda düşünmeye ve pahalı olmayan bir köke karşılaştırıldığında stateless proxy katmanının nasıl katlanabileceğini kavrayacaksın.

Forward Proxy vs Geri Proxy

İki Proxy Yönlendirme

Her iki tür de, iki taraf arasındaki bir grup arasında ve trafiği iletmektedir. Farklılık hangi tarafı temsil ettiği üzerinedir.

Forward proxy: Bir grup client önünde durur. Dışarıdaki sunucu, proxy adresi yerine client adresi görür. İşçi çıkış proxy'leri, içerik filtreleri ve SOCKS proxy'leri bu modele uygundur.

Reverse proxy: Bir grup sunucu önünde durur. Dış dünya (kullanıcılar) proxy adresine konuşur; kullanıcılar, gerçekten bir sunucu arkasında saklanıyor olduğunu bilmez. Almost her public web service bunu kullanır.

Mnemonic: Bir forward proxy, client'leri sunuculardan gizler. Bir reverse proxy, client'leri sunuculardan gizler.

Nasıl önemli olduğunu neden düşünmelisin? İş, hata modları ve güvenlik sınırı farklıdır. Bir forward proxy, kullanıcılarının kimine iletişime geçtiğini endişelenir; bir reverse proxy, sunucularına kimin bağlanacağını endişelenir.

Bir client, her iki türde de trafiği gönderir: client -> forward_proxy -> internet -> reverse_proxy -> origin.

Bir küçük şirket, bir sohbet uygulaması çalıştırıyor. Dışarıdan her kullanıcının isteği, gerçek sohbet sunucularının arkasında saklanan bir makineye ulaşmalıdır. Hangi tür bir proxy gerekiyor ve dışarıdaki kullanıcı gerçekten neye bağlanır?

Neden Edge Katmanı Bu Kadar Fazla İş Yapar

Edge Katmanı İşini Kazanır

Bir geri proxy, aynı anda üç işi üstlenir. Her birinin katman için yeterli olduğu; tümünü aynı adres üzerinde taşıyabilen reason why almost every production web architecture looks the same shape at the front.

İş 1: Kökleri gizle. Proxy, bir halka IP'si üzerinde yanıt verir. Arka uçlar, internetin ulaşamayacağı özel IP'lerde bulunur. Proxy'ı ele geçirmek zorunda olan bir saldırgana karşı attacker who wants to hit the origin must first compromise the proxy.

İş 2: TLS sonlandır. Proxy, example.com için sertifikayı tutar ve gelen HTTPS isteklerini şifreler. Arka uçlar, proxy'ye güvendiği bir ağ segmenti üzerinden basit HTTP (veya daha basit iç TLS) ile proxy'a konuşur. Sertifika döngüsü, yenileme ve şifre politikası, bir yerlerde yaşamak üzere lives in one place.

İş 3: Yükü dağıt. Proxy, hangi arka uç tarafından her istekte yanıt verileceğini seçer. Proxy arkasında bir arka uç oluşturur; proxy, bir strateji (döngüsel-merdiven, en az bağlantı, bir başlık üzerinde hash) kullanarak her istekte bir seçer. Kapasiteyi artırmanın yolu, bir arka ucu havuzun içine eklemektir; istemcilere yeni bir adres söylemek zorunda değildir.

Her iş, küçük bir programdır. Birlikte, Python uygulamasından daha fazla tasarım ağırlığı taşıyan sadece 'Caddy'ın önünde bir Python uygulaması' katmanının neden bu kadar basit bir katman gibi göründüğünü açıklar.

Geri proxy, üç işi taşıyor: kökü gizle, TLS sonlandır, yükü dağıt

Üç Tümünü Tasarlamak

Ekibiniz, tek bir Python sürecinde çalışan küçük bir API çalıştırır. Trafiğin büyüğü kadar ki artık tek bir VM'nin tutamadığı ve VM'nin kendi TLS sertifikası ile halka IP'ye sahip olduğu bir güvenlik inceleği tarafından işaret edildi.

Önüne bir geri proxy koymaya karar verin. Şemayı çizmek için: DNS nereye işaret eder, sertifika nerede bulunur, yük orijinal VM'ye nasıl ulaşır ve orijinal VM'de ne değişir?

Yeni mimariyi geçiş yap. DNS hedefini, TLS sonlandırma yerini, yükün arka uçlara nasıl ulaştığını ve orijinal VM'nin neyi koruduğunu veya kaybettiğini ele al.

Bir bileşeni değiştirip herkesin fark etmediği bir durum yarat

İndirgeme Özgürlük Alır

Bilgisayar bilimi adalarında eski bir ilke vardır: her sorun çözülebilir ek bir indireksiyon katmanı ekleyerek (katman sayısı çok fazla olan sorun hariç). Dağıtılmış sistemlerde en yararlı indireksiyonlardan biri ters proxy'dir.

Size ne sağlıyor:

- Değiştirilebilir backends. Uygulamayı Python'dan Go'ya taşıyalım mı? Bir veri merkezinden diğerine mı göç edelim? Sıfır kesintiyle yeni bir sürümünü yayınlamak mı? Her biri, kararlı bir public adres arkasında gerçekleşir. Kullanıcılar için hiçbir şey değişmez.

- Bağımsız ölçeklendirme. Proxy katmanı TLS katmanında CPU ve bant genişliği üzerine ölçülür. Arka uç katmanı uygulamaya göre ölçülür. Her biri kendi bağımsız ekseninde büyür çünkü farklı makinelerde yaşar.

- Hata izolasyonu. Arka uctta kötü bir dağıtımı yaparsanız, public adresi devre dışı bırakmaz. Proxy kalır; bir düzeltme yüklersiniz veya geri çekersiniz; dünya, arka uç tekrar geri döndüğünde bağlantısını yeniden kurar.

- Bir yerdeki kesmeleme konuları. Hız limiti, coğrafi engelleme, talep günlüğü, başlık yeniden yazma, önbellek, yanıt sıkıştırma: tüm bunlar proxy'de olur. Arka uç kodu sadece uygulama üzerinde odaklanır.

Proxy olmadan her biri uygulamanın içinde yaşamak zorunda kalır. Proxy ile bunlar sadece bir katman olur ve bu katmanı bir ekip yönetir.

Maliyet: başka bir katman işletmek maliyeti. Uyumlu ekipler, proxy katmanının kendisinin stateless ve yatay olarak ölçeklendirildiğini kabul ederler; bir proxy'yi ikiyle değiştirmek için koordinasyon gerektirmez.

Proxy üzerinden Mavi/Sarı Dağıtımı

Ekibiniz API'nin 1. sürümünü üç arka uç VM (mavi havuzu) arkasında bir ters proxy üzerinden çalıştırıyor. Sürüm 2'yi yayınlamak ve yanlış bir şey olursa geri dönüş süresi otuz saniyeden daha kısa sürede yapılabilmesini istiyor.

Sürüm 2'yi çalıştıran üç yeni arka uç VM (sarı havuzu) başlatın, mavi havuzuyla yan yana ama onlara herhangi bir trafik göndermeden önce ama hala trafiği onlara yönlendirmeden önce.

Ters proxy'nin size mavi'den sarı'ya geçiş yapmanıza ve hızlı bir geri dönüş yapmanıza nasıl izin verdiğini ve uygulamanın doğrudan istemcilere açık olmadığı bir durumda neyin mümkün olmadığını açıklayın.

Tarayıcıdan Arka Uygulamaya ve Geri

Bir HTTPS GET İstemini Sonundan Sonuına İzle

Proxy'nın arkasında bir arka uç havuzu önünde https://api.example.com/users/42'yi takip eden bir ters proxy aracılığıyla tek bir HTTPS GET izleyin.

Atım 1: DNS çözümü. Tarayıcı, api.example.com'i bir çözücüden sorar. Çözücü, proxy'nin halka IP'sini (ör. 203.0.113.10) geri verir. Tarayıcı, 203.0.113.10:443'e bir TCP bağlantısı açar.

Atım 2: TLS el sıkışması. Proxy, api.example.com için sertifikasını sunar. Tarayıcı, sertifikayı doğrular, iki taraf arasında bir oturum anahtarı anlaşılır ve şifreli kanal açılır.

Atım 3: TLS içinde HTTP isteği. Tarayıcı, GET /users/42 HTTP/1.1\nHost: api.example.com\n...'yi gönderir. Proxy, isteği şifreler.

Atım 4: Arka uç seçimi. Proxy, api.example.com için upstream havuzuna bakar ve bir arka uç seçer (ör. 10.0.0.21:8000) kendi yük dengesizliği stratejisi kullanılarak.

Atım 5: Üst bilgisayaraya istek. Proxy, 10.0.0.21:8000'e (veya yeniden kullanmak için) bir basit HTTP bağlantısı açar ve isteği yönlendirir. Proxy, başlıkleri değiştirirken ilerler: X-Forwarded-For: <client-ip> ekler, Host: doğru şekilde ayarlar, başlıkleri hop-by-hop gibi siler.

Atım 6: Arka uç işleme. Arka uç uygulaması isteği okur, veritabanına sorgular ve bir JSON cevabı oluşturur.

Atım 7: Üst bilgisayaradan yanıt. Arka uç, cevabı proxy'ye basit HTTP üzerinden geri gönderir.

Atım 8: Kıyı cevabı. Proxy, cevabı yeniden yazabilir veya sıkıştırabilir ve TLS oturumunu yeniden kullanarak şifreler ve tarayıcıya geri gönderir.

Atım 9: Bağlantı yaşam döngüsü. TLS oturumu genellikle sonraki isteğe kadar açık kalır (HTTP/2, bir bağlantı üzerinde birçok isteği aynı anda kullanarak çoklupleksler). Proxy-arka uç bağlantısı genellikle yeniden kullanmak için havuzlanır.

Herhangi bir halka web hizmeti bu şekli takip eden bir varyant izler. Atımları bilmek, gecikmeyi neden olduğu konusunda düşünmek, izlemekte ve başarısızlıkta gizlenebilecek yerleri anlamak yardımcı olur.

İstek yaşam döngüsü: tarayıcı, DNS, proxy, TLS, üst bilgisayar, arka uç, yanıt

Zaman Nerede Kaldı?

Bir kullanıcı API'nin yavaş olduğunu şikayet ediyor. İstemi ölçüyor ve toplamda 850 ms sürenin istemi aldığını görüyor. Arka uç server logları ise isteği 40 ms içinde sunduğunu gösteriyor. Proxy logları ise proxy'nin (TLS el sıkışması + yönlendirme + yanıt yazma) tarafında 50 ms harcadığını belirtiyor.

Diğer 760 ms nerede gitti? En az iki adayı proxy ve arka uç işleme süresinden dışarda yaşayanlar olarak adlandırın ve her birini nasıl ölçülür şekilde ortaya koyacaklarını açıklayın.

Yeni Bir Hizmet için Azaltılmış Kenar Tasarımı

Sendrom

Ön ve geri proxy arasındaki farkı, bir geri proxy'nin aynı anda üç işi üstlendiğini, kökeni gizlemenin her zaman değişiklikler yapmanız gerektiğinde getirilerini anladınız ve isteklerin kenar boyunca hop-hop şeklinde nasıl geçtiğini öğrendiniz.

Şimdi bunu uygulayın.

Küçük bir ekip, notes.example.com adlı yeni bir hizmet başlatma planıyor. Kullanıcılar kişisel notlar okuyacak ve yazacak. Ekip başlangıçta iki arka uç VM çalıştıracak ve bir yıl içinde on taneye çıkacak. Kullanıcılar için HTTPS, yeni sürümler için aşamalı başlatma ve arka uç IP'lerinin kamuya açılması istenmiyor.

notes.example.com için kenar mimarisini tasarlayın. Adres: DNS nereye işaret eder, TLS sertifiketi nerede bulunur, istekler arka uca nasıl ulaşır, ikisi iki taneden on taneye büyüdüğinde ne değişir ve kenarda yerine uygulama içinde eklemeyeceğiniz bir kesinti sorunu (hız limiti, günlüğe kaydetme, başlık değiştirme vb.) belirtin.

Bu Kursun Sonrasında Nereye Gidiyor

Bu Kursun Sonrasında Nereye Gidiyor

Bu ders, kenar katmanının şeklini kurdu. Bu kursta dört ders daha bu üzerinde inşa edilir:

- Devreksiz Yatay Kalıtım: neden bir proxy katmanı (& arkasındaki backends) ucuzca katlanır ve patlamalar altındaki sayıları boyutlandırmak için matematik.

- Giriş / Çıkış Bölünmesi: neden sonunda beklenmedik şekilde başarısız olan tek bir proxy kutu, hem gelen hem giden trafiği işler ve katmanları nasıl böleriz.

- Hata Modları & Patlama Alanı: neden bir yapı değişikliği zincir reaksiyonlara dönüşür ve tekrar önlenmesini sağlayacak suçsuz eylem maddeleri nasıl yazmalısınız.

- Gözlenebilirlik & Kapasite: kenarında ne ölçmeyi öğrenin böylece kullanıcılar önce sorunları fark ederler.

Her ders tek başına geçerlidir. Birlikte size bir web-ölçekte bir filo üzerinde çalışan bir zihinsel model sunar.

Etkin ders: geometry_of_proxies_and_origins bu dersi bir yönlendirme grafiği olarak yeniden sunar ve istek yolunu grafolarla ne söyleyebileceğini keşfeder.

Mükemmel. İleri.