Ich glaube, ich sollte mein Büro mal nach Wanzen absuchen... Ich habe mich heute erst mit einem Entwickler im Zusammenhang mit dem Server über genau das Thema unterhalten und da gibt es ein paar interessante Facetten.
Erstmal zur eigentlichen Frage:
20 MB an sich sind schon eine Menge Holz. Das waren 10 000 MVDS-Nachrichten im ELENA-Bereich bzw. die EuBP hat das als Limit ausgegeben um damit 3 Jahre Daten für die Betriebsprüfung zu bekommen. WIe ich dann heute gesehen habe liegt der Durchschnitt der Meldungen die wir über Sofortmeldungen in diesem Monat bekommen haben bei 7,5 kb. "Große" Sendungen schlagen da mit 200-250kb zu Buche.
Die Frage die man sich dann bei sehr großen Sendungen stellen muss, ist ob die Sendung an sich so atomar ist, dass ich gezwungen bin wirklich die x MB am Stück zu senden oder ob ich im Prinzip die Möglichkeit habe, das ganze in eine Anzahl n Einzelsendungen zu unterteilen.
Sollte das erste der Fall sein, dann muss ich mir wohl auf fachlicher Ebene eine Systematik einfallen lassen, die es mir ermöglicht aus vielen Sendungen wieder eine Einzelsendung zu machen. Ähnlich dem Prinzip des Dateisplitters aus der Disketten-Zeit. Ich muss aus dem großen Happen viele kleine verdaubare Happen machen (Warum man das tun sollte, werde ich dann gleich noch sagen...).
Wenn ich es doch teilen kann, spricht nichts dagegen die Sendung auf die Paketebene zu verteilen oder eben mehrere Requests zu machen, bei denen ich ein Limit (z.B. Zahl der Datensätze) festlege um die Sendung nicht zu groß werden zu lassen.
...denn, dass der eXTra-Request das kann ist die eine Sache.
Die andere ist dann die Technik.
Irgendwo steht nämlich dann ein armer eXTra-Server auf einem Application-Server, der das ganze entgegennehmen muss.
Der Request schlägt beim Application-Server ein. Bis die vielen MB dann erstmal beim Server sind, wird es auf der Client-Seite vielleicht schon kritisch was den Timeout der Leitung angeht. Wenn das gutgeht, dann heißt das aber noch lange nicht, dass die Daten sicher übertragen werden. Im Normalfall findet ja eine Schema-Prüfung statt und es ist ein erstes parsen des Requests angesagt. Auch hier geht wieder Zeit drauf, die sich negativ auf den Timeout auswirken.
Die Kollegen, die den Server implementieren, haben mich dazu sorgenvoll angerufen und erstmal gefragt wie wahrscheinlich die maximale Belastbarkeit von 100 MB eigentlich ist.
Der Grund:
Beim Testen hat sich herausgestellt, dass ein Request von 100 MB, die Java-Heapsize auf dem Server mit Leichtigkeit über die Grenze von 1,5 GB gebracht hat. Keine parallelen Requests sondern eben wirklich nur einer mit 100 MB. Ich glaube, Serverwünsche der Art muss man seinen Admins sehr vorsichtig beibringen ;)
Aus meiner Sicht sollte man also schon gute Gründe haben, warum man einen Brocken von mehreren MB auf einmal über die Leitung schickt. Und wenn man das dann tut, ist die Annahme auf dem Server eine echte Herausforderung, weil man jedes Objekt zweimal anschaut ob man es wirklich braucht.