Christian Kruse: Forumssoftware von Sourceforge laden

Beitrag lesen

Hallo Michael,

da Christian hier nicht eingestiegen ist,

Ich sah keine Notwendigkeit mehr :)

Das, was das Forum im Moment langsam macht, ist weniger
Perl an sich,

Nun, Perl an sich macht auch ein Problem. Es ist schliesslich
nicht beliebig billig, den Perl-Interpreter zu starten, das
Script zu parsen und dann auch noch auszufuehren.

  1. Es müssen ständig XML-Strukturen geparsed werden, und
       dafür wird ein Perl-Modul verwendet, das nicht so irre
       schnell ist, dafür aber viel mehr kann, als das Forum
       mit seinen relativ einfachen XML-Strukturen braucht.

Richtig.

  1. Da beliebig viele Benutzer gleichzeitig auf das Forum
       zugreifen und dabei potentiell gleichzeitig posten
       können, müssen viele der Zugriffe synchronisiert
       werden.

Richtig.

  1. Zudem führt jedes Posting zur Änderung nicht nur des
       kompletten Threads, sondern zudem noch zur Änderung der
       Hauptdatei - also muß all dies während eines
       Posting-Vorgangs gesperrt werden (deshalb behindern
       mehrere Posting-Versuche einander).

Auch richtig.

  1. Und all dies auf einem Server, der ohnehin nicht
       beliebig leistungsfähig ist

Richtig :)

und zudem ab und zu von
   unfreundlichen Leuten mit Datenmüll beschossen wird.

Inzwischen fast dauerhaft *grummel*

Das neue Forum soll diese Probleme lösen:
a) Es soll ein neuer, selbst geschriebener (einfacher,
   aber schneller)  XML-Parser entstehen, der auf die
   Bedürfnisse der Forums-Datenformate optimiert arbeitet.
   (Ich glaube, lex und yacc dienen entweder als Grundlage
   oder doch wenigstens als Ideengeber.)

Ehm, da hast du was missverstanden. lex und yacc habe ich
mir angeschaut fuer die Template-Engine. Das habe ich
inzwischen aber ganz anders geloest :) Der XML-Parser kann
beliebig langsam sein: ich starte den Forums-Prozess doch nur
ein einziges mal, danach ist alles im Hauptspeicher.

b) Die gesamte Kommunikationsstruktur soll geändert
   werden. Bisher "reden" alle CGI-Skripte direkt mit der
   Festplatte; künftig sollen die CGI-Skripte selbst nur
   noch Clients sein, die Anforderungen an einen
   zusätzlichen, permantent laufenden Forums-daemon
   stellen (über Interprozeßkommunikation, z. B. ein
   socket).

Richtig.

Dieser daemon serialisiert dabei alle Anforderungen,

Nein. Eine Serialisierung waere ja fuerchterlich lahmarschig.
Es laeuft etwas anders ab: fuer jede Connection wird ein
Thread gestartet. Der Thread behandelt die Session (eine
Session kann ja durchaus mehrere Anfragen enthalten). Jeder
Thread setzt einen Write-Lock auf die Struktur, mit der er
gerade arbeitet: lesende Zugriffe sind also weiterhin
moeglich. Wenn ein Posting gerade schreibenden Zugriff
braucht, etwa um eine Antwort einzufuegen, wird die Struktur
gerade nur zum umsetzen eines Pointers gesperrt; dass das nur
wenige ns dauert (wenn ueberhaupt), duerfte klar sein.

Fuer lesende Zugriffe auf die Haupt-Datei existiert ausserdem
noch ein Cache: die komplette Serialisierung der
Forums-Hauptdatei, die ja noetig ist, um die Liste durch den
Socket zu schicken, ist schon im Hauptspeicher fertig
zusammengestellt.

und es sind keinerlei gegenseitigen Sperren mehr
   notwendig,

Doch, sind sie. Aber nur sehr kleine.

weil nur noch der daemon auf die
   eigentlichen Datenobjekte zugreifen darf.

Richtig.

Außerdem kann der daemon natürlich das gesamte Forum im
   Hauptspeicher halten (so viel kosten die paar hundert
   Dateien ja nicht an RAM),

Etwa 6MB kosten sie :)

was erheblich an Festplattenzugriffen einspart;

Zum Lesen ist kein einziger HD-Zugriff noetig.

damit würde nicht nur das Posten, sondern ggf. auch das
   Lesen schneller werden bzw. den Server weniger belasten.

In erster Linie optimiere ich das Forum auf lesende Zugriffe.
Aber auch das Posten duerfte wirklich schneller werden, ja.

Und die müssen nicht nur implementiert, sondern vor allem
auch gut getestet werden - bei der Kommunikation zwischen
dem daemon und seinen Clients darf nichts schief gehen,
sich nichts aufhängen usw. - wenn der daemon kaputt gehen
sollte, wäre das gesamte Forum lahm gelegt und müßte
manuell neu gestartet werden.

Nicht nur das, noch viel schlimmer: wenn der Forums-Server
sich aufhaengt und noch nicht alle neuen Postings geschrieben
wurden, kann es durchaus auch zu Datenverlusten oder
Inkonsistenzen kommen. Und das waere wirklich fatal.

Das doofe ist nur, eine C-Verion kann man nicht auf
jedem gehosteten Webserver installieren, oder kann man
das einfach wie andere Tools installieren?

Das sollte eigentlich kein Problem darstellen.

Für bestimmte häufig vorkommende Plattformen (Linux etc.)
kann man natürlich Binaries zum Download bereit stellen -
beim Apache ist das ja genauso, den übersetzt auch fast
niemand unter Windows selbst.

Bisher enthaelt aber der Forums-Source noch relativ viele
Plattformabhaengigkeiten (vor allem in der Makefile). Und ich
glaube nicht, dass das Forum jemals auf einem Windows-Rechner
laufen wird.

Gruesse,
 CK