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?
productivity
configuration
development-environment
virtualization
Anton Gogolev
źródło
źródło
Odpowiedzi:
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 :)
źródło
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ć.
źródło
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.
źródło
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.
źródło
Jak wspomnieli inni, zależy to od kilku rzeczy:
Ś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.
źródło
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.
źródło
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.
źródło
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ć.
źródło