Czy maszyna programistyczna powinna znajdować się w maszynie wirtualnej? [Zamknięte]


41

Ten post Roba Conery'ego (zauważ ślimak) mówi, że środowisko programistyczne powinno być uruchamiane na maszynie wirtualnej. Rozumiem, co mówi i zwykle się zgadzam, ale wciąż czuję się trochę nieswojo. Teraz, gdy wirtualizacja jest tak dojrzała, że ​​nawet systemy produkcyjne działają w maszynach wirtualnych, prędkość nie stanowi problemu, ale, jak mówię, coś mnie niepokoi.

Co sądzisz o wirtualizacji maszyny programistycznej? Czy już to zrobiłeś? Jeśli tak, jakieś pułapki lub przeszkody na drodze?


1
Co Cię dręczy? Nadal jest do wszystkich celów komputerem.

2
możliwy duplikat Myśli o
programowaniu

Co to jest maszyna programistyczna? Praca dewelopera czy wspólne środowisko programistyczne?
user606723,

Odpowiedzi:


29

Moje doświadczenie z programowaniem na maszynach wirtualnych w środowisku korporacyjnym polega na tym, że z powodu wirtualizacji wielu rdzeni napotyka się trudności, trudno jest uzyskać wydajność wymaganą przez wiele maszyn do rozwoju przedsiębiorstw.

Aby pętla wewnętrzna testu kompilacji została przetestowana tak szybko, jak to możliwe, wymaga najlepszych możliwych maszyn - kompilacja i przeprowadzanie testów są oczywiście szybsze na komputerach z większą liczbą rdzeni, ponieważ działania te można dość łatwo wykonywać równolegle * .

Do czasu, aż systemy operacyjne głównego nurtu poradzą sobie z liczbą niestabilnych dostępnych rdzeni, i dopóki oprogramowanie wirtualizacyjne nie będzie w stanie inteligentnie zaoferować pewnego rodzaju kontraktu „do N rdzenia”, zwirtualizowane maszyny programistyczne nie będą oferować takiego samego zwrotu z wydajności jak urządzenia fizyczne.

EDYCJA: To po prostu opowiada o moich osobistych odczuciach związanych z rozwijaniem przy użyciu wirtualnych maszyn wirtualnych, które często są zobowiązane do obniżania kosztów sprzętu, które zwykle działają na serwerach. Uruchamianie lokalnej maszyny wirtualnej wydaje się w większości zbędne, pod warunkiem, że egzekwujesz dobrą dyscyplinę kontroli źródła, chyba że twój projekt wymaga od ciebie opracowania kodu dla wielu systemów operacyjnych.

*: przez co rozumiem podzadania wewnątrz etapów kompilacji i etapów testowania można uruchamiać jednocześnie, NIE kompilując i testując jednocześnie :)


+1 - takie było moje doświadczenie z programowaniem na maszynie wirtualnej. Uderzenie wydajności nie jest warte żadnych potencjalnych korzyści. Maszyna programistyczna po prostu nie może być wystarczająco szybka.
Scott Whitlock,

Nigdy tego nie robiłem (poza testowaniem na wielu platformach), ale w zasadzie nie można było dostosować maszyny wirtualnej do szalonej prędkości? Interfejs użytkownika może być powolny, ale na etapie kompilacji można rzucić dużo żelaza do serwerowni, prawda?
Dan Ray

1
Zasadniczo jasne! Zdefiniowanie maszyny wirtualnej za pomocą segmentów pamięci i 20 procesorów nie jest trudne. Trudność polega na tym, że na tym samym serwerze masz kilkanaście maszyn wirtualnych o wysokiej specyfikacji - jeśli masz 12 maszyn wirtualnych jednoprocesorowych na serwerze 8 procesorów, każda maszyna wirtualna dostaje trochę czasu procesora, gdy jeden procesor staje się dostępny. Jeśli masz 3 maszyny wirtualne z 4 rdzeniami, musisz poczekać, aż 4 procesory staną się wolne, zanim każda maszyna wirtualna uzyska czas procesora. Nie wspominając już o konieczności zmiany kontekstu wszystkich rdzeni ... staje się to trudne. Nie słyszałem o tym, by robiono to zadowalająco na dużą skalę - co nic nie znaczy :)

1
+1 To też jest moje doświadczenie. Jest to nieco zrównoważone przez korzyści wynikające z posiadania punktów kontrolnych i zerowej konfiguracji dla nowych środowisk programistycznych, ale wydajność nie jest najwyższa.
Steven Evers

1
@MarcoDinacci Fair point. Uważam, że przy prawidłowej kontroli źródła, nie należy trzeba być wewnątrz VM, jeśli nie rozwijają się na wielu systemach operacyjnych.

12

Cały mój osobisty rozwój robię na maszynach wirtualnych. Mam kilka konfiguracji maszyn wirtualnych dla różnych środowisk i działa dobrze.

Mam laptopa Dell Studio 15 (Quad I7 2,8 GHz, 8 GB RAM, grafika ATI) z systemem Windows 7 Ultimate 64bit z zainstalowanym VirtualBox. Mam wszystkie maszyny wirtualne z zewnętrznego napędu USB 500 GB zapinanego na laptopie.

VM 0 - Win 7 64-bitowa czysta instalacja jako szablon podstawowy

VM 1 - Win 7 64-bitowy (2 procesory, 4 GB RAM, 120 GB HD) z zestawem narzędzi Visual Studio 2008

VM 2 - Win 7 64bit (2 procesory, 4 gb RAM, 120 gb HD) z zestawem narzędzi Visual Studio 2010

VM 3 - Win 7 64bit (2 procesory, 2 GB RAM, 120 GB HD) z zestawem narzędzi Eclipse Java

Chyba, że ​​robię coś, co wymaga bardzo wysokiego IO, czułem, że wydajność jest dobra i nie wiedziałbym, że jestem w maszynie wirtualnej, jeśli ktoś właśnie podał mi laptopa i powiedział, że zacznij się rozwijać.


1
Uruchomiłem również coś podobnego, jednak dużym problemem jest to, że kiedy masz rozwiązanie Visual Studio z wieloma projektami, czekasz kilka minut na rozpoczęcie projektu / wąskie gardła we / wy dysku. Powiedział, że nadal używam maszyny wirtualnej, gdy nie jest to problem, świetnie jest mieć przenośne środowisko.
Ally

11

Chciałbym dodać, że niektóre typy programowania są znacznie trudniejsze (jeśli nie niemożliwe) za pośrednictwem maszyn wirtualnych.

Zdarza mi się pracować w firmie, w której oferujemy pakiety oprogramowania, które integrują się z wieloma różnymi urządzeniami peryferyjnymi USB (np. Kamery internetowe, drukarki etykiet, czytniki pasków magnetycznych itp.). Nawet gdybym odwzorował porty USB na zwirtualizowany serwer, zauważyłem dziwne i niewytłumaczalne problemy ze sterownikami urządzeń innych dostawców.

Jak powiedziałem, nie sądzę, aby ta sytuacja NIE gwarantowała pracy na zwirtualizowanych maszynach programistycznych, jednak jest to taka, której jeszcze nie odkryliśmy, dlatego utrzymujemy fizyczne stacje robocze dla różnych środowisk w laboratorium.


1
Jest to również ból, jeśli musisz użyć karty bezpieczeństwa dostępu zdalnego do połączenia z TFS lub coś takiego.
Steven Evers

8

W naszej firmie używamy teraz maszyny wirtualnej do programowania i testowania. Chociaż istnieją pewne wady korzystania z maszyn wirtualnych, ich zalety znacznie je przewyższają.

Zanim zaczęliśmy używać maszyn wirtualnych, mieliśmy problemy z konfiguracją maszyn programistycznych dla nowych programistów. Pierwszym zadaniem dla nowego programisty w zespole było zazwyczaj skonfigurowanie własnej maszyny programistycznej. Jesteśmy małą firmą i nie zawsze mamy siłę roboczą, aby pomóc nowym członkom zespołu w skonfigurowaniu ich maszyny. Doprowadziło to do różnych problemów: czasami błąd był odtwarzalny tylko na ich komputerze lub w ogóle nie był w stanie go odtworzyć, aplikacja nie mogła się poprawnie zbudować itp. Wystąpił także problem, że niektórzy z naszych starszych programistów pracowali nad wieloma projektami w środowiskach roboczych, które nie zawsze były kompatybilne.

Po przejściu na maszyny wirtualne wszystko się zmieniło. Teraz tylko jedna osoba jest odpowiedzialna za skonfigurowanie środowiska na maszynie wirtualnej ze wszystkim, co jest związane z projektem. Po zakończeniu wszyscy członkowie zespołu otrzymują kopię maszyny wirtualnej. Skraca to czas konfigurowania środowiska dla każdego nowego członka zespołu (kopiowanie maszyny wirtualnej nie powinno zająć więcej niż 1 godzinę). Pozwala nam także pracować równolegle w wielu środowiskach roboczych.

Wady korzystania z maszyn wirtualnych: szybkość. Uderzenie wydajności na maszynie wirtualnej jest widoczne. Na wolniejszych stacjach roboczych może to prawie uniemożliwić rozwój. Jeśli masz dobrą stację roboczą (czterordzeniowy, 8 + GB RAM, SSD) prawdopodobnie jej nie zauważysz.


1
Czy zastanawiałeś się nad pracą nad zoptymalizowaniem łańcucha narzędzi? Jeśli konfiguracja narzędzi jest tak skomplikowana, że ​​nie można ich łatwo zainstalować, być może trzeba trochę przemyśleć narzędzia.
Michael Kohne

Nie chodzi tylko o łańcuch narzędzi, chodzi bardziej o czas konfiguracji maszyny i rozwiązywanie problemów w różnych środowiskach. Dlaczego ktoś miałby spędzać 2 godziny na instalacji / konfiguracji, skoro ktoś już to zrobił?
Christian P

Dlaczego nie możesz utworzyć maszyny deweloperskiej i zrobić obrazu, aby utworzyć dodatkowe wystąpienia? Zakłada się, że wszyscy używacie tego samego sprzętu.
JeffO

@JeffO Masz większą elastyczność dzięki VM, ponieważ nie jest tak zależna od sprzętu. Byłoby dobrze, gdybyśmy wszyscy pracowali na tym samym sprzęcie, ale używamy laptopów / komputerów stacjonarnych.
Christian P

1
Po prostu ciekawy - czy w twoim zespole ludzie wychodzą / przychodzą tak często, że zależy ci na skonfigurowaniu nowej maszyny? Jeśli tak, podejrzewam, że ustabilizowanie zespołu zapewniłoby znacznie większy wzrost wydajności. (
Wydaje

7

Jak wspomnieli inni, zależy to od kilku rzeczy:

  • Jak wygląda twoje środowisko?
  • Czy masz wystarczające prawa dostępu do programowania?
  • Czy Twój sprzęt jest gotowy na tabakę?

Środowisko

Korzystanie z maszyny wirtualnej może pomóc, jeśli pracujesz nad wieloma wersjami projektu; wiele projektów; lub celowanie w inny system operacyjny niż normalnie uruchamiany (system operacyjny hosta). Dużo pracuję w SharePoint i możliwość uruchomienia innego komputera dla różnych wersji wydania jest pomocna, ponieważ mogę po prostu uruchomić inny komputer i mieć dobry obraz stanu GAC / bazy danych. Ponadto, jeśli musisz kierować reklamy do środowiska aplikacji * nix, ale masz komputer z systemem Windows, nadal możesz programować na maszynie wirtualnej (w ten sposób uczę się Ruby w domu, chociaż generalnie pracuję nad platformą .NET). Ogólnie rzecz biorąc, zalecam podczas testowania / programowania rozwoju ASP.NET na tej samej wersji IIS, pod którą ostatecznie będzie działać aplikacja (to samo uzasadnienie dotyczy innych docelowych serwerów). W zależności od wersji systemu operacyjnego mogą występować niewielkie, ale krytyczne różnice. Zauważ, że nie oznacza to, że powinieneś kodować do określonej wersji IIS / OS, ale bądźmy szczerzy, naprawdę, naprawdę musi działać tam, gdzie zamierzasz ją wdrożyć, nie tylko na komputerze lokalnym.

Maszyny wirtualne również (w zależności od używanego oprogramowania) umożliwiają robienie migawek bieżącego stanu komputera i / lub ich klonowanie. Może to być nieocenione podczas tworzenia prototypów i nie musisz martwić się o to, co dzieje się w twoim GAC / Registry / itp. Uważam również, że są one bardzo cenne w przygotowaniu dema klienta przed czasem. Ponieważ środowisko demonstracyjne znajdowało się na maszynie wirtualnej, mogłem kontynuować pracę do momentu pokazania klientowi, co ukończyliśmy, ponieważ pracowałem na innej maszynie .

Wystarczające prawa

Zasadniczo dotyczy to osób, które pracują dla firmy z dość ścisłym zestawem zasad dotyczących praw dostępu. Jeśli nie możesz mieć nieograniczonego administratora na swoim komputerze, byłby to dobry moment na pracę na maszynie wirtualnej. Zazwyczaj moce martwią się tylko o zablokowanie systemu operacyjnego hosta, gość może być szeroko otwarty (jeśli chodzi o uprawnienia). Wystąpiły dziwne problemy z profilami mobilnymi, sparaliżowanymi prawami administratora i systemem VS 2010; użycie maszyny wirtualnej pozwoliło mi uniknąć tych problemów.

Czy Twój sprzęt jest gotowy na tabakę?

Sprowadza się to do tego, że obrazy maszyn wirtualnych znajdują się na serwerze, a Twój pilot na nich LUB uruchamiasz je lokalnie. Jeśli działasz na serwerze, najprawdopodobniej będzie to największe obawy, czy zbyt wiele maszyn wirtualnych działa na tym samym sprzęcie. Lokalnie zasadniczo potrzebujesz dużej ilości pamięci RAM i aby zminimalizować częstotliwość przeciążania bufora R / W na dysku twardym. W przypadku podstawowego programowania LOB / SharePoint / ASP.NET odkryłem, że co najmniej 8 GB pamięci RAM i konfiguracja podwójnego dysku twardego działają dobrze w praktyce (na i5, ale pracowałem również z Core 2). Drugi dysk twardy ma największą różnicę w wydajności.

Uwaga: Nie mam żadnych statystyk, które mogłyby to potwierdzać, ale zauważyłem, że Virtual PC ma tendencję do gorszych wyników w porównaniu do VMWare i Virtual Box. Nie mogę rozmawiać z Hyper-V, ponieważ nie pracowałem z tym. Nie zdziwiłbym się, gdyby użycie Virtual PC (jako wstępny sposób korzystania z maszyn wirtualnych) zmęczyło programistę korzystaniem z oprogramowania do wirtualizacji.


5

Jak zwykle: to zależy. Na przykład z pewnością nie poleciłbym go do tworzenia gier komputerowych w czasie rzeczywistym.

Moje osobiste doświadczenie: mam komputer iMac z końca 2009 roku i odkryłem, że Visual Studio 2010 jest zasadniczo bezużyteczny w Parallels Desktop, do momentu, gdy naciśnięcie klawisza w edytorze kodu zajmuje kilka sekund, aby się zarejestrować. Windows w SQL Server Management Studio rozogniskowałby i przełączał fokus najwyraźniej losowo. Właśnie skończyłem z obozem startowym.

Oczywiście nowy mój projekt będzie obejmował aplikację iOS z narzędziem konfiguracyjnym opartym na systemie Windows, więc może być zbyt bolesne, aby nie korzystać z wirtualizacji, ale jeśli technologia wirtualizacji pulpitu nie posunęła się wystarczająco dobrze w ciągu ostatniego roku, Prawdopodobnie po prostu skonfiguruję tutaj inny pulpit.

Jeśli chodzi o testowanie aplikacji serwerowej, to inna sytuacja, jestem szczęśliwy, że mogę to zwirtualizować, ale potrzebuję czasu reakcji w moich aplikacjach programistycznych.


1

Używałem maszyn wirtualnych do programowania i ogólnie rzecz biorąc, nie różni się to znacznie od programowania na własnym komputerze. Jeśli prawidłowo używasz Kontroli źródła, nie ma wielu różnic.

Główne różnice polegają na tym, że jeśli z jakiegoś powodu jesteś offline, nie masz dostępnej maszyny deweloperskiej, więc nie tak świetnie, jeśli dużo podróżujesz lub pracujesz z domu. Nigdy też nie wymyśliłem, jak uruchomić wiele monitorów na pulpicie zdalnym, ale jestem pewien, że to moja wina, a nie problem z tą zasadą. Zwykle używałem mojego głównego monitora do programowania, a drugi trzymałem na komputerze stacjonarnym z pocztą e-mail, przeglądarkami i tak dalej.

Dodam, że jeśli pracujesz w sposób, w którym musisz sprawdzić, czy kod działa na różnych platformach - szczególnie takich jak programowanie instalatorów - to możliwość uruchamiania maszyn wirtualnych dla różnych wersji systemu operacyjnego jest niezwykle przydatna.


2
Nie uruchamiasz maszyn wirtualnych na własnym komputerze?

1
Czasami w środowiskach korporacyjnych ludziom przydzielane są maszyny wirtualne działające w centrum danych, a nie lokalne obrazy maszyn.

Kiedy to zrobiłem, uruchomiłem je na serwerze VMWare.
glenatron

1

Użyłem ich w poprzedniej firmie. Kilka kontroli stron trzecich nie współistniało dobrze z innymi wersjami tej samej firmy. Użyłem również kilku do testowania i debugowania innych systemów operacyjnych (XP vs Vista vs 7). Jeden wirtualny miał VB6 i VS2003 dla starszych produktów. Tak, na typowym komputerze dewelopera może być powolny i kłopotliwy, ale miałem kilka zapasowych dysków twardych, które „podarowałem” i umieściłem wirtualnych na własnych dyskach twardych na ich kontrolerach. Byłem ostatnim facetem, który wciąż korzystał z wirtuozów, a dla niektórych błędów mogłem nad nimi pracować (z powodu problemów z systemem operacyjnym i komponentami).

Niektórzy chłopcy zostali spaleni podczas instalowania oprogramowania w wersji beta, a niektórych wersji beta MS nie można było usunąć, więc byli zmuszeni do korzystania z wirtualnych gier, dopóki nie sformatowali ponownie dysków twardych.

Jeśli chodzi o rozwijanie wirtualnych, radzę uzyskać coś z co najmniej 8 GB pamięci RAM. 16 lub więcej byłoby lepszych, ponieważ każde wirtualne studio wyposażone w studio wizualne potrzebuje około 1,5 GB pamięci RAM hosta, aby działać z prędkością powyżej „lodowatej”. Kupując komputer, uzyskaj także wiele dysków twardych. W przypadku dysków, które wybierzesz ze stosu zapasowego sprzętu, poszukaj dysków o rozmiarze co najmniej dwa razy większym niż rozmiar dysku VHD, który będziesz uruchamiać.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.