Bölüm 9 · Yazılımın içi · Ders 47
Konteyner ve otomatik ölçekleme
Robot filosunun harita servisi yoğun saatte kendini çoğaltıyor
Veri. Depodaki robotlar her hareketten önce harita servisine harita karosu, konum ve rota sorar. Gece yük saniyede 60 istek; vardiya değişiminde 2 saat içinde saniyede 400 isteğe kadar çıkıp iner. Bir kopya saniyede 50 istek işler, yanıt 200 ms'yi geçerse robotlar yavaşlar. Servis bir konteyner imajı olarak paketlenmiş: ölçekleyici her 30 saniyede kopya sayısına karar verir, yeni kopya 1 dakikada açılır.
import numpy as nprng = np.random.default_rng(3)t = np.arange(0, 120, 0.5) # dakika, 30 s adımyuk = 60 + 340 * np.exp(-((t - 60) / 15) ** 2) # vardiya tepesiyuk *= 1 + 0.05 * rng.standard_normal(len(t)) # istek/sMU, HEDEF, SINIR = 50, 0.6, 200 # kopya kapasitesi, CPU, msdef calistir(olcekle):n, istek, kuyruk, gec, K = 2, [], 0.0, [], [] # 2 kopyayla başlafor L in yuk:rho = L / (n * MU) # kopya başına CPUkuyruk = max(0.0, kuyruk + (L - n * MU) * 30) # karşılanamayan isteklerw = 1000 * kuyruk / (n * MU) # kuyrukta beklemegec.append(30 / (1 - min(rho, .95)) + w) # gecikme (ms)K.append(n)if olcekle:ist = np.ceil(L / (MU * HEDEF)) # istenen kopyaistek.append(int(np.clip(ist, 2, 30)))if len(istek) > 2: # yeni kopya 1 dk'da açılırn = max(n - 1, istek[-3])return max(gec), max(K)g, k = calistir(True)print(f'ölçekleyici: {k} kopya, en kötü {g:.0f} ms')g, k = calistir(False)print(f'sabit 2 kopya: en kötü {g:.0f} ms')
Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.
Veri seti
Tüm veri setleri →Bu dersin kodu verisini kendi içinde üretir; indirilecek dosya yok. Kodu yine de aşağıda tarayıcında çalıştırabilirsin.
Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide
Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.
Çıktı
Çıktı burada görünecek.Nasıl çalışır
- Konteyner imajı uygulamayı ve tüm bağımlılıklarını (Python sürümü, kütüphaneler, harita dosyası) tek pakette dondurur. 'Benim makinemde çalışıyor' sorunu biter: aynı imaj dizüstünde, testte ve bulutta aynı davranır.
- Aynı imajdan istediğin kadar kopya açılır. Yük dengeleyici gelen istekleri sırayla (round-robin) kopyalara dağıtır; her kopya yükün eşit payını alır.
- Otomatik ölçekleyici: istenen kopya = ⌈yük / (kopya kapasitesi × hedef CPU)⌉. Hedef %60 ise her kopya %60 dolulukta tutulur; boşluk ani artışı karşılar.
- Monolitte bir modül çökünce bütün servis düşer; mikroservislerde yalnız o parça düşer, harita karoları ve konum çalışmayı sürdürür.
- Şunu dene: hedef CPU'yu %80'e çıkar; daha az kopya açılır ama gecikme 200 ms sınırını aşar. Tepe yükü 800 yap: ölçekleyici 29 kopyaya çıkar.
Neden önemli
Robot filoları, otonom araç simülasyonları ve ROS tabanlı bulut servisleri Docker imajlarıyla dağıtılır; Kubernetes'in yatay ölçekleyicisi bu dersteki formülü kullanır. Saha robotlarının kendisi de çoğu zaman konteynerle güncellenir, böylece laboratuvarda test edilen yazılım bit bit aynısıyla sahaya gider.
ESOF 323, 11. hafta: robotlarda derin öğrenme →