Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

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.

'benim makinemde çalışıyor': sunucuda kütüphane sürümü farklıhedef CPU %60 · tepe 400 istek/s
1 / 138
olcekleme.pypython
  1. import numpy as np
  2. rng = np.random.default_rng(3)
  3. t = np.arange(0, 120, 0.5) # dakika, 30 s adım
  4. yuk = 60 + 340 * np.exp(-((t - 60) / 15) ** 2) # vardiya tepesi
  5. yuk *= 1 + 0.05 * rng.standard_normal(len(t)) # istek/s
  6. MU, HEDEF, SINIR = 50, 0.6, 200 # kopya kapasitesi, CPU, ms
  7. def calistir(olcekle):
  8. n, istek, kuyruk, gec, K = 2, [], 0.0, [], [] # 2 kopyayla başla
  9. for L in yuk:
  10. rho = L / (n * MU) # kopya başına CPU
  11. kuyruk = max(0.0, kuyruk + (L - n * MU) * 30) # karşılanamayan istekler
  12. w = 1000 * kuyruk / (n * MU) # kuyrukta bekleme
  13. gec.append(30 / (1 - min(rho, .95)) + w) # gecikme (ms)
  14. K.append(n)
  15. if olcekle:
  16. ist = np.ceil(L / (MU * HEDEF)) # istenen kopya
  17. istek.append(int(np.clip(ist, 2, 30)))
  18. if len(istek) > 2: # yeni kopya 1 dk'da açılır
  19. n = max(n - 1, istek[-3])
  20. return max(gec), max(K)
  21. g, k = calistir(True)
  22. print(f'ölçekleyici: {k} kopya, en kötü {g:.0f} ms')
  23. g, k = calistir(False)
  24. 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.

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.

olcekleme.pypython

Çıktı

Çıktı burada görünecek.

Nasıl çalışır

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Ş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 →
Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç