1 / 43

Izrada hit-critical web site-ova koristeći mod_perl

HrOpen. Izrada hit-critical web site-ova koristeći mod_perl. Vlatko Košturjak HULK Našice & HrOpen. Što koristiti?. Apache Perl mod_perl. Zašto Apache?. Po NetCraft-u jedan od najzastupljenijih web servera izrazito nadogradiv i konfigurabilan raspoloživ za gotovo sve platforme

arnie
Download Presentation

Izrada hit-critical web site-ova koristeći mod_perl

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. HrOpen Izrada hit-critical web site-ova koristeći mod_perl Vlatko Košturjak HULK Našice & HrOpen

  2. Što koristiti? • Apache • Perl • mod_perl

  3. Zašto Apache? • Po NetCraft-u jedan od najzastupljenijih web servera • izrazito nadogradiv i konfigurabilan • raspoloživ za gotovo sve platforme • otvoren izvorni kod • besplatan • teško da će nestati

  4. Zašto PERL? • Izrazito brz • Izrazito nadogradiv • Objektan • Moćan • Portabilan • Raspoloživ izvorni kod

  5. Zašto mod_perl? • kompajliranje on-demand • mogućnost pisanja Apache modula • mogućnost pisanja handlera za svaki dio korisničkog zahtjeva • mogućnost skriptne konfiguracije • brzina uz fleksibilnost

  6. Instalacija Apache-a i mod_perl-a • Pomoću paketa • na Linux distribucijama pomoću paketa (deb, rpm, …) • na *BSD-ovima pomoću paketnih programa (pkg_add) • Iz izvornog koda • Pomoću Apache Toolbox-a

  7. Instalacija na već postojećem Apache-u • Instaliranje kao tipičnog PERL modula Perl Makefile.pl make make test make install

  8. Kako Apache radi? WEB preglednik WEB poslužitelj (APACHE) Zahtjev Odgovor

  9. Pogled u međusobnu komunikaciju GET /index.php3 HTTP/1.1 Host: www.linux.hr HTTP/1.1 200 OK Date: Tue, 13 March 2001 13:16:02 GMT Server: Apache/1.3.12 (Linux) mod_perl/1.13 Last-Modified: Wed, 11 Feb 2001 21:05:25 GMT Content-Length: 892 Connection: close Content-type: text/html <HTML> …

  10. Implementacija jednostavnog Web klijenta #!/usr/bin/perl use IO::Socket; $host = "www.linux.hr"; $remote = IO::Socket::INET->new ( Proto => "tcp", PeerAddr => $host, PeerPort => "http(80)", );

  11. Web klijent II unless ($remote) { die "cannot connect to $host" } $remote->autoflush(1); print $remote "GET /index.php3 HTTP/1.1\nHost: www.linux.hr\n\n"; while (<$remote>) { print } -close $remote;

  12. Izlazni kodovi web poslužitelja • 200 OK • 404 NOT FOUND • 500 INTERNAL SERVER ERROR • 403 FORBIDDEN • 405 METHOD NOT ALLOWED • 301 MOVED PERMANENTLY • 302 MOVED TEMPORARY

  13. Životni ciklus Apache-a Podizanje poslužitelja Inicij. modula Inicij. djeteta Inicij. djeteta Inicij. djeteta Krug zahtjeva Krug zahtjeva Krug zahtjeva Umiranje djeteta Umiranje djeteta Umiranje djeteta

  14. Krug zahtjeva(Request loop) REQUEST (wait) Post-Read req. URI translation Header parsing cleanup Access control Authentication Authorization logging MIME type check fixups RESPONSE

  15. Hit-Critical site-ovi • Optimizacija već postojećih PERL web site-ova pisanih kao CGI skripte • Kako početi pisati hit-critical web site-ove optimizirano pomoću PERL modula

  16. Optimizacija već postojećih PERL site-ova • Regularna optimizacija • Optimizacija SQL upita • Dodatne mod_perl optimizacije

  17. hello.cgi #!/usr/local/bin/perl print “Content-type: text/html\n\n”; print “<HTML>\n”; print “Hello World\n”; print “</HTML>\n”;

  18. Regularna optimizacija • Optimizacija kao i kod regularnih programa • Optimizacija kritičnih dijelova • Zakon optimizacije: “Najmanji kod ne mora biti i najbrži!”

  19. $sum=1; for ($i=1;$i<=$num;$i++) { $sum=$sum*$i; } $sum=1; $sum=$SUM_FOR_200 if ($num==200) else { for ($i=1;$i<$num;$i++) { $sum=$sum*$i; } } Primjer regularne optimizacije

  20. Optimizacija SQL upita • Smanjiti broj SQL upita ako je moguće • Zatražiti u upitu samo ona polja koja su potrebna • Pohraniti ih u polje, a ne hash

  21. SELECT * FROM addressbook; fetch_hashref(); SELECT name,tel FROM addressbook; fetch_array(); Primjer optimizacije SQL upita

  22. Dodatne mod_perl optimizacije • Pomoću Apache::Registry-a Dodavanjem u Apache konfiguraciju: Alias /perl /usr/local/apache/perl/ <Location /perl> SetHandler perl-script PerlHandler Apache::Registry PerlSendHeader On Options +ExecCGI </Location>

  23. Izrada novog web site-a: • Napraviti plan site-a • Treba skicirati i izabrati što će biti kritično • Primjer: Kod pretraživača će biti kritično samo pretraživanje, a ne i unošenje • Odlučiti što treba ubrzati i kako

  24. Pisanje PERL handlera package hropen::primjer; sub handler { my $r=shift; return STATUS_CODE; } 1;

  25. STATUS_CODE • OK • DECLINED • DONE • SERVER_ERROR • NOT_FOUND • BAD_REQUEST • UNAUTHORIZED

  26. Hello World package hropen::hello; use strict; use Apache::Constants qw (:common); sub handler { my $r=shift $r->content_type(‘text/html’);

  27. Hello World II $r->send_http_header; $r->print (<<END); <HTML> Hello World </HTML> END return OK; } 1;

  28. Hello World III • Dodati u apache konfiguraciju: <Location /hropen/hello> SetHandler perl-script PerlHandler hropen::hello </Location>

  29. Hello World u C-u I #include "httpd.h" #include "http_config.h" #include "http_core.h" #include "http_log.h" #include "http_protocol.h" static int hello_handler (request_rec *r) {

  30. Hello World u C-u II r->content_type = "text/html"; ap_send_http_header(r); hostname = ap_get_remote_host (r->connection,r->per_dir_config,REMOTE_NAME); ap_rputs("<HTML><HEAD>\n",r); ap_rputs("<TITLE>Hello</TITLE>\n",r); ap_rputs("</HEAD><BODY>\n",r); ap_rprintf(r,"Hello %s\n",hostname); ap_rputs("</BODY></HTML>\n”,r); return OK; }

  31. Hello World u C-u III static handler_rec hello_handlers[] = { {"hello-handler", hello_handler},{NULL} }; module MODULE_VAR_EXPORT hello_module = { STANDARD_MODULE_STUFF, NULL, /* module init */ NULL, /* per-dir config creator */ NULL, /* dir config merger */ NULL, /* server config creator */ NULL, /* server config merger */ NULL, /* command table

  32. Hello World u C-u IV hello_handlers, /* content handlers */ NULL, /* URI-to-filename translation */ NULL, /* check/validate user_id */ NULL, /* check access by host adr */ NULL, /* MIME type checker/setter */ NULL, /* fixups */ NULL, /* logger */ NULL, /* header parser */ NULL, /* process init */ NULL, /* process exit/cleanup */ NULL /* post read_request handling */ };

  33. Statičko kompajliranje • ./configure --activate-module=src/module/site/chello.c --enable-module=hello • make

  34. Dinamičko kompajliranje Korištenjem Apache Extension Tool-a (apxs-a): /usr/local/apache/bin/apxs -c -i -a chello.c

  35. Hello World sa prenošenjem parametara I package hropen::phello; use Apache(); use Apache::Constants qw(:common); sub handler { my $r = shift; my %params = $r->method eq 'POST' ? $r->content : $r->args; my $user = $params{'user'} || 'nepoznati'; $r->content_type('text/html'); $r->send_http_header();

  36. Hello World sa prenošenjem II $r->print (<<END); <HTML> Pozdrav $user <BR> <FORM METHOD=POST> <INPUT NAME=user MAXSIZE=40 LENGTH=40> <INPUT TYPE=submit VALUE="promjeni"> </FORM </HTML> END

  37. Hello World sa prenošenjem III return OK; } 1;

  38. Hello World sa prenošenjem IV Unos u konfiguraciju Apache-a: <Location /hropen/phello> SetHandler perl-script Perlhandler hropen::phello </Location>

  39. Dodatne optimizacije SQL upita koristeći mod_perl Korištenje stalnih (persistant) veza prema bazi: use Apache::DBI(); $DBH||=DBI->connect($data_source, $user, $password);

  40. Primjer pisanja PERL-a u konfiguraciji Dodajemo direktno u Apache konfiguraciju: <Perl> my $hostname=`hostname`; $user=“nobody”; $user=“www-data” if $hostname =~/^debian/; $user=“httpd” if $hostname =~/^redhat/; </Perl>

  41. Primjer pisanja Virtual Host-ova pomoću PERL-a $VirtualHost{‘192.168.3.15’}=[ { ServerName => “jedan.test.hr”, ServerAdmin => “web@jedan.test.hr”, DocumentRoot => “/home/httpd/html” }, { ServerName => “jedan.test.hr”, ServerAdmin => “web@jedan.test.hr”, DocumentRoot => “/home/httpd/html” } ]

  42. Negativne strane mod_perla • Slabo raširen • Teško da neki ISP pruža mod_perl usluge • Teško da neki ISP podržava mod_perl uopće

  43. PITANJA...

More Related