İçeriğe geç
academia.sh

Ders 08 / 12

Barındırma Modelleri

Sunucunun sürekli çalışması gerekliliği, ada dayalı sanal barındırmanın işleyişi ve paylaşımlı, sanal, adanmış ve yönetilen modeller arasındaki ödünleşimler.

İçindekiler

Önceki ders ornek.test adının 192.0.2.10 adresini gösterdiğini kurdu. Geriye şu soru kalır: o adreste ne vardır?

Yanıt, İstemci–Sunucu Modeli dersinde yazılan programın bir benzeridir: bir bağlantı noktasında bekleyen, isteği alıp yanıtlayan bir süreç. Bu ders, o sürecin nerede ve nasıl çalıştırıldığını ele alır.

Barındırmanın Çözdüğü Sorun

Sunucu programının çalışması için üç koşulun sağlanması gerekir; üçü de daha önceki derslerde ayrı ayrı kurulmuştu.

Kararlı ve erişilebilir bir adres. IP Adresi Kavramı dersinde görüldüğü gibi özel adresli bir makineye dışarıdan bağlanılamaz ve otomatik atanan adresler değişir. Sunucunun genel ve değişmeyen bir adrese gereksinimi vardır.

Sürekli çalışma. İstemci–Sunucu Modeli dersinde kurulduğu üzere sunucu, isteğin ne zaman geleceğini bilmez; her an dinliyor olmalıdır. Bu, makinenin kapanmaması, ağ bağlantısının kesilmemesi ve sürecin çökerse yeniden başlatılması demektir.

İşletme. Donanımın arızalanması, yazılımın güncellenmesi, yedeklerin alınması ve yükün artması ele alınmalıdır.

Barındırma (hosting), bu üç koşulun bir hizmet olarak sağlanmasıdır. Bir kuruluşun kendi binasında sürekli çalışan bir makine bulundurması da barındırmadır; aradaki fark koşulları kimin karşıladığıdır.

Bir Adres, Birden Çok Ad

Barındırmanın işletilebilir olmasının teknik dayanağı, bir adresin birden çok alan adına hizmet verebilmesidir. Adresler sınırlı bir kaynaktır; her alan adı için ayrı bir adres gerekseydi maliyet çok yüksek olurdu.

Sorun şudur: paket adrese gelir, adres tek bir makineyi gösterir. Sunucu, isteğin hangi alan adı için yapıldığını nereden bilecektir?

Yanıt, isteğin kendisinde taşınır. İstemci, bağlandığı adı isteğin içinde Host başlığıyla bildirir. İstemci–Sunucu Modeli dersindeki çıktıda bu satır zaten görünmüştü:

> GET / HTTP/1.1
> Host: ornek.test:8080

Sunucu bu başlığa bakarak hangi siteyi sunacağına karar verir. Bu düzene ada dayalı sanal barındırma (name-based virtual hosting) denir.

Aşağıdaki sunucu tek bir adres ve bağlantı noktasında dinler, ancak iki ayrı site sunar:

from http.server import BaseHTTPRequestHandler, HTTPServer

SITELER: dict[str, bytes] = {
    "ornek.test": b"<h1>Ornek Sitesi</h1>\n",
    "deneme.test": b"<h1>Deneme Sitesi</h1>\n",
}


class Isleyici(BaseHTTPRequestHandler):
    protocol_version = "HTTP/1.1"

    def log_message(self, bicem: str, *arg: object) -> None:
        pass

    def do_GET(self) -> None:
        ad = self.headers.get("Host", "").split(":")[0]
        govde = SITELER.get(ad, b"<h1>Bilinmeyen konak</h1>\n")
        durum = 200 if ad in SITELER else 404
        self.send_response_only(durum)
        self.send_header("Content-Type", "text/html; charset=utf-8")
        self.send_header("Content-Length", str(len(govde)))
        self.end_headers()
        self.wfile.write(govde)


HTTPServer(("127.0.0.1", 8080), Isleyici).serve_forever()

Sunucu çalışırken üç istek yapılır. Üçü de aynı adrese gider; yalnızca bildirilen ad değişir.

curl -s --resolve ornek.test:8080:127.0.0.1  http://ornek.test:8080/
curl -s --resolve deneme.test:8080:127.0.0.1 http://deneme.test:8080/
curl -s --resolve baska.test:8080:127.0.0.1  http://baska.test:8080/
<h1>Ornek Sitesi</h1>
<h1>Deneme Sitesi</h1>
<h1>Bilinmeyen konak</h1>

Üç istek 127.0.0.1 adresinin 8080 numaralı bağlantı noktasına gitti ve üç farklı yanıt aldı. Ayrımı yapan tek şey Host başlığıydı.

Bunun iki sonucu vardır. Birincisi, bir adresi paylaşan siteler birbirini adres düzeyinde göremez; ayrım sunucu programının içinde yapılır. İkincisi, bu başlık zorunludur: bildirmeyen bir istemci, sunucunun hangi siteyi sunacağını belirlemesini olanaksız kılar.

Barındırma Modelleri

Üç koşulun kimin tarafından ve hangi düzeyde karşılandığı, modelleri ayırır.

Paylaşımlı Barındırma

Bir makine, çok sayıda müşterinin sitesini aynı işletim sistemi üzerinde çalıştırır. Yukarıdaki sanal barındırma düzeni doğrudan bu modelin temelidir.

Kaynaklar paylaşıldığı için maliyeti en düşük modeldir ve işletme yükünün tamamı sağlayıcıdadır. Bedeli yalıtımın zayıflığıdır: bir sitenin tükettiği kaynak, aynı makinedeki diğer siteleri etkiler. Yapılandırma seçenekleri sağlayıcının izin verdiğiyle sınırlıdır; işletim sistemi düzeyinde denetim yoktur.

Sanal Özel Sunucu

Bir fiziksel makine, sanallaştırma yoluyla birbirinden yalıtılmış birden çok sanal makineye bölünür. Her müşteri kendi işletim sistemine ve kendi yönetici yetkisine sahiptir.

Kaynaklar tanımlı sınırlarla ayrıldığı için komşu etkisi belirgin biçimde azalır; yazılım seçimi ve yapılandırma müşterinin denetimindedir. Buna karşılık işletim sisteminin bakımı, güvenlik güncellemeleri ve yedekleme müşterinin sorumluluğuna geçer.

Yalıtımın nasıl sağlandığı — ad alanları, denetim grupları ve sanallaştırma — Çekirdek Arayüzleri ve İzolasyon kursunun kapsamındadır.

Adanmış Sunucu

Fiziksel makinenin tamamı tek bir müşteriye ayrılır. Kaynak paylaşımı yoktur; donanım seçimi ve başarım öngörülebilirliği en yüksek düzeydedir.

Maliyet, kullanılsın kullanılmasın makinenin tamamı için ödenir. Donanım arızasının etkisi doğrudandır ve yedeklilik ayrıca kurulmalıdır.

Yönetilen Barındırma

Ayırıcı ölçüt donanım değil, sorumluluğun sınırıdır. Yönetilen bir modelde sağlayıcı yalnızca makineyi değil, üzerindeki yazılımın işletimini de üstlenir: güncelleme, yedekleme, izleme ve ölçekleme.

Müşteri, yapılandırma özgürlüğünün bir bölümünden vazgeçerek işletme yükünden kurtulur. Bu model diğer üçüyle aynı eksende değildir; bir sanal özel sunucu da adanmış bir sunucu da yönetilen biçimde sunulabilir.

Karşılaştırma

Ölçüt Paylaşımlı Sanal özel Adanmış Yönetilen
Yalıtım Zayıf Tanımlı sınırlarla Tam Modele bağlı
Yönetici yetkisi Yok Var Var Sınırlı
İşletme yükü Sağlayıcıda Müşteride Müşteride Sağlayıcıda
Başarım öngörülebilirliği Düşük Orta Yüksek Modele bağlı
Göreli maliyet En düşük Orta En yüksek Hizmete bağlı

Ölçütlerin hiçbirinde tek bir seçenek üstün değildir. Seçim, sitenin gereksinimleri ile işletmeye ayrılabilecek emek arasındaki dengeye bağlıdır.

Durağan ve Devingen İçerik

Barındırma gereksinimini belirleyen bir ayrım da içeriğin nasıl üretildiğidir.

Durağan içerikte sunucu, diskteki bir dosyayı olduğu gibi gönderir. Her istek aynı yanıtı üretir. Bu tür içerik hesaplama gerektirmez ve çoğaltılması ucuzdur.

Devingen içerikte yanıt, istek geldiğinde hesaplanır: veritabanı sorgulanır, kullanıcıya özel bölümler üretilir. Her istek işlemci ve bellek tüketir; ölçeklenmesi durağan içerikten belirgin biçimde güçtür.

Bu ayrım bir yerleştirme kararına yol açar. Durağan içerik, kullanıcılara yakın konumlara dağıtılmış sunucularda çoğaltılabilir. Bu düzende bir kullanıcının isteği kendisine en yakın kopyaya gider; gecikme, Ağ Nedir dersinde kurulduğu üzere yayılma mesafesiyle sınırlı olduğundan kazanç doğrudandır. Devingen içerik ise durumun tutulduğu yere bağlı kalır ve bu biçimde çoğaltılamaz.

Bu yüzden pratikte iki içerik türü ayrılır: sayfanın değişmeyen bölümleri dağıtılmış kopyalardan, kullanıcıya özel bölümleri kaynak sunucudan gelir.

Özet

  • Barındırma, sunucu programı için kararlı bir adres, sürekli çalışma ve işletme koşullarını sağlar.
  • Ada dayalı sanal barındırma, isteğin Host başlığına bakarak tek bir adreste birden çok siteyi sunar; ayrım adres düzeyinde değil sunucu programının içinde yapılır.
  • Paylaşımlı barındırma en düşük maliyet ve en zayıf yalıtımı, adanmış sunucu tersini verir; sanal özel sunucu ikisinin arasındadır.
  • Yönetilen barındırma donanımla değil sorumluluğun sınırıyla tanımlanır ve diğer modellerin üzerine uygulanabilir.
  • Durağan içerik çoğaltılarak kullanıcıya yaklaştırılabilir; devingen içerik durumun tutulduğu yere bağlıdır.

Sonraki Adım

Bu konu, adres satırına yazılan adın nasıl bir sunucuya vardığını baştan sona kurdu: ad yapısı, çözümleme zinciri, kayıtlar ve o adresteki makine. Buna karşın sunucuya varıldıktan sonra ne söylendiği hep aynı iki satırla geçiştirildi. Sonraki konu o alışverişin kendisini açar: isteğin ve yanıtın hangi parçalardan oluştuğunu, durum kodlarının ne bildirdiğini ve sunucunun istekler arasında neden hiçbir şey anımsamadığını ele alacak.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat