Ich möchte einen Server erstellen, der zum Hosten virtueller Maschinen verwendet wird. Diese virtuellen Maschinen würden verschiedene Rollen spielen, wie zum Beispiel:
- Datenbankserver
- JBoss-Anwendungsserver
- Eclipse-Entwicklungsinstanzen (Java EE, Scala usw.)
Die Anzahl der Benutzer, die gleichzeitig auf den Server zugreifen, beträgt etwa 5 Personen. Das Betriebssystem kann entweder Windows oder Linux sein, je nachdem, was besser funktioniert. Die Benutzer benötigen grafischen / Desktop-Zugriff auf die Eclipse-Entwicklungsinstanzen.
- Wie kann ich herausfinden, welche Hardwarespezifikationen ich benötige, um eine bestimmte Anzahl von Benutzern und virtuellen Maschinen ausreichend zu unterstützen? Gibt es Richtlinien zu Mindestressourcen pro Benutzer usw.?
- Angenommen, die Entwickler befinden sich physisch in der Nähe des Servers. Wäre es dann machbar, eine Mehrplatzbox mit mehreren Display-/Tastatur-/Maus-Sets einzurichten und jedem Benutzer einen Gast, eine Tastatur, eine Maus und einen Displaykopf zuzuweisen? Wie würden die Software und Hardware dieses Setups aufgebaut sein?
Antwort1
Wie kann ich herausfinden, welche Hardwarespezifikationen ich benötige, um eine bestimmte Anzahl von Benutzern und virtuellen Maschinen ausreichend zu unterstützen? Gibt es Richtlinien zu Mindestressourcen pro Benutzer usw.?
Schauen wir uns die verschiedenen Fälle für die Software an, die Sie ausführen möchten:
- Datenbankserver
Wenn Sie einen Datenbankserver haben, der von allen Entwicklern gemeinsam genutzt wird, sollten Sie Ihren Datenbankserver mit Zugriff auf viele CPU-Kerne und so viel RAM wie möglich betreiben. Eine schnelle (aber nicht unbedingt große) Festplatte ist wichtig. Die Festplattengröße hängt davon ab, ob Sie planen, Daten im gesamten Produktionsmaßstab für die Entwicklung zu speichern, oder ob Sie mit ein paar Gigabyte auskommen. Ein Datenbankengpass wäre eine schlechte Sache, aber bedenken Sie, dass die Arbeitslast einer Entwicklungsdatenbank sich stark von der Arbeitslast einer Produktionsdatenbank unterscheiden kann. Erstere ist wahrscheinlich kleiner und beinhaltet mehr ineffiziente Abfragen (während die Abfragen noch entwickelt werden und die Daten durch Ad-hoc-Abfragen untersucht werden), während bei einer Produktionsdatenbank wahrscheinlich optimierte Abfragen ausgeführt werden und diese mit riesigen Datensätzen arbeitet, die (hoffentlich) größtenteils im RAM zwischengespeichert sind.
- JBoss-Anwendungsserver
JBoss wird hauptsächlich CPU-Zeit (beim Ausführen von Servlets), viel RAM (weil es Java ist) und Netzwerkbandbreite nutzen. Wie eine Datenbank kann auch ein fortgeschrittener Anwendungsserver von mehreren Kernen profitieren. Die beste Möglichkeit, die richtige Anzahl virtueller Kerne zu ermitteln, besteht darin, es mit unterschiedlichen Kernzahlen zu testen. Als allgemeine Regel gilt jedoch: Weisen Sie nie mehr virtuelle Kerne zu, als Sie physische Kerne haben.
- Eclipse-Entwicklungs-Desktopumgebungen
Das ist knifflig. Eclipse selbst verbraucht mehrere hundert Megabyte RAM, aber diese Zahl sollte relativ konstant und konstant bleiben, sobald alle Ihre Plugins geladen sind. Sie sollten also prüfen, wie viel RAM Sie basierend auf der Anzahl der ausgeführten Plugins benötigen. Die einfachsten Eclipse RCP-Anwendungen können nur 10 oder 20 MB RAM verwenden, aber eine vollwertige JavaEE-Umgebung mit GEF-Tools, Versionskontrolltools und Datenbanktools kann über ein Gigabyte Speicher verbrauchen. Die Kompilierung von Java-Quelldateien ist nicht so abhängig von der CPU wie nativer Code, kann aber dennoch von mehreren Kernen profitieren. Im Allgemeinen werden Ihre Eclipse-Instanzen jedoch wahrscheinlich relativ weniger Ressourcen (CPU, RAM, Festplatte) verwenden als die Datenbank- oder JBoss-Instanzen.
Insgesamt sollten Sie bei fünf Benutzern und einigen serverseitigen Anwendungen, die bekanntermaßen ressourcenhungrig sind, nach High-End-Geräten suchen. Ohne Markennamen zu nennen, so etwas wie: Quad-Core, 24 GB RAM oder mehr, vielleicht eine SSD oder ein schnelles Hardware-RAID-Array aus Festplatten.
Angenommen, die Entwickler befinden sich physisch in der Nähe des Servers. Wäre es dann machbar, eine Mehrplatzbox mit mehreren Display-/Tastatur-/Maus-Sets einzurichten und jedem Benutzer einen Gast, eine Tastatur, eine Maus und einen Displaykopf zuzuweisen? Wie würden die Software und Hardware dieses Setups aufgebaut sein?
Zunächst etwas Vorrede:HierUndHier.
Was Sie schnell lernen werden, ist, dassEs gibt viele Möglichkeitenund es gibt keinen klaren Marktführer in diesem Bereich. Es gibt keinen offensichtlichen Weg, den 99,9 % der Leute nutzen. Manche nutzen überhaupt keine Virtualisierung. Manche nutzen mehrere Instanzen von Xorg. Manche nutzen Windows Multipoint Server. Manche nutzen ... Sie verstehen schon. Es ist definitiv eine machbare Konfiguration, insbesondere für nur fünf Benutzer ... der Vorteil ist, dass Sie nicht für jede Person einen Desktop-PC brauchen, sondern nur einen Monitor/eine Tastatur/eine Maus. Der Nachteil ist, dass Sie einen leistungsfähigeren zentralen Server brauchen, um alle Benutzer zu unterstützen, und die Softwarekonfiguration ist komplexer.
Für eine Mehrplatzkonfiguration benötigen Sie genügend Grafikkarten, damit Sie über genügend Anschlüsse für alle benötigten Monitore verfügen. Außerdem benötigen Sie einen USB-Hub für alle Tastaturen und Mäuse.
Beachten Sie, dass Sie, wenn Sie sich für eine Mehrplatzkonfiguration entscheiden, in Grafikkarten (und möglicherweise Mehrplatzsoftware) investieren, was Sie an Entwickler bindet, die physisch am Server arbeiten. Wenn Sie sich also später dazu entschließen, einen weiteren Entwickler hinzuzuziehen, der in einem anderen Teil der Welt arbeitet, kann dieser nicht (einfach) Ihrem bestehenden Setup beitreten, indem er sich einfach einen Stuhl heranzieht und eine Tastatur/Maus/einen Monitor mitbringt. Es kann auch schwierig sein, Ihr Setup auf weitere Entwickler auszuweiten, wenn Sie das Portlimit Ihrer Grafikkarte erreicht haben.