Einzelnen Beitrag anzeigen

Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#8

AW: Website DB-basiert versus Filebasiert

  Alt 30. Nov 2014, 08:55
Aus Erfahrung (ich baue die letzten 5 Jahre ein CMS) kann ich sagen, alles, was Du aus Dateien ausliefern kannst, solltest Du auch auch Dateien ausliefern.

Zumindest, wenn das was Du auslieferst, auch einigermassen schnell sein soll.

Filebasiert hat viele Vorteile: Der Webserver und auch das Betriebssystem darunter haben viele Möglichkeiten das Zeug intern zu cachen.
Wenn Du Files da liegen hast, dann kann der Webserver zu Deinen Dateien die richtigen Cache-Header setzen (z.B. E-Tag, last Modified) und kann anhand der Fileangaben auch automatisch die richtigen Header zurücksenden (z.B. 304 Not Modified). Das ganze müsstest Du sonst für dynamischen Content alles selber bauen. Also sowohl das interne cacheing vor der Auslieferung als auch das korrekte Handling der Http Caches.

Statischer Content hat noch mehr Vorteile: Du kannst das, was statisch dort liegt, besser skalieren und ausfallsicher gestalten. Einfach das gleiche Zeug auf mehrere Webserver klatschen, ein Loadbalancer-Pärchen vorne dran, und gut ist. Wenn eine Kiste oder ein LB ausfällt übernimmt einfach ein anderer und gut ist.

Zudem braucht sowas natürlich deutlich weniger CPU und RAM, als wenn das alles zur Laufzeit berechnet werden muss. Das heisst man kann mit weniger Hardware eine deutlich größere Menge an Usern versorgen.

Lieferst Du dynamisch aus, musst Du zusätzlich noch dafür sorgen das auch die Datenbank ausfallsicher bereitgestellt wird. Denn fällt die DB aus, liefert Deine Anwendung sonst gar nichts mehr aus. Das erhöht die Komplexität der Systems um einiges. Und dann stellt sich die Frage: Kommt die Anwendung selber ohne Statushaltung aus? Wenn Du im Code sowas wie Sessions benutzt um den Zustand des Clients zu speichern, dann musst Du auch in der Lage sein, das irgendwo hin zu persistieren, für den Fall das ein Webserver ausfällt.

Das heisst natürlich nicht, das man zur Verwaltung hier keine DB nutzen sollte.
Aber ein Verfahren, das aus dem Inhalt in der DB den auszuliefernden Content (= die HTML-Generierung) nicht zur Laufzeit macht, sondern aus dem DB-Inhalt alles statisch vorgeneriert und dann lediglich ins Filesystem zur Auslieferung legt, ist der volldynamischen Generierung beim Request vorzuziehen.

Wie gesagt sowohl zur besseren Nutzung von Ressourcen (Hardware), zum besseren Handling von Skalierung und Ausfallsicherheit, als auch zur besseren Ausnutzung der eigentlich für die Auslieferung von statischem Content optimierten Webserver.

Man kann das natürlich auch mischen. Alles was geht, aus files, und wenn dann wirklich was dynamisch generiert werden muss, diesen Teil auf das nötigste beschränken. Ist letzten Endes immer ne Fallentscheidung, aber so als Richtlinie sollte man immer versuchen, Dateien den Vorzug zu geben.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat