Erstellen einer verteilten java-Anwendung?
Erste von allen, ich habe eine konzeptionelle Frage, Hat das Wort "verteilt" nur bedeuten, dass die Anwendung auf mehreren Maschinen? oder gibt es andere Möglichkeiten, in denen eine Anwendung betrachtet werden kann, verteilt werden (zum Beispiel, wenn es viele unabhängige Module interagieren zusammen, aber auf der gleichen Maschine befinden, ist dieser verteilt?).
Zweiten, ich möchte ein system bauen, das führt vier Arten von Aufgaben gibt es mehrere Kunden, und jeder wird haben viele Aufgaben, die von jeder Art, um in regelmäßigen Abständen ausgeführt werden. Zum Beispiel: customer1 haben task_type1 heute task_type2 nach zwei Tagen und so weiter, könnte es sein, customer2, wer hat task_type1 ausgeführt werden, zur gleichen Zeit wie customer1 ist task_type1. d.h. es ist eine Notwendigkeit für die Parallelität. Konfiguration für die Ausführung der Aufgaben gespeichert werden in DB und die Ergebnisse dieser Aufgaben werden gespeichert in der DB als gut. die Kunden nutzen das system über einen web-browser (html-Seiten) zur Interaktion mit dem system (im Grunde, konfigurieren von Aufgaben und sehen Sie die Ergebnisse).
Ich dachte über die Verwendung eines rest-webservice (mit JAX-RS), wo die html-Seiten kommunizieren mit und über den backend die Verwendung von threads für die gleichzeitige Ausführung.
Fragen:
- Das klingt einfach, Aber bin ich in die richtige Richtung gehen? oder sollte ich mit anderen Technologien oder Konzepte wie Java Beans zum Beispiel?
2.Wenn mein Ansatz in Ordnung ist, brauche ich eine scripting-Sprache wie JSP oder ich kann senden von html-Formularen direkt auf die rest-urls und erhalten das Ergebnis (JSON z.B.)?
- Wenn ich will, um damit die Anwendung verteilt werden, ist es möglich, mit meiner Idee? Wenn nicht, was müsste ich verwenden?
Sorry für die vielen Fragen , aber ich bin wirklich verwirrt über diese.
task_type1
, task_type2
usw. sehr CPU-intensiv? Haben Sie Test, um zu bestätigen, dass? Gibt es wirklich eine Menge der Benutzer, die die Anwendung zur gleichen Zeit? Kann es sein, dass ein einzelner server die Last bewältigen kann nur gut und das verteilen der Anwendung würde nur die Dinge zu komplizieren, mit keinen zusätzlichen nutzen. 2. nicht davon ausgehen müssen Sie threads, weil "die Aufgaben müssen ausgeführt werden, zur gleichen Zeit". Es sei denn, Sie nutzen mehrere CPUs, eine einzelne Faden zieht tasks aus einer Warteschlange wird wahrscheinlich gut funktionieren.die Aufgaben selbst sind nicht CPU-intensiv sind, aber wenn ich viele Kunden mit vielen Aufgaben könnte dies ein problem in der Zukunft, ich bin am überlegen Skalierbarkeit für die Zukunft. Ich nehme an, ein server handhaben würde, für jetzt. Aber ich wollte wissen, wie man es verteilt, falls ich die brauchen würde. also ich wollte zu verstehen, die Konzepte der Verteilung.
Bezüglich des threads, ich brauche Aufgaben ausgeführt werden zu einem bestimmten Zeitpunkt, zum Beispiel, könnte es sein, task_type1 ausgeführt werden um 10:00 Uhr für customer1 und anderen task_type1 für customer2 auch um 10:00 Uhr. Ich brauche eine Art von Parallelität in der Ausführung. ich.e: Bearbeitung der zwei Aufgaben parallel.
der Begriff "verteilt" wird im Allgemeinen verwendet im Sinne von "läuft auf mehreren Rechnern"
"sollten die Verwendung anderer Technologien oder Konzepte wie Java Beans zum Beispiel" – wenn Sie sich nicht sicher sind, was "Java-Beans" sind, Sie wahrscheinlich sollte nicht sein, zu schreiben versucht, ein verteiltes system. Das klingt wie Sie gerade Maischen Technologie Schlagworte willkürlich zusammen.
InformationsquelleAutor Sami | 2012-07-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich möchte nur hinzufügen, ein Punkt, auf den bereits geposteten Antworten. Bitte nehmen Sie meine Bemerkungen mit einem Körnchen Salz, da alle web-Anwendungen, die ich je gebaut habe auf einem server laufen nur (abgesehen von den Anwendungen bereitgestellt werden, Heroku, die möglicherweise "verteilen" Ihre Anwendung für Sie).
Wenn Sie fühlen, dass Sie benötigen, um Ihre Anwendung verteilen, die für Skalierbarkeit, die erste Sache, die Sie denken sollten, ist nicht web-services und Multi-Threading und Nachrichtenwarteschlangen und Enterprise JavaBeans und...
Die erste Sache zu denken ist der Anwendungsdomäne selbst und was die Anwendung tun werden. Wo wird die CPU-intensive Teile sein? Welche Abhängigkeiten gibt es zwischen den teilen? Tun die Teile des Systems natürlich brechen in parallele Prozesse? Wenn nicht, können Sie das system neu zu gestalten, Sie so zu machen? WICHTIG: welche Daten muss geteilt werden zwischen threads/Prozessen (ob Sie auf demselben oder auf unterschiedlichen Rechnern)?
Die ideale situation ist, wo jeder parallele Threads/Prozess/server kann seinen eigenen chunk von Daten und arbeiten ohne jegliche Notwendigkeit für den Austausch. Noch besser ist es, wenn bestimmte Teile des Systems gemacht werden können, stateless -- staatenlos-code ist unendlich, parallelisierbare (leicht und natürlich). Die häufigere und feinkörnigen Austausch von Daten zwischen parallelen Prozessen ist, desto weniger skalierbar ist, wird die Anwendung. In extremen Fällen können Sie nicht bekommen sogar eine performance-Steigerung aus der Verteilung der Anwendung. (Sie können sehen, diese mit Multithread-code-wenn Ihr threads ständig kämpfen für die gleichen lock(s), Ihr Programm kann auch langsamer mit mehreren threads+CPUs als mit einem thread+CPU.)
Den konzeptionelle Aufteilung der Arbeit ist wichtiger als das, was Werkzeuge oder Techniken, die Sie tatsächlich nutzen, um die Anwendung verteilen. Wenn Ihre konzeptionelle Aufteilung ist gut, es wird viel leichter sein, verteilen Sie die Anwendung später, wenn Sie beginnen mit nur einem server.
InformationsquelleAutor Alex D
Den Begriff der "verteilten Anwendung" bedeutet, dass Teile der Anwendung-system wird ausgeführt auf verschiedenen Computer-Knoten (das kann verschiedene CPU-cores auf verschiedenen Rechnern oder zwischen mehreren CPU-Kernen auf dem gleichen Rechner).
Gibt es viele verschiedene technische Lösungen, um die Frage, wie das system konstruiert werden könnte. Da Sie gefragt wurden Java-Technologien, Sie könnten zum Beispiel, erstellen Sie die Webanwendung mit dem Google ' s Web Toolkit, das Ihnen eine reiche browser-basierte client-Benutzeroberfläche. Für die server bereitgestellt werden Teile des Systems, könnten Sie beginnen mit einfachen servlets laufen in einem servlet-container wie Tomcat. Ihre servlets aufgerufen werden, aus dem browser mit HTTP-basierte remote procedure calls.
Später, wenn Sie in der Skalierbarkeit Probleme, die Sie starten können, migrieren Teile der business-Logik auf EJB3-Komponenten, die sich letztlich auf bereitgestellt viele rechnerische Knoten im Kontext eines application server wie Glassfish, zum Beispiel. Ich don denken, Sie brauchen nicht, um dieses problem anzugehen, bis Sie es ausführen. Es ist schwer zu sagen, ob Sie ohne mehr wissen über die Natur der Aufgaben, die der Kunde ausführen werden.
InformationsquelleAutor CBass
Zur Beantwortung Ihrer ersten Frage - Sie könnte Holen Sie sich das Formular direkt Einreichen, um die rest-urls. Offensichtlich hängt es, genau auf Ihre Anforderungen.
Als @AlexD erwähnt in den Kommentaren oben, werden Sie nicht immer brauchen, um eine Anwendung verteilen, aber wenn Sie so tun möchten, sollten Sie wahrscheinlich betrachten JMS, das ist eine messaging-API, die Ihnen erlauben kann, laufen fast beliebige Anzahl von worker-Anwendung Maschinen, bereiten die Nachrichten aus der message queue und verarbeiten zu können.
Wenn du wollte erzeugen einer dynamisch verteilten Anwendung ausgeführt auf sagen, multiple low-Ressourcen-VMs (wie Amazon EC2 Micro instances) oder physikalische hardware, die Hinzugefügt und entfernt werden können wird zur Bewältigung der Nachfrage, dann möchten Sie vielleicht zu prüfen, die Integration mit Projekt Shoal, das ist ein Java-framework, das ermöglicht das clustering von Knoten-Anwendung, und mit Ihnen erscheinen/verschwinden zu jeder Zeit. Projekt Shoal verwendet JXTA und JGroups, als die zugrunde liegenden Kommunikations-Protokoll.
Einem anderen Weg könnte es sein, verteilen Sie Ihre Anwendung mit EJBs läuft auf einem application server.
InformationsquelleAutor Crollster