AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Modularer (evtl. verteilter) Programmaufbau - Welche Art von IPC ist die richtige?
Thema durchsuchen
Ansicht
Themen-Optionen

Modularer (evtl. verteilter) Programmaufbau - Welche Art von IPC ist die richtige?

Ein Thema von Der schöne Günther · begonnen am 6. Mai 2013 · letzter Beitrag vom 8. Mai 2013
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Modularer (evtl. verteilter) Programmaufbau - Welche Art von IPC ist die richtige?

  Alt 6. Mai 2013, 14:55
Ich hatte vom Thema bereits ein paar mal ein paar bestimmte Ecken angeschnitten. Nun das große Ganze:

Es geht um eine grundlegende Neuentwicklung einer Software die bereits seit Anfang des Jahrtausends im Einsatz ist. Die Anwendung könnte man noch als Standardsoftware interpretieren.

Es soll nun eine klare Trennung eines Kerns und einer halbwegs klaren Anzahl von Modulen geben. Diese Module arbeiten an sich sehr autark und sollen als "Plug-In" in den Kern geschraubt werden - Je nach Kunden kommen mal mehr, mal weniger Plug-Ins zum Einsatz, mit unterschiedlicher Konfiguration. Spezialwünsche des Kunden sollen nicht mehr in einzelnen abgeschotteten Entwicklungszweigen münden sondern entweder generell ins Programm einfließen oder als neues Modul realisiert werden. Daher wage ich das ganze Projekt immer noch als Standardsoftware zu sehen. Das nur am Rande.

Ich bin mir mittlerweile sehr sicher darin, jedes Modul als eigenen Prozess realisieren zu wollen. Jetzt stellt sich, ganz allgemein, die Frage welche Art der Interprozesskommunikation die richtige ist. Die wichtigsten Eckdaten hierzu sind:
  • Ausschließlich Windows-Systeme
  • Gesamte Anwendung läuft generell lokal auf einer Maschine. Allerdings ist nun gewünscht, die Module auch im LAN, evtl. WAN ansprechen zu können. Das wird allerdings sicher nicht oft der Fall sein.
  • Es werden keine "großen" Datenmengen zwischen Kern und Plug-In ausgetauscht - Ein großer Datendurchsatz ist also nicht gefordert

Meines Wissens nach bleiben zwei IPC-Methoden mit besonders günstigen Eigenschaften übrig: Es sind Named Pipes und natürlich Sockets.

Auch in der engeren Auswahl - allerdings noch mit Unsicherheit - habe ich DCOM und RPC. Wenn ich DCOM richtig verstanden habe, ist es im Endeffekt RPC, nur mit zusätzlichen Benutzerrechten/Sicherheitsgeschichten obendrauf?


Ich würde gerne einmal zu allen vier hier niederschreiben, was ich davon halte: Wo ich denke, dass es haken könnte und wo es eine gute Wahl ist. Ich möchte den Text hier allerdings nicht noch weiter aufblähen, das liest eh keiner mehr, oder?

Kurzum: Kann mir jemand sagen,
  • ob es sich lohnt, sich über DCOM schlau zu machen falls man diese vier Buchstaben erst vor ein paar Tagen zum ersten mal in dieser Reihenfolge gesehen hat?
  • ich mit Named Pipes oder Sockets auf dem richtigen Weg bin oder RPC (oder etwas anderes) ein besserer Weg sein könnte?


Vielen Dank im Voraus, ich bin gespannt.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Modularer (evtl. verteilter) Programmaufbau - Welche Art von IPC ist die richtige

  Alt 6. Mai 2013, 18:03
Sockets wären in Hinblick auf LAN/WAN Unterstützung mein Favorit, und sind lokal ausreichend schnell (bis zu mehreren 100.000 Nachrichten pro Sekunde). RPC ist erst mal nur ein Kommunikationsmodel (Remote Procedure Calls sind Request/Response Kommunikation).

Als Microsoft-spezifische Lösung nenne ich nur mal so MSMQ, Microsoft Message Queuing. Damit können Prozesse Nachrichten austauschen, was sogar "transaktional" geht (d.h. wenn eine Reihe von Nachrichten empfangen wurde und der Empfänger kein "Acknowledge" sendet, sondern abstürzt, erhält er die Nachrichten nach dem Neustart noch einmal). http://msdn.microsoft.com/en-us/library/ms978430.aspx
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#3

AW: Modularer (evtl. verteilter) Programmaufbau - Welche Art von IPC ist die richtige

  Alt 6. Mai 2013, 20:03
RPC ist erst mal nur ein Kommunikationsmodel (Remote Procedure Calls sind Request/Response Kommunikation).
Streng ausgelegt bedeutet RPC, das sich verteilte Aufrufe wie lokale Prozeduraufrufe verhalten.
Das ist vermutlich auch die Abstraktion, die du für dein Plugin-System anstreben willst.

Woran du denken solltest: Kommunikation über Pipes/Sockets erfordert, dass du dir selbst selbst Gedanken über
Nachrichtenformate, mögliche Verklemmungen, usw. machen musst. Das bekommst du bei DCOM (oder anderen verteilten Objektmodellen) geschenkt.

Ein gutes RPC-System kann man nicht mal so eben aus ein paar Sockets/Pipes basteln.
Ob dich das interessiert, hängt aber auch davon ab, wie kompliziert die kompliziert die Zusammenarbeit deiner Komponenten/Plugins ist.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG ( 6. Mai 2013 um 20:08 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Modularer (evtl. verteilter) Programmaufbau - Welche Art von IPC ist die richtige

  Alt 7. Mai 2013, 08:56
Das ist vermutlich auch die Abstraktion, die du für dein Plugin-System anstreben willst.
Eigentlich schon. Sockets und Pipes sind im Endeffekt ja zunächst Datenaustauschverfahren zwischen Prozessen. Im Endeffekt will ich ja nicht wirklich Daten austauschen, ich möchte Methoden aufrufen. Vom Konzept her wäre RPC schon deutlich näher an dem, was ich eigentlich will.

Ich wühle mich weiterhin durch die wilde Welt der verschiedenen RPC-Modelle. Ehrlich gesagt ohne wirkliches Ziel.

Ich bin weiterhin unschlüssig: Kann man allgemein sagen, wie sehr man sich auf die ganze RPC-Geschichte überhaupt noch verlassen kann, wenn der Rechner mal beispielsweise einmal hart abstürzt und auf den letzten Wiederherstellungspuntk gesetzt wird? Oder der Kunde selbst (bzw. durch einen Drittanbieter) zusätzliche Software und Dienste auf der Maschine laufen lassen will (ohne das abzusprechen)?
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#5

AW: Modularer (evtl. verteilter) Programmaufbau - Welche Art von IPC ist die richtige

  Alt 7. Mai 2013, 09:09
Als Microsoft-spezifische Lösung nenne ich nur mal so MSMQ, Microsoft Message Queuing. Damit können Prozesse Nachrichten austauschen, was sogar "transaktional" geht (d.h. wenn eine Reihe von Nachrichten empfangen wurde und der Empfänger kein "Acknowledge" sendet, sondern abstürzt, erhält er die Nachrichten nach dem Neustart noch einmal). http://msdn.microsoft.com/en-us/library/ms978430.aspx
Das ist aber mit Vorsicht zu genießen. Messages überleben in der Queue nicht ewig, und wenn sich in der MessageQueue nachrichten Aufstauen, und der Abnehmer sie nicht schnell genug verarbeitet (default liegt bei 10 Sekunden), kann es gut wird es passieren das einzelne Messages austimen und verschwinden.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#6

AW: Modularer (evtl. verteilter) Programmaufbau - Welche Art von IPC ist die richtige

  Alt 7. Mai 2013, 09:11
Ich bin weiterhin unschlüssig: Kann man allgemein sagen, wie sehr man sich auf die ganze RPC-Geschichte überhaupt noch verlassen kann, wenn der Rechner mal beispielsweise einmal hart abstürzt und auf den letzten Wiederherstellungspuntk gesetzt wird? Oder der Kunde selbst (bzw. durch einen Drittanbieter) zusätzliche Software und Dienste auf der Maschine laufen lassen will (ohne das abzusprechen)?
Der erste Fall ist in der Regel eher unproblematisch.
Der zweite kann zu einem Problem werden, wenn z.B ein vom Kunden installierter Dienst einen Port verwendet, der vom eigenen System verwendet werden soll, und dann auch noch früher hochfährt. Oder wenn die 'fremde' Software sehr Speicherintensiv ist und das System in Memory Pressure bringt, so daß die eigenen Dienste permanent geswapped werden. Oder oder oder...
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Modularer (evtl. verteilter) Programmaufbau - Welche Art von IPC ist die richtige

  Alt 7. Mai 2013, 09:15
Schau Dir mal RemObjects SDK an, falls Du nicht alles selbst machen möchtest. Da kannst Du zwischen den verschiedenen Transportschichten wechseln, falls es doch mal die Rechnergrenze verlässt. Quasi schon ein besseres RPC. Ich prinzip bin auch gerade an der gleichen Aufgabe wie Du. Eingebettete Prozesse und Kommunikation zwischen ihnen.
Sven Harazim
--
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Modularer (evtl. verteilter) Programmaufbau - Welche Art von IPC ist die richtige

  Alt 7. Mai 2013, 09:39
Ja, das gab es auch schon: Kommunikation über Named Pipes, auf der Kundenmaschine lief allerdings noch Kontakt mit einem SQL Server, ebenfalls über Pipes. Windows hat dann die ältesten Pipes immer rausgekickt und nichts ging mehr

Bei RPC allgemein habe ich noch die Furcht, dass hier zu viel schiefgehen kann, wenn jemand am Rechner herumspielt - Einfach hinfahren und wieder gradebiegen ist keine Option

RemObjects sehe ich mir mal an - Hier im Forum schon hundert mal gehört, keine Ahnung, was es eigentlich ist...
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
526 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Modularer (evtl. verteilter) Programmaufbau - Welche Art von IPC ist die richtige

  Alt 7. Mai 2013, 09:58
RemObjects sehe ich mir mal an - Hier im Forum schon hundert mal gehört, keine Ahnung, was es eigentlich ist...
Dann wird es Zeit. Sehr komfortable Möglichkeit Methoden mit Strukturen via IPC zu benutzen. Und dies lokal, LAN, sowie Programmiersprachenübergreifend (und somit auch Plattformübergreifend).
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Modularer (evtl. verteilter) Programmaufbau - Welche Art von IPC ist die richtige

  Alt 7. Mai 2013, 10:09
Ich kann leider nicht mehr tun, als mich durch Webseitenbeschreibungen und eventuell vorhandene Demo-Versionen zu wühlen. Gibt es so etwas wie ein Buch zu der ganzen RemObjects-Geschichte? Spontan hätte ich nämlich gesagt, dass es anscheinend eher um Services geht, die parallel von mehreren Clients angesprochen werden, das will ich ja nicht wirklich.

Außerdem binde ich mich damit dann auf ewig an RemObjects, oder? Würde ich nur mit Sockets/Pipes ein paar Daten hin- und herschaufeln, muss ich mir keine Sorgen machen, sollte ein Drittanbieter über Nacht dichtmachen...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz