Architektura MXC i modele kompozycji

MXC oddziela zamierzenie obciążenia od mechanizmu platformy, który uruchamia obciążenie. Aplikacja hosta używa zestawu SDK .NET, TypeScript lub Rust do opisywania uprawnień zasobów i żądania wykonania. MXC tłumaczy żądanie na operacje backendu kontenera na bieżącym hoście.

To podejście zapewnia aplikacjom spójną powierzchnię integracji, nie twierdząc, że każde zaplecze zapewnia te same możliwości lub właściwości izolacji.

Warstwy architektury

Integracja z usługą MXC ma cztery główne warstwy:

Warstwa Odpowiedzialność
Aplikacja hosta lub środowisko uruchomieniowe agenta Klasyfikuje zadanie, wybiera domyślne ustawienia zaufanej polityki, dostarcza dane wejściowe i obsługuje dane wyjściowe i zatwierdzenia
Zestaw SDK i umowa dotycząca zasad MXC Wykrywa obsługę, konwertuje zamierzenie obciążenia na wersjonowaną konfigurację, uruchamia piaskownice i uwidacznia cykl życia i diagnostykę
Warstwa wykonywania MXC Weryfikuje konfigurację, ustala backend i tłumaczy obsługiwany interfejs na operacje platformy
Backend izolacji Tworzy środowisko wykonywania i wymusza funkcje zasad obsługiwane przez platformę i backend

Aplikacja hosta pozostaje odpowiedzialna za decyzje dotyczące zasad. Agent kodowania może sugerować model lub przydział zasobów, ale nie może wybierać ani rozszerzać własnych uprawnień bez zaufanej logiki lub zatwierdzenia przez człowieka. Kod uruchamiany przez hosta poza usługą MXC pozostaje poza izolacją obciążenia.

Ustawienia zasad, konfiguracji i środowiska wykonawczego

Zasada opisuje, do czego może uzyskiwać dostęp obciążenie robocze. Żądanie wykonania dodaje, co należy uruchomić, gdzie to uruchomić i którego mechanizmu kontenera użyć. Ustawienia środowiska wykonawczego udostępniają wartości wymagane do uruchomienia, takie jak punkt końcowy już uruchomionego serwera proxy.

Zestawy SDK w wersji 1 mają te ustawienia w jednym pliku ContainerRequest. Jego właściwości systemu plików, sieci i interfejsu użytkownika opisują dostęp, a jego polecenie, katalog roboczy, środowisko, limit czasu i właściwości izolacji opisują wykonywanie. Zestaw SDK konwertuje żądanie na stabilny 1.0.0 kontrakt schematu, więc nie musisz określać wersji schematu.

Konfiguracja wykonywania JSON nie jest zamienna z serializowanym obiektem zestawu SDK. Na przykład właściwości timeoutMs i ui.allowInputInjection żądania odpowiadają ustawieniom process.timeout i ui.injection konfiguracji. Użyj typów zestawu SDK lub schematu dla wersji konfiguracji, którą tworzysz.

Jednorazowe i świadome stanu cykle życia

Usługa MXC obsługuje dwa wzorce cyklu życia.

Wykonanie jednorazowe tworzy sandbox, uruchamia jedno obciążenie i likwiduje sandbox. Służy do niezależnych narzędzi agentów kodujących, generowanych poleceń, kompilacji, testów i skryptów. Nowa wąska piaskownica dla każdego działania ogranicza zachowywany stan i zmniejsza presję na utworzenie jednej szerokiej zasady.

Wykonywanie świadome stanu obejmuje pięć faz: prowizjonowania, uruchamiania, wykonywania, zatrzymywania i deprowizjonowania. Inicjowanie zwraca nieprzezroczyste ContainerId, które obiekt wywołujący przekazuje bez zmian do późniejszych faz, a obiekt wywołujący może wykonać wiele poleceń przed zamknięciem. Użyj tego wzorca tylko wtedy, gdy obciążenie zależy od stanu persystentnego, takiego jak profil agenta, zainstalowane narzędzia, konfiguracja lub środowisko systemu operacyjnego. W środowisku MXC 1.0 interfejsy API cyklu życia V1 SDK obsługują IsolationSession i WSLc.

Wykonanie obsługujące stan nie powoduje, że MXC jest właścicielem stanu. Backend jest właścicielem zasobu sandboxa, a obiekt wywołujący przechowuje jego identyfikator i zarządza cyklem życia. Zatrzymywanie wykonywania i zwalnianie zasobów to różne operacje; to, który stan przetrwa zatrzymanie, zależy od zaplecza.

Uruchamianie, tworzenie procesów i wykonanie w PTY opisują sposób interakcji hosta z uruchomionym procesem, a nie to, jak długo istnieje środowisko. Wywołanie uruchomienia zwraca przechwycone dane wyjściowe po zakończeniu wykonywania. Wywołanie spawn zapewnia hostowi standardowe dane wejściowe, wyjściowe i strumienie błędów na żywo podczas uruchamiania obciążenia. Wywołanie PTY łączy obciążenie z pseudoterminalem, który jest kontrolowany przez hosta, w tym jego rozmiar. Sprawdź wybrany zestaw SDK i backend pod kątem obsługiwanych kombinacji.

Obowiązki hosta

Ustaw limit czasu wykonywania i obsłuż niepowodzenie obciążenia roboczego, niepowodzenie uruchamiania i anulowanie oddzielnie. Anulowanie oczekiwania na zestaw SDK nie musi być tym samym co kończenie obciążenia roboczego. Postępuj zgodnie z zasadami zakończenia i zwalniania zasobów SDK, a następnie odczekaj wymagany czas, aby wykonanie i opcjonalne zarejestrowanie odmowy mogły się zakończyć.

W przypadku wykonywania z obsługą stanu należy zapewnić wykonanie czyszczenia nawet wtedy, gdy późniejsza faza zakończy się niepowodzeniem. Nieudane zatrzymanie nie powinno uniemożliwiać próby usunięcia zasobów, które należą do aplikacji.

Likwidacja środowiska sandbox zwykle nie powoduje cofnięcia zapisów w przyznanych katalogach hosta ani akcji wykonywanych za pośrednictwem dozwolonych usług sieciowych. Celowo wybierz lokalizacje danych wyjściowych i zdecyduj, które wyniki zachować, zanim użyją ich kolejne zadania.

Wybierz typ kontenera

Zacznij od celów i ograniczeń obciążenia roboczego, na przykład:

Zapotrzebowanie na obciążenie Typ początkowy Dlaczego
Polecenia, które wymagają wybranych narzędzi hosta i ścieżek, o niskim koszcie uruchomienia Izolacja procesów Działa bezpośrednio w środowisku hosta z uprawnieniami określonymi w zakresie zadania
Obciążenie wymagające oddzielnego profilu Windows lub sesji interaktywnej Izolacja sesji Oddziela stan użytkownika i sesji obciążenia roboczego od środowiska interakcyjnego użytkownika bez stosowania filtrowania plików MXC, sieci ani interfejsu użytkownika
Obciążenie wymagające oddzielnego jądra lub środowiska operacyjnego gościa Środowisko zwirtualizowane Wykorzystuje granicę izolacji maszyny wirtualnej lub mikro-VM, z zastrzeżeniem możliwości wybranego zaplecza

W systemie Windows izolacja procesów jest powszechnym rodzajem, ponieważ sprawdza się w przypadku wielu obciążeń, które wymagają wybranych zasobów hosta przy niskim koszcie uruchomienia.

Izolacja sesji oddziela użytkowników i sesje, ale nie ogranicza tego, do czego obciążenie ma dostęp. W systemie Windows element IsolationSession odrzuca zasady systemu plików i interfejsu użytkownika. Jego żądanie musi również ustawić egress, ingress i sprzężenie zwrotne hosta na allow, bez reguł sieci ani serwera proxy. Jeśli obciążenie wymaga tych ograniczeń, wybierz backend, który może je wymusić. Aby uzyskać szczegółowe informacje, zobacz Wybór i ustawienia backendu.

Abstrakcyjna intencja, taka jak process, umożliwia usłudze MXC określenie backendu specyficznego dla platformy. Wybierz konkretny backend, jeśli potrzebujesz określonego środowiska operacyjnego lub cyklu życia. Należy pamiętać, że ani niejawna intencja, ani silniejszy mechanizm izolacji nie gwarantuje obsługi każdego mechanizmu sterowania plikami, siecią lub interfejsem użytkownika.

Aby uzyskać wskazówki dotyczące wyboru i linki do szczegółowej dokumentacji zaplecza, zobacz opcje konteneryzacji i obsługę platformy MXC.

Tryb uczenia w architekturze

Tryb uczenia ułatwia tworzenie polityk i diagnostykę obciążeń Windows ProcessContainer. Zobacz Tworzenie i udoskonalanie zasad MXC przy użyciu trybu uczenia.

Wskazówki dotyczące projektowania agentów programistycznych

Jeśli używasz agenta programistycznego w celu wybrania typu kontenera, poproś go o ocenę:

  1. Które systemy operacyjne i architektury procesora musi obsługiwać aplikacja?
  2. Których plików, ścieżek sieciowych, funkcji interfejsu użytkownika, urządzeń i narzędzi hosta wymaga obciążenie?
  3. Czy każde polecenie jest niezależne, czy tożsamość i stan muszą być zachowane między poleceniami?
  4. Jakie ograniczenia dotyczą czasu uruchamiania, użycia zasobów, wdrożenia i interakcji?
  5. Czy obciążenie robocze wymaga systemu Windows, Linux, pełnego pulpitu lub innego środowiska operacyjnego?
  6. Która granica izolacji jest odpowiednia dla założeń dotyczących zaufania i danych obciążenia?
  7. Które żądane funkcje zasad może wymuszać każdy dostępny backend?

Agent powinien porównywać wykonalne typy hermetyzacji, przedstawiać swoje założenia i kompromisy oraz identyfikować nieobsługiwane wymagania. Następnie możesz wybrać odpowiedni typ kontenera i utworzyć zasadę.