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

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

  • Upload
    arnie

  • View
    30

  • Download
    0

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Izrada hit-critical web site-ova koristeći mod_perl

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

Vlatko KošturjakHULK Našice & HrOpen

HrOpen

Page 2: Izrada hit-critical web site-ova koristeći mod_perl

Što koristiti?

ApachePerlmod_perl

Page 3: Izrada hit-critical web site-ova koristeći mod_perl

Zašto Apache?

Po NetCraft-u jedan od najzastupljenijih web servera

izrazito nadogradiv i konfigurabilanraspoloživ za gotovo sve platformeotvoren izvorni kodbesplatanteško da će nestati

Page 4: Izrada hit-critical web site-ova koristeći mod_perl

Zašto PERL?

Izrazito brzIzrazito nadogradivObjektanMoćanPortabilanRaspoloživ izvorni kod

Page 5: Izrada hit-critical web site-ova koristeći mod_perl

Zašto mod_perl?

kompajliranje on-demandmogućnost pisanja Apache modula

mogućnost pisanja handlera za svaki dio korisničkog zahtjeva

mogućnost skriptne konfiguracijebrzina uz fleksibilnost

Page 6: Izrada hit-critical web site-ova koristeći mod_perl

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 kodaPomoću Apache Toolbox-a

Page 7: Izrada hit-critical web site-ova koristeći mod_perl

Instalacija na već postojećem Apache-u

Instaliranje kao tipičnog PERL modulaPerl Makefile.pl makemake testmake install

Page 8: Izrada hit-critical web site-ova koristeći mod_perl

Kako Apache radi?

WEB preglednikWEB

poslužitelj(APACHE)

Zahtjev

Odgovor

Page 9: Izrada hit-critical web site-ova koristeći mod_perl

Pogled u međusobnu komunikaciju

GET /index.php3 HTTP/1.1Host: www.linux.hr

HTTP/1.1 200 OKDate: Tue, 13 March 2001 13:16:02 GMTServer: Apache/1.3.12 (Linux) mod_perl/1.13Last-Modified: Wed, 11 Feb 2001 21:05:25 GMTContent-Length: 892Connection: closeContent-type: text/html

<HTML>…

Page 10: Izrada hit-critical web site-ova koristeći mod_perl

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)",

);

Page 11: Izrada hit-critical web site-ova koristeći mod_perl

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;

Page 12: Izrada hit-critical web site-ova koristeći mod_perl

Izlazni kodovi web poslužitelja

200 OK404 NOT FOUND500 INTERNAL SERVER ERROR403 FORBIDDEN405 METHOD NOT ALLOWED301 MOVED PERMANENTLY302 MOVED TEMPORARY

Page 13: Izrada hit-critical web site-ova koristeći mod_perl

Životni ciklus Apache-a

Krug zahtjeva Krug zahtjeva Krug zahtjeva

Umiranje djetetaUmiranje djeteta Umiranje djeteta

Podizanje poslužitelja

Inicij. modula

Inicij. djeteta Inicij. djeteta Inicij. djeteta

Page 14: Izrada hit-critical web site-ova koristeći mod_perl

Krug zahtjeva(Request loop)

REQUEST

(wait) Post-Read req.

URI translation

Header parsing

Access control

Authentication

Authorization

MIME type check

fixupsRESPONSE

logging

cleanup

Page 15: Izrada hit-critical web site-ova koristeći mod_perl

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

Page 16: Izrada hit-critical web site-ova koristeći mod_perl

Optimizacija već postojećih PERL site-ova

Regularna optimizacija Optimizacija SQL upitaDodatne mod_perl optimizacije

Page 17: Izrada hit-critical web site-ova koristeći mod_perl

hello.cgi

#!/usr/local/bin/perl

print “Content-type: text/html\n\n”;

print “<HTML>\n”;print “Hello World\n”;print “</HTML>\n”;

Page 18: Izrada hit-critical web site-ova koristeći mod_perl

Regularna optimizacija

Optimizacija kao i kod regularnih programa Optimizacija kritičnih dijelova Zakon optimizacije: “Najmanji kod ne

mora biti i najbrži!”

Page 19: Izrada hit-critical web site-ova koristeći mod_perl

Primjer regularne optimizacije

$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;}

}

Page 20: Izrada hit-critical web site-ova koristeći mod_perl

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

Page 21: Izrada hit-critical web site-ova koristeći mod_perl

Primjer optimizacije SQL upita

SELECT * FROM addressbook;

fetch_hashref();

SELECT name,tel FROM addressbook;

fetch_array();

Page 22: Izrada hit-critical web site-ova koristeći mod_perl

Dodatne mod_perl optimizacije

Pomoću Apache::Registry-aDodavanjem u Apache konfiguraciju:

Alias /perl /usr/local/apache/perl/<Location /perl>

SetHandler perl-scriptPerlHandler Apache::RegistryPerlSendHeader OnOptions +ExecCGI

</Location>

Page 23: Izrada hit-critical web site-ova koristeći mod_perl

Izrada novog web site-a:

Napraviti plan site-aTreba 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

Page 24: Izrada hit-critical web site-ova koristeći mod_perl

Pisanje PERL handlera

package hropen::primjer;

sub handler {

my $r=shift;

return STATUS_CODE;

}

1;

Page 25: Izrada hit-critical web site-ova koristeći mod_perl

STATUS_CODE

OKDECLINEDDONESERVER_ERRORNOT_FOUNDBAD_REQUESTUNAUTHORIZED

Page 26: Izrada hit-critical web site-ova koristeći mod_perl

Hello Worldpackage hropen::hello;

use strict;use Apache::Constants qw (:common);

sub handler {my $r=shift

$r->content_type(‘text/html’);

Page 27: Izrada hit-critical web site-ova koristeći mod_perl

Hello World II

$r->send_http_header;$r->print (<<END);

<HTML>Hello World</HTML>END

return OK;}

1;

Page 28: Izrada hit-critical web site-ova koristeći mod_perl

Hello World III

Dodati u apache konfiguraciju:

<Location /hropen/hello>SetHandler perl-scriptPerlHandler hropen::hello

</Location>

Page 29: Izrada hit-critical web site-ova koristeći mod_perl

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)

{

Page 30: Izrada hit-critical web site-ova koristeći mod_perl

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;

}

Page 31: Izrada hit-critical web site-ova koristeći mod_perl

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

Page 32: Izrada hit-critical web site-ova koristeći mod_perl

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 */

};

Page 33: Izrada hit-critical web site-ova koristeći mod_perl

Statičko kompajliranje

./configure --activate-module=src/module/site/chello.c --enable-module=hello

make

Page 34: Izrada hit-critical web site-ova koristeći mod_perl

Dinamičko kompajliranje

Korištenjem Apache Extension Tool-a (apxs-a):

/usr/local/apache/bin/apxs -c -i -a chello.c

Page 35: Izrada hit-critical web site-ova koristeći mod_perl

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();

Page 36: Izrada hit-critical web site-ova koristeći mod_perl

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

Page 37: Izrada hit-critical web site-ova koristeći mod_perl

Hello World sa prenošenjem III

return OK;}

1;

Page 38: Izrada hit-critical web site-ova koristeći mod_perl

Hello World sa prenošenjem IV

Unos u konfiguraciju Apache-a:

<Location /hropen/phello> SetHandler perl-script Perlhandler hropen::phello</Location>

Page 39: Izrada hit-critical web site-ova koristeći mod_perl

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);

Page 40: Izrada hit-critical web site-ova koristeći mod_perl

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>

Page 41: Izrada hit-critical web site-ova koristeći mod_perl

Primjer pisanja Virtual Host-ova pomoću PERL-a

$VirtualHost{‘192.168.3.15’}=[{

ServerName => “jedan.test.hr”,

ServerAdmin => “[email protected]”,

DocumentRoot => “/home/httpd/html”

},

{

ServerName => “jedan.test.hr”,

ServerAdmin => “[email protected]”,

DocumentRoot => “/home/httpd/html”

}

]

Page 42: Izrada hit-critical web site-ova koristeći mod_perl

Negativne strane mod_perla

Slabo raširenTeško da neki ISP pruža

mod_perl uslugeTeško da neki ISP podržava

mod_perl uopće

Page 43: Izrada hit-critical web site-ova koristeći mod_perl

PITANJA...