VDS yavaş mı geliyor? vCPU sayısı değil, paylaşım oranına bakın
İki paket de "8 vCPU" yazıyorsa aynı şeyi vermiyor olabilir. Overcommit oranını ve NVMe gecikmesini kendi sunucunuzda nasıl ölçersiniz.
"8 vCPU" yazan iki VDS paketi aynı fiyata satılıyorsa, ikisinin aynı şeyi verdiğini varsaymayın. vCPU sayısı bir sunucunun hızı hakkında neredeyse hiçbir şey söylemez — asıl soru o çekirdeğin kaç kişiyle paylaşıldığıdır.
vCPU bir söz değil, bir üst sınır
Sanallaştırmada "8 vCPU" demek "sunucunuz 8 çekirdek görebilir" demektir. Aynı fiziksel çekirdeği kaç sanal sunucuya dağıttığı ise sağlayıcının kararıdır ve genelde yazmaz.
Sektörde buna overcommit (aşırı tahsis) deniyor. 24 çekirdekli bir makineye toplam 96 vCPU satmak teknik olarak mümkündür — oran 4:1 olur. Kimse aynı anda tam kapasite kullanmadığı sürece de çalışır. Sorun, komşunuz bir video dönüştürmeye ya da bir derlemeye başladığında ortaya çıkar: sizin işleminiz çekirdeği bekler ve bunu kendi sunucunuzun içinden göremezsiniz.
Bu, VPS ile VDS arasındaki gerçek farktır. Pazarlama terimleri karışık kullanılıyor ama teknik ayrım nettir:
| VPS | VDS | |
|---|---|---|
| Çekirdek paylaşımı | Paylaşımlı, oran açıklanmaz | 1:1, çekirdek size ayrılır |
| Komşu etkisi | Var | Yok |
| Performans | Değişken | Öngörülebilir |
uLCloud'daki VDS paketlerinde oran 1:1'dir — sattığımız her vCPU'nun arkasında size ayrılmış bir fiziksel çekirdek vardır. Bunu söyleyebiliyoruz çünkü düğümlerimizde satılan toplam çekirdek sayısını fiziksel çekirdek sayısının üstüne çıkarmıyoruz.
Paylaşımı kendi sunucunuzda nasıl ölçersiniz
Sağlayıcının ne dediğinden bağımsız olarak ölçebilirsiniz. top çalıştırın ve st sütununa bakın:
%Cpu(s): 4,2 us, 1,1 sy, 0,0 ni, 93,5 id, 0,2 wa, 0,0 hi, 0,0 si, 1,0 st
st = steal time. Sanal makinenizin çalışmak istediği ama fiziksel çekirdeği başkasına verildiği için beklediği zamanın yüzdesi.
- %0–0,5 — normal. Çekirdek pratikte sizin.
- %1–3 — hafif paylaşım var.
- %5 ve üstü sürekli — ciddi biçimde aşırı satılmış bir düğümdesiniz.
Tek seferlik bakmak yanıltır; yük altındayken bakın. Uzun ölçüm için:
vmstat 5 60
Altmış ölçüm boyunca st sütununu izler. Ortalaması sürekli sıfırın üstündeyse çekirdeğiniz gerçekten sizin değil.
NVMe: kataloglarda yazan sayı yanlış sayı
"NVMe" ibaresi de benzer bir sorun taşıyor. Pazarlama sıralı okuma hızını öne çıkarır — "7.000 MB/s'ye kadar". Bu sayı bir sunucu için neredeyse alakasızdır.
Sıralı hız, tek bir büyük dosyayı baştan sona okurken önemlidir: yedek geri yükleme, büyük dosya kopyalama. Bir sunucunun gerçek işi ise bu değildir. Veritabanı sorgusu, PHP'nin onlarca dosyayı açması, log yazması — hepsi küçük ve dağınık okumalardır. Orada belirleyici olan iki şey vardır:
IOPS — saniyede kaç ayrı işlem yapılabildiği. Gecikme — tek bir işlemin ne kadar sürdüğü.
SATA SSD ile NVMe arasındaki gerçek fark buradadır. SATA arayüzü yaklaşık 550 MB/s'de ve tek bir komut kuyruğunda tıkanır. NVMe doğrudan PCIe üzerinden konuşur ve binlerce paralel kuyruk kullanır. Tipik olarak rastgele 4K okumada SATA SSD ~0,1 ms, NVMe ~0,02 ms gecikme verir. Bir sayfa yüklenirken yüzlerce böyle işlem olduğunu düşünün.
Kendi diskinizi ölçmek için:
fio --name=rastgele --rw=randread --bs=4k --size=1G \
--numjobs=1 --iodepth=1 --runtime=30 --time_based \
--direct=1 --filename=/tmp/fio-test
Çıktıdaki lat (gecikme) ve IOPS değerlerine bakın. Test bitince /tmp/fio-test dosyasını silin.
Paket seçerken gerçekten bakılacaklar
Sıraya koyarsak:
1. Çekirdek gerçekten size mi ayrılmış? Sağlayıcıya doğrudan sorun: "overcommit oranınız nedir?" Net cevap vermiyorsa cevap 1:1 değildir.
2. RAM tipi ve miktarı. ECC bellek, tek bit hatalarını düzeltir ve sunucuda önemlidir. Miktar konusunda gerçekçi olun: RAM'i sonradan yükseltmek genelde kolaydır, ama takas alanına (swap) düşen bir sunucu NVMe'yle bile yavaşlar.
3. Diskin türü değil, davranışı. "NVMe" yazması yeterli değil; yukarıdaki testi kurulumdan sonra çalıştırın.
4. Ağ ve konum. Ziyaretçileriniz Türkiye'deyse Frankfurt'taki bir sunucu ~35 ms ekler. Bu, hiçbir disk hızının telafi etmeyeceği bir gecikmedir.
5. DDoS koruması dahil mi. Sonradan eklenen bir koruma hem pahalıdır hem de saldırı anında eklenmez.
Hangi paket
Kaba bir başlangıç noktası:
- Tek bir web sitesi, orta trafik — 2 vCPU / 4 GB yeter. Darboğaz genelde PHP ve veritabanı ayarlarındadır, donanımda değil.
- Birkaç site ya da bir uygulama + veritabanı — 4 vCPU / 8 GB.
- Veritabanı ağırlıklı iş, çok sayıda eşzamanlı kullanıcı — 8 vCPU / 16 GB ve üstü; burada NVMe gecikmesi en çok fark eden yerdir.
Emin değilseniz küçükten başlayın. Yukarı yükseltmek dakikalar sürer; fazladan ödediğiniz ay geri gelmez.