Sobes.tech
Senior

Ako testovať distribuovaný systém?

sobes.tech AI

Odpoveď od AI

Vykonávanie testovania distribuovaného systému si vyžaduje komplexný prístup, ktorý zohľadňuje vlastnosti interakcie komponentov a možné zlyhania.

Hlavné kroky:

  1. Testovanie jednotlivých služieb (Unit/Integration Testing):

    • Kontrola logiky každej mikro služby izolovane.
    • Testovanie interakcie medzi rôznymi modulmi v rámci jednej služby.
    func TestMyServiceLogic(t *testing.T) {
        // Test konkrétnej funkcie
        result := calculateTotal(10, 20)
        if result != 30 {
            t.Errorf("Očakávané 30, ale získané %d", result)
        }
    }
    
  2. Testovanie integrácie služieb:

    • Kontrola správnosti interakcie medzi rôznymi službami.
    • Použitie testovacích prostredí, ktoré simulujú reálne prostredie.
    // Príklad testovania HTTP komunikácie medzi službami
    resp, err := http.Get("http://order-service/api/orders/123")
    // Kontrola stavu odpovede a tela
    
  3. Testovanie API:

    • Kontrola verejného API dostupného pre externých spotrebiteľov alebo iné služby.
    • Použitie nástrojov ako Postman, Swagger Codegen.
  4. Výkonnostné a škálovateľné testy:

    • Hodnotenie priepustnosti, oneskorení a využitia zdrojov pri zaťažení.
    • Použitie nástrojov ako Gatling, JMeter.
    • Kontrola správania systému pri zvyšovaní zaťaženia.
  5. Testovanie odolnosti a spoľahlivosti (Chaos Engineering):

    • Simulácia zlyhaní (vypnutie služieb, sieťové oneskorenia, preťaženie) na overenie reakcie systému.
    • Použitie nástrojov ako Chaos Monkey.
    Typ zlyhania Príklad
    Vypnutie služby Zastavenie inštancie mikro služby
    Sieťové oneskorenie Zavedenie oneskorenia do sieťových paketov
    Strata paketov Imaginácia straty sieťových paketov
    Vysoké zaťaženie CPU Využitie 100 % CPU na serveri
  6. Testovanie bezpečnosti:

    • Kontrola autorizácie, autentifikácie, ochrany pred bežnými útokmi (CSRF, XSS).
    • Použitie penetračného testovania.
  7. Monitorovanie a logovanie:

    • Dôležité pre ladenie a pochopenie správania systému v testovacom a produkčnom prostredí.
    • Použitie nástrojov ako Prometheus, Grafana, ELK Stack.
    // Príklad logovania v službe
    log.Printf("INFO: Spracovanie objednávky %d", orderID)
    
  8. Testovanie nasadenia a konfigurácie:

    • Kontrola správnosti nasadenia služieb a použitia konfiguračných súborov v rôznych prostrediach.

Dôležité je nepretržité testovanie (Continuous Testing) v rámci CI/CD pipeline, ktoré automatizuje vykonávanie testov vo všetkých fázach vývoja.