blume666: Erweiterung für Apache schreiben

Hallo Leute,

ich programmiere grade ein system, das unheimlich unter php ressourcen frisst. ich denke, einen großteil dieser kann man sparen, wenn man so ähnlich wie php eine erweiterung für apache programmiert und diese dann über eine html seite aufruft....

das problem ist, ich kann zwar c programmieren, aber ich weiß niht, wie man dann die dll (unter windows) zu apache einbindet...., wie sie dann bei bestimmten seitenendungen aufgerufen wird und wie sie dann einen html code zurück geben soll :?

Kennt sich da jemand aus?

Danke,
blume88

  1. Hallo,

    ich kann zwar c programmieren, aber ich weiß niht, wie man dann die dll (unter windows) zu apache einbindet...., wie sie dann bei bestimmten seitenendungen aufgerufen wird und wie sie dann einen html code zurück geben soll :?

    ich glaube, du solltest dich mal mit den Grundlagen von CGI befassen. Im Prinzip ist es ganz einfach: Apache ruft einen externen Prozess auf, übergibt ihm die Request-Parameter über stdin und die Environment-Variablen, und nimmt die Ausgabe dieses Prozesses über stdout wieder in Empfang und leitet das Zeug weiter an den anfragenden Client. Vom Prinzip her also eine ganz einfache Sache.
    Dass die praktische Realisierung nicht ganz so trivial ist, dürfte klar sein - sonst könnte es ja jeder. ;-)

    So long,
     Martin

    --
    Zwei Mäuse treiben's miteinander. Sagt der Mäuserich: "Hoffentlich ist nicht wieder alles für die Katz."
    1. danke vielmals,

      aber erst wenn shared memory für caching im apache unter windows verfügbar sein wird, werde ich umsteigen ;)
      es handelt sich um eine suchmaschiene...... und das suchergebnis soll lieber ein binärprogramm errechnen. der algorithmus ist halt sehr einfach, aber er bearbeitet teilweise 1200mal plusminus solch eine seite wie dieses forum!!!
      und dann ist es natürlich klar, dass

      $result = search($search_query,strip_tags($text));

      1200 mal aufzurufen, ihm die variable $text (sprich eine ganze htmlseite) übergeben keinen spaß macht ;)

      und ich glaube auch, dass das auf dem schnellsten server nicht effizient ist, da man viel zu viel daten bearbeitet.

      ich etwickle den suchalgorithmus nun seit ein paar monaten und denke, dass ich das schnellste nun entwickelt habe...

      es ist mir klar, dass das einbetten des mods etwas schwierig wird, aber die frage ist, wenn ich ein mod habe, das halt NUR sucht, da kann doch nicht sehr viel falsch laufen. hacker können es eigentlich nicht zerstören, da weiterhin herkömmliche routinen von apache dafür sorgen. es kommt dann nur darauf an, den algorithmus richtig umzusetzen, damit keine fehler auftreten ;)

      1. Hallo blume666,

        es handelt sich um eine suchmaschiene...... und das suchergebnis soll lieber ein binärprogramm errechnen. der algorithmus ist halt sehr einfach, aber er bearbeitet teilweise 1200mal plusminus solch eine seite wie dieses forum!!!
        und dann ist es natürlich klar, dass

        $result = search($search_query,strip_tags($text));

        1200 mal aufzurufen, ihm die variable $text (sprich eine ganze htmlseite) übergeben keinen spaß macht ;)

        Stimmt. Wieso übergibst du dann nicht eine Referenz? Das ist in PHP auch möglich, und dürfte dein Beispiel erheblich beschleunigen.

        und ich glaube auch, dass das auf dem schnellsten server nicht effizient ist, da man viel zu viel daten bearbeitet.

        ich etwickle den suchalgorithmus nun seit ein paar monaten und denke, dass ich das schnellste nun entwickelt habe...

        Und ich bin mir sicher dass du bereits in wenigen Wochen weitere Möglichkeiten zur Optimierung oder sogar einen völlig neuen Ansatz gefunden hast.
        Software altert wenn sie nicht gewartet wird.

        es ist mir klar, dass das einbetten des mods etwas schwierig wird, aber die frage ist, wenn ich ein mod habe, das halt NUR sucht, da kann doch nicht sehr viel falsch laufen. hacker können es eigentlich nicht zerstören, da weiterhin herkömmliche routinen von apache dafür sorgen. es kommt dann nur darauf an, den algorithmus richtig umzusetzen, damit keine fehler auftreten ;)

        Mit der Aussage "hacker können es eigentlich nicht zerstören" lockst du sicher einige davon auf den Plan. Sicherheit ist kein Zustand, sondern ein Prozess.

        Grüße

        Marc Reichelt || http://www.marcreichelt.de/

        --
        panic("Oh boy, that early out of memory?");
                linux-2.2.16/arch/mips/mm/init.c
        Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
        1. Hallo!

          Stimmt. Wieso übergibst du dann nicht eine Referenz? Das ist in PHP auch möglich, und dürfte dein Beispiel erheblich beschleunigen.

          Nein! Referenzen sind in PHP *grundsätzlich* langsamer. PHP verwendet für normale Variablen sowieso schon Copy-On-Write, d.h. solange Du eine Variable nicht veränderst, wird weder zusätzlicher Speicher verbraucht noch nenneswert Rechenleistung, wenn Du sie in zig andere Variablen kopierst.

          Wenn Du dagegen PHP-Referenzen anlegst, dann greifen ein paar andere Mechanismen (Copy-On-Write wird dann nämlich für normale Kopien der Variable nicht mehr möglich, etc.), die die Performance in den Keller drücken.

          Was sich VIEL EHER lohnt ist das Ergebnis von aufwändigen Operationen (wie z.B. strip_tags [1]) zwischenzuspeichern, wenn möglich (d.h. falls strip_tags immer mit dem gleichen Wert 1000x aufgerufen wird stattdessen das Ergebnis merken und nicht den Ausgangswert). Wenn's natürlich unterschiedliche Werte sind, dann hilft das natürlich alles nichts.

          Viele Grüße,
          Christian

          [1] Wozu eigentlich? Maskieren ist doch *VIEL* besser als entfernen IMHO...

          1. hmm...

            ich sehe schon, das wird alles lustig x)
            auf meinem schlepptop mit 1GB RAM und Vista verreckt das ding....braucht, um 1245 Seiten zu durchsuchen 60 sekunden... hmm..
            ich hoffe, dass es bei meinem anbeiter besser laufen wird ...

            blume

            1. Hallo,

              ich sehe schon, das wird alles lustig x)
              auf meinem schlepptop mit 1GB RAM und Vista verreckt das ding....braucht, um 1245 Seiten zu durchsuchen 60 sekunden... hmm..

              Wie realisierst Du denn die Suche? Hast Du schon an Indizes gedacht?

              Viele Grüße,
              Christian

              1. nope, brauch ich nicht...
                ich benutze erstmal drittsuchmaschienen. zB hat mir die onlineseite von sprektrum der wissenschaft erlaubt, dass ich deren artikel durchforsten darf. er scannt alle links von der internen suche des portals und sortiert diese dann nach meinem algorithmus ;)

                weitere anbieter folgenden....

                1. Hallo blume6666666666666,

                  nope, brauch ich nicht...

                  Du brauchst keine Indizes für eine Suche?
                  Dann wundert es mich gar nicht dass deine Suche nicht performant ist.

                  Grüße

                  Marc Reichelt || http://www.marcreichelt.de/

                  --
                  panic("Oh boy, that early out of memory?");
                          linux-2.2.16/arch/mips/mm/init.c
                  Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
                  1. Tolle Trolle brauchen keine Indizes :)

                    Gut Nacht, Frank

            2. mal ne frage zu chaching...
              PHP PEAR beiten ja die Cache Lite Methode an. was genau wird da gechached? ist das einfach nur die entgültige Seite oder kann da auch eine gesamte mehrdimensionale adday gechaed werden?
              kann man das eigentlich auch in ein xml dokument umschreiben und das dann cachen, falls es mit der variable nicht geht?

              beim caching kriegt doch jeder cache ne ID? wenn man diese ID an einen anderen Benutzer irgendwie weitergibt, kann er dann drauf zugreifen????

              MFG,
              blume6666666

          2. Hallo Christian,

            Stimmt. Wieso übergibst du dann nicht eine Referenz? Das ist in PHP auch möglich, und dürfte dein Beispiel erheblich beschleunigen.

            Nein! Referenzen sind in PHP *grundsätzlich* langsamer. PHP verwendet für normale Variablen sowieso schon Copy-On-Write, d.h. solange Du eine Variable nicht veränderst, wird weder zusätzlicher Speicher verbraucht noch nenneswert Rechenleistung, wenn Du sie in zig andere Variablen kopierst.

            Vielen Dank für die Information. Ich nahm an, dass die Strings bei Funktionsübergaben in PHP kopiert werden (was sie ja auch werden - aber eben erst, wenn eine Veränderung stattfindet).

            Grüße

            Marc Reichelt || http://www.marcreichelt.de/

            --
            panic("Oh boy, that early out of memory?");
                    linux-2.2.16/arch/mips/mm/init.c
            Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
  2. Hallo blume666,

    ich programmiere grade ein system, das unheimlich unter php ressourcen frisst. ich denke, einen großteil dieser kann man sparen, wenn man so ähnlich wie php eine erweiterung für apache programmiert und diese dann über eine html seite aufruft....

    Du möchtest also ein Modul für Apache schreiben.
    Hast du dir überlegt, dass dieses Vorhaben erhebliche Sicherheitsrisiken mit sich bringt?

    Bevor du dich nun an diese Aufgabe machst solltest du dir folgende Fragen stellen:

    1. Wodurch entsteht der Engpass (CPU oder eher I/O)? Du solltest dir Gedanken um die Laufzeit machen. Gute Programmierer bekommen auch mit PHP ordentlichen Code hin, da sie sich bei jeder Zeile die sie schreiben Gedanken um Performance machen und sich bereits vor dem Entwickeln Konzepte ausgedacht haben wie sie die Performance maximieren können.

    2. Wenn sich dieser Engpass nicht durch strukturelle Änderungen im Code selbst beheben lässt, bringen Caching-Technologien oder andere Konzepte Geschwindigkeitsvorteile?

    3. Wenn all das nichts hilft: Ist der Server für die zu bewältigende Aufgabe gänzlich zu langsam, und lohnt es sich eventuell, einzelne Dienste auf andere Server oder etwa Clients zu verteilen?

    4. Wenn die Performance-Probleme durch die Sprache PHP entstehen: Vielleicht lohnt ein Umstieg auf JSP?

    5. Wird überhaupt ein Apache-Modul benötigt, oder reichen in C geschriebene CGI-Programme aus?

    Erst wenn du dir diese Fragen gestellt und verschiedene Konzepte durchprobiert hast würde ich mich an die Entwicklung eines Apache-Moduls machen.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    panic("Oh boy, that early out of memory?");
            linux-2.2.16/arch/mips/mm/init.c
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    1. Hi,

      also der war echt gut:

      1. Wenn die Performance-Probleme durch die Sprache PHP entstehen: Vielleicht lohnt ein Umstieg auf JSP?

      Mal im Ernst: Ich habe vor ca. 5 Jahren mit JSP experimentiert, die Performance war grausam - hat sich da wirklich so viel getan?

      1. Wird überhaupt ein Apache-Modul benötigt, oder reichen in C geschriebene CGI-Programme aus?

      _Guter_ PHP-Code ist nur unwesentlich langsamer als C-Code, der v.a. bei Anfängern zu erheblich mehr Fehlern führt.

      Grüsse,
        Erwin

      1. Hallo Erwin,

        also der war echt gut:

        1. Wenn die Performance-Probleme durch die Sprache PHP entstehen: Vielleicht lohnt ein Umstieg auf JSP?

        Mal im Ernst: Ich habe vor ca. 5 Jahren mit JSP experimentiert, die Performance war grausam - hat sich da wirklich so viel getan?

        Kommt drauf an - ich selbst habe mit JSP (noch) keine Erfahrung gemacht, habe aber ab und zu von Leuten gehört die JSP gegenüber PHP bevorzugen und dies mit Performance begründen.
        Vielleicht kann man bei JSP mit bestimmten Techniken oft angefragte Inhalte im Speicher behalten - das könnte schon ein Vorteil sein.

        1. Wird überhaupt ein Apache-Modul benötigt, oder reichen in C geschriebene CGI-Programme aus?

        _Guter_ PHP-Code ist nur unwesentlich langsamer als C-Code, der v.a. bei Anfängern zu erheblich mehr Fehlern führt.

        Eben das wollte ich mit meiner ersten Aussage vermitteln.
        Wer sich Gedanken um die Laufzeit (beispielsweise O(nlogn) statt O(n²)) macht kann auch in PHP performante Anwendungen entwickeln.

        Grüße

        Marc Reichelt || http://www.marcreichelt.de/

        --
        panic("Oh boy, that early out of memory?");
                linux-2.2.16/arch/mips/mm/init.c
        Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)