Announcement

Collapse
No announcement yet.

Brauche Entscheidungshilfe bei Com/DCom/Mts

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Brauche Entscheidungshilfe bei Com/DCom/Mts

    Hallo

    Ich bin zur Zeit an einer E-Commercelösung dran. Die Clients sollen eine EXE bekommen mit der sie übers internet online bestellen können. Dazu habe ich einen Client und eine ComServer-Anwendung (AppS1) geschrieben (EXE). Die Verbindung erfolgt über TWebConnection. Für jeden Client wird eine Instanz erzeugt. Server AppS1 stellt eine Verbindung zu AppS2 her (MuliInstance), der eine Verbindung zur AS400 herstellt und die Anfragen an AppS1 weiterleitet und dieser an den Client weitergibt.

    Mir scheint aber das diese Lösung nicht optimal ist.

    Gründe dafür sind z.B:
    "Stürzt" ein Client ab bleibt die Instanz im Taskmanager und kann nicht beendet werden.
    Jeder Client braucht ressourcen wenn er mit AppS1 verbunden ist.

    Da ich damit rechne das ca. 150 gleichzeitig online sein werden, wird der Hauptspeicher des Servers kaum ausreichen (1 GB).

    Nun stehe ich vor der Wahl der Qual:
    MTS, MultiInstance, TWebConnection, TRDSConnection etc. ????

    Für einen Tip wäre ich sehr dankbar, weil ich schon seit Tagen am überlegen bin wie ich die ganze Geschichte optimieren kann.

    Danke

  • #2
    Hallo,

    wenn die Obergrenze der gleichzeitigen Benutzeranzahl unbekannt ist und mit vielen Benutzern gerechnet werde muss, hat man gleich mehrere Probleme. Man benötigt in diesem Projekt: <br>
    a) einen <b>Datenbankverbindungs-Pool</b>, denn kein SQL-Server kann mit unbegrenzt vielen Verbindungen umgehen. <br>
    b) einen <b>Thread-Pool</b>, da nicht für jeden Client ein eigener Prozess/Thread vorgesehen werden kann <br>
    c) einen <b>Objekt-Pool</b>, wenn die Zeitdauer der aufgerufenen Funktion kürzer ist als die Zeitdauer für die Instanz-Erzeugung des eigenen Objekts.<br>
    d) einen <b>JITA</b>-Automatismus (Just-In-Time-Activation), der eine Objektinstanz nach jedem Aufruf einer Interface-Methode sofort zerstört, um automatisch beim nächsten Aufruf eine neue Instanz zu erzeugen, der somit den RAM-Verbrauch minimiert.

    Nun gibt es 2 Möglichkeiten, dies umzusetzen: <br>
    A) Alles selber schreiben, oder <br>
    B) auf bereits vorhandenes zugreifen.

    Falls man sich für den Plan B) entscheidet, stehen die Alternativen CORBA und MTS/COM+ an. In den meisten Fällen wird die Entscheidung leicht fallen: COM+. Dort hat man den Datenbankverbindungs-Pool (wenn ein OLE DB Provider für die Datenbank vorhanden ist), den Thread-Pool, den JITA-Mechanismus und den Objekt-Pool sofort ohne Eigenleistung zur Verfügung.

    In der nächsten Ausgabe von DER ENTWICKLER ist ein Beitrag von mir, der sich mit den Alternativen DCOM, TSocketConnection, TWebConnection, TRDSConnection und SOAP beschäftigt. Da in einer derartigen Umgebung in der Regel Maschinen mit mehreren Prozessoren eingesetzt werden, trennt sich hier die Spreu vom Weizen. Ich würde nur die Alternativen DCOM und RDS ins Auge fassen, wenn die Performance bei gleichzeitigem umfangreichen Leistungsumfang im Vordergrund steht, wobei das dann allerdings nur unter Win32 läuft. Wenn der Portbereich nicht eingeschränkt wird (Firewall etc.), ist DCOM allen anderen Alternativen haushoch überlegen. Falls nur der Port 80 offen ist, arbeitet das dazwischengeschaltete RDS als "COM-Marshaler", der "lebende" ADO-Recordset-Objekte und normale DCOM-Aufrufe als HTTP verpackt über Port 80 zustellt.

    Soll das auch noch auf der Clientseite Plattformunabhängig sein, wird wohl nur noch SOAP (Simple Object Access Protocol) übrigbleiben, wenn der Client eine eigene EXE seinsetzen soll. SOAP kann man sowohl mit Delphi 5 als auch im Delphi 6 implementieren, demnächst auch mit Kylix.

    Ganz neutral sind natürlich HTML-Clients, die direkt über den Webbrowser zugreifen. Auf der Server-Seite (IIS) kann man dann dank ASP (Active Server Pages) die COM+ Objekte aufrufen und das Ergebnis in HTML umsetzen lassen. Auch hier hätte man den Vorteil der automatischen Skalierbarkeit der Anwendung

    Comment


    • #3
      Danke für die ausführliche Antwort.

      Läuft SOAP mit jedem Web-Server ?
      Wir setzen WebObjects ein und habe festgestellt das z. B. ein Methodenaufruf mit TRDSConnection.AppServer.Methode Probleme gibt.

      Wie sieht die Performance (Serverseitig) mit SOAP aus ?

      Und dann noch etwas:

      Wir haben eine E-Commercelösung auf HTML-Basis. Es werden JAVA-Klassen
      aufgerufen. Wie kann ich diese Klassen in Delphi einbinden ??.
      Der Grund ist einfach das Rad nicht neu erfinden zu müßen, weil die Klassen schon alle E-Commerce-Funktionen beinhalten. Ich möchte auf diese Klassen Clientseitig zugreifen (mit SOAP o. RDSConn).

      Dank

      Comment


      • #4
        Hallo,

        RDS (Remote Data Services) verwendet HTTP-Request/Response-Aufrufe mit einem einen Datenblockformat, während SOAP alles in XML verpackt. Somit ist nur SOAP völlig plattform- und sprachunabhängig.

        Beim Zugriff über ISDN auf einen 100 km entfernten Application Server (Dual-Prozessor 2 x Pentium III 800 MHz) wird für das Abfrufen von 10 Kundenadressen aus einer SQL Server 2000-Datenbank (auf einem eigenen Datenbank-Server) in einer Schleife die folgende Zeit benötigt: <br>
        <pre>
        Platz Protokoll Zugriff über Zugriffszeit für 10 Aufrufe in ms
        1 DCOM (frühe Bindung) CoClass.CreateRemote 930
        2 DCOM TDCOMConnection 2060
        3 DCOM (späte Bindung) CoClass.CreateRemote 2070
        4 SOAP TSOAPConnection 2350
        5 TCP/IP TSocketConnection 2380
        6 RDS TRDSConnection 2420
        7 HTTP TWebConnection 6570
        </pre>
        P.S: Alle Unterschiede zwischen 20 Millisekunden sind unterhalb der Latenz-Unschärfe der ISDN-WAN-Verbindung. Damit ist zum Beispiel <i>TDCOMConnection</i> und <i>CoClass.CreateRemote as IDispatch</i> gleichwertig

        Comment

        Working...
        X