Bilder on demand: VPN nach Webserver nach Client. Wie?
Hallo und danke fürs Lesen!
Mein Problem: Ich habe ein VPN mit X Rechnern, die alle on demand Bilder herstellen und liefern sollen. Derzeit geht das so:
Das Web-Frontend schickt einen HTTP-Requests in das VPN, durch einen Router gelangt der Request dann zum richtigen Rechner, da läuft ein HTTP-Server. Der Rechner nimmt den Request entgegen, erzeugt schnell ein WebP, enkodiert es zu Base64, schickt es zum Webserver, der dekodiert es, speichert es als JPG, der Client bekommt die URL dazu und liest es vom Web-Server. Das ist zu lahm.
Ich suche nun eine Möglichkeit, wie das Bild wesentlich schneller zum Client kommt. Am schnellsten wäre ein direkter Download aus dem VPN, aber das ist wohl zu gefährlich.
Nun frage ich mich, ob der Web-Server nicht über file_get_content() das Bild binär aus dem VPN laden kann? Kann man ein VPN so öffnen, dass es das Adressieren über URLs erlaubt? Und würde es dadurch auch vulnerabel?
Oder besser: kann mir jemand einen Tipp geben, wie ich die Bilder schnellstmöglich aus dem VPN zum Client kriege?
Ganz herzlichen Dank!
Mein Problem: Ich habe ein VPN mit X Rechnern, die alle on demand Bilder herstellen und liefern sollen. Derzeit geht das so:
Das Web-Frontend schickt einen HTTP-Requests in das VPN, durch einen Router gelangt der Request dann zum richtigen Rechner, da läuft ein HTTP-Server. Der Rechner nimmt den Request entgegen, erzeugt schnell ein WebP, enkodiert es zu Base64, schickt es zum Webserver, der dekodiert es, speichert es als JPG, der Client bekommt die URL dazu und liest es vom Web-Server. Das ist zu lahm.
Ich suche nun eine Möglichkeit, wie das Bild wesentlich schneller zum Client kommt. Am schnellsten wäre ein direkter Download aus dem VPN, aber das ist wohl zu gefährlich.
Nun frage ich mich, ob der Web-Server nicht über file_get_content() das Bild binär aus dem VPN laden kann? Kann man ein VPN so öffnen, dass es das Adressieren über URLs erlaubt? Und würde es dadurch auch vulnerabel?
Oder besser: kann mir jemand einen Tipp geben, wie ich die Bilder schnellstmöglich aus dem VPN zum Client kriege?
Ganz herzlichen Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 668653
Url: https://administrator.de/contentid/668653
Ausgedruckt am: 03.12.2024 um 17:12 Uhr
26 Kommentare
Neuester Kommentar
Moin.
Vorab:
Muss das Enkodieren/Dekodieren der Bilddatei innerhalb des VPN - Eh schon geschützt privat - sein?
Kann die Quelle nur WebP?
Ich würde schon an den multiplen Quelle-Webservern auf JPG umwandeln - Lastverteilung - und unverschlüsselt zum Gateway-Webserver via VPN ausliefern ...
Das spart sicher einen hohen Anteil Latenz ...
Wenn die Quell-Webserver IP-Kameras sind, wäre zu prüfen, ob dieser das Bild nicht direkt ein passendes Format und passende -gg. geringere - Auflösung liefern kann ...
... dazu dann - falls möglich - nicht benötigte Formate/Streams deaktivieren, was ebenfalls die Latenz auf dem Quell-Webserver - ? Kamera ? - deutlich reduzieren kann ...
Vorab:
Muss das Enkodieren/Dekodieren der Bilddatei innerhalb des VPN - Eh schon geschützt privat - sein?
Kann die Quelle nur WebP?
Ich würde schon an den multiplen Quelle-Webservern auf JPG umwandeln - Lastverteilung - und unverschlüsselt zum Gateway-Webserver via VPN ausliefern ...
Das spart sicher einen hohen Anteil Latenz ...
Wenn die Quell-Webserver IP-Kameras sind, wäre zu prüfen, ob dieser das Bild nicht direkt ein passendes Format und passende -gg. geringere - Auflösung liefern kann ...
... dazu dann - falls möglich - nicht benötigte Formate/Streams deaktivieren, was ebenfalls die Latenz auf dem Quell-Webserver - ? Kamera ? - deutlich reduzieren kann ...
Hm...keine Ahnung, was du da genau machst und was denn nun dein "VPN" ist, über das man Daten nicht direkt verschicken oder abholen kann bzw. sollte.
Ich halte schon mal die gesamte Codiererei für unnötig.
Ich würd halt erstmal den Befehl rausschicken, dass der Rechner ein Bild erstellen soll. Und dann einen weiteren Befehl, dass man vom Rechner das letzte erstellte Bild abholen soll. Ob geholt oder gesendet, je nachdem. Der Client soll dann eben schauen, dass er mit dem gerade gekommenen Bild umgehen kann.
Aber wie gesagt, ich weiß nciht, was du da genau machst.
Ich halte schon mal die gesamte Codiererei für unnötig.
Ich würd halt erstmal den Befehl rausschicken, dass der Rechner ein Bild erstellen soll. Und dann einen weiteren Befehl, dass man vom Rechner das letzte erstellte Bild abholen soll. Ob geholt oder gesendet, je nachdem. Der Client soll dann eben schauen, dass er mit dem gerade gekommenen Bild umgehen kann.
Aber wie gesagt, ich weiß nciht, was du da genau machst.
Guten Morgen.
Hast du gemessen wo es genau lange dauert? Weißt du überhaupt was genau lahm ist?
Erstelle ein Protokoll mit Millisekundenzeitstempeln über folgendes Messpunkte:
- Start der Anfrage beim Webfrontend
- Ankunft beim "richtigen Rechner"
- Ende der Bearbeitung beim "richtigen Rechner",
- Vollständiger Empfang beim Webfrontend Server,
- Ende der Konvertierung auf dem Webserver, Aufruf durch den Client.
Bezüglich VPN's und file_get_content():
Ähnlich wie @kpunkt stehe ich ein wenig auf dem Schlauch und verstehe nicht ganz das Konstrukt und welchen Zweck es hat...
Beantworte doch bitte folgende Fragen:
- Wer administriert das VPN? Bist du der Betreiber?
- Wer betreut die Worker-Nodes (alias "richtige Rechner"), sind das deine oder irgendwelche Fremdrechner?
- Wer hat den HTTP-Service auf den Worker-Nodes programmiert?
- Warum sollte das VPN unsicher sind? Virtual Private Networks sind doch gerade dazu da, Inhalte privat zu halten...
- Wer oder was ist dieser Request Router? Eine Art Loadbalancer der schaut welche Worker-Node gerade frei ist?
Wichtig: VPN ist regelt den Transport von Datenpaketen und hat nichts mit file_get_content() oder URL's am Hut... Das passiert eher in der Anwendungsschicht (OSI-Modell) und musst du gedanklich relativ strikt trennen!
Vielleicht zeichnest du uns mal das Konstrukt mit mehr Details auf
Hast du gemessen wo es genau lange dauert? Weißt du überhaupt was genau lahm ist?
Erstelle ein Protokoll mit Millisekundenzeitstempeln über folgendes Messpunkte:
- Start der Anfrage beim Webfrontend
- Ankunft beim "richtigen Rechner"
- Ende der Bearbeitung beim "richtigen Rechner",
- Vollständiger Empfang beim Webfrontend Server,
- Ende der Konvertierung auf dem Webserver, Aufruf durch den Client.
Bezüglich VPN's und file_get_content():
Ähnlich wie @kpunkt stehe ich ein wenig auf dem Schlauch und verstehe nicht ganz das Konstrukt und welchen Zweck es hat...
Beantworte doch bitte folgende Fragen:
- Wer administriert das VPN? Bist du der Betreiber?
- Wer betreut die Worker-Nodes (alias "richtige Rechner"), sind das deine oder irgendwelche Fremdrechner?
- Wer hat den HTTP-Service auf den Worker-Nodes programmiert?
- Warum sollte das VPN unsicher sind? Virtual Private Networks sind doch gerade dazu da, Inhalte privat zu halten...
- Wer oder was ist dieser Request Router? Eine Art Loadbalancer der schaut welche Worker-Node gerade frei ist?
Wichtig: VPN ist regelt den Transport von Datenpaketen und hat nichts mit file_get_content() oder URL's am Hut... Das passiert eher in der Anwendungsschicht (OSI-Modell) und musst du gedanklich relativ strikt trennen!
Vielleicht zeichnest du uns mal das Konstrukt mit mehr Details auf
Am schnellsten wäre ein direkter Download aus dem VPN, aber das ist wohl zu gefährlich.
Was sollte daran denn "gefährlich" sein?? Genau dafür ist ein VPN ja gemacht und bezieht sich, wie oben von den Kollegen schon richtig gesagt, rein auf die Netzwerk Infrastruktur. Natürlich nur wenn man es auch, wie üblich, selber betreibt!
Was würdet ihr machen?
Vernünftige Site-to-Site-VPN und feddich. Da kannste von deinen Servern/Clients rauf- oder runterladen wie du lustig bist.
An deiner Stelle würde ich mir da so gar keinen Kopf drüber machen (weil Wissen bzw. Möglichkeit über das, was da gemacht wird ist eh nicht recht groß), sonden dein Anliegen dem Admin vortragen.
Vernünftige Site-to-Site-VPN und feddich. Da kannste von deinen Servern/Clients rauf- oder runterladen wie du lustig bist.
An deiner Stelle würde ich mir da so gar keinen Kopf drüber machen (weil Wissen bzw. Möglichkeit über das, was da gemacht wird ist eh nicht recht groß), sonden dein Anliegen dem Admin vortragen.
https://surfshark.com/de/blog/site-to-site-vpn
Da du es aber schon gar nicht schaffst zu sagen, was denn bei euch vorhanden ist, ist das reines Kristallkugellesen und dementsprechend kann man auch keine wirkliche Empfehlung oder Erklärung abgeben.
Warte, bis der Admin wieder da ist.
Da du es aber schon gar nicht schaffst zu sagen, was denn bei euch vorhanden ist, ist das reines Kristallkugellesen und dementsprechend kann man auch keine wirkliche Empfehlung oder Erklärung abgeben.
Warte, bis der Admin wieder da ist.
Ich versteh jetzt überhaupt nix mehr.
Es gibt also eine Website, die ihr nicht selber hosted und euch auch nicht gehört(?). Auf die kann man öffentlich vom Internetcafe aus zugreifen und man kann irgendwelche Bilder anfordern.
Der Webserver schickt dann also die Anfrage an eure Firma. Dort wird das gewünscht Bild dann als WebP erzeugt (was immer das auch meint) und wird in Base64 kodiert und an den Webserver geschickt. Der Webserver nimmt dann das Bild, dekodiert es, wandelt das WebP in JPG um und veröffentlicht es dann, sodass man das Bild im Internetcafe ansehen kann.
Heißt also eure Firma ist das Backend zum Webserver, der als Frontend dient.
Erster Ansatz von mir wär die Clients bei euch komplett rauszunehmen und alles auf den (oder die) Server zu packen. Muss euch halt gehören. Da fällt dann das hin und her weg.
Ihr liefert dann nur noch die Rohdaten und packt die gleich auf den Server.
Es gibt also eine Website, die ihr nicht selber hosted und euch auch nicht gehört(?). Auf die kann man öffentlich vom Internetcafe aus zugreifen und man kann irgendwelche Bilder anfordern.
Der Webserver schickt dann also die Anfrage an eure Firma. Dort wird das gewünscht Bild dann als WebP erzeugt (was immer das auch meint) und wird in Base64 kodiert und an den Webserver geschickt. Der Webserver nimmt dann das Bild, dekodiert es, wandelt das WebP in JPG um und veröffentlicht es dann, sodass man das Bild im Internetcafe ansehen kann.
Heißt also eure Firma ist das Backend zum Webserver, der als Frontend dient.
Erster Ansatz von mir wär die Clients bei euch komplett rauszunehmen und alles auf den (oder die) Server zu packen. Muss euch halt gehören. Da fällt dann das hin und her weg.
Ihr liefert dann nur noch die Rohdaten und packt die gleich auf den Server.
Das ist dann auch deine Antwort und der Grund, wieso es eben so läuft bei euch.
Da wird man auch um die Base64-Codiererei eher nicht drumrumkommen. Und die Umwandlung in JPG wird aus Kompatibilitätsgründen wohl auch noch immer benötigt werden.
Schneller wirds halt nur, wenn die Verbindung zwischen Frontend und Webend wegfällt oder halt aufgebohrt wird. Aber ich vermute fast, dass da auch schon was vernünftges da sein wird.
Da wird man auch um die Base64-Codiererei eher nicht drumrumkommen. Und die Umwandlung in JPG wird aus Kompatibilitätsgründen wohl auch noch immer benötigt werden.
Schneller wirds halt nur, wenn die Verbindung zwischen Frontend und Webend wegfällt oder halt aufgebohrt wird. Aber ich vermute fast, dass da auch schon was vernünftges da sein wird.
Nö. Die Bereitstellung erfolgt ja auf dem Webserver. Außerdem würdest du die komplette VPN aushebeln.
Wie gesagt, Backend und Frontend zusammenlegen.
Wenn das Backend nicht zum Frontend darf, muss halt das Frontend zum Backend.
Aber es wird schon einen Grund haben, wieso ihr da nicht selber als Webserver/Hoster auftretet.
Nochmal: Lass das dem Admin machen. Der führt das aus, was die Geschäftsleitung angewiesen hat. Oder mach dich erstmal darüber schlau, wieso es jetzt bei euch so ist, wie es ist. Auf technischer und auch auf wirtschaftlicher Ebene. Und was da sonst noch alles reinpfeifft, was man beachten muss.
Nur weil etwas mit IT realisiert wird, heißt das nicht, dass die IT die vorgebende Stelle ist.
Wie gesagt, Backend und Frontend zusammenlegen.
Wenn das Backend nicht zum Frontend darf, muss halt das Frontend zum Backend.
Aber es wird schon einen Grund haben, wieso ihr da nicht selber als Webserver/Hoster auftretet.
Nochmal: Lass das dem Admin machen. Der führt das aus, was die Geschäftsleitung angewiesen hat. Oder mach dich erstmal darüber schlau, wieso es jetzt bei euch so ist, wie es ist. Auf technischer und auch auf wirtschaftlicher Ebene. Und was da sonst noch alles reinpfeifft, was man beachten muss.
Nur weil etwas mit IT realisiert wird, heißt das nicht, dass die IT die vorgebende Stelle ist.
Natürlich kannst du die VPN "öffentlich" machen.
Ist dann halt wie eine sicherheitstechnisch gut ausgestattete Haustür, bei der der Schlüssel von außen steckt.
Die VPN ist auch so rein gar nicht dein Problem. Es ist die Verbindung Backend zum Frontend. Aber nicht, dass ich das jetzt schon zigmal geschrieben hätte.
Wie gesagt, such dir jemand der zumindest ansatzweise etwas Ahnung hat. Du träumst hier von irgendwelchen völlig komischen Sachen, die nicht mal das Problem sind.
Ich bin da jetzt raus.
Ist dann halt wie eine sicherheitstechnisch gut ausgestattete Haustür, bei der der Schlüssel von außen steckt.
Die VPN ist auch so rein gar nicht dein Problem. Es ist die Verbindung Backend zum Frontend. Aber nicht, dass ich das jetzt schon zigmal geschrieben hätte.
Wie gesagt, such dir jemand der zumindest ansatzweise etwas Ahnung hat. Du träumst hier von irgendwelchen völlig komischen Sachen, die nicht mal das Problem sind.
Ich bin da jetzt raus.
Eine Idee wäre,
Das was du da beschreibst ist ein klassisches Client VPN... Das hiesige Tutorial hat zig Anleitungen für so eine Lösung...
IKEv2 VPN Server für Windows und Apple Clients mit Raspberry Pi
IPsec IKEv2 VPN für mobile Benutzer auf der pfSense oder OPNsense Firewall einrichten
PfSense VPN mit L2TP (IPsec) Protokoll für mobile Nutzer
L2TP Client VPN Server mit Mikrotik Hardware
L2TP Client VPN Server mit Cisco Hardware
Merkzettel: VPN Installation mit Wireguard
Das Internet ist doch voll davon...
Viel Erfolg!
Wenn die Working-Nodes bei euch stehen, warum kann dann auf den Nodes nicht direkt zur JPG konvertiert und dann als Base64 weitergeleitet werden? Bin mir sehr sicher, dass das schon einiges bringen wird, da man sich den ganzen overhead und lastsharing auf dem Webserver spart.
Eventuell ist es sogar möglich den Base64 direkt an den Client auszuliefern und diesen das dann falls nötig in Binärcode wieder umwandeln zu lassen? Kommt halt drauf an, was dieser Client ist. Wenn es eine Website ist, ist das easy mit JS machbar...
Ich glaube nicht, dass es einen bedeutenden Geschwindigkeitsvorteil gibt, wenn man auf VPN verzichtet, zumindest nicht, wenn das durchschleifen sauber umgesetzt wurde...
Durch den fehlenden Doppelversand spart man sich allerdings Traffic und Bandbreite(was dann eventuell doch zu besserer Geschwindigkeit führen könnte...)
Alternativ könntest du dir auch anderen Kodierungen als Base64 ansehen, da gibts auch ein paar die flotter sind
Grüße
Wenn die Working-Nodes bei euch stehen, warum kann dann auf den Nodes nicht direkt zur JPG konvertiert und dann als Base64 weitergeleitet werden? Bin mir sehr sicher, dass das schon einiges bringen wird, da man sich den ganzen overhead und lastsharing auf dem Webserver spart.
Eventuell ist es sogar möglich den Base64 direkt an den Client auszuliefern und diesen das dann falls nötig in Binärcode wieder umwandeln zu lassen? Kommt halt drauf an, was dieser Client ist. Wenn es eine Website ist, ist das easy mit JS machbar...
Ich glaube nicht, dass es einen bedeutenden Geschwindigkeitsvorteil gibt, wenn man auf VPN verzichtet, zumindest nicht, wenn das durchschleifen sauber umgesetzt wurde...
Durch den fehlenden Doppelversand spart man sich allerdings Traffic und Bandbreite(was dann eventuell doch zu besserer Geschwindigkeit führen könnte...)
Im Moment ist ein Flaschenhals das Base64 en- und dekodieren. Das kriege ich geregelt
Das hoffe ich, wie gesagt, eventuell ist das dekodieren durch den Client ja schon eine Variante. Eventuell kann ja sogar das konvertieren von WEBP zu JPG durch den Client erfolgen: https://github.com/tomaszs/webp-to-jpgAlternativ könntest du dir auch anderen Kodierungen als Base64 ansehen, da gibts auch ein paar die flotter sind
Grüße
Mit der Entscheidung machst du nichts falsch!
Wenn es das denn nun war bitte deinen Thread dann auch als erledigt markieren!
Wie kann ich einen Beitrag als gelöst markieren?
Wenn es das denn nun war bitte deinen Thread dann auch als erledigt markieren!
Wie kann ich einen Beitrag als gelöst markieren?