lyhennelmä - tkkbhca busy hour call attempts puheluyritysten lukumäärä kiiretunnin aikana cgi...

101
I Lyhennelmä Tekijä: Työn nimi: Päivämäärä: Antti Paju Tilaajanumeron siirrettävyys yhdistetyssä piiri- ja pakettikytkentäisessä verkossa 3.12.2002 Sivumäärä: 86 Osasto: Professuuri: Sähkö- ja tietoliikennetekniikan osasto S-38 Tietoverkkotekniikka Työn valvoja: Työn ohjaaja: Prof. Raimo Kantola DI Nicklas Beijar Tilaajanumeron siirrettävyys on monissa maissa Suomi mukaan lukien varsin ajankohtainen aihe. Suomessa Viestintävirasto on määrännyt, että GSM-numerot tulee olla siirrettäviä operaattorilta toiselle 1.7.2003 lähtien. IP-pohjaisen televiestinnän yleistyessä tulee myös tarpeelliseksi siirtää tilaajia televerkosta IP-verkkoon siten, että asiakas voi säilyttää vanhan numeronsa. Tilaajalle teknologinen muutos ei ole motivaatio vaihtaa numeroa. Numeron siirrettävyys edistää kilpailua telemarkkinoilla. Sen ansiosta myös asiakastyytyväisyys paranee. Jos tilaaja muuttaa, hänen ei tarvitse vaihtaa puhelinnumeroa. Yritysasiakkaille voi aiheutua merkittävästi esimerkiksi mainontaan liittyviä kuluja, jos puhelinnumerot muuttuvat. Numeron siirrettävyydestä hyötyvät siis sekä yritys- että yksityisasiakkaat. Nykyisin numeron siirrettävyys kiinteässä televerkossa on toteutettu IN-tekniikalla (Intelligent Network). Tekniikassa on monia puutteita, joita tässä diplomityössä esitettävä ratkaisu pyrkii korjaamaan esittämällä uuden ratkaisun, johon edelleen sisältyy kuitenkin IN-tekniikkaa jollakin tavalla. Numeron siirrettävyyttä käsitellään palveluna, joka toteutetaan standardeilla rajapinnoilla ja määrittelyillä. Tavoitteena on, että puhelu ohjataan suoraan siihen verkkoon, jonka asiakkaana kutsuttu tilaaja on, eli ei siis minkään aiemmin tilaajaa palvelleen verkon kautta. Numeron siirrettävyys vaatii muunnospalvelun, jossa looginen tilaajanumero kuvataan topologiasidonnaiseen reititysosoitteeseen. Verkkojen yhteistoiminta edellyttää sellaista loogista osoitteistusta, jota kaikki verkon päätelaitteet tukevat. Dominoivia ovat E.164-numerot johtuen televerkon rajoitteista. Toteutuksessa tiedonhallinta perustuu relaatiotietokantoihin, jotka tarjoavat tehokkaita hakurakenteita sekä välineitä viite-eheyden automaattiseen ylläpitoon. Pääsyrajapintana käytetään ODBC-rajapintaa (Open DataBase Connectivity). Sen avulla ratkaisusta voidaan tehdä siirrettävä moniin kaupallisiin ja ei-kaupallisiin SQL-tietokantoihin. Tuloksena saadaan täysin puheluita välittävän verkon teknologiasta riippumaton ratkaisu, jonka skaalautuvuus on ylivertainen verrattuna aiemmin esiteltyihin numeron siirrettävyyden tiedonhallintaratkaisuihin. Avainsanat: NP, SQL, ODBC, DNS, SIP, ISUP, IN, TRIP, BGP

Upload: others

Post on 24-Apr-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

I

Lyhennelmä

Tekijä:

Työn nimi:

.

Päivämäärä:

Antti Paju

Tilaajanumeron siirrettävyys yhdistetyssä piiri- ja pakettikytkentäisessä

verkossa

3.12.2002 Sivumäärä: 86

Osasto:

Professuuri:

Sähkö- ja tietoliikennetekniikan osasto

S-38 Tietoverkkotekniikka

Työn valvoja:

Työn ohjaaja:

Prof. Raimo Kantola

DI Nicklas Beijar

Tilaajanumeron siirrettävyys on monissa maissa Suomi mukaan lukien varsin ajankohtainen

aihe. Suomessa Viestintävirasto on määrännyt, että GSM-numerot tulee olla siirrettäviä

operaattorilta toiselle 1.7.2003 lähtien. IP-pohjaisen televiestinnän yleistyessä tulee myös

tarpeelliseksi siirtää tilaajia televerkosta IP-verkkoon siten, että asiakas voi säilyttää vanhan

numeronsa. Tilaajalle teknologinen muutos ei ole motivaatio vaihtaa numeroa. Numeron

siirrettävyys edistää kilpailua telemarkkinoilla. Sen ansiosta myös asiakastyytyväisyys paranee.

Jos tilaaja muuttaa, hänen ei tarvitse vaihtaa puhelinnumeroa. Yritysasiakkaille voi aiheutua

merkittävästi esimerkiksi mainontaan liittyviä kuluja, jos puhelinnumerot muuttuvat. Numeron

siirrettävyydestä hyötyvät siis sekä yritys- että yksityisasiakkaat.

Nykyisin numeron siirrettävyys kiinteässä televerkossa on toteutettu IN-tekniikalla (Intelligent

Network). Tekniikassa on monia puutteita, joita tässä diplomityössä esitettävä ratkaisu pyrkii

korjaamaan esittämällä uuden ratkaisun, johon edelleen sisältyy kuitenkin IN-tekniikkaa jollakin

tavalla. Numeron siirrettävyyttä käsitellään palveluna, joka toteutetaan standardeilla

rajapinnoilla ja määrittelyillä. Tavoitteena on, että puhelu ohjataan suoraan siihen verkkoon,

jonka asiakkaana kutsuttu tilaaja on, eli ei siis minkään aiemmin tilaajaa palvelleen verkon

kautta. Numeron siirrettävyys vaatii muunnospalvelun, jossa looginen tilaajanumero kuvataan

topologiasidonnaiseen reititysosoitteeseen. Verkkojen yhteistoiminta edellyttää sellaista loogista

osoitteistusta, jota kaikki verkon päätelaitteet tukevat. Dominoivia ovat E.164-numerot johtuen

televerkon rajoitteista.

Toteutuksessa tiedonhallinta perustuu relaatiotietokantoihin, jotka tarjoavat tehokkaita

hakurakenteita sekä välineitä viite-eheyden automaattiseen ylläpitoon. Pääsyrajapintana

käytetään ODBC-rajapintaa (Open DataBase Connectivity). Sen avulla ratkaisusta voidaan tehdä

siirrettävä moniin kaupallisiin ja ei-kaupallisiin SQL-tietokantoihin. Tuloksena saadaan täysin

puheluita välittävän verkon teknologiasta riippumaton ratkaisu, jonka skaalautuvuus on

ylivertainen verrattuna aiemmin esiteltyihin numeron siirrettävyyden tiedonhallintaratkaisuihin.

Avainsanat: NP, SQL, ODBC, DNS, SIP, ISUP, IN, TRIP, BGP

Page 2: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

II

Abstract

Author:

Name of thesis:

.

Date:

Antti Paju

Number Portability in Interconnected Circuit and Packet Switched

Networks

3.12.2002 Number of pages: 86

Faculty:

Professorship:

Department of Electrical and Communications Engineering

S-38 Networking Technology

Supervisor:

Instructor:

Prof. Raimo Kantola

Nicklas Beijar M.Sc. (Tech)

Number portability is quite a topical issue in several countries including Finland. In Finland the

communications regulatory authority (FICORA) has ordered the GSM numbers to be portable

from an operator to another from 1st of July 2003 onwards. As VoIP (Voice over IP) is getting

more common, a need arises to port subscribers from the SCN to the IP network so that a ported-

out subscriber can still keep his/her number. For a customer, the technological transition is not

any reason to change his/her telephone number. Number portability enhances competition in the

telecom markets and improves customer satisfaction. When a subscriber moves, his/her number

does not have to be changed. Changing the telephone number can cause e.g. significant

advertising costs to business customers. So, number portability is very useful for both business

and residential customers.

Nowadays, number portability is managed with IN technology (Intelligent Network). IN based

number portability has several drawbacks This thesis tries to fix them by introducing a new

solution, which still uses the existing IN technology some way. The management of number

portability is treated as an application, which is created using standard interfaces and definitions.

This thesis rejects the approach of routing the call into the donor’s network first. The aim is, that

the call is routed directly into the network where the called party is located. Number portability

requires a number translation service, which resolves the logical directory number into a routing

number, or to be more specific, into a routing address. Interoperability requires common

numbering between the SCN and IP networks. Due to the structure of PSTN, E.164 numbering is

used in both SCN and IP networks.

The solution utilizes relational databases for efficient database management. They provide very

scalable data structures and tools for automatic data integrity management. ODBC (Open

Database Connectivity) is selected as the access interface to relational databases. ODBC makes

the solution portable to many commercial and non-commercial SQL databases. As a result, we

get a service, which is independent on the carrier network, and the scalability of which knocks

previous database management solutions of number portability into a cocked hat.

Key words: NP, SQL, ODBC, DNS, SIP, ISUP, IN, TRIP, BGP

Page 3: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

III

Alkulause

Tämä diplomityö on tehty Teknillisen korkeakoulun Tietoverkkolaboratorion IMELIO-projektissa.

Projektia rahoittivat TEKES, Nokia sekä Elisa Communications.

Haluan kiittää erityisesti työn valvoja professori Raimo Kantolaa sekä työn ohjaaja DI Nicklas

Beijaria. Heidän antamansa tuki ja ohjaus on ollut erittäin arvokasta koko projektin ajan. Kiitos

kuuluu myös Kimmo Pitkäniemelle, joka auttoi testiympäristön kokoamisessa sekä TkL Marko

Luomalle, jolta sain kriittistä tutkimukseen liittyvää palautetta projektin aikana. Haluan ilmaista

kiitokseni Teknillisen korkeakoulun Tietoverkkolaboratorion koko henkilökunnalle, joka muodosti

kannustavan työyhteisön.

Kolmas joulukuuta vuonna 2002 Espoossa

Antti Paju

Page 4: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

IV

Sisällysluettelo

1 JOHDANTO..............................................................................................................................1

2 TYÖN TAUSTAT.....................................................................................................................4

2.1 NUMERON SIIRRETTÄVYYDELLE VAADITTAVA TEKNOLOGIA ............................................4

2.1.1 Piirikytkentäisessä verkossa .......................................................................................4

2.1.2 Internetissä .................................................................................................................4

2.2 SCN/IPTEKNOLOGIARAJAPINTA........................................................................................5

2.3 YHDYSKÄYTÄVÄN SIJAINTI ................................................................................................6

2.3.1 Ongelma......................................................................................................................6

2.3.2 Ratkaisut .....................................................................................................................6

2.4 TRIP....................................................................................................................................7

2.4.1 TRIP vs. BGP..............................................................................................................7

2.4.2 TRIP SCN/IP yhdyskäytävän sijaintiongelman ratkaisijana ......................................8

2.4.3 TRIP-tietokannat.........................................................................................................9

2.4.4 Päätösprosessi ..........................................................................................................10

2.4.5 TRIP:n heikkoudet ....................................................................................................11

2.5 AIEMMAT AIHEESEEN LIITTYVÄT TUTKIMUKSET .............................................................12

2.5.1 TRIP/CTRIP arkkitehtuuri........................................................................................12

2.5.2 iBGP .........................................................................................................................13

2.6 TRIP/CTRIP-RATKAISUN HEIKKOUDET ...........................................................................14

2.6.1 Aggregointi vaikeutuu...............................................................................................14

2.6.2 Tietokantojen kasvu ..................................................................................................16

2.6.3 Synkronointi ..............................................................................................................16

2.7 PÄÄMÄÄRÄT .....................................................................................................................16

3 RELAATIOTIETOKANNAT ...............................................................................................18

3.1 RELAATIOTIETOKANTOJEN RAKENNE...............................................................................18

3.2 TIEDON HAKU ...................................................................................................................19

3.2.1 Indeksointi.................................................................................................................19

3.2.2 Kyselyn käsittely .......................................................................................................20

3.2.3 Proseduurihaut .........................................................................................................22

3.2.4 Kyselyjen tallettaminen välimuistiin.........................................................................23

3.2.5 Datavälimuisti...........................................................................................................23

3.2.6 Redundanssi..............................................................................................................24

3.3 RELAATIOMALLI ...............................................................................................................25

3.3.1 Relaation määritelmä ...............................................................................................25

3.3.2 Tietokantarelaation matemaattinen määritelmä.......................................................26

4 ODBC – OPEN DATABASE CONNECTIVITY.................................................................28

Page 5: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

V

4.1 MIKSI?...............................................................................................................................28

4.2 ODBC-RAJAPINTA ............................................................................................................29

4.2.1 ODBC-standardi .......................................................................................................29

4.2.2 ODBC:n komponentit................................................................................................30

4.3 ODBCKÄYTÄNNÖSSÄ ......................................................................................................32

4.3.1 ODBC-esimerkki .......................................................................................................32

4.3.2 ODBCINI-tiedosto ....................................................................................................33

4.3.3 JDBC – Java DataBase Connectivity........................................................................33

5 OSOITTEISTUS JA NIMEÄMINEN...................................................................................35

5.1 INTERNETIN NIMIPALVELU ................................................................................................35

5.2 ENUM...............................................................................................................................37

5.3 NUMERON SIIRRETTÄVYYS NYKYISIN...............................................................................38

5.4 NUMERON SIIRRETTÄVYYSGSM-VERKOSSA...................................................................39

6 NUMERON SIIRRETTÄVYYDEN TAVOITEARKKITEHTUURI ...............................40

6.1 KOMPONENTIT..................................................................................................................40

6.1.1 Arkkitehtuuri .............................................................................................................40

6.1.2 Monistetut päivitystietokannat ..................................................................................41

6.1.3 Luotettavuus..............................................................................................................42

6.2 TIETOKANNAT ...................................................................................................................42

6.2.1 Päivitystietokannat....................................................................................................42

6.2.2 Numerotietokannat....................................................................................................43

6.2.3 Vaihtelevan mittaiset numerot...................................................................................44

6.3 PUHELUN MUODOSTUS......................................................................................................45

6.3.1 Reititysosoitteen haku................................................................................................45

6.3.2 Luettelonumeroiden aggregoinnin vaikutus..............................................................46

6.3.3 Vaadittu transaktionopeus ja tietokantakyselyjen kuorman jako..............................47

6.3.4 Numerotietokantojen päivitys....................................................................................48

6.4 NUMERON SIIRRETTÄVYYSSCN/IPTEKNOLOGIARAJAPINNAN YLI .................................49

6.4.1 Numerointi ................................................................................................................49

6.4.2 Reititys.......................................................................................................................49

6.4.3 Puhelun muodostus ...................................................................................................50

7 TIETOKANTOJEN TOTEUTUS .........................................................................................52

7.1 TIETOKANTASUUNNITTELU...............................................................................................52

7.1.1 Mallinnus ..................................................................................................................52

7.1.2 Toteutus.....................................................................................................................52

7.2 KÄYTETYT OHJELMISTOT..................................................................................................53

7.2.1 Relaatiotietokannat vs. hakemistot............................................................................53

7.2.2 MySQL ......................................................................................................................54

7.2.3 Replikointi .................................................................................................................54

Page 6: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

VI

7.3 NUMEROTIETOKANTA.......................................................................................................56

7.3.1 Sanallinen kuvaus .....................................................................................................56

7.3.2 Relaatiomalli.............................................................................................................56

7.3.3 Toteutus.....................................................................................................................57

7.3.4 Hakuoperaatio pisimmän osuman mukaan (peräkkäislähetys) ................................58

7.3.5 Hakuoperaatio pisimmän osuman mukaan (kertalähetys)........................................61

7.4 PÄIVITYSTIETOKANNAT ....................................................................................................64

7.4.1 Sanallinen kuvaus .....................................................................................................64

7.4.2 Relaatiomalli.............................................................................................................64

7.4.3 Toteutus.....................................................................................................................65

7.4.4 Numeropalvelimien päivitys .....................................................................................67

7.4.5 Päivitysten validointi ................................................................................................69

7.4.6 Numerotietokannan ja päivitystietokannan synkronointi .........................................71

8 RATKAISUN ARVIOINTI ...................................................................................................73

8.1 RATKAISUN TOIMIVUUS ....................................................................................................73

8.1.1 Relaatiotietokantojen suorituskyky...........................................................................73

8.1.2 ODBC-ohjelmistot ....................................................................................................74

8.1.3 Päivitysliikenteen volyymi.........................................................................................74

8.2 JÄRJESTELMÄN KÄYTTÖÖNOTTO......................................................................................75

8.2.1 Tietokantojen alustaminen........................................................................................75

8.2.2 Käyttöesimerkki ........................................................................................................76

8.2.3 Päivitysoperaatioiden laukaisu.................................................................................78

8.2.4 Operaattori/regulaattori-rajapinnan SQL-kyselyt....................................................79

8.3 SKAALAUTUVUUS .............................................................................................................79

8.3.1 Oletukset ...................................................................................................................79

8.3.2 Laskelmat..................................................................................................................80

9 JOHTOPÄÄTÖKSET............................................................................................................83

9.1 TEKNOLOGIA.....................................................................................................................83

9.2 NUMERON SIIRRETTÄVYYS TULEVAISUUDESSA...............................................................85

Page 7: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

VII

Kuvien luettelo

Kuva 1.1. Tilaajan siirtyminen televerkossa .......................................................................................2

Kuva 2.1. TRIP-tietokannat ..............................................................................................................10

Kuva 2.2 TRIP/CTRIP-arkkitehtuuri [14] ........................................................................................12

Kuva 2.3 Täysin kytketty ratkaisu vs. reitityspeili...........................................................................13

Kuva 2.4 Puhelinverkko....................................................................................................................15

Kuva 3.1. Relaatiotietokannan rakenne ............................................................................................18

Kuva 3.2. MySQL: n suorituskyky ...................................................................................................19

Kuva 3.3. MySQL Insert...................................................................................................................21

Kuva 3.4. Toisteisuuden poistaminen ...............................................................................................24

Kuva 4.1 MySQL vs. PostgreSQL....................................................................................................28

Kuva 4.2. ODBC-viitemalli ..............................................................................................................31

Kuva 5.1. Hierakkinen DNS-kysely..................................................................................................35

Kuva 5.2. IN arkkitehtuuri ................................................................................................................38

Kuva 5.3. Numeron siirrettävyys GSM-verkossa .............................................................................39

Kuva 6.1. Tavoitearkitehtuurin komponentit ....................................................................................40

Kuva 6.2. Inkrementaalinen tietokantojen päivitys...........................................................................41

Kuva 6.3. Numerotietokannat ...........................................................................................................43

Kuva 6.4. Puhelun muodostus...........................................................................................................45

Kuva 6.5. Hajautettu numerotietokanta ............................................................................................47

Kuva 6.6. Esimerkki puhelun muodostuksesta .................................................................................51

Kuva 7.1 Esimerkki MySQL:n binäärilogi .......................................................................................55

Kuva 7.2. Numerotietokannan elementit ..........................................................................................56

Kuva 7.3. Numerotietokannan kuvaus ..............................................................................................57

Kuva 7.4. Esimerkkitietokanta..........................................................................................................59

Kuva 7.5. Reititystiedon haku (peräkkäislähetys).............................................................................60

Kuva 7.6. Reititystiedon haku (kertalähetys)....................................................................................62

Kuva 7.7. Päivitystietokantaan liittyvät elementit ............................................................................64

Kuva 7.8. Reititysnumeron levitys (PNAC) .....................................................................................66

Kuva 7.9. Reititysnumeron levityksen uudelleenyritys (PNAC) ......................................................67

Kuva 7.10. Numerotietokannan päivitys (NA) .................................................................................68

Kuva 7.11. Siirtymiseen liittyvät transaktiot.....................................................................................70

Kuva 8.1. Järjestelmän alustus..........................................................................................................77

Page 8: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

VIII

Lyhenneluettelo

ANSI American National Standardization Instute

Yhdysvalloissa toimiva voittoa tuottamaton standardointijärjestö

API Application Programming Interface

Ohjelmointikielen sovellusrajapinta ulkoisiin järjestelmiin

AS Autonomous System

Internetin reititysalue, jossa sovelletaan yhtenäistä politiikkaa

AVCC Advertisement Validity Checking Client

Siirtymistiedon tarkistin

BCNF Boyce-Codd Normal Form

Eräs tavoitetila poistettaessa toisteisuutta tietokannasta

BGP Border Gateway Protocol

Nykyisin de facto-standardi Internetin ulkoisessa reitityksessä

BHCA Busy Hour Call Attempts

Puheluyritysten lukumäärä kiiretunnin aikana

CGI Common Gateway Interface

Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen tiedonsiirtoon

CIDR Classless InterDomain Routing

Osoitejärjestys, jossa IP-osoitteiden jako vain A-, B-, ja C-luokkiin poistetaan

CLI Call Level Interface

Rajapinta sovellusohjelmista tietokantajärjestelmiin

CPS Call Processing Server

Puhelunmuodostuspalvelin Internetissä

CSA Cache State Advertisement

SCSP:ssä lähetettävä tietuemainos

CTRIP Circuit Telephony Routing Information Protocol

BGP:n mukainen protokolla, joka mainostaa IP-verkon kohteita televerkkoon

DNS Domain Name Service

Internetin nimipalvelu

DSN Data Source Name

ODBC:ssä käytetty nimi tietojärjestelmien identifiointiin

E.164 ITU-T:n suositus SCN-puhelinnumeroiden esittämiseen

ENUM E.164 Number Mapping

Palvelu, jolla E.164-puhelinnumerot muunnetaan IP-osoitteiksi

ER Entity Relationship

Malli, jossa tiedonhallintajärjestelmä esitetään yksilöjoukkoina

Page 9: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

IX

GMSC Gateway Mobile Switching Center

Puhelinkeskus, joka yhdistää PSTN/ISDN-verkon GSM-verkkoon

GPL General Public License

Ohjelmistojen vapaa lisenssi

GSM Global System for Mobile communications

Digitaalinen piirikytkentäinen matkapuhelinverkko

H.323 ITU-T:n suositus IP-puhelujen signalointiin

HA Home Agent

Kotiagentti MobileIP:ssä

HLR Home Location Register

GSM-verkon kotirekisteri

HTTP Hypertext Transfer Protocol

Tekstipohjainen protokolla tiedostojen siirtoon Internetissä

IAM Initial Address Message

ISUP-puhelunmuodostuksessa ensimmäisenä lähetettävä sanoma

iBGP interior Border Gateway Protocol

BGP:n käyttämä synkronointiprotokolla

IEC International Engineering Consortium

Voittoa tuottamaton standardointijärjestö informaatioteollisuuden tarpeisiin

IN Intelligent Network

Älyverkko

INAP Intelligent Networks Application Part

Älyverkon sovellusosa YKM:ssä

IP Internet Protocol

Keskeisin Internetin verkkokerroksen protokolla

ISAM Indexed Sequential Access Method

Eräs B+-puuhun perustuva tiedonhakuproseduuri

ISDN Integrated Services Digital Network

Piirikykentäinen digitaalinen monipalveluverkko

ISO International Standardization Organization

Maailmanlaajuinen standardointijärjestö

ISUP ISDN User Part

ISDN:ssä puhelinkeskusten välisen merkinannon YKM-protokolla

ITAD Internet Telephony Administrative Domain

IP-puheverkossa reititysalue, jossa sovelletaan yhtenäistä politiikkaa

JDBC Java DataBase Connectivity

Sovellusrajapinta, joka tarjoaa javasovelluksille pääsyn tietokantoihin

Page 10: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

X

LDAP Lightweight Directory Access Protocol

Kevyt Internetin hakemistopalvelu

LE Local Exchange

PSTN/ISDN-verkon paikalliskeskus

LS Location Server

Tilaajien sijaintipalvelin IP-puheverkossa

MAP Mobile Application Part

GSM:n sovellusosa YKM:ssä

MD5 Message Digest 5

Salausmenetelmä, joka perustuu monimutkaisen algoritmin laskentaan

MSRN Mobile Subscriber Roaming Number

GSM-verkon reititysnumero

NA Numbering Agent

Numerontiagentti

NP Number Portability

Tilaajanumeron siirrettävyys

NS Name Server

Internetin nimipalvelujärjestelmän nimipalvelin

ODBC Open DataBase Connectivity

Sovellusrajapinta ohjelmointikielissä tietokantajärjestelmiin

ODL Object Description Language

Oliopohjainen mallinnusmenetelmä

ORDBMS Object Relational DataBase Management System

Oliorelaatiotietokannan hallintajärjestelmä

OSPF Open Shortest Path First

Linkkien tilaan perustuva Internetin sisäinen reititysprotokolla

PHP Hypertext Preprocessor

Ohjelmointikieli, joka tarjoaa rajapinnan moniin tietokantajärjestelmiin

PNAC Ported Number Advertising Client

Siirtymistiedon levittäjä

PNDB Ported Number Database

Siirtymistietokanta

PSTN Public Switched Telephone Network

Piirikykentäinen analoginenpuhelinverkko

RF Route reFlector

iBGP:n reitityspeili

Page 11: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

XI

RIS Routing Information Server

Reititystietopalvelin

RTP Realtime Transport Protocol

Internetin reaaliaikapalveluissa käytettävä sanomien kuljetusprotokolla

RTSP RealTime Streaming Protocol

Multimediapalvelujen ohjausprotokolla Internetissä

SCN Switched Circuit Network

Yleisnimitys piirikytkentäisille verkoille

SCP Service Control Point

Älyverkon palvelunohjauspiste

SCSP Service Cache Synchronisation Protocol

OSPF:n levitysmekanismiin perustuva synkronointiprotokolla

SDF Service Data Function

Älyverkon tietokanta

SDP Service Data Point

Älyverkon tietokantojen hallintapiste

SIP Session Initiation Protocol

IETF:n standardi multimediaistuntojen muodostamiseen Internetissä

SMS Service Management System

Aäyverkon palvelun hallitsija

SMS Short Messaging Service

GSM-verkon lyhytsanomapalvelu

SQL Structured Query Language

Standardoitu tietokannan kyselyissä ja hallinassa käytettävä kieli

SSL Secure Socket Layer

Julkiseen ja yksityiseen avaimeen perustuva salausmenetelmä

TAD Telephony Administrative Domain

Autonominen alue piirikykentäisessä verkossa

TCP Transmission Control Protocol

Yhteydellinen Internetin kuljetuskerroksen protokolla

TE Transit Exchange

Puhelinverkon kauttakulkukeskus

TPM Transactions Per Minute

Tiedonhallintajärjestelmän transaktion hallintakyky (lkm minuutissa)

TRIB Telephony Routing Information Base

TRIP:n reititystietokanta

Page 12: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

XII

TRIP Telephony Routing Information Protocol

BGP:n mukainen protokolla, jossa televerkon kohteita mainostetaan Internetiin

TTL Time To Live

Ilmaisee DNS:ssä kuinka kauan mainostettu tietue on voimassa

UDB Update Database

Päivitystietokanta

UML Unified Modelling Language

Kieliriippumaton mallinnusmenetelmä ohjelmistokehityksessä

URI Unified Resource Identifier

Median lähde/kohdetunniste Internetin multimediapalveluissa

VLR Visitor Location Register

GSM-verko vierailurekisteri

VSAM Virtual Sequential Access Method

Eräs B+-puuhun perustuva tiedonhakuproseduuri

YKM Yhteiskanavamerkinanto eli SS7 (Signalling System number 7)

Page 13: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

1

1 Johdanto

Tässä diplomityössä tutkitaan puhelinnumeron siirrettävyyttä. Pääpaino on ennen kaikkea

numerotietokantojen hallinnassa mukaan lukien päivitysprosessit tilaajan tai tilaajajoukon

siirtyessä. Tämä diplomityö ei ole puhdas ohjelmointityö eikä toisaalta pelkkä akateeminen

pohdiskelu, jossa pääpaino olisi kirjallisuustutkimuksessa, vaan sijoittuu jonnekin näiden

välimaastoon. Näkökulma aiheeseen on hyvin käytännön läheinen. Luvussa 7 puututaan tarkemmin

itse toteutukseen. Sen tarkoitus on tuottaa lukijalle laajempi ymmärrys tutkimusaiheesta ja toisaalta

perustella ratkaisuja, joihin olen päätynyt osoittamalla, että ohjelmistoarkkitehtuuri on todella

mahdollista toteuttaa. Käytetyt tutkimusmenetelmät työssä ovat hyvin moninaiset:

tutkimusaiheeseen liittyviin aiempiin tutkimuksiin tutustuminen, testiohjelmien implementointi

sekä testiympäristön suunnittelu ja kokoaminen.

Numeron siirrettävyys edistää kilpailua telemarkkinoilla. Markkinoille pyrkiville uusille

operaattoreille numeron siirrettävyys takaa paremmat mahdollisuudet menestyä, koska asiakkaiden

hankkiminen helpottuu. Näin käy tietysti markkinoilla ennestään toimivien operaattoreiden

kustannuksella. Asiakkaille numeron siirrettävyys takaa aiempaa joustavamman telepalvelun, koska

numeroa ei tarvitse vaihtaa paikkakunnalta muuton yhteydessä tai muusta syystä palvelun tarjoajaa

vaihdettaessa. Toisaalta numeron siirrettävyyden edellyttämä tilaajakohtaisen reititystiedon säilytys

tarjoaa mahdollisuudet muidenkin palvelujen kehittämiseen etenkin IP-pohjaisen televiestinnän

yleistyessä. Suomessa numeron siirrettävyys tulee toimia GSM-verkkojen välillä 1.7.2003 [1].

Kiinteiden televerkkojen välillä siirrettävyys toimii jo nykyisin mutta on hinnoiteltu siten, että

palvelua ei juurikaan käytetä. IP-verkon ja televerkon välisestä puhelinnumeroiden siirrettävyydestä

mitään ennakkopäätöstä tai aikataulua ei ainakaan Suomessa ole tehty. Teknologiasta toiseen

siirtymiset onkin tämän diplomityön keskeisimpiä pohdinnan kohteita.

Numeron siirrettävyys tarkoittaa sitä, että tilaajan ei tarvitse vaihtaa puhelinnumeroa, kun hänen

verkkoliityntäpiste vaihtuu – esimerkiksi muuton yhteydessä. Vanha puhelinnumero tulee pystyä

säilyttämään myös silloin, kun tilaaja siirtyy toisen palveluntarjoajan asiakkaaksi

siirrettävyysalueen sisällä. Työssä koottava palvelu voidaan toteuttaa perinteisessä

piirikytkentäisessä televerkossa (SCN) sekä puheluita välittävissä IP-verkoissa eli Internetissä.

Myös siirtymiset teknologiasta toiseen tulee siis olla mahdollisia.

Page 14: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

2

6

4

5

21

3

234

365

187

6

4

5

21

3

365

234

NP

187

234?

1

6

4

5

21

3

234

365

187

6

4

5

21

3

234

365

187

6

4

5

21

3

365

234

NP

187

234?

1

Kuva 1.1. Tilaajan siirtyminen televerkossa

Piirikytkentäisessä puhelinverkossa (PSTN/ISDN) numeron siirrettävyys rikkoo tilaajanumeroiden

sidoksen verkon topologiaan [2]. Edellä [Kuva 1.1] esitetään yksinkertaistettu esimerkki, mistä

topologiasidonnaisuudessa on kysymys. Alunperin kaikki numerolla 2 alkavat tilaajanumerot ovat

samaan puhelinkeskukseen kytketyillä tilaajilla. Näin jokainen keskus puhelua muodostettaessa

osaa ohjata puhelun kohti keskusta 2. Vastaavasti puhelut numerolla 1 alkaville tilaajille ohjataan

kohti keskusta 1. Tilaajan 234 siirtyessä keskukseen 1 puhelut kyseiselle tilaajalle tuleekin ohjata

keskukseen 1 puhelinkeskuksen 2 asemesta, jonka tilaajanumeron ensimmäinen merkki osoittaisi.

Mikäli siis kaikki numerot ovat siirrettäviä tulee joka kerta puhelua muodostettaessa hakea

reititysnumero tietokannasta (NP). Reititysnumero on se osoite, jolla tilaajan verkkoliitäntä voidaan

lokalisoida. Puhelinverkossa reititysnumero on sen tilaajan numeron etuliite, joka alun perin oli

kyseisessä verkkoliitännässä. Koska myös tilaaja 187 voi siirtyä, on myös hänelle soitettaessa

haettava reititysnumero tietokannasta. Ilman reititysnumeron hakua ei voida tietää, missä tilaajan

verkkoliitäntä sijaitsee. Reititystiedon levitykseen ja hakuun liittyy monia käytännön ongelmia,

joita tässä diplomityössä selvitetään ja ratkaistaan.

Internetissä tilanne on hieman toinen, koska siellä päätelaitteiden osoittamiseen käytetään jo

ennestään loogisia osoitteita, jotka tulee muuntaa reititysosoitteiksi (DNS-nimi -> IP-osoite [3]).

Televerkoissa suoritettava numeromuunnos on helppo ymmärtää, jos tuntee Internetin

aluenimijärjestelmän. GSM-verkossa puolestaan puhelinnumeron ensimmäisten merkkien

perusteella tiedetään, miltä palvelimelta (HLR) kysytään B-tilaajaan liittyvää reititystietoa eli

tilaajan sijaintia. HLR pyytää reititysnumeron (MSRN) siltä palvelimelta (VLR), jonka

sijaintialueella tilaaja on. Näin ollen myös GSM-numerot ovat topologiasidonnaisia. Sidonnaisuus

on kuitenkin tietyssä mielessä löyhempi kuin kiinteässä verkossa, koska GSM-numerot ovat

kyseisen reititystietokyselyn ansiosta luonnostaan (mobiiliverkko) siirrettäviä saman operaattorin

verkon sisällä. Vaikka näiden verkkojen (PSTN/ISDN, GSM, IP) reititys eroaakin toisistaan

merkittävästi, numeron siirrettävyys voidaan toteuttaa hyvin yhtenevästi: PSTN-tilaajalle haetaan

Page 15: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

3

verkon topologiaan perustuva reititysnumero, GSM-tilaajalle haetaan HLR:n reititysosoite ja VoIP-

tilaajille haetaan joko aluenimi, IP-osoite tai mahdollisesti jokin yhdyskäytävän osoite. Riippumatta

verkkotyypistä haetaan aina tilaajanumeron perusteella reititystietoa.

Tässä työssä esitettävässä ratkaisussa erotetaan reititys numeron siirrettävyydestä. Reititysosoitteet

liittyvät toki läheisesti numeron siirrettävyyteen, koska numeromuunnos tulee suorittaa

luettelonumerosta reititysosoitteeseen. Numeropalvelun tietokantojen sisältöjä ei kuitenkaan

muodosteta reititysprotokollilla, vaan kokonaan reitityksestä erillään toimivilla

tietokantasovelluksilla. Mikä tahansa yhteisen formaatin (E.164) mukainen tilaajanumero voidaan

siirtää minne tahansa. Tällöin tilaaja käytännössä omistaa numeronsa. Siirrettävyysalueella

toimivalle regulaattorille jää tehtävä valvoa, että kaikki osapuolet toimivat sopimusten mukaisesti.

Verkkojen yhteensovittaminen vaatii kuitenkin myös reitityksen sovittamista.

Työ rakentuu seuraavasti: Luvussa 2 tarkastellaan yleisellä tasolla numeron siirrettävyydelle

vaadittavaa numeromuunnosta. Siinä tarkastellaan myös reititystä sekä aiempaa numeron

siirrettävyyden toteuttavaa ratkaisua, joka yhdistää numeron siirrettävyyden ja reitityksen.

Toteutuksessa käytetään SQL-tietokantoja, joihin käytetään ODBC:tä (Open DataBase

Connectivity) pääsyrajapintana. Näitä käydään läpi luvuissa 3 ja 4. Luku 5 tutkii osoitteistusta ja

nimeämistä eri tietoliikenneverkoissa. Huomiota saavat etenkin Internetin nimipalvelu (DNS) sekä

ENUM (E.164 Number Mapping), jossa Internetin nimipalvelua käytetään hyväksi myös televerkon

numeromuunnoksissa. Lyhyesti esitellään myös se, miten numeron siirrettävyys on toteutettu

nykyisin monissa maissa. Luvussa 6 kootaan kokonaan uusi tavoitearkkitehtuuri, joka täyttää kaikki

numeron siirrettävyyden asettamat vaatimukset. Luvussa 7 esitetään vastaava implementaatio.

Luvussa 8 arvioidaan tuloksia mittaustulosten ja esimerkkilaskelmien avulla. Keskeisimmät

päätelmät sekä katsaus tulevaisuuteen kootaan lukuun 9.

Page 16: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

4

2 Työn taustat

Tässä luvussa käsitellään numeron siirrettävyyteen liittyviä ongelmia ja muutoksia, joita se

aiheuttaa puhelujen reititykseen. Tarkastelen rinnakkain numeron siirrettävyyttä piirikytkentäisessä

verkossa sekä Internetissä. Tavoitteena on arkkitehtuuri, joka mahdollistaa siirtymiset myös näiden

välillä. Näin ollen numeroinnin yhteensovittaminen on eräs keskeisimmistä seikoista tämän työn

kannalta. IP/SCN-yhdyskäytävän sijainti muodostuu myös ongelmaksi, mikäli IP-puheluista tulee

tasavertainen vaihtoehto piirikytkentäiselle verkolle. TRIP-protokolla on yksi vaihtoehto

sijaintiongelman ratkaisuun. TRIP:iä [4] käsitellään lähinnä valmiiksi kehitettynä työkaluna. Tässä

luvussa esitellään myös numeron siirrettävyyteen liittyviä aiempia tutkimuksia. Lopuksi vielä

kootaan yhteen päämäärät, joihin tämän diplomityön ratkaisu pyrkii.

2.1 Numeron siirrettävyydelle vaadittava teknologia

2.1.1 Piirikytkentäisessä verkossa

Numeron siirrettävyys monimutkaistaa reititysprosessia sekä televerkoissa että Internetissä. Vaikka

eri verkkojen reititys onkin aivan erilainen, numeron siirrettävyyttä varten tarvitaan kumpaankin

melko samanlainen numeropalvelu. Tilaajanumero ei enää toimi reititysnumerona, koska se ei ole

enää sidottu verkon topologiaan. Televerkoissakin numerointi siis muuttuu loogiseksi, joten

kullekin tilaajanumerolle tai ryhmälle tulee asettaa reititysnumero, jotta puhelunohjauksen voisi

palauttaa seuraamaan televerkoille ominaista topologiaan perustuvaa hierarkkista reititystä [5].

Artikkelissa [2] määritellään mitä informaatiota tarvitaan numeron siirrettävyyttä varten.

Reititysosoite on tärkein attribuutti, joka tarvitaan tilaajanumeroille. Näin ollen puhelukohtaisesti

suoritetaan ratkaisuprosessi tilaajanumerosta reititysnumeroon tai yleisemmin tilaajanumerosta

reititysosoitteeseen.

2.1.2 Internetissä

Internetissä puolestaan on jo valmiina eräänlainen numeropalvelu [Kappale 5]. Nimipalvelun

aluenimiet ovat loogisia. Aina käytettäessä aluenimiin perustuvia osoitteita (esimerkiksi E-mail,

www) joudutaan vastaavanlainen numeromuunnos suorittamaan. Aluenimillä ei IP-paketteja

pystytä välittämään, koska reitittimet ymmärtävät vain IP-osoitteita. Yksinkertaisin ratkaisu VoIP-

palveluissa numeron siirrettävyydelle onkin nimipalvelun päivittäminen tilaajan siirtyessä, mikäli

osoitteistus perustuu aluenimiin (SIP). Näin periaatteessa jokaisen Internet-päätelaitteen osoite olisi

siirrettävä. Palvelu on kuitenkin toteutettu hierarkkisilla tietokannoilla, jotka eivät välttämättä ole

kaikkein sopivimpia numerotietokantoina. Se ei myös ainakaan sellaisenaan ratkaise ongelmaa,

miten tilaajien osoittaminen voidaan yhtenäistää televerkkojen ja IP-verkkojen välillä.

Siirrettävyyden ongelma ei siis juurikaan poikkea piirikytkentäisestä verkosta: Kun tilaaja siirtyy,

IP-osoite, jolla hänet voidaan saavuttaa, muuttuu. Käytännössä tilaajaa palvelevan

signalointipalvelimen (CPS) osoite muuttuu, mutta koska normaalisti jokaisella julkisen verkon

Page 17: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

5

liitännällä täytyy olla ainutkertainen IP-osoite, myös se muuttuu. Tavallisesti IP-puheluja ei

muodosteta suoraan päätelaitteiden välille, vaan signalointipalvelimen kautta, vaikka periaatteessa

julkisessa Internetissä kaksi päätelaitetta pystyvät kommunikoimaan itsenäisesti, mikäli ne tietävät

toistensa IP-osoitteet. Sen sijaan puhelut IP- ja televerkon välillä eivät onnistu näin.

Ratkaisuprosesseja varten on oltava tietokannat, josta reititysosoite haetaan käyttämällä

tilaajanumeroa tai sen etuliitettä avaimena. Reititysosoite on jokin ITU-T:n suosituksen E.164

mukainen osoite (numero) tai IP-osoite riippuen siitä, onko B-tilaaja televerkossa vai IP-verkossa.

Tässä työssä ei puututa siihen, onko käytössä IP-protokollan versio 4 vai 6 [6,7]. Vaikka kyseiset

versiot ovatkin käytännössä kuin kaksi täysin eri protokollaa, eivät esittämäni ratkaisuperiaatteet

juurikaan muuttuisi, jos siirryttäisiin version 6 käyttöön.

2.2 SCN/IP teknologiarajapinta

Mikäli tilaajanumerot ovat siirrettäviä SCN/IP teknologiarajapinnan yli, täytyy verkossa noudattaa

yhteistä numerointia. Rajoittavana tekijänä on televerkon päätelaitteiden rajoitteet: Esimerkiksi

SIP-järjestelmien ymmärtämiäuser@domainformaatin mukaisia osoitteita [5] ei pysty PSTN-

päätelaitteella näppäilemään. Kyseisiä merkkejä ei yksinkertaisesti ole tavallisissa PSTN-verkon

lankapuhelimissa. Lisäksi kyseessä voisi olla liian suuri muutos kansanryhmille, jotka ovat

tottuneet käyttämään puhelinta numeroilla. Mahdollisesti suurin osa kiinteän piirikytkentäisen

puhelinverkon tilaajista joutuisi vaihtamaan päätelaitetta, jos numeroilla osoittamisesta

luovuttaisiin.

Numeroilla osoittaminen aiheuttaa puolestaan IP-verkossa sen, että jokaisella IP-verkon tilaajalla

täytyy olla myös E.164 formaatin mukainen osoite. Näitä puolestaan on muutettava teknologiasta

riippuen joko E.164-reititysosoitteiksi tai IP-osoitteiksi. Soitettaessa televerkon puolelta IP-verkon

päätelaitteeseen, joudutaan aluksi antamaan E.164 formaatin mukainen reititysnumero, koska SCN-

verkko ei osaa käsitellä IP-osoitteita. Toisaalta myös IP-verkossa voidaan soittaa toiseen IP-

päätelaitteeseen käyttämällä E.164-numeroa. Televerkosta lähtevä puhelu IP-verkkoon päätyvään

puheluun väylöitetään televerkossa SCN/IP-yhdyskäytävään asti. Yhdyskäytävässä

puhelunmuodostukseen annetaan mahdollisesti uusi reititysosoite (IP-osoite), jolla

puhelunmuodostus jatkuu B-tilaajaa palvelevaan signalointipalvelimeen (SIP [8], H.323), minkä

jälkeen lopulta puhetta kuljettavien RTP-sanomien virtaa voidaan alkaa välittää lähteen

(yhdyskäytävä) ja kohteen välillä. Myös GSM-verkon HLR/VLR-järjestelmiä osoitetaan E.164-

formaatin mukaisilla osoitteilla. Näin myös GSM-verkko saadaan varsin mutkattomasti kytkettyä

numeron siirrettävyyteen. GSM-verkontilaajan siirtyessä häntä palveleva HLR muuttuu.

IP-verkossa käytetään perinteisiä reititysprotokollia (BGP [9], OSPF[10]) eli paketit välitetään

kuten Internetissä tavallisesti. SCN/IP yhdyskäytävä jakaantuu ainakin loogisesti

mediayhdyskäytävään ja signalointiyhdyskäytävään. Karkeasti mediayhdyskäytävän (engl. media

gateway) tehtävä on muuntaa jatkuva televerkon bittivirta IP-paketeiksi reititettäväksi Internetissä

ja vastaavasti pakettimuotoinen data bittivirraksi siirrettäväksi televerkossa.

Signalointiyhdyskäytävää (engl. signalling gateway) tarvitaan etenkin puhelujen muodostuksessa.

Page 18: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

6

Esimerkiksi tyypillinen ISDN-verkon merkinanto ISUP muutetaan SIP-sanomiksi (tai H.323).

Numeron siirrettävyyden kannalta erityisesti signalointiyhdyskäytävän toimintaa on tarkasteltava.

Normaali Internet-reititys puolestaan huolehtii siitä, että IP-puhelujen RTP-sanomat välitetään

mediayhdyskäytävän prosessoitaviksi ja edelleen lähetettäviksi, ja toisaalta televerkkojen

perinteisesti staattinen hierarkkinen reititys huolehti bittivirran reitityksestä piirikytkentäisessä

verkossa.

2.3 Yhdyskäytävän sijainti

2.3.1 Ongelma

Jos IP-verkon käyttö yleistyy puhelujen välityksessä, tulee ongelmaksi sopivan IP/SCN-

yhdyskäytävän etsiminen IP-verkosta televerkkoon päätyvillä puheluilla. Yhdyskäytävien

kapasiteetti voi vaihdella pienistä – vain yhtä tai kahta puhelua samanaikaisesti tukevista – suuriin –

jopa tuhansia samanaikaisia puheluja tukeviin laitteistoihin. Periaatteessa jokaisen yhdyskäytävän

kautta voidaan saavuttaa kaikki mahdolliset televerkon päätelaitteet. Useinkaan näin ei haluta asian

olevan, vaan tietyn yhdyskäytävän omistaja haluaa dedikoida sen käyttöä palvelemaan vain tiettyjä

tilaajia. Toisaalta yhdyskäytävän käytöstä halutaan myös laskuttaa, joten informaation levitys

yhdyskäytävien saatavuudesta tulee olla vahvasti palveluntarjoajien sisäisiin menettelytapoihin

perustuvaa samalla tavoin kuin nykyisessä Internet-reitityksessä ulkoisella protokollalla voidaan

verkon toimintaa manipuloida.

Yhdyskäytävä on instanssi, jolla täytyy olla sekä E.164- että IP-osoite. Internetissä on

monenkokoisia autonomisia alueita ja siirrettävyysalueilla voisi toimia myös erillisiä

kauttakulkuoperaattoreita, jotka tarjoavat siis välityspalvelua IP-verkosta piirikytkentäiseen

verkkoon päätyvissä puheluissa. Tilaajaoperaattori voisi näin ollen toimia tukematta itse lainkaan

IP/SCN-teknologiarajapintaa. Televerkon tilaajalle voidaan määrittää melko staattisesti

yhdyskäytävä IP-verkkoon päätyville puheluille. Palvelun tarjoaja voi siis määrittää (staattisesti),

että kaikki tietyn tilaajaryhmän puhelut välitetään Internetiin saman yhdyskäytävän kautta. Mikäli

yhdyskäytävää ei ole, voidaan palvelu ostaa joltakin toiselta operaattorilta, joka tarjoaa

kauttakulkupalvelua IP-verkkoon. Eräs IP-puheluja puoltava tekijä on se, että puheen siirtäminen

Internetissä olisi halvempaa kuin piirikytkentäisessä verkossa [8], joten IP-verkkoon päätyvä

puhelu voi olla palveluntarjoajan kannalta edullisinta siirtää mahdollisimman nopeasti televerkosta

Internetiin. Tämä on seikka, joka puoltaa staattista yhdyskäytävän valintaa, samoin kuin se, että

tällöin ei IP-verkon tilaajista tarvitsisi levittää lainkaan reititystietoa televerkon puolelle –

ainoastaan tieto siitä, että tilaaja on IP-verkossa. Toisaalta usein palvelunlaatu on sitä huonompi

mitä kauemmin puhe kulkee Internetissä.

2.3.2 Ratkaisut

Internetin puolella on kolme erilaista ratkaisua yhdyskäytävän sijaintiongelman ratkaisuun:

Page 19: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

7

1. TRIP [Kappale 2.4]

2. Mainostetaan eksplisiittisesti jokaiselle tilaajalle tai tilaajaryhmälle sopivaa (sopivia)

yhdyskäytävää saman numeropalvelun välityksellä, jolla tilaajanumerot ratkaistaan

reititysnumeroksi.

3. Jätetään yhdyskäytävän löytäminen kokonaisuudessaan IP-verkossa A-tilaajan tai A-tilaajan

operaattorin vastuulle.

Ainakaan ensimmäisenä ja viimeisenä mainitut eivät ole toisiaan poissulkevia. Jokaisen

palveluntarjoajan ei tarvitse olla mukana TRIP-sanomien välityksessä. Tällaisella operaattorilla voi

olla omat dedikoidut yhdyskäytävät, jotka tarjoavat vain palvelua omille asiakkailleen. Näin ollen

soitettaessa IP-verkosta televerkkoon valittaisiin aina sama yhdyskäytävä riippumatta B-tilaajan

sijainnista. Usein kuitenkin voi olla halvempaa välittää puhelua mahdollisimman kauan

Internetissä, joten kyseinen ratkaisu ei välttämättä tarjoaisi A-tilaajan operaattorin kannalta

optimaalista reititystä. Toisessa vaihtoehdoista yhdyskäytäväinformaation voisi välittää samalla

numerotietojen kanssa, eli jokaiselle tilaajanumerolle tai etuliitteelle määritetään sekä reititysosoite,

että yhdyskäytävä. Tällöin yhdyskäytävän sijaintiongelma jäisi kokonaisuudessaan B-tilaajan

vastuulle.

Luvussa 6 esitettävä arkkitehtuuri tarjoaa mahdollisuuden määrittää myös televerkossa

reititysnumerokohtaisesti sopiva (sopivat) signalointiyhdyskäytävä(t): Mikäli havaitaan jossakin

vaiheessa ratkaisuprosessia [Kuva 6.4, Kuva 6.5], että haettava B-tilaaja on IP-verkossa, suoritetaan

uusi haku toisesta taulusta. Tällöin käytetään reititysnumeroa avaimena, jolla haetaan B-tilaajaa

palvelevan signalointiyhdyskäytävän E.164 osoite tai tarvittaessa lisäinformaatio, mistä sopiva

yhdyskäytävä löydetään. Taulujen tiedot voidaan levittää päivitystietokantojen avulla [Kappale

6.2.1]. Tällöin jäisi A-tilaajan operaattorin päätettäväksi käytetäänkö B-tilaajan operaattorin

mainostamaa yhdyskäytävää vai jotakin muuta tiedossa olevaa yhdyskäytävää. Menettelyllä

voidaan myös antaa jokaiselle tilaajalle mahdollisuus erikseen ostaa palvelu IP-verkkoon hänen

puhelunsa välittävältä operaattorilta. Kuitenkaan operaattorit eivät välttämättä ole halukkaita

levittämään kaikkialle tarkkaa tietoa reititysnumeroon liittyvästä yhdyskäytävästä, jolloin tarvitaan

jokin TRIP:n [Kappale 2.4] kaltainen mekanismi.

2.4 TRIP

2.4.1 TRIP vs. BGP

TRIP:n (Telephony Routing over IP) [4] toiminta on helpompi ymmärtää, jos tuntee Internet-

reitityksessä käytettävän BGP:n (Border Gateway Protocol) [9]. TRIP:n funktionaalisuus on siis

koottu BGP:tä mukaillen. Protokollien tilakoneet ovat yhtenevät. Protokollien tehtävä on levittää

saavutettavuustietoa verkkoon kytketyistä päätelaitteista. Erona näiden välillä on se, että BGP

levittää tietoa saavutettavista IP-osoitteista, kun taas TRIP levittää tietoa saavutettavissa olevista

puhelinnumeroista (E.164). Kummatkin toimivat Internetissä. Tiedon levitys perustuu

Page 20: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

8

polkuvektoriin, jolla ilmaistaan polku kohteeseen ja estetään reitityssilmukoiden syntyminen. BGP-

reititin ohjaa IP-osoitteen etuliitteen perusteella sisään tulleen paketin oikeaan ulosmenoporttiin,

jotta haluttu päätelaite voidaan lopulta saavuttaa. TRIP-palvelin puolestaan tarjoaa sen

yhdyskäytävän IP-osoitteen, jonka kautta haluttu televerkon päätelaite voidaan saavuttaa. BGP:n

kohdalla kysymys on siirtokaistan sisäpuolisesta (engl. in-band) tiedonvälityksestä, kun taas TRIP-

informaatio on siirtokaistan ulkopuolista (engl. out-of-band). Kumpikin käyttää tiedonsiirrossa

luotettavaa kuljetuskerroksen protokollaa [9]. Mainostetuille reiteille ei lähetetä virkistyssanomia.

BGP-reitittimen päätehtävä on ohjata IP-paketteja sisääntulosta ulosmenoporttiin kun taas TRIP-

palvelin toimii ainoastaan tietopalvelimena, josta haetaan reititystietoa IP-verkosta televerkkoon

päätyvissä puheluissa.

Naapuruussuhteita ylläpidetään KEEPALIVE-sanomilla. Mikäli naapurilta ei tule viestiä tietyn ajan

kuluessa (engl. dead interval), tulkitaan yhteys naapuriin katkenneeksi. Tällöin kyseisen naapurin

mainostamat tiedot tulkitaan vanhentuneiksi. Menetetyn naapurin saavutettavuustietueet poistetaan

kaikista paikallisista tauluista, joissa niitä on. Sen jälkeen lähetetään niiden mukaiset päivitysviestit,

joissa kerrotaan että kyseiseen naapuriin ei enää täältä kautta pääse (engl. route withdrawal). Tällä

tavoin BGP mukautuu verkon topologian muutoksiin. Sekä TRIP että BGP erottavat tietokantojen

synkronoinnin omalla alueella ja naapurialueiden kanssa. Riittävän redundanssin ja yhtenäisen

reitityksen aikaansaamiseksi kaikki alueen tietokannat saatetaan identtisiksi. Eri alueilla sisäinen

synkronointi voi toimia eri tavoilla, mutta ulkoinen tiedonlevitys tulee olla yhtenäistä.

2.4.2 TRIP SCN/IP yhdyskäytävän sijaintiongelman ratkaisijana

Internet-puheluihin liittyvät seuraavat funktiot, joissa E.164 puhelinnumero tulee muuntaa IP-

osoitteeksi:

1. Oikean yhdyskäytävän IP-osoitteen etsiminen, jos on annettu (IP-verkossa) E.164 formaatin

mukainen puhelinnumero, joka osoittaa tilaajaa televerkossa.

2. Oikean tilaajan IP-osoitteen etsiminen, jos on annettu (IP-verkossa) E.164 formaatin

mukainen puhelinnumero, joka osoittaa tilaajaa IP-verkossa.

3. IP-päätelaitteen osoitteen etsiminen, jos on annettu televerkon tilaaja, jolla on päätelaite myös

IP-verkossa.

TRIP:n (Telephony Routing over IP) [11] tehtävä on ratkaista ensiksi mainittu ongelma eli juuri

yhdyskäytävän sijainti televerkkoon päätyviä puheluja varten. Toinen ongelma liittyy numeron

siirrettävyyteen IP-verkossa, eikä ole TRIP:n tehtävä. Viimeisenä mainittua tarvitaan palveluissa,

joissa esimerkiksi tilaajan PC:lle lähetetään viesti hänen puhelimen soidessa televerkossa. TRIP-

tietueeseen liittyy olennaisimpina televerkon numeroavaruuden osa, joka voidaan saavuttaa

yhdyskäytävän kautta sekä kyseisen yhdyskäytävän IP-osoite. Myös reitti tietuetta prosessoivasta

sijaintipalvelimesta (LS) yhdyskäytävään ilmaistaan TRIP:llä. Saavutettavuustietoja mahdollisesti

aggregoidaan ja lähetetään kaikille naapureille. Naapureihin ylläpidetään pysyvää TCP-yhteyttä,

Page 21: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

9

joka pidetään siis voimassa määrävälein lähetettävillä sanomilla (KEEPALIVE). Polkuvektorin

avulla voidaan estää reitityssilmukoiden syntyminen vastaavasti kuin BGP:ssä [9].

TRIP-ratkaisu on kompromissi ja laajennus verrattuna sivulla 7 esitettyihin vaihtoehtoihin 2 ja 3,

jotka ovat keskenään poissulkevia, sillä konfliktoivat politiikat saattavat aiheuttaa sen, että tietyissä

tapauksissa puhelu ei onnistu lainkaan. TRIP tarjoaa siis keinot sekä A-tilaajalle, että B-tilaajalle

(operaattoreille) mahdollisuuden vaikuttaa siihen, mitä yhdyskäytävää käytetään.

2.4.3 TRIP-tietokannat

Olennaisena osana TRIP:iin liittyy reititystietokanta. TRIP-tietokanta (TRIB) jakautuu

funktionaalisesti neljään osaan [4]:

Adj-TRIBs-In

Adj-TRIBs-In jakaantuu edelleen kahteen osaan: ulkoiseen ja sisäiseen tietokantaan. Ulkoiset reitit

ovat naapurialueilta saatuja reittejä ja sisäiset reitit ovat oman alueen sisältä mainostettuja reittejä.

TRIP-palvelimessa on siis jokaista oman alueen palvelinta sekä jokaista kytkettyä naapurialueiden

palvelinta varten erilliset taulut, joita hallitaan täysin toisistaan riippumatta. Siis myös oman alueen

palvelimille, jotka eivät ole suorassa naapuruussuhteessa, on taulu TRIP-tietokannassa. On täysin

mahdollista, että samaa tilaajaa tai etuliitettä varten tietokannassa on montakin mahdollista reittiä

Adj-TRIBs-In-tietokannassa. Adj-TRIBs-In muodostaa TRIP-palvelimen tietosisällön raskaimman

osan, koska mitään reittejä ei suodateta pois, vaan kaikki lisätään tietokantaan. Tauluihin ei

kohdistu suoranaisesti minkäänlaisia reititystietokyselyjä. Sisäinen Adj-TRIBs-In-tietokanta

annetaan syötteenä lopulliseen päätösprosessiin.

Ext-TRIB

Ext-TRIB-taulu sisältää paikallisen politiikan mukaisesti kullekin etuliitteelle valitun parhaan

mahdollisen reitin ottaen huomioon ainoastaan ulkoisten kytkettyjen naapuripalvelinten

mainostamat reitit sekä paikalliset reitit. Paikalliset reitit ovat reittejä, joiden juuri on oma alue. Ne

on joko konfiguroitu manuaalisesti palvelimeen tai saatu jollain muulla (sisäisellä)

reititysprotokollalla. Jokaisella TRIP-palvelimella on vain yksi Ext-TRIB-taulu, joka sisältää

kullekin etuliitteelle vain yhden reitin. Tauluihin ei normaalisti kohdistu reititystietokyselyjä. Ext-

TRIB annetaan myös syötteenä lopulliseen päätösprosessiin, jossa määräytyvät Loc-TRIB- sekä

Adj-TRIBs-Out- tietokantojen sisällöt.

Loc-TRIB:

Etsittäessä sopivaa yhdyskäytävää televerkkoon päätyvälle puhelulle varsinaiset reititystietokyselyt

kohdistuvat Loc-TRIB-tauluun, joka saadaan soveltamalla päätösprosessi paikallisen politiikan

mukaisesti kaikkeen saatavissa olevaan reititysinformaatioon eli ottamalla huomioon Ext-TRIB-

Page 22: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

10

taulun reitit sekä kaikki Adj-TRIB-In-taulut, jotka sisältävät oman alueen palvelimien mainostamat

reitit.

Adj-TRIBs-Out

Adj-TRIB-Out-taulut sisältävät reitit, jotka on valittu mainostettavaksi ulkoisille naapureille.

Tauluja on korkeintaan yhtä monta kuin on ulkoisia naapureita. Menettely mahdollistaa siis sen,

että jokaiselle ulkoiselle naapurille levitetään erilaista reititysinformaatiota.

2.4.4 Päätösprosessi

Loc-TRIB- sekä Adj-TRIB-Out-taulut saadaan ajamalla TRIP:n päätösprosessi (engl. decision

process). Hieman toisesta näkökulmasta tarkasteltuna TRIP-palvelin jakaantuu prosessoituun ja

prosessoimattomaan tietoon [Kuva 2.1]. Prosessoimaton tieto sisältää tietueryhmiä, jotka eivät ole

keskenään riippuvuussuhteessa. Sen sijaan prosessoiduissa tietueissa yhden tietueen sisällön

muutos voi aiheuttaa toisen tietueen muutoksen.

DecisionProcess

Local Routes

Ext-TRIB

Adj-TRIBs-In(External)

Adj-TRIBs-In(Internal)

Loc-TRIB

Adj-TRIBs-Out

DecisionProcess

DecisionProcess

Local Routes

Ext-TRIB

Adj-TRIBs-In(External)

Adj-TRIBs-In(Internal)

Loc-TRIB

Adj-TRIBs-Out

DecisionProcess

Kuva 2.1. TRIP-tietokannat

Mikäli alueen TRIP-palvelimet soveltavat yhtenevää politiikkaa, sisäisten Adj-TRIB-In- taulujen

synkronointi johtaa lopulta myös alueen Loc-TRIB-tietokantojen konvergoitumiseen. Dokumentin

[4] mukaan Adj-TRIBs-In (sisäinen) tietokantojen synkronointiin käytetään SCSP:n [12]

levitysprotokollaa TCP:n päällä. Käyttäjän kannalta oleellisinta on riittävä redundanssi Loc-TRIB-

taulujen osalta: Kapasiteetin tulee riittää ruuhkaisimmankin kiiretunnin kyselyihin, ja toisaalta

palvelimien vikaantuessa tulee olla riittävä määrä varapalvelimia käytössä. Kaikki muu onkin

käytön kannalta pelkkää ylijäämää (engl. overhead).

On monenlaisia tilanteita, joissa päätösprosessi joudutaan ajamaan. Normaalein tapaus lienee uuden

reittimainoksen vastaanottaminen naapurilta. Se voi tulla siis joko naapurialueelta tai

naapuripalvelimelta oman alueen sisällä. Ulkoiselta naapurilta tullut päivitys vaatii

perusteellisempaa prosessointia. Päätösprosessi etenee vaiheittain:

Page 23: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

11

1. Preferenssiarvon laskenta

Jokaiselle ulkoisen alueen naapurin mainostamalle reitille lasketaan preferenssiarvo alueen

sisäisen politiikan määrittelemällä tavalla, joka ilmaisee kuinka ”sopivia” kyseiset reitit ovat.

Vaiheen aikana käsiteltävä taulu lukitaan päivityksiltä. Laskenta on jokaiselle reitille

itsenäinen prosessi eikä preferenssiä tarvitse laskea muille kuin lisätyille tai muuttuneille

reiteille. Mikäli siis päivityssanomassa on vain poistettavia reittejä, ei vaihetta tarvitse

suorittaa lainkaan. Omalta alueelta lähtöisin olevissa reiteissä preferenssi on laskettu

valmiiksi, koska politiikka alueen sisällä on sama.

2. Parhaiden reittien valinta

Valitaan kaikista mahdollisista reiteistä paras kuhunkin kohteeseen ja päivitetään Loc-TRIB-

taulu. Vaihe jakaantuu siis kahteen osaan: Ext-TRIB-taulun kokoaminen ulkoisista ja

paikallisista reiteistä ja Loc-TRIB-taulun kokoaminen Ext-TRIB-taulun sekä oman alueen

palvelimien mainostamista reiteistä. Mikäli Ext-TRIB:iin tai Adj-TRIBs-In:iin tulee

muutoksia on myös Loc-TRIB käytävä läpi, jotta numerotiedot pysyisivät ajan tasalla.

Läheskään aina Loc-TRIB:iin ei tule muutoksia. Päivityssanomassa olevat muutokset voivat

koskea reittejä, joita ei ole valittu korkeimman prioriteetin reiteiksi. Mikäli Loc-TRIB:stä

poistetaan jokin reitti, täytyy uutta reittiä etsiä kaikista Adj-TRIB-In-tauluista sekä Ext-

TRIB:stä, koska jokaisessa näissä saattaa olla uusi korkeimman preferenssin reitti.

3. Mainostettavien reittien valinta

Päätösprosessin viimeisessä vaiheessa päivitetään taulut, jotka sisältävät ulkoisille

naapureille mainostettavaksi valitut reitit. Tämä on useimmiten raskain vaihe, sillä

sovellettava politiikka tiedon ulkoisen levityksen ja esimerkiksi aggregoinnin suhteen voi

olla varsin kompleksinen.

2.4.5 TRIP:n heikkoudet

Päätösprosessi on selvästi melko raskas operaatio, joten TRIP ei ole sopiva ratkaisu palveluihin,

joissa tapahtuu säännöllisesti usein muutoksia. Etenkin massiiviset reittien poistot yhteyden

katketessa palvelimien välillä ovat raskaita prosessoida, koska vaikutus voi ulottua kaikkiin

prosessoituihin tauluihin. Ongelma on havaittu jo BGP:ssä, ja sitä varten protokollaan onkin

kehitetty oskilloinnin esto [13]. TRIP soveltuukin parhaiten topologiaan perustuvan numerotiedon

levitykseen aivan kuten BGP Internetissä. Puhelinverkon topologiassahan tapahtuu muutoksia

hyvin harvoin. Internetissä viime aikoina on tapahtunut paljon topologiamuutoksia, mutta ne

johtuvat verkon laajentumisesta eivätkä esimerkiksi osoitteiden siirtymisistä. Hyvin normaalia on,

että tiettyä etuliitettä varten voi olla useita reittejä, joten kokonaisuudessaan TRIP-tietokannan koko

voi olla esimerkiksi kymmenkertainen Loc-TRIB taulun kokoon verrattuna.

Page 24: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

12

Pysyvän TCP-yhteyden ylläpitäminen saavutettavuustietojen validiteetin takeeksi on paljon

tehokkaampaa BGP:ssä kuin TRIP:ssä, koska BGP:ssä reititystiedon siirto on siirtokaistan sisäistä1.

Mikäli KEEPALIVE-sanomia ei saada vaaditun ajan sisällä, voidaan päätellä että linkillä on jotain

vikaa tai reititin on vikaantunut. Se puolestaan merkitsee sitä, että kyseistä linkkiä ei voi käyttää IP-

pakettien siirtoon. Näin ollen naapurin mainostamat reitit pitääkin poistaa tietokannasta. TRIP:n

kohdalla tilanne on toinen, koska välityslaitteiden (yhdyskäytävät, reitittimet) ja niitä yhdistävien

linkkien toiminta ei ole sidottu palvelimien lähettämiin KEEPALIVE-sanomiin: Yhteydellä olevat

välityslaitteet saattavat olla vikaantuneita, vaikka KEEPALIVE-sanomia tulisi aivan normaalisti.

Toisaalta KEEPALIVE:n hävitessä palvelimen mainostamat etuliitteet ovat todennäköisesti täysin

saavutettavissa.

2.5 Aiemmat aiheeseen liittyvät tutkimukset

2.5.1 TRIP/CTRIP arkkitehtuuri

Eräs mahdollinen ratkaisu reititysinformaation levitykseen esitetään diplomityössä [5]. Siinä

keskeisessä asemassa ovat TRIP- ja CTRIP-protokollat. Malli on otettu Internetin

reititysprotokollista – etenkin BGP-protokollasta [9]. TRIP ja CTRIP levittävät luettelonumeroiden

saavutettavuustietoa kuten BGP levittää IP-osoitteiden saavutettavuustietoa. CTRIP olisi TRIP:iä

vastaava protokolla piirikytkentäisen verkon puolella.

Kuva 2.2 TRIP/CTRIP-arkkitehtuuri [14]

1Tämä ei aina pidä paikkansa, koska myös BGP-reitittimien välinen yhteys voi olla ainoastaan looginen,

jolloin protokollan viestit saattavat kulkea eri reittiä kuin hyötyliikenne.

Page 25: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

13

Kuva 2.2 kattaa TRIP/CTRIP-arkkitehtuurin. TRIP hoitaisi siis yhdyskäytävän sijaintiongelman

ohella myös numeron siirrettävyyden. Sillä levitettäisiin siis loogisia numeroita, eli

tilaajanumeroita, jotka eivät ole sidottu verkon topologiaan. Tämä edellyttää protokollaan joitakin

muutoksia, jotka esitetään diplomityössä [5]. Verkko ajatellaan koostuvan joukosta autonomisia

alueita (TAD, ITAD). Numerointi-informaatio sijoitetaan erillisiin palvelimiin (TRIP- ja CTRIP-

palvelimet), joita jokaisella autonomisella alueella on useita. Alueen sisällä täytyy eri palvelimien

tiedot olla yhtenäisiä. Arkkitehtuurissa sisäisestä synkronoinnista huolehtii dokumentin [4]

mukaisesti SCSP:n [12] levitysprotokollasta johdettu mekanismi.

TRIP-informaation synkronoinnissa autonomisten alueiden välillä sekä alueiden sisällä käytettäisiin

luotettavaa kuljetuskerroksen protokollaa (TCP). Virkistyssanomia mainostetuille tietueille ei

lähetetä. Autonomisten alueiden reunapalvelimien funktionaalisuus vastaa BGP-4:n reitittimien

toimintaa. Jokainen alue harjoittaa valitsemaansa politiikkaa TRIP/CTRIP:n puitteissa

reititysinformaation levityksessä naapureilleen. Numerointiyhdyskäytävä (Numbering Gateway)

toimisi ikään kuin tulkkina välissä, kun reititysinformaatiota levitetään teknologiarajapinnan yli

(SCN/IP, IP/SCN) [5]. Tulkki tarvitaan, koska TRIP:n tiedot eivät täysin vastaa CTRIP:n tietoja,

joskin ne ovat keskenään hyvin analogiset.

2.5.2 iBGP

Alunperin työn lähtökohta oli toteuttaa aiempaa tehokkaampi synkronointimenetelmä käytettäväksi

autonomisten alueiden sisällä. Kuten todettua, TRIP/CTRIP:n toiminta mukailee BGP-4.ää. Se

sisältää protokollan (iBGP – interior Border Gateway Protocol) [13] reititystietokantojen

synkronointia varten. Näin ollen herääkin kysymys, miksei myös TRIP käyttäisi sisäiseen

synkronointiin vastaavanlaista mekanismia. iBGP:tä käytetään BGP-reitittimien

reititystietokantojen synkronointiin Internetissä autonomisten alueiden (AS) sisällä. Sitä käyttävät

autonomisen alueen reunareitittimet. Protokollan lähtökohtana on täysin kytketty rakenne, jossa

kaikki reunareitittimet on kytketty toisiinsa [Kuva 2.3]. Täysin kytketty rakenne ei välttämättä

skaalaudu, mikäli reitittimiä on paljon ja toisaalta siirtokaistaa kuluu turhaan päivitysliikenteen

välityksessä. Kuvassa ei ole yksinkertaisuuden vuoksi esitettynä muuta kuin reunareitittimet.

Rakenne voidaan purkaa tähtirakenteeksi reitityspeilin avulla [15]. Silmukoiden syntyminen ei ole

kummassakaan tapauksessa mahdollista. Päivitykset suoritetaan inkrementaalisesti.

AS AS

RF

ASAS AS

RF

AS

RF

Kuva 2.3 Täysin kytketty ratkaisu vs. reitityspeili

Page 26: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

14

Reitityspeilin ongelma on luonnollisesti keskitettyjen ratkaisujen luotettavuus, koska yhden laitteen

vikaantuessa reittimainoksia ei voi levittää ollenkaan. Kuitenkin myös sisäiseen verkkoon saadaan

muodostettua mielivaltainen topologia käyttämällä reititysliittoumia [13]. Silloin alue jaetaan

sisäisiin autonomisiin alueisiin, joiden tunnukset (AS numerot) valitaan privaatista

numeroavaruudesta. Syntyneiden alueiden sisällä voidaan käyttää täysin kytkettyä topologiaa tai

reitityspeiliä jne. Tällöin yhden reitityspeilin vikaantuessa osa verkosta toimii normaalisti. On

huomattava, että kytkennällä tässä yhteydessä tarkoitetaan TCP-tason yhteyttä eli ei sitä, että

reitittimien tarvitsisi olla fyysisesti kytketty suoraan toisiinsa. Reititystiedon kuljetusprotokollana

käytetään joka tapauksessa TCP:tä. TRIP:n oma synkronointimekanismi [4] on tosin vielä

mukautuvampi erilaisiin topologioihin, sillä mitään peilejä ei tarvita.

2.6 TRIP/CTRIP-ratkaisun heikkoudet

2.6.1 Aggregointi vaikeutuu

Suunniteltaessa numeron siirrettävyyttä peruslähtökohta on, että ratkaisun tulee skaalautua jopa 50

miljoonaa tilaajaa kattaviin numeron siirrettävyysalueisiin. Numeron siirrettävyyttä valtioiden

rajojen yli en ole ehdottamassa, mutta esimerkiksi Yhdysvalloissa voi muodostua hyvinkin suuria

alueita. Internetissä reititysprotokollien skaalautuvuus perustuu koosteiseen reititystietojen

levittämiseen eli aggregointiin: Jokaisessa reitittimessä ei ole tarkkaa tietuetta jokaiselle

päätelaitteelle eikä edes jokaiselle aliverkolle, vaan joukko osoitteita aggregoidaan yhdeksi

tietueeksi. Internetin runkoreitittimissä oli 22.11.2002 enimmillään noin 140000 reittiä1 [18].

Esimerkiksi osoitteet 130.233.0.0/24, 130.233.0.2 ja 130.233.0.3/24 voidaan aggregoida yhdeksi

osoitteeksi 130.233.0.0/22 edellyttäen, että CIDR-osoitearitmetiikka [17] on käytössä.

Kun kyse on verkon topologiaan perustuvista luettelonumeroista, puhelinverkossa voidaan

numeroita aggregoida samalla tavalla kuin Internetissä: Esimerkiksi 09766233, 09766236 ja

09766237 voidaan aggregoida tietueeksi 0976623. Useimmiten aggregointi on puhelinverkossa

vieläpä huomattavasti tehokkaampaa kuin Internetissä, koska reittien määrä (puhelinkeskusten

määrä) on pienempi kuin Internetin reittien (reitittimien) määrä. Mutta miten aggregointi onnistuu,

kun tilaajanumerointi ei ole sidottu verkon topologiaan? Tarkastellaan esimerkkinä [Kuva 2.4]

yksinkertaista puhelinverkkoa (ISDN), jossa on kolme tilaajaoperaattoria A, B ja C. A toimii myös

kauttakulkuoperaattorina (engl. transit telecom operator).

1 AS Numero 1221:n (Telstra) runkoreitittimissä oli 138311 reittiä.

Page 27: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

15

LE

C

A

BLE

TE

94516661

94516662

94516663

94516664

94516665

94516666

94516667

94513441

94513442

94513443

94513444

94513445

94513446

94513447

TE

94513?

LE

C

A

BLE

TE

94516661

94516662

94516663

94516664

94516665

94516666

94516667

94516661

94516662

94516663

94516664

94516665

94516666

94516667

94513441

94513442

94513443

94513444

94513445

94513446

94513447

94513441

94513442

94513443

94513444

94513445

94513446

94513447

TE

94513?

Kuva 2.4 Puhelinverkko

Taulujen mukaisesti etuliite 94513 kuuluu alun perin operaattorille B ja etuliite 94516 kuuluu

alunperin operaattorille C. Kun operaattorin A verkosta soitetaan puhelu numeroon, joka alkaa

etuliitteellä 94516, osataan puhelu ohjata heti operaattorille C, koska missään muualla ei ole

kyseisen etuliitteen tilaajia. Kun edellä esitetyssä tapauksessa [Kuva 2.4] tilaaja 94513441 siirtyy

operaattorille C, täytyy A:n keskuksessa odottaa A-tilaajalta kaikki numerot ennen kuin puhelu

voidaan ohjata operaattorille C, koska aiemminhan tilaaja kuului operaattorille B. Operaattori A siis

joutuu myös muuttamaan reititystään, vaikka se ei millään tavalla liity tässä tapauksessa tilaajan

siirtymiseen. Kaikkiin 94513-alkuisiin numeroihin soitettaessa mistä tahansa joudutaan siis

analysoimaan kaikki numerot ennen kuin reitityspäätös voidaan tehdä. Ilman tietokantakyselyjä

tilannetta voidaan verrata siihen, että Internetissä verkon 130.233.0.0/16 liitäntä siirtyisi verkkoon

130.234.0.0/16 säilyttäen vanhan IP-osoitteensa, mikä ei tietenkään onnistu, koska verkon

skaalautuvuus perustuu aggregointiin. Runkoverkon reititin ei osaisi välittää paketteja osoitteiden

perusteella oikeaan porttiin. Internet-reitityksessä jokainen operaattori voi itse määritellä

aggregointipolitiikkansa, koska IP-osoitteet eivät ole siirrettäviä. Näin ollen BGP-analogia ei koko

laajuudessaan toimi, koska sen skaalautuvuus perustuu aggregointiin.

Tilaajien vapaa siirtyminen operaattorilta toiselle aiheuttaa siis sen, että siirtymisistä on lähetettävä

tieto verkon reunoille eli jokaiselle tilaajaoperaattorille. Mikäli edellä kuvatussa tilanteessa C ei

mainostaisi täydellistä luettelonumeroa, A luulisi, että C:n alueella on myös kaikki muut

mainostetun etuliitteen tilaajat. Tilaajan saavutettavuus voidaan varmistaa vain, jos siirtynyttä

tilaajaa mainostetaan täydellisellä luettelonumerolla. Jos tilaaja 94513444 siirtyy operaattorin C

alueelle, on myös sitä mainostettava täydellisellä luettelonumerolla. Aggregointi onnistuu

ainoastaan silloin, kun kaikki 9451344X-tilaajat ovat siirtyneet samalle alueelle. Tällaista

järjestelmää palvelee parhaiten monistettu numerotietokanta, josta reititystietoa haetaan

puhelukohtaisesti. Tilaajan antamaan numeroon ei oikeastaan soiteta ollenkaan, vaan sitä käytetään

ainoastaan tietokanta-avaimen muodostamiseen. Reititysnumero on se numero (tai sen numeron

Page 28: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

16

etuliite), johon A-tilaaja soittaisi, mikäli B-tilaaja ei ole siirtynyt. Sen sijaan VoIP-päätelaitteiden

numerot ovat aina loogisia ellei suoraan käytetä B-tilaajan IP-osoitetta.

2.6.2 Tietokantojen kasvu

Aggregoinnin soveltaminen siis vaikeutuu, ja siirtyneille tilaajille se onnistuu vain

poikkeustapauksissa, joten väistämättä numerotietokantojen koko kasvaa. Ottaen vielä huomioon

suuri prosessointiylijäämä TRIP:ssä, tietokannat voivat kasvaa erittäin vaikeasti hallittaviksi.

Pahimmassa tapauksessa joudutaan jokaista päätelaitetta mainostamaan omalla tietueella, ja näin

ollen saattaa tietueiden kokonaismäärä nousta kymmeniin miljooniin. Diplomityön [5] mukaan

TRIP-tietueen koko on vähintään 39 tavua. Ottaen huomioon melko merkittävän toisteisuuden, voi

tietokantojen koko nousta vaikeammin hallittavaksi. TRIP:ssä jokainen palvelin suorittaa

itsenäisesti taulujen prosessoinnin päivitystilanteissa. Käytännössä tällöin alueiden sisäiset

palvelimet ovat jatkuvasti epäyhtenäiset, mikäli palvelimia on monta, sillä 50 miljoonan tilaajan

keskuudessa tapahtuu lukumääräisesti paljon siirtymisiä. Yhden GB:n suuruisen tietokannan

levittäminen on hyvin raskasta, mutta keskitettynä sellainen on vielä helposti hallittavissa.

2.6.3 Synkronointi

TRIP:n ongelma on myös alkusynkronointi, mikäli sitä käytetään numeron siirrettävyyden

toteutukseen. Tietokannat ovat suurempia kuin Internet-reitityksessä, jossa siis käytetään BGB:tä.

Alkusynkronointi on näin ollen hitaampaa. Verkon kapasiteettia kuluu paljon alkusynkronoinnin

aikana ja palvelimien tila on huono operaation aikana. Laskennalliseen tehokkuuteen perustuvien

skaalautuvuusongelmien merkitys on tosin nykyisin pienentynyt, koska tietokoneiden laskentateho

on merkittävästi kasvanut. Esimerkiksi 1 GB:n tietokannan monistaminen kuormittaa myös verkkoa

aika tavalla, sillä siirtonopeudella 10 Mbit/s jo pelkän datan siirtämiseen kuluu aikaa yli 13

minuuttia. Se on nopeus, jolla täytyy jo ainakin olettaa selvittävän, koska muuten arkkitehtuurista

tulee kallis perustaa ja ylläpitää. Hallintaliikenteelle pitää olla aina riittävästi kaistaa verkossa,

mutta ainakin Internetissä hallintaliikenne (esimerkiksi reititysprotokollat) kilpailee samasta

siirtokapasiteetista asiakkaiden lähettämän liikenteen kanssa, ja näin ollen hallintaliikenne vähentää

asiakkaiden saamaa kaistaa verkossa.

2.7 Päämäärät

Luultavasti missä tahansa ratkaisussa numeron siirrettävyys aiheuttaa sen, että joudutaan

hallitsemaan lopulta miljoonien tietueiden numerotietokantoja. TRIP/CTRIP:ssä herättää ihmetystä

ennen kaikkea se, miksi levittää tietoa siirtyneistä numeroista monimutkaisten ns. ”välikäsiä”

sisältävien protokollien avulla, kun kerran siirtynyttä tilaaja on joka tapauksessa mainostettava

täydellisellä luettelonumerolla kaikille. Loogisesti keskitetty tietokanta tukee parhaiten tällaista

palvelua. Luotettavuuden lisäämiseksi ja palvelukapasiteetin nostamiseksi tietokanta on

monistettava useisiin paikkoihin. TRIP:n arvo on ennen kaikkea yhdyskäytävän sijaintiongelman

ratkaisussa. Luettelonumeroihin ei sisälly mitään politiikkatietoa, mikäli ne ovat siirrettäviä. Sen

Page 29: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

17

sijaan reititysnumeroihin sisältyy politiikkatietoa: Ilmaisevathan ne sen, minkä operaattorin asiakas

on kyseessä. Näin ollen siis TRIP:llä kannattaa mainostaa ainoastaan topologiasidonnaisia

numeroita. IP/SCN-yhdyskäytävän sijaintiongelma koskee ennen kaikkea reititysnumeroita, eli kun

on annettu televerkon tilaajalle topologiaan perustuva reititysnumero, valitaan sen perusteella

sopiva yhdyskäytävä. Yhdyskäytävän sijaintiongelma on ilmeinen ja TRIP:lle on selvästi tarve

ainakin mikäli IP-pohjaisesta televiestinnästä tulee tasavertainen vaihtoehto piirikytkentäisille

kiinteän verkon liittymille tai piirikytkentäisille mobiiliverkoille, mutta numeron siirrettävyys

kannattaa toteuttaa TRIP:stä erillisillä tietokannoilla. Näin TRIP:iä käytetään juuri kuten

dokumentissa [4] esitetään. Reititys siis erotetaan numeron siirrettävyydestä. Topologiaan

perustuvia numeroita voidaan tehokkaasti aggregoida, joten skaalautuvuusongelmaa TRIP:n kanssa

ei tule. Myös alueen sisäinen TRIP-tietokantojen synkronointi toteutetaan em. dokumentin

mukaisesti. Diplomityössä [5] esitetyn ratkaisun mukaisesti numerotiedon levittämiseen käytetään

Internetiä, vaikka lopullinen ratkaisu [Luku 7] ei otakaan kantaa mihinkään verkkokerroksen

asioihin. Ratkaisun tulee olla skaalautuva ja tehokas sekä luotettava. Numeropalvelun tulee toimia

jokaista puhelua muodostettaessa ja antaa aina oikean reititystieto. Myöhemmin luvussa 8 todetaan,

että kyseessä on periaatteessa varsin yksinkertainen tiedonhallintaongelma. Sopivia standardeja on

ennestään numerotiedon levitykseen [Luku 4], mutta jonkinlainen yleisesti hyväksytty standardi tai

sopimus on määriteltävä koskien erityisesti päivitystietueen lähettämisessä tarvittavia SQL-kyselyjä

[Kappale 8.2.4]. Tästä eteenpäin näkökulma aiheeseen on hyvin sovelluslähtöinen. Numeron

siirrettävyyttä käsitellään ennemminkin kehitettävänä palveluna kuin jonakin geneerisenä

protokollana. Ohjelmistoissa noudatetaan standardeja rajapintoja.

Sekä reititysalueiden sisäisessä että ulkoisessa tiedonvälityksessä käytetään luotettavaa

kuljetuskerroksen protokollaa. Koska kyse on Internetistä, käytetään TCP:tä [18]. Virkistyssanomia

ei numerotietoihin normaalisti lähetetä, vaikka sellainen onkin mahdollista esittämäni ratkaisun

puitteissa. Numerotietojen tallennuksessa tulee käyttää luotettavia järjestelmiä. Edelleen pidetään

kiinni tavoitteista, että televerkon tilaaja voi siirtyä IP-verkkoon ja päinvastoin. Numeropalvelun

korkea käytettävyys edellyttää tietokantojen monistamista. Levypohjaisetkin järjestelmät voivat

vikaantua. Mikään tekninen järjestelmä ei ole täysin luotettava, joten levypohjaisenkin järjestelmän

korruptoituminen on mahdollista. Näin ollen täytyy olla aina menetelmä, jolla korruptoituneen

tietokannan tila voidaan palauttaa toimivaksi.

Page 30: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

18

3 Relaatiotietokannat

Tässä luvussa esitetään lyhyesti relaatiotietokantojen viitteellinen rakenne ja joitakin keskeisiä

tietokantasuunnittelussa huomioon otettavia näkökohtia ja tehokkuutta. Esimerkkitietokantana

käytetään MySQL:ää [19].

3.1 Relaatiotietokantojen rakenne

Tietokantapalvelin koostuu fyysisen tietokannan lisäksi kolmesta funktionaalisesta osasta [20].

Kuvassa 3.1 esitetty rakenne on yksinkertaistettu. Esimerkiksi autentikointi jätetään huomioimatta.

KyselynkäsittelijäKyselynkäsittelijä

DB

MuistinhallitsijaMuistinhallitsija

Transaktionhallitsija

Transaktionhallitsija

Kyselyt

KyselynkäsittelijäKyselynkäsittelijä

DB

MuistinhallitsijaMuistinhallitsija

Transaktionhallitsija

Transaktionhallitsija

Kyselyt

Kuva 3.1. Relaatiotietokannan rakenne

Muistinhallitsija huolehtii tiedontallennuksesta levylle ja tiedonsiirrosta levyltä keskusmuistiin.

Kyselynkäsittelijä tutkii vastaanotetun kyselyn ja ratkaisee sen perusteella suoritettavat luku- ja

kirjoitusoperaatiot. Vaiheeseen saattaa sisältyä myös kyselyn optimoija, joka järjestää operaatiot

siten, että transaktio tapahtuu mahdollisimman tehokkaasti. Kyselyt vastaanotetaan usein

tekstimuodossa, mutta kehittyneemmät järjestelmät tukevat myös binäärisiä kyselyjä. Transaktion

hallitsijan tehtävänä on erityisesti huolehtia siitä, että tietokannan viite-eheys (engl. referential

integrity) säilyy. Täytyy myös huomioida, että samanaikaisesti järjestelmässä saattaa olla useita

käyttäjiä. Tavallisesti relaatiotietokannat toteutetaan asiakas/palvelin-arkkitehtuuriksi, jossa siis

asiakas lähettää kyselyjä palvelimelle, ja palvelin suorittaa siihen liittyvät operaatiot. Mahdollisesti

palvelin lähettää myös dataa asiakkaalle (SQL SELECT). Kyselyt ovat SQL-kielisiä lauseita.

Page 31: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

19

3.2 Tiedon haku

3.2.1 Indeksointi

Varsinainen data sijoitetaan pysyväismuistin tiedostoihin. Eri ohjelmistovalmistajien ratkaisut

eroavat merkittävästi sen suhteen, miten tiedostoja sijoitellaan. Tarkastellaankin tässä vain

yleisimpiä periaatteita käyttäen MySQL:ää esimerkkitietokantana. Jokaisella attribuutilla on oma

paikkansa muistissa. Relaation määrittelyssä attribuuteille annetaan yksikäsitteiset tietotyypit, jotka

määräävät sen, kuinka paljon muistia kukin tietue vaatii. Esimerkiksi kokonaisluku käyttää

tavallisesti neljä tavua. Tiedostoon tietueet sijoitetaan sekventiaalisesti. Näin ollen ilman

indeksointia haut ovat hitaita. MySQL:ssä [19] on useita eri taulutyypejä. Normaalisti (ISAM-

taulut) itse datalle, indeksoinnille sekä taulun määrittelyille on omat tiedostonsa1, joten yhteensä

taulua kohden luodaan siis ainakin kolme tiedostoa. Avaimille luodaan aina indeksointi. Käyttäjä

voi luoda indeksoinnin myös muille attribuuteille. Indeksoinnissa käytetään nykyisin tavallisesti B+

puuta [21] (ISAM/VSAM). Käyrät kuvassa 3.2 kuvaavat indeksoinnin vaikutusta (S=Sun Solaris,

L=Debian Linux, W=Windows 2000).

Kuva 3.2. MySQL: n suorituskyky

1 MySQL:ssä indeksitiedostolla on ekstensio .MYI, tauluilla .MYD ja taulun määrittelyillä .frm.

Page 32: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

20

Tulokset perustuvat omiin mittauksiin sekä Solaris- Windows- että Linux-käyttöjärjestelmissä.

Ilman indeksointia hakuaika kasvaa likimain lineaarisesti, kun taas haut käyttämällä indeksoitua

avainta tapahtuvat käytännössä vakioajassa. Kuvaajan lukuarvot kertovat palvelimen

maksimisuorituskyvystä, kun testit suoritettiin yhdellä asiakkaalla paikallisesti. Lukuarvot on saatu

mittaamalla seuraavaan kyselyyn kuluva aika:

SELECT * FROM $table WHERE col1=$key

Lukuarvoissa on mitattu kyselyn muodostamisesta (asiakas) datan vastaanottamiseen (asiakas)

kuluva aika. Verkon viivettä ei siis huomioida, koska operaatio suoritetaan paikallisesti. Kyseessä

on siis mahdollisimman yksinkertainen kysely. Arvioitaessa tiedonhallintajärjestelmien

skaalautuvuutta kokonaisuudessaan on myös verkon viive otettava huomioon. Kuvaajat eivät kerro

mitään siitä, kuinka palvelimet kestävät kuormitusta. Jokainen haku on suoritettu siten, että taulut

ovat välimuistissa, eli levyllä ei tarvitse käydä. Itse mittaustulokset eivät kovinkaan paljon ainakaan

käytännössä riipu siitä, mitä SQL:n perusoperaatioista (INSERT, UPDATE, SELECT, DELETE)

käytetään, koska kaikissa joudutaan suorittamaan (mukaellen) yllä esitetyssä kyselyssä tapahtuva

hakuprosessi. Tosin INSERT-operaatiossa ei tarvitse, mikäli attribuuttia col1 ei ole määritelty

avaimeksi.

Parempia tuloksia saatiin MySQL-palvelimella, jota ajetaan AMD Athlon (800 MHz) prosessorilla

Windows 2000- ja Debian Linux-käyttöjärjestelmässä. Sunin1 Blade 100 (Ultra Sparc 500 MHz) ei

osoittautunut yhtä tehokkaaksi. Tässä tapauksessa CPU-nopeus on ratkaisevampi ominaisuus kuin

32/64-bittisyys. Sun Bladella suoritetut haut ovat yllättävänkin hitaita, jos vertaa Debian Linuxilla

saatuihin tuloksiin. Nopeat vasteajat ovat varmin tae järjestelmän skaalautuvuudesta mutta eivät siis

suoraan kerro, kuinka järjestelmä kestää kuormitusta. Kuormitustestienkään tulokset eivät

välttämättä ole aukottomia, koska pullonkaulat saattavat syntyä muualle kuin itse järjestelmään –

esimerkiksi verkkoon. MySQL pystyy suorittamaan useita hakuja samanaikaisesti. Kuvaan 3.2

viitataan useasti työn loppuosassa, joka käsittelee toteutusta luvuissa 6 ja 7 sekä skaalautuvuutta

luvussa 8.

3.2.2 Kyselyn käsittely

Eräs perinteisten relaatiotietokantojen heikkous on kyselyn käsittelyyn kuluva aika. Edellä esitetyn

testin [Kuva 3.2] perusteella ei voi voida kovinkaan tarkasti arvioida itse hakurakenteen

tehokkuutta. Indeksoinnin vaikutus tosin näkyy erittäin selkeästi. Todellisuudessa haku on paljon

nopeampi kuin mitä tulos 0.8 ms (alin kuvaaja) esittää. Tekstimuotoisen kyselyn käsittely vie itse

asiassa suurimman osan ajasta. Jokaiselle kyselylle on suoritettava toistuvat

kyselynkäsittelyprosessit, vaikka useimmiten tiettyyn palvelimeen kohdistuvat haut ovat hyvin

samankaltaisia – jopa täysin samoja. Erityisesti muutaman asiakkaan ympäristöissä kuten www-

1 http://www.sun.com/desktop/sunblade100/

Page 33: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

21

palvelimissa, SQL-kieliset kyselyt on upotettu jollakin tavalla (esim. PHP, CGI) HTML-koodiin.

Normaali Internetin käyttäjä ei tavallisesti lähetä SQL-kyselyjä palvelimelle, vaan Internet-

sisällöntuottaja on määrittänyt tietyt joka transaktiossa toistuvat SQL-kyselyt, joilla tietokantaa

käsitellään. Käyttäjä saattaa tosin HTTP-protokollan metodeilla (GET, POST) lähettää kyselyn

attribuuteille arvot. Suositulla www-sivulla saattaa olla kymmeniä tuhansia asiakkaita päivässä,

mistä johtuen samoja tai ainakin samankaltaisia kyselyjä suoritetaan palvelimella suuria määriä.

Kyselyn parsiminen aina uudestaan ja uudestaan tuhlaa prosessointitehoa. Toisaalta myös

kuittausten käsittely ja odottelu hidastaa sarjassa lähetettäviä kyselyjä, koska kyseessä on

asiakas/palvelin-arkkitehtuuri.

Varsinaiseen tiedonhakuun kuluvaa aikaa voidaan paremmin arvioida hieman pidempien kyselyjen

avulla. Määritellään taulun attribuutit (col1 int primary key, col2 int). Ensisijaisavaimen (engl.

primary key) eheysrajoite aiheuttaa sen, että lisättäessä uusi tietue tulee etsiä avainta aivan kuten

SELECT-operaatiossa, jotta viite-eheyden säilyminen voidaan varmistaa. Mikäli avain löytyy, tulee

uusi tietue hylätä. Kokeillaan seuraavaa kyselyä:

INSERT INTO $table VALUES (1,1),(2,2),…,($n,$n)

Vaihtoehtoisesti voisi jokaisen monikon lisätä erikseen, jolloin kyselynkäsittelyprosessin joutuisi

ajamaan uudelleen jokaiselle monikolle. Tarkastellaan yhden monikon lisäämiseen vaadittavaa

aikaa muuttujan n eri arvoilla:

Kuva 3.3. MySQL Insert

Page 34: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

22

Havaitaan [Kuva 3.3], että muuttujan n arvoilla välillä 500...4000 saavutetaan maksiminopeus.

Esimerkiksi arvolla n=1024 saadaan kyselyyn kuluvaksi ajaksi kokonaisuudessaan 12.2ms ja yhden

alkion lisääminen veisi tällöin (kuvaaja) noin 12µs. Jopa tämäkin tulos on liian pessimistinen,

koska yli 1000 alkiota sisältävän tekstimuotoisen kyselyn (noin 10kB) läpikäyminen vie varmasti

aikaa. Etu transaktion nopeudessa saavutetaan kuitenkin siksi, että kyselyjä on ainoastaan yksi.

Tämäkin antaa silti jo melko suuren hakunopeuden – 5 miljoonaa riviä minuutissa. Testi on

suoritettu Windows 2000:ssa. Kyselynkäsittely muuttuu suuremmilla arvoilla siinä määrin

raskaaksi, että alkion lisääminen alkaa hidastua. Transaktionopeus (tpm-arvo [22]) tulee laskea aina

kyselyjen lukumäärän perusteella. Sen selvittäminen vaatii ehdottomasti hajautetun testiympäristön,

koska asiakkaita tarvitaan useita. Kun asiakkaita on paljon, alkaa palvelimen

prosessointikapasiteettia kulua paljon yhteyksien ylläpitoon, ja haut hidastuvat. Kyselyjä generoiva

asiakas voi yhtä hyvin olla transaktiokykyä rajoittava tekijä kuin palvelinkin. Kokonaisuudessaan

transaktioon kuluva aika koostuu asiakkaan puoleisesta prosessointiajasta, palvelimen

kyselynkäsittelystä ja hakuajasta sekä verkon aiheuttamasta viiveestä.

3.2.3 Proseduurihaut

Proseduurihauissa (engl. stored procedures) ei kyselyjä tarvitse kääntää enää suoritusvaiheessa.

Kysely käännetään proseduurin määrittelyn yhteydessä binääriseksi. Haettaessa tietoa tai

käsiteltäessä muuten tietokantaa kutsutaankin proseduuria eikä lähetetä tekstimuotoista kyselyä.

Esimerkiksi haettaessa taulusta käyttäjän määrittelemästä taulusta käyttäjän määrittelemällä

avaimella voidaan luoda proseduuri [23]:

CREATE PROCEDURE GET_DATA @TABLE, @F_KEY WITH ENCRYPTION AS SELECT *

FROM @TABLE WHERE COL1=@KEY

Haettaessa data lähetetään palvelimelle ainoastaan proseduurin nimi (GET_DATA) sekä

parametrit(taulun nimi + avain). Palvelin kutsuu proseduuria annetuilla parametreilla. Tällä

säästetään siinä, että kyselyä (SELECT * FROM TABLE WHERE COL1=$KEY) ei tarvitse parsia,

vaan voidaan siirtyä suoraan suoritusvaiheeseen. Edellä esitetty kysely on niin yksinkertainen, ettei

sen kehittäminen proseduuriksi tarjoa kovin suurta hyötyä, mutta jonkin verran kuitenkin [Taulukko

3 sivulla 73]. Monimutkaisemmat kyselyt sen sijaan kannattaa aina kehittää proseduuriksi, koska

tällöin saadaan huomattavasti tehokkaampia hakuja. Nykyaikaisessa tietokantasuunnittelussa tulisi

aina pyrkiä proseduurihakuihin jopa yksittäisissä kyselyissä, mikäli se ylipäätään on mahdollista.

Vapaan lähdekoodin tietokannat (MySQL, PostgreSQL, mSQL) eivät tue proseduurihakuja.

Esimerkiksi Microsoft SQL:n [23] Sybase Transact-SQL-kieli sekä Oraclen PL/SQL

mahdollistavat proseduurien luomisen. Edellä esitetty kysely on proseduurina noin 30-40%

nopeampia kuin normaalisti kyselynkäsittelijän kautta suoritettuna (Microsoft SQL Server).

Page 35: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

23

3.2.4 Kyselyjen tallettaminen välimuistiin

Kyselyvälimuistilla (engl. query cache) voidaan osittain paikata proseduurihakujen puutetta. Ne

sopivat erityisesti ympäristöihin, jossa tietokantapalvelin käsittelee runsaasti täsmälleen samoja

kyselyjä ja tietokannan sisältö on melko staattinen. Kyselyn täytyy olla täsmälleen sama, kuin

aikaisemmin suoritettu, jotta välimuisti toimisi. Jos lähetetty kysely löytyy välimuistista, ei sitä

tarvitse parsia eikä kutsua edes mitään proseduuria, kuten proseduurihauissa. Kyselyn tuottama

tulos luetaan suoraan välimuistista. Parhaimmillaan tekniikka tarjoaa vielä paremman

suorituskyvyn kuin proseduurihaut. Mikäli vanha kyselyn tuottama data muuttuu, täytyy kysely

ehdottomasti poistaa välimuistista, jotta ei olisi mahdollista tarjoilla vanhentunutta tietoa. Suurin

ongelma on nimenomaan se, että kyselyjen tarvitsee olla täysin identtisiä. Esimerkkinä tarkastellaan

seuraavia kyselyjä:

SELECT * FROM TABLE WHERE KEY=773

SELECT * FROM TABLE WHERE KEY=772

Kummatkin tarvitsisivat oman tietueen välimuistiin. Tekstimuotoisena esitetyn kaltainen lause vie

noin 30 tavua + data. 100000 vastaavanlaista kyselyä veisi jo 3MB+data eli muistia kuluu paljon.

Esimerkiksi MySQL mahdollistaa kyselyvälimuistin käytön.

Sekä proseduurihauilla että kyselyvälimuistilla on haittansa, mutta niillä voidaan joissakin

tapauksissa merkittävästi parantaa tiedonhallintajärjestelmän suorituskykyä. Proseduurihaut

aiheuttavat merkittävästi ylijäämää tietokantoihin. Tietokannan alustaminen on paljon raskaampaa,

mikäli se tukee proseduraalisia kyselyjä. Ohjelmistoista tulee paljon raskaampia, koska siihen

täytyy sisällyttää kääntäjä (engl. compiler), joka kääntää monipuolisen SQL-kielen mukaiset

kyselyt binääriseksi. Myös kyselyvälimuisti hieman hidastaa hakuja tapauksissa, jossa kyselyä

etsitään välimuistista, mutta sitä ei kuitenkaan löydy. Toisaalta päivitystilanteissa joudutaan

suorittamaan myös välimuistin prosessointia, jotta sen kautta ei tarjottaisi vanhentunutta tietoa.

Prosessointi siis tulee raskaammaksi, joten kyselyvälimuisti sopii erityisesti mahdollisimman

staattisiin tietokantoihin, joihin kohdistuu paljon samanlaisia kyselyjä.

3.2.5 Datavälimuisti

Kyselyvälimuistilla tarkoitetaan aivan eri asiaa kuin varsinaista datavälimuistia. Suurehkoilla

tietokannoilla toimittaessa tehokkaasti datavälimuistin käyttö on välttämätöntä. Tällöin haut

kohdistuvat muistiin (RAM) eivätkä levylle. Datavälimuisti jakautuu indeksivälimuistiin ja

tauluvälimuistiin. Usein etenkin moniattribuuttinen indeksointi vie jopa enemmän muistia kuin itse

data. Jos indeksoinnille ei riitä muistia, tapahtuu erittäin radikaali hakujen hidastuminen. Ainakaan

käytännössä haut eivät hidastu merkittävästi, kun koko tietokanta on muistissa [Kuva 3.2], ja

käytetään indeksejä. Vastaavasti taulujen lukumäärän kasvattaminen ei sekään hidasta hakuja

edellyttäen, että muistia on tarpeeksi.

Page 36: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

24

3.2.6 Redundanssi

Käsiteltäessä tietokantoihin liittyvää redundanssia tulee erottaa varmennukseen liittyvä redundanssi

sekä tiedon toisteisuuteen liittyvä redundanssi. Ensin mainittuun normaalisti pyritään, eli

tavoitellaan parempaa luotettavuutta tai skaalautuvuutta monistamalla tietokanta eri paikkoihin.

Tiedon toisteisuudesta sen sijaan pyritään tavallisesti pääsemään eroon osittamalla tietokantaa

ainakin jossain määrin, koska tietokannan koon kasvaessa sen hallinnointi vaikeutuu ja usein myös

haut hidastuvat. Kummassakin tapauksessa puhutaan usein redundanssista. Relaatiotietokannat

tarjoavat oivia välineitä toisteisuuden poistamiseen. Normaalimuotojen teorian (BCNF) [21]

mukaisesti redundanssi voidaan poistaa systemaattisesti, mutta usein jo ”terveellä järjellä”

ajattelemalla voidaan tietokantaa osittaa järkevästi.

[email protected]

[email protected]

88119451

D_NUMBER945129451394514945179451

OPERATORNetCOM

PhoneCOM

GATEWAY94512400

NULLNetCOM 94512400

PhoneCOM NULLLocalCOM NULL

[email protected]

[email protected]

88119451

D_NUMBER945129451394514945179451

R_NUMBER94518811

[email protected]

OPERATORLocalCOMPhoneCOM

NetCOM

GATEWAYNULLNULL

94512400

R_NUMBERS

R_NUMBERS

R_INFO

[email protected]

[email protected]

88119451

D_NUMBER945129451394514945179451

OPERATORNetCOM

PhoneCOM

GATEWAY94512400

NULLNetCOM 94512400

PhoneCOM NULLLocalCOM NULL

[email protected]

[email protected]

88119451

D_NUMBER945129451394514945179451

OPERATORNetCOM

PhoneCOM

GATEWAY94512400

NULLNetCOM 94512400

PhoneCOM NULLLocalCOM NULL

[email protected]

[email protected]

88119451

D_NUMBER945129451394514945179451

[email protected]

[email protected]

88119451

D_NUMBER945129451394514945179451

R_NUMBER94518811

[email protected]

OPERATORLocalCOMPhoneCOM

NetCOM

GATEWAYNULLNULL

94512400

R_NUMBER94518811

[email protected]

OPERATORLocalCOMPhoneCOM

NetCOM

GATEWAYNULLNULL

94512400

R_NUMBERS

R_NUMBERS

R_INFO

Kuva 3.4. Toisteisuuden poistaminen

Esimerkissä [Kuva 3.4] reititystietueen määrittävät reititysosoite, operaattori, sekä mahdollisesti

SCN/IP yhdyskäytävä. Useilla tilaajanumeroilla (etuliitteillä) on samat tiedot em. attribuuttien

osalta. Näin ollen on muistia haaskaavaa sijoittaa kaikki tiedot samaan relaatioon. Osituksessa usein

joudutaan asettamaan relaatioihin jokin keinotekoinen avain, mutta tässä tapauksessa reititysosoite

riittää erottamaan tietueet toisistaan. Edellä esitetyn osituksen jälkeenkään se ei ole välttämättä

vielä valmis vaan ositusta voisi jatkaa lisää. Attribuutit, joiden arvoihin jää toisteisuutta, kannattaa

määritellä mahdollisimman tehokkaasti esimerkiksi kokonaisluvuiksi. Esimerkiksi reititysosoitteille

Page 37: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

25

saattaisi hyvinkin riittää lukualue 0...65535, jolloin sen voisi määrittää kahden tavun

etumerkittömäksi kokonaisluvuksi (smallint unsigned). Tämä edellyttäisi jonkin keinotekoisen

attribuutin (esimerkiksi R_NUMBER_ID) käyttöönottamista. Merkkijonojen käyttö on muistia

haaskaavaa. Osituksessa haut usein monimutkaistuvat. Esimerkiksi haettaessa numerolle 9451

yhdyskäytävää:

SELECT GATEWAY FROM R_NUMBERS WHERE D_NUMBER=9451 ÿÿÿÿ

SELECT GATEWAY FROM R_INFO WHERE R_NUMBER=SELECT R_NUMBER FROM

R_NUMBERS WHERE D_NUMBER=9451 tai vaihtoehtoisesti

SELECT R_INFO.GATEWAY AS GATEWAY FROM R_NUMBERS, R_INFO WHERE

R_NUMBERS.R_NUMBER=R_INFO.R_NUMBER AND R_NUMBERS.D_NUMBER=9451

3.3 Relaatiomalli

3.3.1 Relaation määritelmä

Relaatiomalli [21] perustuu matemaattisten relaatioiden teoriaan [esim. 24], mutta sen

ymmärtämiseksi riittää muutama peruskonsepti. Käytännössä relaatiomalli koostuu kolmesta osa-

alueesta:

a) Tiedon rakenne (engl. data structure)

Tieto esitetään kaksiulotteisina taulukkoina– riveinä ja sarakkeina [esim. Kuva 3.4].

b) Tiedon käsittely (engl. data manipulation)

Tiedon hallinnassa ja manipuloinnissa käytetään standardoitua SQL-kieltä.

c) Viite-eheys (engl. data integrity)

Tiedonhallintajärjestelmä vastaa ainakin osittain itse tietokannan viite-eheyden

säilyttämisestä.

Ensimmäiset relaatiotietokannat kehittivät IBM (System R) ja Kalifornia yliopisto (Ingres) jo 1970-

luvulla, mutta niiden toiminta oli erittäin rajoittunut tietokoneiden alhaisen laskentatehon vuoksi.

Ensimmäiset kaupalliset järjestelmät tulivat markkinoille 1980-luvun alussa.

Relaatiot ovat siis kaksiulotteisia taulukoita, mutta kaikki kaksiulotteiset taulukot eivät suinkaan ole

relaatioita. Seuraavat kuusi aksioomaa tulee olla voimassa, jotta taulukko olisi relaatio:

1. Nimeämisen yksikäsitteisyys

Jokaiselle relaatiolla on tietokannassa yksikäsitteinen nimi.

Page 38: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

26

2. Tiedon yksikäsitteisyys

Jokaisen tietueen jokaisella attribuutilla on yksikäsitteinen arvo tai määrittelemätön arvo.

Tietueen attribuutilla ei voi olla samanaikaisesti useampaa arvoa.

3. Tietueiden yksikäsitteisyys

Jokainen rivi relaatiossa on uniikki, eli kahta samaa tietuetta ei voi olla. Tosin yksittäisen

attribuutin arvo avainta lukuun ottamatta voi olla sama useammallakin rivillä.

4. Attribuuttien yksikäsitteisyys

Jokaisella attribuutilla on yksikäsitteinen nimi.

5. Attribuuttien järjestyksen merkityksettömyys

Attribuuttien järjestyksellä ei ole merkitystä, eli sarakkeiden paikkoja voisi vaihtaa ilman,

että relaation tietosisältö muuttuisi ja hakutulokset muuttuisivat.

6. Rivien järjestyksen merkityksettömyys

Rivien järjestyksellä ei ole merkitystä, eli rivejä voisi vaihdella keskenään ilman, että

tietosisältö muuttuisi ja hakutulokset muuttuisivat.

3.3.2 Tietokantarelaation matemaattinen määritelmä

Olkoon lähtöjoukko A ja joukot B0, B1,…,Bn muita joukkoja. Tällöin tietokantarelaatio R on

tavallisesti kuvaus:

R: A → B0×B1×…×Bn

Huomattakoon, että seuraavat ehdot eivät välttämättä ole voimassa:

(1) A ∩ Bi = ∅, 0 ≤ i ≤ n

(2) Bi ∩ Bj = ∅, 0 ≤ i, j ≤ n ja i ≠ j

Koska A on joukko, se ei sisällä kahta samaa alkiota. Sen sijaan tulos B⊆ B0×B1×…×Bn on

monijoukko (engl. bag) ja saattaa näin ollen sisältää samoja alkioita. Nimitetään joukkoa A

relaation R avainjoukoksi. Monikkoja A×B0×B1×…×Bn kutsutaan relaation tietueiksi tai riveiksi.

Relaatiossa on yhtä monta tietuetta kuin on avaimia. Tässä avain koostuu siis ainoastaan yhdestä

attribuutista. Todellisuudessa avaimen voi muodostaa useampi attribuutti. Esimerkiksi

puhelinluettelossa nimi ei kaikissa tapauksissa toimi avaimena, koska samannimisiä ihmisiä voi olla

useita. Siksi tarvitaan jokin muu avain, jolla ihminen voidaan yksikäsitteisesti tunnistaa.

Puhelinluettelon tapauksessa esimerkiksi nimi ja kotiosoite yhdessä toimii jo paremmin avaimena:

On melko epätodennäköistä, että samassa osoitteessa asuu kaksi saman nimistä ihmistä.

Puhelinluettelo on klassinen esimerkki relaatiosta (tietokannasta):

Page 39: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

27

A1 = nimet, A2 = osoitteet, B0 = puhelinnumerot ja R = puhelinluettelo. Tällöin puhelinluettelo R on

kuvaus:

R: A1×A2 → B0.

Page 40: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

28

4 ODBC – Open DataBase Connectivity

ODBC on standardoitu pääsyrajapinta relaatiotietokantoihin. Tässä luvussa tutustutaan ODBC:n

viitteelliseen arkkitehtuuriin ja siihen, minkälaisiin tiedonhallintajärjestelmiin se on saatavilla.

Tutustutaan myös yksinkertaisen esimerkkiohjelman avulla käytännössä, mitä hyötyä ODBC:n

käytöstä on.

4.1 Miksi?

Olkoon jossakin SQL-tietokannassa relaatio (taulukko) ”tilaaja_numerot”, jonka attribuutit ovat

puh_numero (avain), reititysosoite ja verkkotyyppi. Tarkastellaan esimerkkinä yksinkertaista SQL-

kyselyä:

INSERT INTO tilaaja_numerot VALUES (”094512466”,”09451”,”SCN”)

Kysely on sekä MySQL- että PostgreSQL-syntaksin mukainen [19, 25], eli toimii siis molemmissa

järjestelmissä. Oletetaan, että esitetty monikko halutaan lisätä kahteen tietokantaan, joista toinen on

toteutettu MySQL:llä ja toinen PostgreSQL:llä. Ongelma liittyy yhteyden muodostukseen

asiakkaan ja palvelimen välillä eli siihen, miten kyselyn voi lähettää palvelimelle ja toisaalta siihen,

miten kysely käsitellään palvelimella [Kuva 4.1].

DB

DB

PostgreSQLServer

PostgreSQLServer

MySQLServerMySQLServer

PostgreSQLClient

PostgreSQLClient

MySQLClientMySQLClient

X

DB

DB

PostgreSQLServer

PostgreSQLServer

MySQLServerMySQLServer

PostgreSQLClient

PostgreSQLClient

MySQLClientMySQLClient

X

Kuva 4.1 MySQL vs. PostgreSQL

MySQL-asiakas (Client) ei pysty kommunikoimaan PostgreSQL-palvelimen (Server) kanssa.

Vastaavasti PostgreSQL-asiakas ei pysty kommunikoimaan MySQL-palvelimen kanssa. Eri

ohjelmistotuottajien ratkaisut eivät siis ole keskenään yhteensopivia. Tilanne on varsin valitettava,

koska itse kysely on sekä MySQL- että PostgreSQL-yhteensopiva, eli kysely suorittaa

kummassakin järjestelmässä juuri halutun operaation – lisää uuden rivin (monikon) relaatioon.

Page 41: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

29

Usein myös itse kieliopit eri ohjelmistojen välillä eroavat toisistaan, mutta toiminnallisuus on

yhdenmukaista. Tosin esimerkiksi MySQL on toiminnallisuudeltaan suppeampi kuin PostgreSQL.

ODBC soveltuu esitetyn yhteensopimattomuusongelman ratkaisuun, mutta erityisesti sovellusten

(ohjelmien) siirrettävyys eri tiedonhallintajärjestelmiin on ODBC:n pääasiallinen toteutustarkoitus.

4.2 ODBC-rajapinta

4.2.1 ODBC-standardi

ODBC-standardi perustuu Opengroupin1 X/Open SQL-CLI määrittelyihin (SQL Call-Level

Inteface) [21], joka määrittelee standardin tavan ohjelmointikieliin kommunikoida SQL-pohjaisten

tiedonhallintajärjestelmien kanssa. Alunperin Microsoft alkoi kehittää yhtenäistä sovellusrajapintaa

tietokantajärjestelmiin, jotta Microsoftin Windows-käyttöjärjestelmät soveltuisivat paremmin

tietokantasovelluksiin. Ohjelmistovalmistajista riippumaton standardi kuitenkin saatiin, ja nykyisin

ODBC on saatavilla kaikkiin tavallisimpiin UNIX-pohjaisiin järjestelmiin. ODBC tarjoaa

käyttäjälle standardin sovellustason rajapinnan SQL-pohjaisiin tietokantajärjestelmiin siten, että

loppukäyttäjän ei tarvitse välittää siitä, miten tietokanta on implementoitu eikä edes siitä, missä

tietokanta fyysisesti sijaitsee. Näin ollen ODBC:n avulla voidaan koota universaali tietokanta-

asiakas (engl. database client), jolla pääsee käsiksi mihin tahansa ennalta määriteltyyn

tiedonhallintajärjestelmään. Käytännössä se merkitsee sitä, että yhteen järjestelmään ohjelmoitu

ODBC-rajapintaa käyttävä sovellusohjelma voidaan siirtää mihin tahansa muuhun järjestelmään

riippumatta siitä, mikä järjestelmä on kyseessä edellyttäen, että ODBC on konfiguroitu tukemaan

sitä. ODBC tuki löytyy kaikkiin tavallisimpiin relaatiotietokantoihin: Oracle2, Microsoft SQL

Server, Microsoft Access[23], MySQL[19], PostgreSQL[25], mSQL3 jne. Microsoftin

ohjelmistoihin on erittäin laaja ODBC-tuki. Jopa Excel-taulukkolaskentaohjelmaa voidaan käyttää

ODBC-tietokantana.

ODBC on kieliriippumaton rajapinta eli ODBC-API on saatavilla moniin ohjelmointikieliin. Tässä

luvussa käytetään PHP:n [26] APIa esimerkkisovelluksissa, mutta numeron siirrettävyyteen

tarvittavat sovellukset [Kappale 6.1.1] on toteutettu C-kielellä. ODBC:n käyttö ei aiheuta mitään

muutoksia palvelimen puolella, eli palvelin ei tiedä kutsutaanko sitä suoraan omalla asiakkaalla vai

ODBC-rajapinnan kautta. Tämä on varsin suotuisa ominaisuus järjestelmien skaalautuvuuden

kannalta, sillä palvelimen toiminta ei hidastu. Toisaalta se tekee standardista löyhemmän, koska

jokaista palvelinta käyttävä asiakas täytyy sovittaa jokaisen palvelimen kanssa.

1 http://www.opengroup.org/

2 http://www.oracle.com

3 http://www.hughes.com.au/

Page 42: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

30

4.2.2 ODBC:n komponentit

ODBC:n peruskomponentit ovat [19,21]:

• Sovellus (Application)

• Ajurit (Drivers)

• Ajurin hallitsija (Driver Manager)

• Konfigurointitiedosto (Config File)

Seuraavassa esitellään kunkin komponentin tehtävät.

Sovellus

Olkoon suoritettavana jokin operaatio, joka edellyttää tietokannan päivitystä. Operaation

(esimerkiksi tilaajan siirtyminen televerkossa toiselle reititysalueelle) osana saattaa olla vaikkapa

kappaleessa 4.1 esitetty esimerkkikysely, joten transaktion tulee tapahtua automaattisesti ilman

käyttäjän tekemää manuaalista tietokannan päivitystä. Kokonaisuudessaan operaatioon saattaa

sisältyä useampiakin transaktioita. Tällöin tarvitaan sovellus, joka käyttää ODBC-rajapintaa

yhteyden muodostukseen, kommunikointiin ja yhteyden sulkemiseen kummankin palvelimen

kanssa. Sovellus kutsuu ODBC-API:n tarjoamia funktioita. Kommunikointivaiheessa lähetetään

kyselyjä palvelimelle. Se voi sisältää myös esimerkiksi kyselytuloksen vastaanottamisen (SQL

SELECT). Tarvittaessa voidaan käyttää myös COMMIT/ROLLBACK-protokollaa [21] samalla

tavalla kuin ilman ODBC-rajapintaa kommunikoitaessa.

Ajurit

ODBC-ajuri on kaikkein keskeisin ODBC-arkkitehtuurin komponentti. Jokainen tietokannan

hallintajärjestelmä, joka tukee ODBC:tä, tarvitsee ODBC-ajurin piilottamaan järjestelmälle

spesifiset ominaisuudet. Se muuntaa standardit SQL-kyselyt järjestelmän ymmärtämään muotoon,

mikäli tämä on tarpeellista. Tarvittaessa se palauttaa myös kyselytuloksia sovellusohjelman

prosessoitaviksi. Useinkaan itse kyselyihin ei tarvitse tehdä muutoksia. Kaikkein olennaisinta on

yhteyden muodostaminen määrätylle tietokantapalvelimelle ja luotettavan kommunikoinnin

toteutus palvelimen kanssa. Siksi ajuri sisältää usein myös tarvittavat asiakaskirjastot (engl. client

libraries). Kaikkien ajureiden täytyy ymmärtää samaa kieltä, jotta sama sovellusohjelma voisi

toimia eri järjestelmissä.

Ajurin hallitsija

Ajurin hallitsija on kirjasto, joka hallinnoi kommunikointia sovelluksen ja ajureiden välillä. Se

prosessoi ODBC-API:n funktiokutsuja. Koska ajureita normaalisti on useita, tarvitaan hallitsija,

joka dynaamisesti lataa oikean ajurin ODBC-yhteyden muodostuksessa käytettävän funktion DSN-

parametrin perusteella. Oikea ajuri siis valitaan ajon aikana, ja samanaikaisesti voi olla käytössä

Page 43: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

31

useita ajureita. Sovellusohjelmoijan ei tarvitse tietää mitään ajureista eikä ajurin hallitsijasta.

Ainoastaan DSN-parametri tulee asettaa oikein.

Konfigurointitiedosto

Konfigurointitiedostossa kuvataan jokainen tiedonhallintajärjestelmä, jonka kanssa halutaan

kommunikoida. Konfigurointitiedosto on nimeltään .odbc.ini. Sun Solariksessa (bash) tiedosto

löytyy esimerkiksi käyttäjän määrittelemän ympäristömuuttujan ODBCINI avulla. Vaihtoehtoinen

tapa on kirjoittaa tiedosto .odbc.ini käyttäjän kotihakemistoon. Windows NT/2000-

käyttöjärjestelmissä useimmiten määritellään tiedosto .odbc.ini hakemistoon C:\Winnt\. Tiedosto

on samansisältöinen riippumatta järjestelmästä. Tietokannat identifioidaan DSN:llä (Data Source

Name). Jokaiselle DSN:lle määritetään ajuri, joka näkyy hakemistopolkuna johonkin jaettuun

kirjastoon (.so UNIX-järjestelmissä, .dll Windowsissa). Kutsuttaessa tiettyä DSN:ää ajurin hallitsija

muodostaa yhteyden DSN:n määrittämään palvelimeen ja palauttaa kursorin sovellusohjelman

käyttöön. Kursorin välityksellä voidaan lähettää kyselyjä palvelimelle. Ajurin lisäksi määritellään

yhteysparametrit ja tietokannan nimi, jotta kaikki kyseiseen tiedonhallintajärjestelmään liittyvät

spesifiset ominaisuudet saadaan piilotettua.

Edellä esitettyä arkkitehtuuria kuvaa seuraava viitemalli:

DB1

SOVELLUSSOVELLUS

AJURI 1AJURI 1 AJURI 2AJURI 2 AJURI NAJURI N

..........

ODBC.INIODBC.INI

AJURIN HALLITSIJAAJURIN HALLITSIJA

DB2 DBN

DSN1

DSN1

DB1

SOVELLUSSOVELLUS

AJURI 1AJURI 1 AJURI 2AJURI 2 AJURI NAJURI N

..........

ODBC.INIODBC.INI

AJURIN HALLITSIJAAJURIN HALLITSIJA

DB2 DBN

DSN1

DSN1

Kuva 4.2. ODBC-viitemalli

Sovellusohjelmasta ajurin hallitsija saa siis DSN-identifikaation, jonka perusteella se käy

lataamassa oikean ajurin, jolla muodostetaan kursori sovellusohjelman käyttöön [Kuva 4.2].

Page 44: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

32

ODBCINI-tiedosto sisältää myös DSN- kohtaiset yhteysparametrit. Parametrit voivat hieman

vaihdella eri tiedonhallintajärjestelmien välillä. Useimmiten tarvitaan ainakin käyttäjätunnus,

salasana ja IP-osoite tai aluenimi (DNS [3]) [27], koska nykyisin transaktiot suoritetaan useimmiten

Internetin välityksellä.

4.3 ODBC käytännössä

Tässä kappaleessa esitetään yksinkertaisten esimerkkiohjelmien avulla, miten ODBC toimii.

Esimerkkiohjelmat on toteutettu PHP:lla [26], joka on erinomaisen käyttökelpoinen kieli

käytettäväksi erityisesti tietokantasovelluksissa, erityisesti Internetin sisällöntuotannossa.

4.3.1 ODBC-esimerkki

Palataan esimerkkiin [Luku 4.1], jossa on kaksi erilaista tietokantaa, ja sen ohella esitettyyn SQL-

kyselyyn. Ilman ODBC:tä päivityksen tekeminen molempiin vaatii kaksi erillistä sovellusohjelmaa.

MySQL:n [19] sovellusohjelma:

<?php

#Connect to the MySQL Server$link=mysql_connect("pc108.tct.hut.fi","antti","superuser") or die ("Couldn't connect!");

#Execute the MySQL commandmysql_db_query("tilaaja_numerot","insert into DNUMBERS values(’094512466’,’09451’,’SCN’)”,$link);

#Disconnect the MySQL Servermysql_close($link);

?>

PostgreSQL:n [25] sovellusohjelma:

<?php

#Connect to the PostgreSQL Server$link=pg_connect("host=pc107.tct.hut.fi dbname=tilaaja_numerot username=antti password=superuser")or die ("Couldn't connect!");

#Execute the PostgreSQL commandpg_exec($link,"insert into DNUMBERS values(’094512466’,’09451’,’SCN’)");

#Disconnect the PostgreSQL Serverpg_close($link);

?>

Esitetyt skriptit ovat täysin toimivia. Ne ovat keskenään hyvin analogisia, mutta jokainen funktio

on eri niminen ja esimerkiksi yhteysparametrit syötetään aivan eri tavalla: MySQL vaatii kolme

parametria ja PostgreSQL:ssä kaikki kirjoitetaan yhteen merkkijonoon. Seuraavassa esitetään

ODBC-versio:

<?php

#Connect to the ODBC data source$link=odbc_connect("PC107PGSQL","antti","superuser") or die ("Couldn't connect!");

#Execute the SQL commandodbc_exec($link,"insert into DNUMBERS values(’094512466’,’09451’,’SCN’)");

Page 45: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

33

#Disconnect the data sourceodbc_close($link);

?>

Yhteyttä muodostettaessa ensimmäisenä parametrina annetaan DSN. Myös käyttäjätunnus ja

salasana annetaan tässä ohjelmassa, vaikka ne löytyisivät myös ODBC.INI tiedostosta, mutta

tietoturvallisuuden vuoksi annetaan ne myös tähän funktioon. Voihan olla, että kaikilla käyttäjillä ei

ole oikeutta päästä tietokantoihin. Näin saadaan varmistettua, että sovellusohjelmoijalla on

tarvittavat privilegiot. Mikäli kaikkiin tarvittaviin tietokantoihin päästään samoilla tunnuksilla,

tarvitsee ainoastaan muuttaa DSN:ää vaihdettaessa tietokantaa eli yhteyden muodostavan funktion

ensimmäistä parametria.

4.3.2 ODBCINI-tiedosto

Seuraavassa esitetään vielä esimerkin avulla standardoitu ODBC.INI tiedoston rakenne [27]:

[ODBC Data Sources]PC107PGSQL=PostgreSQL on pc107PC108MySQL=MySQL on pc108

[PC107PGSQL]Driver=/usr/local/postgresql/lib/libpsqlodbc.soDescription=PostgreSQL DSNDatabase=tilaaja_numerotServername=pc107.tct.hut.fiPort=5432Username=anttiPassword="superuser"

[PC108MySQL]Driver=/usr/local/mysql/lib/libmyodbc3.soDescription=MySQL ODBC 3.51 DSNSERVER=pc108.tct.hut.fiPORT=3306USER=anttiPassword="superuser"Database=tilaaja_numerot

[ODBC]InstallDir=/usr/local/iODBC/lib

Tiedosto koostuu kolmesta osasta: DSN luettelo, DSN kuvaukset ja ODBC. Luettelossa luetellaan

kaikki tietokannat. DSN-kuvauksissa määritellään DSN:ien ajurit sekä yhteysparametrit. ODBC-

osaa ei muuteta. Se sisältää hakemistopolun ajurin hallitsijaan. Ohjelmistoille määritellään

valmistajakohtaiset parametrit. Kuten huomataan, eroavaisuuksia on. Mikäli halutaan ohjelmassa

päivittää PC107:n PostgreSQL:n sijasta PC108:n MySQL, vaihdetaan function odbc_connect

ensimmäisen parametrin paikalle ”PC108MySQL”.

4.3.3 JDBC – Java DataBase Connectivity

JDBC (Java DataBase Connectivity) [21] on ODBC:n kaltainen toimittajariippumaton rajapinta,

jolla javasovellukset voivat kommunikoida SQL-pohjaisten tiedonhallintajärjestelmien kanssa. Se

perustuu myös Opengroupin SQL-CLI-määrittelyyn [28]. Melko moniin relaatiotietokantoihin on

Page 46: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

34

nykyisin myös JDBC-tuki (esim. MySQL, Oracle, Sybase). JDBC voi käyttää myös ODBC-

tietokantoja erityisten JDBC-ODBC-siltojen avulla (engl. JDBC-ODBC Bridge Driver), jolloin

tarvitaan myös ODBC-ajurin hallitsija. JDBC vaatii siis aina Javan toimiakseen. JDBC

mahdollistaa ODBC:tä helpommin tilanteen, jossa asiakasjärjestelmässä ei ole ajuria jokaista

tiedonhallintajärjestelmää varten, jonka kanssa tarvitsee kommunikoida. Sopiva ajuri voidaan

nimittäin ladata applet-ohjelmana verkosta.

Page 47: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

35

5 Osoitteistus ja nimeäminen

Tässä luvussa selvitetään osoitteistusta ja nimeämistä tietoverkoissa. Pohditaan ennen kaikkea sitä,

miten ne vaikuttavat yhteyden muodostukseen ja kohteen paikannukseen.

5.1 Internetin nimipalvelu

Internetissä vastaanottajaa osoitetaan aluenimillä (DNS [3]), jotka periaatteessa ovat siirrettäviä.

Tosin DNS-järjestelmän kehittämiselle on aikoinaan ollut aivan toinen motiivi kuin aluenimien

siirrettävyys. Nimittäin palvelimien osoittaminen pelkästään IP-osoitteilla olisi käyttäjälle varsin

epämukavaa. Esimerkiksi pc107.tct.hut.fi on mukavampi kuin 130.233.154.107. Molemmat

osoittavat samaa palvelinta, mutta numerosarja on paljon vaikeammin muistettavissa. IP-osoitteet

sen sijaan eivät ole siirrettäviä: Mikäli päätelaite siirretään aliverkosta toiseen, sen IP-osoite

muuttuu. Sen sijaan saman aliverkon sisällä voidaan mahdollisesti säilyttää sama IP-osoite. IP-

osoitteiden siirrettävyys merkitsisi liian raskaita muutoksia reitittimien reititystauluihin.

MobileIP:ssä [29] voidaan kolmioreitityksen avulla antaa tilaajalle mahdollisuus säilyttää IP-

osoitteensa, vaikka hän siirtyisikin toiseen verkkoon, mutta siinä kyseessä onkin mobiilitekniikka.

Tilaajalle paketit välittävä verkko (reititin) vaihtuu MobileIP:ssä, jos hän siirtyy toiselle

reititysalueelle.

Kuvassa 5.1 suoritetaan sarja DNS-kyselyjä, jotka selvittävät alhaalla hierarkiassa sijaitsevan

Internet-päätelaitteen IP-osoitteen.

root

tct

hut

fi

NS1

NS1

NS

NS

1 23

4

5

NS3

NS2

tut NS

NS2

lut NS

root

tct

hut

fi

NS1

NS1

NS

NS

1 23

4

5

NS3

NS2

tut NS

NS2

lut NS

Kuva 5.1. Hierakkinen DNS-kysely

Page 48: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

36

DNS on hierarkkinen palvelinjärjestelmä, jonka ylimmällä tasolla ovat juurinimipalvelimet, joita on

maailmassa 13 kpl [3]. Ne tietävät kaikkien kansallisten nimipalvelimien IP-osoitteet. Kun

nimipalvelin käynnistetään (tyhjä välimuisti), se kysyy pyydettäessä aluenimeen liittyvää

reititystietoa eli IP-osoitetta yhdeltä juurinimipalvelimista. Asiakas kysyy paikalliselta

nimipalvelimelta nimeä pc107.tct.hut.fi vastaavaa IP-osoitetta. Koska välimuisti on tyhjä,

paikallinen nimipalvelin ei tiedä IP-osoitetta. Niinpä kysytään yhdeltä juuripalvelimelta.

Juuripalvelin palauttaa listan .fi-alueen nimipalvelimien IP-osoitteista. Asiakkaan nimipalvelin

tekee kyselyn yhdelle näistä, mutta .fi-alueenkaan palvelin ei tiedä nimeä pc107.tct.hut.fi vastaavaa

IP-osoitetta. Palvelin kuitenkin palauttaa listan .hut.fi-alueen nimipalvelimista. Senkään

verkkoalueen nimipalvelin ei tiedä vastausta mutta palauttaa listan alueen .tct.hut.fi

nimipalvelimien IP-osoitteista. Näin oikea palvelin on löytynyt. Kysely kohdistetaan useimmiten

ensisijaiseen nimipalvelimeen. Se palauttaa lopulta osoitteen 130.233.154.107, minkä jälkeen vasta

varsinainen lähetys voi alkaa.

Normaalisti edellä kuvattua pitkää kyselyprosessia ei tarvitse suorittaa, sillä osoitteet löytyvät

nimipalvelimien käteismuisteista. Tietueilla on elinikä (TTL), jonka umpeuduttua tietue poistetaan.

Tavallinen TTL-arvo on esimerkiksi 86400 sekuntia eli yksi vuorokausi. Näin ollen esitetty

mekanismi on äärimmäisen skaalautuva. Näin on pakko olla, sillä kyselyjä tulee erittäin suuri

määrä. Jokainen sähköpostinlähetys vaatii DNS-kyselyn. Vielä suuremman kuorman aiheuttaa

www-sivujen selaaminen. Hyvin lyhyessä ajassa saattaa käyttäjä aiheuttaa kymmeniä tai jopa satoja

DNS-kyselyjä. Keskitetty palvelinjärjestelmä ei välttämättä toimisi. Useimmiten jokaisella piirillä

on ainakin yksi toissijainen nimipalvelin. Nimipalvelutietueita tarjoavien palvelinten tietokannat

täytyy synkronoida. Hajautetun arkkitehtuurin etu on se, että yksittäinen nimipalvelin ei normaalisti

ylikuormitu. Tietueiden määrä ei yksittäisessä palvelimessa kasva hallitsemattoman suureksi

hierarkkisen hajautuksen ansiosta.

DNS:n tietokanta-arkkitehtuuri siis mahdollistaa sen, että IP-osoitteen muuttuessa aluenimi voidaan

säilyttää. Hajautetulla arkkitehtuurilla on kuitenkin haittansa koskien aluenimien siirrettävyyttä.

Ajatellaan tilannetta [Kuva 5.1], jossa pc107.tct.hut.fi siirtyy toiselle reititysalueelle – siis eri

verkkoon. Tällöin verkkoalueen .tct.hut.fi on mainostettava siirtynyttä palvelinta uudella IP-

osoitteella. Tämä ei välttämättä ole sen intressi, koska vain omaan verkkoon kytketyistä

päätelaitteista ollaan ensi sijassa kiinnostuneita. Jos siis tilaaja siirtyy esimerkiksi verkkoalueen

.lut.fi reititysalueelle, nimipalvelukyselyt kohdistuvat silti alueen .tct.hut.fi nimipalvelimelle. Sen

sijaan koko alueen siirtyminen toiselle reititysalueelle ei aiheuta mitään ongelmia. Käytännön

sovellus on esimerkiksi se, että yritys jolle on allokoitu C-luokan verkko, vaihtaa Internet-

palveluntarjoajaa. Tällöinhän IP-osoitteet muuttuvat. Aluenimi voidaan säilyttää entisellään, ja

asiakkaiden ei tarvitse ottaa huomioon reititysalueen muutosta, koska sama URL käy edelleen.

Toisaalta DNS:n avulla toteutetut siirtymiset ovat melko hitaita, koska nimipalvelimen

välimuisteissa saattaa vanha tieto säilyä pitkäänkin. Keskitetty ratkaisu olisi pelkästään

siirrettävyyttä ajatellen paljon yksinkertaisempi toteuttaa.

Page 49: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

37

DNS ei sellaisenaan ole ratkaisu numeron siirrettävyyteen liittyvään numerotiedon levitykseen. Se

on kuitenkin toiminnaltaan erittäin analoginen sen kanssa, miten puhelinnumeron siirrettävyys

vaikuttaa puhelun muodostukseen ottamatta kantaa siihen, toimitaanko televerkossa vai IP-

verkossa. Päätelaitteiden aluenimien voidaan ajatella vastaavan puhelinverkon luettelonumeroita.

Muunnos täytyy suorittaa luettelonumerosta reititysosoitteeseen aivan kuten DNS muuntaa

aluenimen IP-osoitteeksi. Puhelinverkon tapauksessa luettelonumeroa vastaa joko E.164 formaatin

mukainen reititysnumero tai IP-osoite, mikäli B-tilaaja on IP-verkon puolella.

5.2 ENUM

Aluenimeä .e164.arpa käytetään esitettäessä E.164 formaatin mukaiset osoitteet DNS-

järjestelmässä. Tällöin nimipalvelimia voidaan käyttää numeromuunnospalvelimina puhelua

muodostettaessa [30]. Esimerkiksi numero +358 9 4512466 voidaan esittää DNS-muodossa:

+358 9 4512466→→→→ 6.6.4.2.1.5.4.9.8.5.3.e164.arpa

Numeroiden järjestys siis käännetään. Alueen .e164.arpa nimipalvelimissa on tieto kansallisten

regulaattoreiden palvelimista. Toisin kuin Internetin aluenimille nimipalvelin analysoi tavallisesti

useamman kuin yhden osan URI:sta (Unified Resource Identifier). Tässä tapauksessa .e164.arpa

piirin nimipalvelin joutuu tutkimaan numerot (järjestyksessä) 3, 5 ja 8 ennen kuin avain on selvillä.

Kysely voi palauttaa esimerkiksi seuraavan tietueen:

$ORIGIN 6.6.4.2.1.5.4.9.8.5.3.e164.arpa.

IN NAPTR 10 10 “u” “tel+E2U” “!^.*$!tel:+358503582379!” .

Tällä tavoin voidaan numeromuunnos toteuttaa. Tässä tapauksessa alunperin lankapuhelimen

numero ratkaistaan GSM-numeroksi. Kysely voi palauttaa myös useampia tietueita. Preferenssien

avulla voidaan osoittaa näiden keskinäinen järjestys. Tällöin yhteyttä muodostettaessa voidaan

esimerkiksi ensiksi yrittää soittaa lankapuhelimeen. Jos B-tilaaja ei vastaa, soitetaan vaikkapa

kännykkään. Kyselyn suorittavasta sovellusohjelmasta riippuu, mitä saaduilla tiedoilla tehdään. Jo

nykyisin ENUM:ia käytetään IP-verkossa E.164 formaatin mukaisten puhelinnumeroiden

esittämisessä. ENUM tarjoaisi näin erittäin helpon tavan numeron siirrettävyyden toteutukselle

ainakin IP-verkossa. Sen käyttöön liittyy kuitenkin samat ongelmat kuin DNS-

palvelinjärjestelmässä. Hierarkkinen järjestelmä olisi kyllä äärimmäisen skaalautuva, mutta

ongelma on, että tilaajan siirtyessä reititystietoa kysyttäisiin vanhalta palveluntarjoajalta. Tämä ei

liiketoiminnallisessa mielessä ole kovin järkevää, koska asiakkaansa menettänyt operaattori ei

varmaankaan ole kiinnostunut palvelemaan siirtynyttä tilaajaa. Toisaalta nollasummapolitiikan

näkökulmasta voisi ajatella, että operaattori palvellessaan siirtyneitä tilaajia hyötyy itse saman

verran, koska muut operaattorit palvelevat sen verkkoon siirtyneitä tilaajia. Ongelma kuitenkin on

edelleen, että kuinka hyvin operaattori palvelee menetettyjä tilaajia. Tilaajaa palvelevalle

operaattorille voi aiheutua ongelmia siitä, että aiemmin samaa tilaajaa palvelleen operaattorin

palvelimessa on häiriöitä. Päivitysten hitaus voisi myös olla ongelmallista, koska välimuisteissa

Page 50: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

38

saattaa vanha reititystieto pysyä pitkäänkin. Tosin jos numerotiedon ylläpidosta pystytään

laskuttamaan, operaattorit saattavat jopa pyrkiä ratkaisuun, jossa reititysnumero haetaan alun perin

B-tilaajaa palvelleelta palvelun tarjoajalta.

Mikäli ei haluta, että vanha operaattori on vastuussa siirtyneen tilaajan reititysinformaatiosta,

päädytään aina loogisesti keskitettyyn tai monistettuun palvelinarkkitehtuuriin. Jokaisessa

palvelimessa tulee olla jonkinlainen informaatio kaikista luettelonumeroista siirrettävyysalueella.

Sitä käytetään avaimena varsinaiseen reititystietoon. Itse reititystieto tiettyyn luettelonumeroon

liittyen saattaa kuitenkin vaihdella suurestikin reititysalueiden välillä. Jos kaikki numerot ovat

siirrettäviä, ilman tietokantahakua ei ole mahdollista tietää, mihin puhelu tulisi reitittää.

5.3 Numeron siirrettävyys nykyisin

Nykyisin numeron siirrettävyys Euroopassa ja Yhdysvalloissa on toteutettu älyverkoilla (IN) [2].

Kyseessä on keskitetty ratkaisu. Numerotiedot sijaitsevat esimerkiksi regulaattorin tietokannoissa,

joihin kyselyt suoritetaan riippumatta siitä kuka soittaa ja mihin [Kuva 5.2]. IN:n tarjoamat palvelut

ovat varsin rajoittuneita. Keskitetyn ratkaisun etuna on yksinkertaisuus, mutta IN:ssä numeron

siirrettävyyteen liittyvät tietokantojen päivitykset täytyy tehdä manuaalisesti.

NP database

SSF

SCF

SDF

SMS

SSF

SCF

SDF

SMS

NP database

SSF

SCF

SDF

SMS

SSF

SCF

SDF

SMS

Kuva 5.2. IN arkkitehtuuri

Normaalisti kysely suoritetaan siis paikalliseen SDF:ään (Service Data Function). SMS (Service

Management System) huolehtii regulaattorin tietokannan ja paikallisen SDF:n synkronoinnista.

Regulaattorin tietokantaan lähetetään tieto tilaajan siirtymisestä. Operaattorit tallettavat paikalliseen

SDF:ään siirtyneiden tilaajien luettelonumeroiden ja reititysnumeroiden välisen relaation. Luvussa

Page 51: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

39

6 esitettävässä ratkaisussa on joitakin kuvan 5.2 arkkitehtuurin piirteitä, mutta tiedon levitys

tapahtuu automaattisesti.

5.4 Numeron siirrettävyys GSM-verkossa

GSM-verkossa vaaditaan vastaavanlainen tietokantahaku puhelukohtaisesti. Tietokannasta ei

kuitenkaan haeta GSM-tilaajan reititysosoitetta vaan tilaajaa palvelevan HLR:n reititysosoite, joka

on sekin E.164 formaatin mukainen [31]. Kyseinen HLR tietää VLR:n tarkkuudella, missä tilaaja

on. HLR kysely tehdään joka tapauksessa aina GSM-verkkoon päätyville puheluille. Nykyisin

puhelinkeskukset pystyvät GSM-numerosta päättelemään, miltä HLR:ltä reititystietoa kysytään.

Näin ollen numeron siirrettävyys aiheuttaa sen, että tarvitsee hakea tietokannasta B-tilaajaa

palvelevan HLR:n osoite, koska sitä ei enää tilaajanumerosta pystytä selvittämään. Kuvassa 5.1

soitetaan PSTN:stä GSM-verkkoon.

PSTNPSTN

GSMGSM

GMSC HLR

NDB

VLR

BSCPSTNPSTN

GSMGSM

GMSC HLR

NDB

VLR

BSC

Kuva 5.3. Numeron siirrettävyys GSM-verkossa

HLR pyytää reititysnumeron siltä VLR:ltä, jonka alueella kutsuttu tilaaja sijaitsee ja palauttaa

saadun reititysnumeron (E.164) puhelun muodostusprosessiin. GSM-verkon toiminta on hyvin

analoginen MobileIP:n kanssa sillä erotuksella, että bittivirtaa GSM-verkossa ei lähetetä

päätelaitteelle minkään välipisteen kautta (MobileIP:n HA). Kolmioreititystä ei siis GSM-verkossa

sovelleta. B-tilaajan sijainti määräytyy kuitenkin lähes yhdenmukaisella tavalla.

Page 52: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

40

6 Numeron siirrettävyyden tavoitearkkitehtuuri

Tässä luvussa kuvataan yksityiskohtaisesti numeron siirrettävyyden tavoitearkkitehtuuri. Esittämäni

ratkaisun perusominaisuudet ovat numeron siirrettävyys piirikytkentäisessä verkossa (PSTN/ISDN,

GSM), IP-verkossa sekä siirtymiset näiden välillä. Käsitellään aluksi arkkitehtuuriin kuuluvien

komponenttien merkitystä. Sen jälkeen luvussa 7 esitetään vastaava toteutus.

6.1 Komponentit

6.1.1 Arkkitehtuuri

Kuvassa 6.1 esitetään kaikki tarvittavat komponentit sekä niiden englanninkieliset ja

suomenkieliset nimet.

Regulator

NDB

Service Provider X

AVCC

UDB

PNDB

PNAC

NA

RIS AVCC Advertisement Validity Checking Client

PNDB Ported Number Database

UDB Update Database

PNAC Ported Number Advertising Client

RIS Routing Information Server

NA Numbering Agent

NDB Numbering Database

AVCC Siirtymistiedon tarkistin

PNDB Siirtymistietokanta

UDB Päivitystietokanta

PNAC Siirtymistiedon levittäjä

RIS Reititystietopalvelin

NA Numerointiagentti

NDB Numerotietokanta

Regulator

NDB

Service Provider X

AVCC

UDB

PNDB

PNAC

NA

RIS AVCC Advertisement Validity Checking Client

PNDB Ported Number Database

UDB Update Database

PNAC Ported Number Advertising Client

RIS Routing Information Server

NA Numbering Agent

NDB Numbering Database

AVCC Siirtymistiedon tarkistin

PNDB Siirtymistietokanta

UDB Päivitystietokanta

PNAC Siirtymistiedon levittäjä

RIS Reititystietopalvelin

NA Numerointiagentti

NDB Numerotietokanta

AVCC Siirtymistiedon tarkistin

PNDB Siirtymistietokanta

UDB Päivitystietokanta

PNAC Siirtymistiedon levittäjä

RIS Reititystietopalvelin

NA Numerointiagentti

NDB Numerotietokanta

Kuva 6.1. Tavoitearkitehtuurin komponentit

Siirrettävyysalueella on joitakin päivitystietokantoja (UDB), joihin kaikkiin lisätään tietue tilaajan

siirtyessä. Kaikki päivitystietokannat toimivat toisistaan riippumatta, jolloin siis yhden tietokannan

vikaantuessa muut toimivat normaalisti. Siirtymistietokanta (PNDB) on esiaskel

päivitystietokantaan. Palveluntarjoajan verkossa toimiva siirtymistiedon levittäjä (PNAC) lähettää

tiedon tilaajan siirtymisestä siirtymistietokantaan. PNAC:n tehtävä on myös vahvistaa toisen

palveluntarjoajan asiakkaaksi siirtymiset omalta alueelta. Regulaattorin siirtymistiedon tarkistin

(AVCC) tarkistaa päivitystietueiden validiteetin. AVCC siirtää siirtymisinformaation

päivitystietokantaan (UDB), mikäli validointitarkistus osoittaa, että tietue voidaan vahvistaa.

Numerointiagentti (NA) palvelee yhtä tai useampaa numerotietokantaa (NDB). NA lukee

siirtymiset päivitystietokannasta ja päivittää saamansa informaation perusteella numerotietokannan.

Page 53: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

41

Reititystietopalvelin (RIS) on puhelunmuodostuksessa palveleva tietokanta-asiakas, joka suorittaa

yhden tai useampia hakuja puhelua muodostettaessa. Se onkin työllistetyin elementti esitetyssä

arkkitehtuurissa. AVCC:n toiminnot voidaan toteuttaa myös tietokannan sisällä laukaisimilla tai

globaaleilla eheysrajoittimilla, jos tiedonhallintajärjestelmä tukee niitä. Kuvan 6.1 komponenteilla

voidaan numeron siirrettävyys toteuttaa kokonaisuudessaan siirrettävyysalueella. Palveluntarjoajan

alueen komponenteilla operaattori pystyy mainostamaan alueelleen siirtynyttä tilaajaa,

vahvistamaan alueelta siirtymiset sekä tarjoamaan tarvittavan reititystiedon puhelun

muodostukseen. Regulaattori voi tarvita myös NDB:n ja NA:n, jotta kaikki validointitarkistukselta

vaadittavat ominaisuudet voidaan toteuttaa.

6.1.2 Monistetut päivitystietokannat

Vastuu lähetyksen onnistumisesta jätetään kokonaisuudessaan sille siirtymistiedon levittäjälle

(PNAC), joka päivitystä alun perin yritti. Poistunutta tilaajaa ei tavallisesti mainosteta erikseen,

vaan siitä ilmoitetaan vahvistamalla uuden palveluntarjoajan lähettämä päivitystietue. Ratkaisussa

toteutetaan monistettu arkkitehtuuri. Se ei kuitenkaan tarkoita sitä, että jokaisella

numeropalvelimella olisi täsmälleen fyysisesti samanlainen tietokanta vaan sitä, että jokaisella

numeropalvelimella tai palvelinryhmällä on samanlainen tietosisältö. Ratkaisu perustuu

relaatiotietokantoihin. Relaatiotietokantoja käsitellään standardin ODBC-rajapinnan kautta.

Epäonnistunutta päivitystä yritetään lähettää uudestaan. Kuvan 6.2 mukaisesti päivitysten

toimittamisessa noudatetaan kaikilta kaikille periaatetta. Lähtökohta on, että jokaisella

siirrettävyysalueella toimii jokin riippumaton yhtiö tai regulaattori, joka huolehtii

päivityspalvelimien hallinnasta ja ylläpidosta. Jokainen siirrettävyysalueella toimiva operaattori

liittyy jonkin tai joidenkin päivityspalvelimen asiakkaaksi.

Service Provider X

PNDB PNDB

PNDB

PNDB

PNDB

Regulator

Service Provider X

PNDB PNDB

PNDB

PNDB

PNDB

Regulator

Kuva 6.2. Inkrementaalinen tietokantojen päivitys

Palveluntarjoajan PNAC ei pidä palvelimiin pysyvää yhteyttä vaan muodostaa yhteyden kuhunkin

palvelimeen aina tarvittaessa.

Page 54: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

42

6.1.3 Luotettavuus

Eräs keskeisimmistä palvelinjärjestelmän tavoitteista on luotettavuus. Esitetyssä arkkitehtuurissa

päivityksen lähettäjä on vastuussa siitä, että päivitys menee perille. Mikäli yhteyden muodostus

palvelimeen ei onnistu tai PNAC ei muusta syystä pysty päivitystä suorittamaan, se yrittää

uudestaan. Sovelletaan eksponentiaalisesti kasvavaa väliaikaa päivitysyritysten suorittamisen välillä

tiettyyn rajaan asti (esimerkiksi kolme tuntia). Tällöin siis aina epäonnistuneen päivitysyrityksen

jälkeen PNAC kaksinkertaistaa väliajan uudelleenyritysten välillä. Rajan tultua täyteen väliaikaa ei

enää kasvateta. Mitään toissijaisia päivityspalvelimia ei PNAC:n näkökulmasta tarvita, koska

riittävä redundanssi saadaan aikaan asettamalla useita palvelimia [Kuva 6.2]. Inkrementaalisten

päivitysten etu on se, että kaikki palvelimet voivat toimia toisistaan riippumatta. Ne eivät siis olla

missään keskinäisessä riippuvuussuhteessa. Kehittyneet tiedonhallintajärjestelmät sisältävät

useimmiten jonkin synkronointiprotokollan, mutta niiden ongelma on raskas prosessointi ja se, että

palvelimet eivät olisi toisistaan riippumattomia. SCSP [32] on esimerkki synkronointiprotokollasta.

SCSP:n synkronointi perustuu siihen, että tarvittaessa verrataan palvelimien tietosisältöjä toisiinsa,

ja tarvittaessa kopioidaan tietokanta palvelimelta toiselle. On selvää, että tällainen ei toimi tarpeeksi

tehokkaasti suurilla tietokannoilla. Vastuun jättäminen päivityksestä tilaajaa mainostavalle

operaattorille edellyttää sovellustason kuittauksia. TCP [18] varmistaa, että data menee perille,

mutta ei tarjoa sellaisenaan takeita päivityksen onnistumisesta kokonaisuudessaan. Tässä mielessä

relaatiotietokannat ovat optimaalinen ratkaisu.

On huomattava, että kyseisille päivityspalvelimille [Kuva 6.2] lähetetään vain tiedot siirtymisistä.

Niihin ei siis kohdistu varsinaisia puhelunmuodostusvaiheen reititystietokyselyjä.

Päivityspalvelimen tiedoista sen sijaan muodostetaan numeropalvelimien tietosisältö. Kyseessä

ovat siis eri tietokannat.

6.2 Tietokannat

6.2.1 Päivitystietokannat

Tilaajan siirtyessä sen reititysosoite muuttuu. Tärkein tieto siis, joka päivityspalvelimelle

lähetetään, on tilaajanumeron ohella siihen liittyvä reititysnumero (osoite). Jokainen päivitys

identifioidaan tilaajanumerolla (tai etuliitteellä), reititysosoitteella sekä aikaleimalla, joka on

välttämätön, jotta tietyissä ongelmatilanteissa olisi mahdollista selvittää, mikä on uusin

reititysnumero tilaajalle. Viimeiseksi tullut korvaa aina kaikki aiemmin tulleet. Päivitystietokantoja

tyhjennetään jatkuvasti, jotta ne eivät kasvaisi liian suuriksi. Voidaan määritellä, että esimerkiksi

kaikki yli viikon vanhat tietueet hävitetään. Luotettavuussyistä voi olla kuitenkin perusteltua

säilyttää pidemmältä ajalta päivityshistoria. Siirtymisistä lähetetään tieto siis kaikkiin alueen

päivityspalvelimiin. Siirtymisten informaatio menee päivitystietokantaan (UDB)

siirtymistietokannan (PNDB) kautta, jotta mahdolliset vihamieliset osapuolet eivät pääsisi

korruptoimaan numerotietokantoja [Kappale 7.4.5].

Page 55: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

43

6.2.2 Numerotietokannat

Todellisuudessa etenkin IP-verkon puolella saattaa olla siirrettävyysalueella jopa satoja

autonomisia alueita. Mikäli jokin autonominen alue (AS - esimerkiksi yritysverkko) on puhtaasti

asiakassuhteessa [13], se voi kohdistaa reititysnumerokyselyt ylemmän tason palveluntarjoajan

palvelimeen.

ServiceProvider B

NDB

ServiceProvider A

NDB

ServiceProvider C

NDB

AS F AS GAS DAS E

AS H

Regulator

UDB

AS = Autonomous System – autonominen alue

ServiceProvider B

NDB

ServiceProvider A

NDB

ServiceProvider C

NDB

AS F AS GAS DAS E

AS H

Regulator

UDB

ServiceProvider B

NDB

ServiceProvider A

NDB

ServiceProvider C

NDB

AS F AS GAS DAS E

AS H

Regulator

UDB

AS = Autonomous System – autonominen alue

Kuva 6.3. Numerotietokannat

Kuvan 3 asiakkuussuhteiden ei välttämättä tarvitse mukailla reititystason asiakkuussuhteita.

Kuvassa on yksinkertaisuuden vuoksi esitetty regulaattorilla ainoastaan yksi päivityspalvelin

(UDB). Palveluntarjoajat päivittävät numeropalvelimien sisältöä regulaattorin päivityspalvelimeen

saapuneiden muutostietueiden perusteella. Kaikki operaattorit ovat asiakkaita jollekin tai joillekin

päivityspalvelimille. Tilaajien siirtyessä lähetetään tieto jokaiselle päivityspalvelimelle. NA lukee

säännöllisesti UDB-tietokantaa, jolloin tieto siirtymisestä saadaan levitettyä verkon reunoille.

Tilaajaa palveleva puhelinkeskus tai merkinantopalvelinhan (esimerkiksi SIP-proxy IP-verkossa)

reititystietoa tarvitsee puhelua muodostettaessa. Kaikki autonomiset alueet eivät siis tarvitse

lainkaan omaa numeropalvelinta. Tällöin reititystietokysely kohdistetaan asiakassuhteessa olevaa

aluetta palvelevan operaattorin numeropalvelimeen. Esitetty arkkitehtuuri ei aseta mitään

rajoituksia sille, miten numeropalvelimien tietueet muodostetaan. Näin ollen operaattoreille jää

melko vapaat kädet suunnitella reititystietokyselyjä varten tarvittavat tietokannat. Ainoastaan

siirtymistietojen lähetys täytyy olla yhtenäistä.

Page 56: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

44

6.2.3 Vaihtelevan mittaiset numerot

Tietokannan suunnittelua vaikeuttaa jonkin verran vaihteleva tilaajanumeron pituus.

Puhelinnumeroiden etuliitteille voidaan erottaa taulukot. Useimmat luettelonumerot ovat Suomessa

7-10 merkin pituisia mukaan lukien teleliikennealueen tunnus (esim. 9, 5, 19) tai mobiiliverkkojen

operaattoritunnus (esim. 40, 50, 41). Nolla alusta voidaan jättää huomioimatta. Jotkin

erikoisnumerot saattavat olla jopa pidempiä ja toisaalta esimerkiksi vaihteiden numerot voivat olla

vain 3-4 merkin mittaisia + teleliikennealueen tunnus. Numeroavaruuden käyttöaste ensimmäisten

numeroiden osalta on varsin korkea, koska asiakkaan kannalta on aina mukavampi, mitä lyhempi

hänen numeronsa on. Numeroiden epätasainen jakautuminen aiheuttaa sen, että tauluista tulee eri

kokoisia. Ratkaisusta tulee hieman mutkikkaampi, jos taulut jaetaan vaihtelevan mittaisille

etuliitteille, mutta tällöin saadaan suunnilleen yhtä suuria tauluja ja tietokannan suunnittelulle jää

enemmän vapautta. Oli rakenne mikä tahansa, tietokantahaut täytyy olla tehokkaita.

Vaihtelevan mittainen numeron pituus monimutkaistaa tietokantakyselyjä. Tällöin on PSTN:n

puhelun muodostuksessa käytännössä toimittava niin, että järjestelmä odottaa lisää numeroja niin

kauan kunnes reititysosoite on yksikäsitteisesti saatu. PSTN-verkossahan ei B-tilaajan numeroa

voida useinkaan lähettää kokonaisuudessaan (engl. en bloc sending) vaan ainoastaan merkki

kerrallaan (engl. overlap sending)1. Sen sijaan ISDN- ja GSM-verkoissa sekä IP-puheluissa voidaan

B-tilaajan numero lähettää kokonaisuudessaan. GSM-puhelimellahan ei edes pysty lähettämään

numeroita yksi kerrallaan. Tähän on varsin luonnollinen syy: GSM-verkkoon päätyvissä puheluissa

on alun alkaenkin tarvittu reititystiedon haku, koska tilaajan sijainti voi muuttua. Tietokantahaun

suorittaminen olisi huomattavasti vaikeampaa, jos B-tilaajan numero lähetettäisi merkki kerrallaan.

Ongelmaa ei ole, jos käytetään kiinteän mittaisia tilaajanumeroita. Varsinaiseen väylöitykseen usein

riittää muutama ensimmäinen merkki tilaajanumerosta [31]. Jotta järjestelmä voisi jäädä

odottamaan lisää numeroita, täytyy jokaisen saadun numeron jälkeen tehdä uusi tietokantakysely.

Muutenhan ei tiedettäisi tarvitaanko lisää numeroja vai ei. Numeropalvelimen tai

palvelinjärjestelmän tulee siis kestää melkoisen suuri kuormitus. Mikäli puhelinkeskuksen BHCA:n

(Busy Hour Call Attempts)2 maksimi on esimerkiksi yksi miljoona, täytyy sitä palvelevan

numeropalvelimen hallita jopa 10 miljoonaa transaktiota tunnissa johtuen juuri siitä, että puhelua

kohti joudutaan tekemään mahdollisesti useita kyselyjä.

1 Tästä eteenpäin käytetään termejä kertalähetys (en bloc sending) ja peräkkäislähetys (overlap sending)

2 BHCA = puheluyritysten lukumäärä kiireisimmän tunnin aikana

Page 57: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

45

6.3 Puhelun muodostus

6.3.1 Reititysosoitteen haku

Puhelun muodostuksessa oletetaan, että jokainen numero on siirrettävä. Näin ollen kyselyt

suoritetaan jokaiselle puhelulle. Kun reititystietopalvelin (RIS) käynnistetään, se lataa muistiin

kuvauksen tietokannan rakenteesta. Tämä mahdollistaa sen, että tiedetään monenko saadun

numeron jälkeen ensimmäinen kysely täytyy suorittaa. Puhelinkeskuksesta tulee saada merkkejä

RIS:n käyttöön, jotta se pysyisi muodostamaan tietokantakyselyjä. Tässä diplomityössä ei tutkita,

kuinka kommunikointi asiakkaan ja puhelinkeskuksen välillä tapahtuu. RIS on joko integroitu

keskukseen tai jokin etäjärjestelmä (SDP). Sen täytyy joka tapauksessa olla reaaliaikaympäristössä

ja pystyä tukemaan tuhansia puhelunmuodostusprosesseja samanaikaisesti. Kuvassa 6.4 esitetään

puhelunmuodostus soitettaessa numeroon 4512466. Yksinkertaisuuden vuoksi teleliikennealueen

tunnusta ei tässä huomioida. Välttämättä ei kyselyjä tarvitse tehdä niin monta kuin kuvassa

esitetään, sillä tietokantahauista voidaan pidättäytyä, kunnes on vastaanotettu pienimmän

mahdollisen tilaajanumeron pituuden osoittama määrä numeroita.

NDBRISRIS

.

...

GET_DB_STR

(4)

(5)

(1)

QUERY(45,”1”)

RESPONSE

RESPONSE (NULL)

(6)

QUERY(45,”12466”)

RESPONSE(451)

RNUMBER(451)

IAM(4512466)

SETUP

INFO (4)

INFO (5)

INFO (1)

INFO (6)

.

.

NDBRISRIS

.

...

GET_DB_STR

(4)

(5)

(1)

QUERY(45,”1”)

RESPONSE

RESPONSE (NULL)

(6)

QUERY(45,”12466”)

RESPONSE(451)

RNUMBER(451)

IAM(4512466)

SETUP

INFO (4)

INFO (5)

INFO (1)

INFO (6)

.

.

Kuva 6.4. Puhelun muodostus

Harmaalla pohjalla oleva osa on implementoitu tässä diplomityössä. Ensimmäinen kysely

(GET_DB_STR) ei liity yksittäisen puhelun muodostamiseen. Siinä ladataan RIS:n muistiin

myöhemmin esitettävällä tavalla [Kappale 7.3.3] tietokannan rakenne. Rakennekuvauksen

Page 58: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

46

perusteella päätetään käyttäjän lähetettyä numerot 4 ja 5, että tietokantahakua ei tarvitse suorittaa ja

odotetaan lisää numeroja. Kolmannen merkin jälkeen suoritetaan kysely tauluun ”45”, josta haetaan

avaimella ”1”. Kysely ei tässä tapauksessa tuota yksikäsitteistä tulosta, joten tarvitaan edelleen lisää

merkkejä. Tässä tapauksessa tarvitaan B-tilaajan numeron kaikki merkit, ennen kuin yksikäsitteinen

reititysnumero saadaan. Se palautetaan puhelinkeskukseen numeroanalyysiä varten.

Numeroanalyysin jälkeen siirrytään normaaliin puhelunmuodostusmerkinantoon – esimerkiksi

ISUP:iin. Reititysnumeron 451 perusteella IAM (Initial Address Message) osataan lähettää B-

tilaajaa palvelevaan puhelinkeskukseen. Edellä kuvattu pätee tapauksiin, jossa A-tilaaja käyttää

peräkkäislähetystä. Mikäli B-tilaajan käyttää kertalähetystä, proseduuri muuttuu hieman. Tällöin ei

tarvitse tehdä tavallisesti niin monta tietokantakyselyä. Puhelua muodostavasta reititysalueesta

riippuu, ylläpidetäänkö omaa numerotietokantaa vai suoritetaanko kyselyt jonkin isäntäoperaattorin

palvelimeen. Analogia DNS-järjestelmän [Luku 5.1] kanssa rikkoutuu, koska reititysosoite haetaan

aina lähimmältä numeropalvelimelta. Kyseessä ei siis ole DNS:n kaltainen hierarkkinen

palvelinjärjestelmä.

6.3.2 Luettelonumeroiden aggregoinnin vaikutus

Luettelonumeroiden aggregoinnilla saavutetaan se, että operaattorin ei tarvitse levittää tarkkaa

tietoa tilaajista verkkoon. Etenkin tilaajien tarkka lukumäärä voidaan pitää salassa. Tiedonhallinnan

kannalta aggregoinnin vaikutus on kaksijakoinen: Toisaalta se pienentää tietokantojen kokoa, mutta

toisaalta monimutkaistaa merkittävästi tietokantahakuja sekä päivityksiä. Se myös aiheuttaa

merkittävästi ylimääräistä operointia verkossa esimerkiksi soitettaessa numeroon joka ei ole

käytössä. Mikäli olisi tarkasti tiedossa jokainen tilaaja, jo reititystietokyselyn jälkeen tiedettäisiin

onko annettua B-tilaajaa olemassa. Mikäli numerot 451, 452, 454 aggregoidaan yhdeksi tietueeksi

”45”, soitettaessa numeroon 453 luullaan, että kyseinen tilaaja on olemassa. Numeron siirrettävyys

kuitenkin aiheuttaa sen, että aggregoinnin teho pienenee, koska yksittäisiä siirtymisiä on

mainostettava tarkalla luettelonumerolla. Sen sijaan tilaajaryhmien siirtymisissä voidaan

aggregointia edelleen käyttää ainakin joissakin tapauksissa.

Aggregoituja tietueita etsitään tietokannasta pisimmän osuman periaatteella (engl. longest match).

Esimerkissä [Kuva 6.4] haetaan taulusta 45 ehdoilla ”1”, ”12”, ”124”, ”1246” kunnes haku ehdolla

”12466” tuottaa yksikäsitteisen tuloksen. Aggregointi siis vähentää hakujen lukumäärää puhelun

muodostuksessa, mikäli A-tilaaja käyttää peräkkäislähetystä. Esimerkissä kaikki etuliitteen 45

luettelonumerot on sijoitettu samaan taulukkoon. Mikäli etuliitteelle 451 olisi oma taulukko,

tarvitsisi hakuja suorittaa edelleen yksi vähemmän, koska vasta neljän saadun merkin jälkeen

suoritettaisiin ensimmäinen haku.

Sen sijaan kertalähetyksen kannalta aggregointi lisää hakujen lukumäärää. Oletetaan, että etuliitteen

4512 numeroilla on kaikilla sama reititysosoite. Numeroon 4512466 soitettaessa haetaan avaimilla

”12466”, ”1246”, ”124” ja lopulta avaimella ”12”, joka tuottaa tuloksen. Haku on siis aloitettu

pisimmästä päästä. Toinen vaihtoehto olisi aloittaa haku lyhimmästä päästä eli avaimella ”1” kuten

alunperinkin, mutta usein kuitenkin hakuja tulee vähemmän, mikä lähdetään tarkimmasta

Page 59: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

47

mahdollisesta numerosta. Ilman aggregointia yksi haku riittäisi. Jo nyt nähdään, että toteutuksessa

käytettävältä tietokanratkaisulta vaaditaan nopeita vasteaikoja yksinkertaisissa kyselyissä.

Monimutkaisten kyselyjen tehokas hallinta ei ole niin ratkaisevaa.

6.3.3 Vaadittu transaktionopeus ja tietokantakyselyjen kuorman jako

Esitetty arkkitehtuuri on erittäin mukautuva kuormituksen jakoon palvelimien välillä. RIS:llä [Kuva

6.4] voi olla samanaikaisesti yhteys useampaan numeropalvelimeen. Voidaan esimerkiksi sijoittaa

taulut kahteen eri palvelimeen, joihin kyselyjen kuorma jakautuu suhteellisen tasaisesti. Tällöin

voidaan esimerkiksi A-tilaajan lähettämän ensimmäisen tai muutaman ensimmäisen merkin jälkeen

valita numeropalvelin, josta reititystietoa haetaan. Seuraavassa esimerkissä [Kuva 6.5] soitetaan

numeroon 094512466. Ensimmäisen keskukselta saadun merkin jälkeen valitaan oikean

numeropalvelin (DB1). DB1 sisältää kaikki etuliitteen 9 luettelonumerot, eli numerot joiden

ensimmäinen merkki on 9. Näin ollen 9:llä alkavat luettelonumerot eivät aiheuta ollenkaan

kuormitusta toiseen palvelimeen (DB2).

NDB2

RISRIS

.

...

GET_DB_STR

(9)

(4)

(5)

QUERY(945,”1”)

RESPONSE

RESPONSE(NULL)

(6)

QUERY(945,”12466”)

RESPONSE(9451)

RNUMBER(9451)

IAM(94512466)

INFO(9)

NDB1

GET_DB_STR

RESPONSE

(1)

INFO(4)

INFO(5)

INFO(1)

INFO(6)

SETUP

.

.

NDB2

RISRIS

.

...

GET_DB_STR

(9)

(4)

(5)

QUERY(945,”1”)

RESPONSE

RESPONSE(NULL)

(6)

QUERY(945,”12466”)

RESPONSE(9451)

RNUMBER(9451)

IAM(94512466)

INFO(9)

NDB1

GET_DB_STR

RESPONSE

(1)

INFO(4)

INFO(5)

INFO(1)

INFO(6)

SETUP

.

.

Kuva 6.5. Hajautettu numerotietokanta

Page 60: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

48

Ensimmäisen merkin lähetyksen jälkeen prosessi jatkuu kuten aiemmin esitettiin [Kuva 6.4]. Ainoa

haitta on, että RIS joutuu ylläpitämään useampia TCP-yhteyksiä. Näin hajauttamalla voidaan

merkittävästi vähentää yksittäiseen palvelimeen kohdistuvaa kuormaa. Valitusta toteutustekniikasta

riippuu, kuinka hajautettu arkkitehtuuri vaaditaan. Vaadittu transaktionopeus on miljoonan

BHCA:n liikennevolyymillä korkeintaan noin 10 miljoonaa yksinkertaista kyselyä tunnissa, joka ei

ole moderneille järjestelmille ja laitteistoille mitenkään ongelmallinen [22]. Kuvan 3.2 [sivu 19]

perusteella haut eivät ainakaan merkittävästi hidastu taulun koon kasvaessa. Alle 1 ms:n

absoluuttiset hakuajat takaavat hyvin skaalautuvan tiedonhallintajärjestelmän. Järkevillä

ohjelmistovalinnoilla voidaan järjestelmien hankinnasta ja ylläpidosta aiheutuvia kustannuksia

merkittävästi pienentää. Transaktiokyvyllä on aina hintansa.

6.3.4 Numerotietokantojen päivitys

Puhelun muodostuksessa palvelevan reititystietopalvelimen (RIS) kannalta numerotietokannat ovat

siis vain staattisia hakemistoja, joista haetaan reititysinformaatio. Verkossa on erilliset asiakkaat

(NA), jotka suorittavat hakuja päivitystietokantoihin ja päivittävät kyseisen tiedon perusteella

numeropalvelimet. NA:n täytyy siis ymmärtää sekä päivityspalvelimien että numeropalvelimien

tietosisältöjä. Tämä ominaisuus tekee niistä loogisesti ikään kuin yhdyskäytävän erilaisten

tiedonhallintajärjestelmien välillä. Tämä siis mahdollistaa sen, että eri operaattorit voivat käyttää

täysin erilaisia järjestelmiä numeropalvelimissa. Reititystietokyselyt kohdistuvat aina omiin

numeropalvelimiin, jolloin siis ei haittaa, vaikka muualta siihen ei pääse käsiksi. Sen sijaan

päivityspalvelimet on tehtävä yhdenmukaiseksi. NA:lla tulee olla kyky kommunikoida kumpaankin

suuntaan. Mikäli käytetään ODBC-rajapintaa [Luku 4] numeropalvelimiin ja päivityspalvelimiin,

NA saadaan sovitettua standardirajapinnan kautta kumpaankin palvelimeen.

Päivitystietokannassa (UDB) on siirtyneen tilaajan tilaajanumero ja reititysnumero.

Yksinkertaisimmin numerotietokannan päivitys voidaan hoitaa siten, että aluksi etsitään

luettelonumeroa vastaavaa tietuetta. Jos sellainen löytyy, päivitetään reititysnumeroksi uusi

reititysnumero. Jos ei löydy, lisätään uusi tietue. Ongelmana on kuitenkin aggregoidut tietueet.

Tietokannassa voivat olla esimerkiksi etuliitteet 4561, 4562,...,4568 sekä 456. Lisättäessä tietue

4569 jää 456 turhaksi, koska jokainen etuliitteen 456 jälkeinen neljän merkin mittainen etuliite on

käytössä. Jollain tavalla on siis huolehdittava, ettei turhia tietueita jää kasvattamaan tietokannan

kokoa. Päivitysten aiheuttama kuorma numeropalvelimiin on varsin vähäinen. Mikäli vuodessa

tapahtuu esimerkiksi 5 miljoonaa siirtymistä, joudutaan keskimäärin tunnin aikana tekemään noin

570 päivitystä. Toki päivityksen yhteydessäkin voidaan joutua tekemään useampia hakuja, mutta

hakujen lukumäärä harvoin nousee niin suureksi, että reititystiedon haku hidastuisi. Viisi miljoonaa

siirtymistä vuodessa on jo erittäin paljon. Päivitykset eivät kuitenkaan jakaudu tasaisesti, vaan

viikonloppuisin ja yöaikaan tapahtuu varmasti vähemmän siirtymisiä kuin päiväsaikaan, jolloin

täytyy varautua jopa tuhansiin siirtymisiin tunnin aikana.

Page 61: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

49

6.4 Numeron siirrettävyys SCN/IP teknologiarajapinnan yli

6.4.1 Numerointi

Mikäli verkossa on yhteinen numerointi IP-verkon ja televerkon puhelimille, eivät päivitys- tai

numerotietokannat eroa millään tavalla sen mukaan, kumpaa verkkoa ne palvelevat. Reititysosoite

vain on erilainen riippuen siitä, kummalla puolella B-tilaaja on. Päivityksiä tukevatkin näin ollen

parhaiten tekstimuotoiset attribuuttien määrittelyt, koska reititysosoitteen arvon täytyy voida olla

joko IP-osoite tai E.164 reititysnumero. Tekstimuotoiset tietueet ovat tosin hieman muistia

haaskaavia, koska pääasiassa ne sisältävät numeroita. Puhelinnumerot saattavat sisältää joitakin

erikoismerkkejä (esimerkiksi #, * ja +) ja tekstimuotoinen IP-osoite pisteitä. Tekstimuotoista dataa

on kuitenkin helppo käsitellä. Puhelinnumeron esitys binäärisenä aiheuttaisi ongelmia

muodostettaessa pisimmän osuman mukaisia tietokantahakuja. Joku numerotietokannan etuliite

saattaa myös alkaa nollalla, mikä on varsin ongelmallista, jos käytetään kokonaislukuja. Useat

Internetin sovellustason protokollat (HTTP, SIP, RTSP) [8] ovat tekstipohjaisia.

6.4.2 Reititys

IP-osoitetta ei voida käyttää väylöityksessä televerkossa, mutta mikään ei silti estä mainostamasta

IP-osoitteita myös sinne. Jo osoitus siitä, että tilaajan reititysnumero on IP-osoite tietämättä

välttämättä kyseistä IP-osoitetta, antaa paljon informaatiota. Tällöin tiedetään, että puhelu täytyy

välittää yhdyskäytävälle. Miten sopiva yhdyskäytävä sitten löytyy, on aivan eri asia. Jos

jonkinlaista valintaa täytyy suorittaa, B-tilaajan IP-osoitetta voidaan käyttää avaimena. Näin ollen

on hyvinkin perusteltua levittää tietoa IP-osoitteista reititysnumerona myös televerkkoon. Mikäli

CTRIP:iä [5] käytetään, tulee sillä mainostaa nimenomaan yhdyskäytävän kautta saavutettavissa

olevia IP-osoitteita. Tämän mallin mukaisesti CTRIP konvergoituu melkein puhtaaksi BGP:ksi [9].

BGP:tä voisi käyttää sellaisenaan, mikäli sillä voisi mainostaa E.164-formaatin mukaista osoitetta

saavutettavana instanssina IP-osoitteen sijaan. Tällöinhän on käytössä kaikki, mitä verkkojen

yhteistoiminta ja numeron siirrettävyys vaatii: Siirrettävyyttä varten on numeropalvelu, jossa

E.164-formaatin mukainen luettelonumero muunnetaan reititysosoitteeksi. Jos havaitaan

soitettaessa IP-verkosta, että reititysnumero on E.164-formaatin mukainen, haetaan TRIP:n

muodostamasta tietokannasta sopiva IP/SCN-yhdyskäytävä käyttämällä saatua reititysnumeroa

avaimena. Jos havaitaan soitettaessa televerkosta, että reititysnumero on IP-osoite, haetaan

CTRIP:n muodostamasta tietokannasta sopiva SCN/IP-yhdyskäytävä käyttämällä saatua

reititysnumeroa avaimena. Mikäli teknologiarajapintaa ei tarvitse ylittää, ei yhdyskäytävähakua

luonnollisesti tarvita lainkaan. Tällöin kaikki TRIP:iin ja CTRIP:iin liittyvät

skaalautuvuusongelmat olisi ratkaistu. TRIP levittäisi saavutettavuustietoa yhdyskäytävien kautta

saavutettavista E.164 reititysnumeroista ja CTRIP yhdyskäytävien kautta saavutettavista IP-

osoitteista. Aggregointi näille onnistuu BGP:n tavoin. Nähtäväksi jää, tarvitaanko ylipäätänsä

CTRIP:iä tai edes TRIP:iä, vai valitaanko tarvittaessa sopiva yhdyskäytävä staattisesti. Karkeasti

ottaenhan tavoite on vain päästä IP-verkosta televerkkoon ja televerkosta IP-verkkoon. Ainakin

TRIP:n ja CTRIP:n kaltaiselle protokollalle tulee jättää optio.

Page 62: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

50

Numeron siirrettävyys TRIP:llä [4] aiheuttaisi paljon turhaa prosessointia. Kuten jo todettiin,

tilaaja- tai tilaajaryhmäkohtaiset reititysosoitteet tulee joka tapauksessa olla saatavilla verkon

reunoilla, kun puhelua muodostetaan. Miksi levittää sitä monen solmun kautta soveltaen

politiikkoja, jos se kerran joka tapauksessa tulee levittää kaikkien saataville? Keskitetty

arkkitehtuuri palvelee paljon paremmin sellaista palvelua. Arkkitehtuurissa TRIP on siis

käytännössä melko staattinen hakemistopalvelu, josta haetaan yhdyskäytävän osoite IP-verkosta

televerkkoon päätyville puheluille. Staattinen se on siksi, että käytännössä päivityksiä tulee harvoin,

koska mainostetaan televerkon topologiaan perustuvia luettelonumeroita, jotka toimivat siis

reititysnumeroina jatkettaessa puhelun reititystä yhdyskäytävästä eteenpäin. TRIP-palvelimet

(Location Server) toimivat BGP:n tavoin mainostaen etäisyyttä kuhunkin yhdyskäytävään ja

numeroita, jotka kyseisen yhdyskäytävän kautta voidaan saavuttaa. Eräs hyvin merkittävä ero

BGP:n ja TRIP:n välillä on kuitenkin se, että TRIP on sovellustason reititysprotokolla, kun taas

BGP toimii verkkokerroksella. Normaalisti TRIP-informaatioon tulee muutoksia silloin, kun

verkkoon kytketään uusia yhdyskäytäviä tai yhdyskäytävän vaikutuksessa olevien operaattoreiden

keskinäiset suhteet muuttuvat. Toisaalta jonkin palvelimen vikaantuessa joudutaan TRIP:n

reititystauluja laskemaan uudelleen. TRIP:iä tarvitaan siis silloin, kun IP-verkosta soitetaan

televerkkoon päätyvä puhelu. Haettaessa TRIP-tietokannasta E.164-avaimella saadaan sopiva

yhdyskäytävä tai joukko sopivia yhdyskäytäviä, joista valitaan yksi sisäisen politiikan mukaisesti.

TRIP-tietokanta voi olla samalla tai eri palvelimella numeropalvelimen kanssa.

6.4.3 Puhelun muodostus

Kuvassa 6.6 esitetään esimerkkitapaus, jossa muodostetaan puhelu televerkosta IP-verkkoon. On

oletettu, että televerkossa käytetään DSS1-signalointia pääsyverkossa ja ISUP-signalointia

keskusten välillä. IP-verkossa käytetään SIP-signalointia [8]. Numerointiyhdyskäytävä-nimi

(NGW) on lainattu diplomityöstä [5]. Se on jossain määrin harhaanjohtava, koska mallissa TRIP ja

CTRIP eivät kommunikoi. NGW on siis oikeastaan edellisen kappaleen TRIP/CTRIP-

rekonstruktion myötä vain TRIP-asiakas ja CTRIP-asiakas. NGW toimii saavutettavuustietojen

lähtöpisteenä. TRIP-asiakas mainostaa televerkosta IP-verkkoon puhelinnumeroiden etuliitteitä,

jotka osoittavat mitä reititysosoitteita on saavutettavissa NGW:n edustaman SGW/MGW:n (IP-

osoite) kautta milläkin etäisyydellä. CTRIP-asiakas mainostaa siis esimerkiksi BGP:llä

muodostettua IP-osoitteiden saavutettavuustietoa edustamansa SGW/MGW:n (E.164 numero)

kautta. Toistettakoon edelleen, että numeron siirrettävyys ei vaikuta TRIP:n eikä CTRIP:n tietoihin.

Yksinkertaisuuden vuoksi regulaattori ja päivityspalvelin (UDB) on jätetty kuvasta pois. UDB ei

suoranaisesti liity puhelun muodostukseen.

Mikäli kaikki B-tilaajan numeron merkit joudutaan analysoimaan reititysnumerokyselyä varten,

ISUP:n SAM-viestiä (Subsequent Address Message) ei enää tarvita edes muodostettaessa puhelu

peräkkäislähetyksellä.

Page 63: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

51

Kuva 6.6. Esimerkki puhelun muodostuksesta

Page 64: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

52

7 Tietokantojen toteutus

Tässä luvussa esitetään numerotietokantojen [Kappale 6.2.2] sekä päivitystietokantojen [Kappale

6.2.1] toteutus. Ratkaisu pohjautuu SQL-tietokantoihin. SQL-tietokannat voidaan suunnitella

käytettävästä tietokantaohjelmistoista riippumattomasti. Eri valmistajien relaatiotietokantojen

tehokkuus vaihtelee kuitenkin merkittävästi [Taulukko 3 sivulla 73]. Relaatiotietokantojen

tehokkuutta arvioitaessa tulee sitä analysoida nimenomaan lopullisen sovelluksen näkökulmasta.

Toinen voi olla tietyissä tapauksissa tehokkaampi kuin toinen, mutta vaihdettaessa sovellusta

tilanne saattaa muuttua. Edellisessä luvussa todettiin, että tarvitaan nopeita yksinkertaisia hakuja.

7.1 Tietokantasuunnittelu

7.1.1 Mallinnus

Tietokantasuunnittelu on monivaiheinen ja systemaattinen prosessi [21]. Se sisältää paljon

muutakin kuin SQL-kyselyjen kirjoittamisen. Aluksi tehdään normaalisti kattava sanallinen kuvaus

järjestelmän toiminnasta: Mitä palvelua järjestelmä tukee ja mitä tietoa tarvitaan palvelun

aikaansaamiseksi? Vielä siinä vaiheessa ei puututa mihinkään tiedon rakennetta koskeviin

seikkoihin. Seuraava vaihe on tietokannan mallintaminen abstraktilla tasolla. Tätä varten on

useampia vaihtoehtoja. Perinteisesti on käytetty ER-mallia, joka on UML:n sukuinen

mallinnusmenetelmä erityisesti tietokantasuunnittelua varten. Nykyisin erityisesti ORDBMS-

tietokantojen mallintamisessa käytetään ODL-kuvausta, joka on siis kieliriippumaton oliopohjainen

mallinnusmenetelmä. Se soveltuu silti myös perinteisten relaatiotietokantojen mallinnukseen. Tässä

vaiheessa määritetään yksilöjoukot (ER) tai luokat (ODL) sekä niiden väliset suhteet ja attribuutit.

Myös ensisijaisavaimen eheysrajoitteet esitetään jo tällä abstraktiotasolla.

ER- tai ODL-kaaviot muutetaan seuraavassa vaiheessa relaatiomallin [Kappale 3.3] mukaiseksi.

Muunnokselle on erittäin selkeät säännöt [20, 21], jonka mukaan toimittaessa saadaan relaatiot

muodostettua oikein. Tällöin usein tietokantaan syntyy tarpeetonta toisteisuutta [Kappale 3.2.6],

jonka poistaminen on eräs keskeisimmistä käytännön tietokantasuunnittelun toimenpiteistä.

Järjestelmän tehokkuus saattaa olla niin keskeinen tekijä, että jonkin verran toisteisuutta kannattaa

hyväksyä tietokannassa. Relaatiomallissa esitetään kaikki relaatioiden nimet, attribuutit,

ensisijaisavaimet sekä viiteavaimet (engl. foreign key), mutta esimerkiksi attribuuttien tyypitys ei

kuulu tähän vaiheeseen erityisesti siitä syystä, että relaatiomalli säilyisi mahdollisimman

siirrettävänä. Voihan olla, että kaikki tietokantajärjestelmät eivät tue samoja tietotyyppejä.

7.1.2 Toteutus

Viimeisessä eli toteutusvaiheessa luodaan tietokanta relaatiomallin pohjalta SQL-kieltä käyttäen

(CREATE TABLE). Mikäli lähdetään liikkeelle tilanteesta, jossa koko infrastruktuuri kootaan

aivan tyhjästä, joudutaan tekemään myös valinta eri käyttöympäristöjen välillä. Varmennuksen

tulee olla sopusoinnussa sen kanssa, kuinka kriittisestä datasta on kysymys. Kriittisissä palveluissa

Page 65: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

53

tietokanta hajautetaan fyysisesti eri palvelimiin siten, että yhden palvelimen vikaantuminen ei

aiheuta ainakaan koko palvelun estymistä. Yhä tärkeämpää on myös tietoturvallisuudesta

huolehtiminen. Usein kuitenkin ainakin fyysinen infrastruktuuri on jo valmiina, joten valinta

joudutaan tekemään ainoastaan ohjelmistojen välillä. Kaupallisille ohjelmistoille on nykyisin

vaihtoehtoja vapaan lähdekoodin tietokantaohjelmistoissa. Valinta riippuu tietenkin siitä, mitä

ollaan tekemässä. Kaupalliset ohjelmistot ovat toiminnoiltaan laajempia ja mukautuvampia, mutta

yksinkertaisemmissa palveluissa riittävät SQL:n perustoiminnot, jolloin vapaan lähdekoodin

tietokannat voivat olla paras vaihtoehto.

Relaatioita muodostettaessa attribuutit tyypitetään ja avainrajoitteet muodostetaan relaatiomallin

mukaan. Myös muut eheysrajoitteet (esimerkiksi laukaisimet) muodostetaan toteutusvaiheessa.

Kaikille rajoitteille ei ole standardoitua mallia ER-kaavioissa eikä edes relaatiomallissa.

Toteutusvaiheessa kirjoitetaan SQL-kyselyt, joilla tietokantahaut suoritetaan ja tietokantaa

päivitetään. Kyselyt suoritetaan jonkin rajapinnan (API) kautta. Suosituin tällainen API on juuri

ODBC, joka on saatavilla useisiin ohjelmointikieliin. Lähes poikkeuksetta tietokantakyselyissä

tarvitaan käyttäjän määrittelemät arvot attribuuteille, joten sovellusohjelmissa on oltava logiikka,

jolla SQL-kyselyjä voidaan luoda dynaamisesti. Hallintatoimenpiteitä varten ohjelmistoissa on

usein jokin interaktiivinen terminaali, jolla tietokantaa voi käsitellä syöttämällä manuaalisesti SQL-

kyselyjä.

ER-kaavion muodostaminen on välttämätöntä mutkikkaissa palveluissa, jotta yksilöiden väliset

suhteet näkyisivät mahdollisimman selkeästi ja toisaalta koko järjestelmä pysyisi helposti

ymmärrettävänä. Jos yksilöjoukkoja ja suhteita on paljon, kaavion osia voidaan yhdistää

korkeammalle abstraktiotasolle. Korkeimmalla abstraktiotasolla tulee olla aina riittävän vähän

yksilöjoukkoja ja suhteita, jotta järjestelmä olisi helposti ymmärrettävässä muodossa. Usein

korkeimmalla abstraktiotasolla tulee koko järjestelmän kuvauksen mahtua selkeästi yhdellä A4-

paperiarkille, jotta varmasti kaavio pysyisi ymmärrettävänä. Tässä diplomityössä kuitenkin

tietokannat ovat kokonaisuudessaan niin yksinkertaisia, että sanallisesta kuvauksesta hypätään

suoraan relaatiomalliin eli ER-kaavioita tai ODL-kuvauksia ei esitetä.

7.2 Käytetyt ohjelmistot

7.2.1 Relaatiotietokannat vs. hakemistot

Relaatiotietokantojen ja hakemistojen suurin ero on se, että hakemistot ovat luonteeltaan paljon

staattisempia. LDAP:n [33, 34] kaltaisten hakemistojen päivitykset ovat hitaita ja vaativat raskasta

prosessointia. Tiedon tallennusrakenne on hakemistoissa usein paljon monimutkaisempi kuin

relaatiotietokannoissa. Hakemistot ovat usein hajautettuja hierarkkisia järjestelmiä, joilla

saavutetaan erittäin skaalautuvia hakurakenteita. Relaatiotietokannat ovat paljon geneerisempiä.

Niissä datan prosessointiin käytetään standardoitua SQL-kieltä. Useinkaan ainakaan vapaan

lähdekoodin ohjelmistot eivät ole täysin standardin [35] mukaisia, vaan valmistajakohtaisesti

kehiteltyjä murteita. Joihinkin sisältyy erittäin laaja joukko myös epästandardeja laajennuksia ja

Page 66: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

54

useimpiin (esim. MySQL) sisältyy laaja joukko mahdollisuuksia tietoturvan toteuttamiseksi, joita ei

ANSI:n SQL-standardi [35] määrittele. Yksinkertaisimmissa on vain tietyt perusfunktiot (mSQL).

Ne eivät kata standardia kokonaisuudessaan.

Relaatiotietokantojen päivittäminen lähettämällä SQL-kielisiä kyselyjä on paljon kevyempi

operaatio kuin hakemistojen päivittäminen. Numero- ja päivitystietokannat vaativat jonkin verran

myös päivityksiä, joten relaatiotietokannat ovat myös tässä mielessä sopivampia kuin hakemistot.

Relaatiotietokannat tarjoavat myös paremmat välineet tietokantojen viite-eheyden säilyttämiseen.

Valitettavasti vain eri ohjelmistovalmistajien tuotteen eivät ole keskenään yhteensopivia. Näin ollen

arkkitehtuurissa joudutaan joko spesifioimaan tuote, jota toteutuksessa käytetään tai määrittämään

jokin standardoitu rajapinta, jonka päälle numeron siirrettävyyteen liittyvät tietokantaoperaatiot

ohjelmoidaan (ODBC/JDBC).

7.2.2 MySQL

Tätä diplomityötä varten olen testannut erityisesti MySQL:n [19] tehokkuutta. MySQL on

ruotsalainen yritys, jolta on saatavilla laadukas tietokantaohjelmisto ilmaiseksi ainakin yliopistojen

ja muiden tutkimuslaitosten käyttöön (GPL-lisenssi). Se on siis vapaasti modifioitavissa ja

saatavilla moniin eri käyttöympäristöihin (Windows NT/2000, Sun Solaris, Linux).

Suorituskyvyltään se tuntuu olevan ylivertainen ainakin muihin julkisen lähdekoodin

tietokantajärjestelmiin verrattuna [Taulukko 3 sivulla 73]. Kaupallisiin tuotteisiin verrattuna

MySQL on paljon suppeampi, mutta tehokkuus yksinkertaisten kyselyjen käsittelyssä onkin nyt

ratkaisevampaa. Proseduraaliset haut [Kappale 3.2.3] eivät ole mahdollisia, mutta yksinkertaisissa

kyselyissä ei niistä saatava etu olekaan kovin suuri. MySQL on myös osoittautunut käytössä erittäin

stabiiliksi. Tuotekehityksessä pääpaino on tehokkuudessa. Uusiin ohjelmistoversioihin otetaan vain

sellaisia laajennuksia, jotka eivät laske tehokkuutta [19]. Moniin kaupallisiin ohjelmistoihin

verrattuna MySQL tarjoaa myös vähemmän eheysrajoitteita, joten viite-eheyden säilyttäminen jää

enemmän sovellusohjelmoijan vastuulle. Eheysrajoittimien käyttö (esim. globaalit rajoitteet) voi

olla merkittävästi etenkin päivityksiä hidastavaa.

7.2.3 Replikointi

Useimmat tiedonhallintajärjestelmät MySQL mukaan lukien sisältävät jonkinlaisen replikoinnin.

MySQL:ssä palvelu perustuu binäärilogiin, jonka avulla tietokannat synkronoituvat [19].

Page 67: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

55

79 INSERT(:::)

151 UPDATE(...)

233 UPDATE(...)

277 INSERT(...)

299 LOAD DATA(...)

393 DELETE(...)

412 CREATE TABLE(...)

477 OPTIMIZE(...)

OFFSET OPERATION

79 INSERT(:::)

151 UPDATE(...)

233 UPDATE(...)

277 INSERT(...)

299 LOAD DATA(...)

393 DELETE(...)

412 CREATE TABLE(...)

477 OPTIMIZE(...)

OFFSET OPERATION

Kuva 7.1 Esimerkki MySQL:n binäärilogi

Binäärilogi [Kuva 7.1] sisältää osoittimen (OFFSET) kohtaan, jonka jälkeiset päivitykset tulee ottaa

huomioon synkronoinnissa. Mestaripalvelin (engl. master) ylläpitää binäärilogia, josta orjat (engl.

slave) hakevat päivitykset. Kun alkusynkronointi (LOAD DATA FROM MASTER) on suoritettu,

kaikki mestaripalvelimeen kohdistuvat päivitykset menevät orjille käytännössä reaaliajassa.

Menetelmä on siinä mielessä hyvä, että joskus menneisyydessä vallinneen tietokannan tilan avulla

(varmuuskopio) voidaan osoitinta käyttämällä tietokannan tila palauttaa ajan tasalle, edellyttäen

ettei logia ole tyhjennetty. Suurista tietokannoista ei pysty varmuuskopioita ottamaan kovin useasti.

Kun logi tyhjennetään, tulee jokaisen orjan tallentaa kuvaus tietokannastaan, joka voidaan palauttaa

vikaantumistilanteessa, ja tietokanta saadaan tämän jälkeen ajan tasalle lukemalla vain uusi logi.

Koko tietokantaa ei tarvitse näin ollen monistaa. Menetelmällä voidaan rakentaa puumainen

palvelinarkkitehtuuri, jossa jotkin palvelimet voivat olla sekä mestareita että orjia. Ongelma on

kuitenkin se, että samalla hetkellä orjalla ei voi olla kuin yksi mestari. Toki sitä voidaan muuttaa

(CHANGE MASTER TO). Suurin heikkous on se, että toistaiseksi palvelimet eivät suorita mitään

mestarin valintaprosessia vaan se konfiguroidaan staattisesti, joten mestarin vikaantuessa mikään

päivitys ei onnistu. Menetelmä on kuitenkin erittäin käyttökelpoinen varatietokantojen ylläpidossa

sekä tietokantahakujen kuorman jaossa.

Page 68: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

56

7.3 Numerotietokanta

Regulator

NDB

Service Provider X

AVCC

UDB

PNDB

PNAC

NA

RIS AVCC Advertisement Validity Checking Client

PNDB Ported Number Database

UDB Update Database

PNAC Ported Number Advertising Client

RIS Routing Information Server

NA Numbering Agent

NDB Numbering Database

AVCC Siirtymistiedon tarkistin

PNDB Siirtymistietokanta

UDB Päivitystietokanta

PNAC Siirtymistiedon levittäjä

RIS Reititystietopalvelin

NA Numerointiagentti

NDB Numerotietokanta

Regulator

NDB

Service Provider X

AVCC

UDB

PNDB

PNAC

NA

RIS AVCC Advertisement Validity Checking Client

PNDB Ported Number Database

UDB Update Database

PNAC Ported Number Advertising Client

RIS Routing Information Server

NA Numbering Agent

NDB Numbering Database

AVCC Advertisement Validity Checking Client

PNDB Ported Number Database

UDB Update Database

PNAC Ported Number Advertising Client

RIS Routing Information Server

NA Numbering Agent

NDB Numbering Database

AVCC Siirtymistiedon tarkistin

PNDB Siirtymistietokanta

UDB Päivitystietokanta

PNAC Siirtymistiedon levittäjä

RIS Reititystietopalvelin

NA Numerointiagentti

NDB Numerotietokanta

AVCC Siirtymistiedon tarkistin

PNDB Siirtymistietokanta

UDB Päivitystietokanta

PNAC Siirtymistiedon levittäjä

RIS Reititystietopalvelin

NA Numerointiagentti

NDB Numerotietokanta

Kuva 7.2. Numerotietokannan elementit

7.3.1 Sanallinen kuvaus

Numerotietokannan tehtävänä on tuottaa reititysosoitteen hakupalvelu, joka palvelee

puhelunmuodostuksessa sekä piirikytkentäistä verkkoa että IP-verkkoa. Jokainen tilaaja ei ole

tietokannassa edustettuna täydellisellä luettelonumerolla, vaan kokonaista tilaajajoukkoa edustaa

jokin tilaajanumeron etuliite. Analogisen puhelinverkon tilaajat eivät pysty lähettämään B-tilaajan

numeroa yhdessä kokonaisena, vaan ainoastaan merkki kerrallaan. Näin ollen järjestelmän tulee

pystyä analysoimaan numeroita merkki kerrallaan, ja vastaanottamaan puhelukohtaisesti niin monta

merkkiä, että yksikäsitteinen reititysosoite saadaan. Vaadittu palvelulogiikka ohjelmoidaan

tiedonhallintajärjestelmän asiakaskirjastoa hyväksi käyttäen RIS:iin siten, että NDB suorittaa vain

yksittäisiä suhteellisen yksinkertaisia hakuja. Tietokanta on kaiken kaikkiaan hyvin yksinkertainen:

Luettelonumero tai luettelonumeron etuliite kuvautuu reititysosoitteeksi.

7.3.2 Relaatiomalli

Jokaisella luettelonumerolla tai sen etuliitteellä on yksikäsitteinen reititysosoite, joten kaikessa

yksinkertaisuudessaan relaatiomallin mukainen kuvaus on seuraava:

Subscribers(D_NUMBER, R_DATA_ID )

R_Data(R_DATA_ID, R_NUMBER)

Jatkuva viiva osoittaa, että attribuutti D_NUMBER toimii ensisijaisavaimena. Katkonainen viiva

attribuutin R_DATA_ID alla osoittaa sen olevan viiteavain. Tässä tapauksessa se on viiteavain

relaatioon R_Data, jossa kyseinen attribuutti on merkitty ensisijaisavaimeksi. Varsinainen

Page 69: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

57

reititystieto on kyseisen relaation attribuutti R_NUMBER, joka on siis haettu reititysosoite. Jako on

tehty kahdeksi relaatioksi toisteisuuden välttämiseksi. Reititysosoitteita on paljon vähemmän kuin

luettelonumeroita, joten toisteisuuden välttämiseksi otetaan käyttöön uusi attribuutti R_DATA_ID,

joka voidaan toteutusvaiheessa määrittää esimerkiksi kahden tavun etumerkittömäksi

kokonaisluvuksi. Se vie täten muistia vain kaksi tavua, kun esimerkiksi IP-osoite (IPv4) veisi

tekstimuotoisena 7-15 tavua. On muistinkäytön kannalta edullisempaa, että usein toistuvia arvoja

saava attribuutti määritellään mahdollisimman vähän muistia vieväksi. Itse relaatiomallihan jättää

siis attribuuttien tyypityksen avoimeksi. R_NUMBER määritetään myös ainakin relaatiomallissa

viiteavaimeksi, koska reititysnumeron perusteella saatetaan hakea vielä yhdyskäytävä ja

mahdollisesti reitti. Kyseisen relaation tietosisältö voidaan siis koota esimerkiksi TRIP-

protokollalla.

7.3.3 Toteutus

Aivan edellä kuvatun yksinkertainen tietokannasta ei kuitenkaan tule. Tietokantaan kohdistuu

erittäin suuri määrä hakuja sekä jonkin verran päivityksiä. Ei ole kaikkein tehokkain ratkaisu

sijoittaa dataa kokonaisuudessaan (lähes) samaan relaatioon. Etenkään tiedon hajauttaminen

fyysisesti eri palvelimille on ongelmallisempaa, mikäli luodaan luettelonumeroille vain yksi

relaatio. Tässä tapauksessa hajauttaminen on hyvin helppoa, koska luettelonumerot eivät ole

keskinäisessä suhteessa. Tässä ratkaisussa hajautetaan tietokanta siten, että eri etuliitteiden

perusteella jaetaan luettelonumerot eri tauluihin, eli käyttäjän lähettämien ensimmäisten merkkien

perusteella määritetään relaatio, josta reititystietoa haetaan. Tällöin sovellusohjelmilla (RIS, NA)

tulee olla käytössään kuvaus siitä, mitä etuliitteitä (tauluja) tietokannassa on. Kun on saatu

riittävästi merkkejä, voidaan määrittää taulu, johon haut kohdistetaan. Tietokannan kuvaus

muodostetaan hakemalla listaus kaikista numerotietokannan relaatioista. Jokaisesta nimestä

skannataan kokonaisluku, joka ilmaisee siis etuliitteen. Kuvausta varten RIS:n muistissa on taulu,

jonka koko on yhtä suuri kuin suurin taulujen nimistä skannattu arvo. Jokaisen löydetyn etuliitteen

osoittamalle paikalle merkitään, että kyseinen relaatio löytyy tietokannasta. Muille paikoille

merkitään, että indeksin osoittamaa etuliitettä ei ole. Puhelua muodostettaessa toimitaan kuten

kappaleessa 6.3.1 esitettiin [Kuva 6.4]. Seuraavassa on esimerkkinä kuvaus yksinkertaisesta

tietokannasta, jossa on relaatiot etuliitteille 3, 4, 6, 7, 8, 9, 10, 12, 13, 15, 16.

0 0 0 1 1 0 1 1 1 0 1 11 1 0 1 10 0 0 1 1 0 1 1 1 0 1 11 1 0 1 1

Kuva 7.3. Numerotietokannan kuvaus

Edellä esitetyn esimerkin mukaisesti soitettaessa numeroon 3774561 haetaan reititystietoa

relaatiosta 3. Soitettaessa numeroon 167726 haetaan relaatiosta 16. Soitettaessa numeroon

2XXXXX se todetaan numeroksi, joka ei ole käytössä. Lopulliset relaatiot näyttävät seuraavilta:

Subscribers3(D_NUMBER, R_DATA_ID )

Subscribers4(D_NUMBER, R_DATA_ID )

Page 70: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

58

.

.

Subscribers16(D_NUMBER, R_DATA_ID )

R_Data(R_DATA_ID, R_NUMBER)

Sellainen rajoitus etuliitteiden jaolle joudutaan asettamaan, että etuliitteen pituus täytyy olla

pienempi kuin lyhin mahdollinen luettelonumeron pituus. Eli jos luettelonumeron minimipituus on

neljä merkkiä, ei etuliitteen pituus voi olla kolmea merkkiä suurempi.

7.3.4 Hakuoperaatio pisimmän osuman mukaan (peräkkäislähetys)

SQL-kyselyt, jolla reititystietoa haetaan soitettaessa numeroon 3774561 pisimmän osuman

periaatteella [Kuva 7.5] näyttävät seuraavilta. Oletetaan, että yksikäsitteinen reititysnumero löytyy

viiden merkin jälkeen1:

SELECT R_DATA_ID FROM Subscribers3 WHERE D_NUMBER LIKE ‘7_%’ LIMIT 1

SELECT R_DATA_ID FROM Subscribers3 WHERE D_NUMBER LIKE ‘77_%’ LIMIT 1

SELECT R_DATA_ID FROM Subscribers3 WHERE D_NUMBER LIKE ‘774_%’ LIMIT 1

SELECT R_DATA_ID FROM Subscribers3 WHERE D_NUMBER LIKE ‘7745_%’ LIMIT 1

SQL tarjoaisi varmasti useampia mahdollisuuksia suorittaa kyseiset haut. LIMIT 1 tarkoittaa sitä,

että haetaan maksimissaan yksi rivi. Yllä olevien hakujen tarkoitus on ainoastaan ilmaista onko jo

saatu tarpeeksi merkkejä avainta varten. Mikäli kysely palauttaa yhden rivin, todetaan että tarvitaan

lisää merkkejä ja uusi haku, koska rivi merkitsee, että saatu etuliite ei ollut yksikäsitteinen. Mikäli

kysely palauttaa nolla riviä, etuliite todetaan yksikäsitteiseksi, eikä lisää merkkejä enää odoteta.

Nolla riviä tuloksessa merkitsee, että yksikäsitteinen viiteavain reititystietoon löytyy eksplisiittisellä

haulla. Jokaisen yllä esitetyn kyselyn kohdalla täytyy suorittaa myös eksplisiittisiä hakuja:

SELECT R_DATA_ID FROM Subscribers3 WHERE D_NUMBER = ‘7’

SELECT R_DATA_ID FROM Subscribers3 WHERE D_NUMBER = ‘77’

SELECT R_DATA_ID FROM Subscribers3 WHERE D_NUMBER = ‘774’

SELECT R_DATA_ID FROM Subscribers3 WHERE D_NUMBER = ‘7745’

1 Algoritmi ottaa huomioon, että yksikään kokonainen luettelonumero ei voi olla toisen etuliite, vaikka

luettelonumerot voivatkin olla eri mittaisia.

Page 71: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

59

Haluttu reititystieto saadaan kaikissa tilanteissa eksplisiittisellä haulla pisimmän osuman

periaatteella tuloksesta, jonka antaa mahdollisimman pitkä numerojono. On huomattava, että

hakuehto ‘7745_%’ hyväksyy kaikki numerot, joiden etuliitteenä on 77451, 77452,…, 77459 mutta

ei numeroa 7745. Ainakin yksi etuliitteillä 7741, 7742…, 7749 alkavista avaimista löytyy, koska

hakuehto ’774_%’ palauttaa ainakin yhden rivin. Sen perusteella ei kuitenkaan vielä voida tietää,

onko pisin osuva etuliite löytynyt. Koska ehdolla ’7745_%’ ei löydy tietuetta, hakua ei tarvitse enää

tarkentaa.

Peräkkäislähetyksessä siis A-tilaajalta odotetaan lisää merkkejä niin kauan kunnes yksikäsitteinen

hakuavain on saatu muodostettua. Hakuja ei käytännössä tarvita näin paljon, koska hauista voidaan

pidättäytyä niin kauan kunnes on saatu lyhintä mahdollista numeron pituutta vastaava määrä

merkkejä. Tarkastellaan vielä kolmen erilaisen esimerkin valossa, miten reititystiedon haku etenee.

Tarkastellaan yksinkertaisuuden vuoksi vain yhtä relaatiota, joka on etuliitteille 945. Se koostuu

seuraavista tietueista:

Kuva 7.4. Esimerkkitietokanta

Käsitellään erikseen tapaukset, joissa soitetaan numeroihin 9417664, 9458002, 9458005, 9459996.

Kuvassa 7.5 esitetään proseduuri, joka suorittaa reititysnumeron haun, kun B-tilaajan numero

saadaan peräkkäislähetyksellä. Operaatio ’GET DIGIT’ on rajapinta RIS:stä ulos, eli sen kautta

otetaan vastaan A-tilaajan lähettämiä merkkejä ulkoisilta järjestelmiltä mitä ne sitten ovatkaan

(SCP, SDP, SIP-proxy, LS etc.).

Page 72: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

60

LEN(P)+LEN(K)< MIN(NUMLEN)

GET DIGIT

APPEND TO KEY

NO

IDLE

SELECT TABLE

GET DIGIT

APPEND TO PREFIX

TABLE SELECTED

YES

NO

REQUEST

PREFIXFOUND

LEN(P) =MAX(PLEN)

QUERY

EXECUTE QUERIES

KEY FOUND RDATA_ID=RESULT

END REACHEDGET DIGIT

APPEND TO KEY

NO

YES

NO

RDATA_ID =NULL

YES

NOT FOUNDFOUND

NO YES

YES

NO

YES

LEN(P)+LEN(K)< MIN(NUMLEN)

GET DIGIT

APPEND TO KEY

NO

IDLE

SELECT TABLE

GET DIGIT

APPEND TO PREFIX

TABLE SELECTED

YES

NO

REQUEST

PREFIXFOUND

LEN(P) =MAX(PLEN)

QUERY

EXECUTE QUERIES

KEY FOUND RDATA_ID=RESULT

END REACHEDGET DIGIT

APPEND TO KEY

NO

YES

NO

RDATA_ID =NULL

YES

NOT FOUNDFOUND

NO YES

YES

NO

YES

Kuva 7.5. Reititystiedon haku (peräkkäislähetys)

RIS päivittää muuttujien PREFIX, KEY sekä RDATA_ID arvoja sen perusteella kuinka monta

merkkiä se on vastaanottanut. Taulukkoon 1 on merkitty myös tilasiirtymät. Määritellään etuliitteen

(taulun nimestä) maksimipituudeksi kolme merkkiä sekä luettelonumeron (luettelonumeron etuliite)

minimipituudeksi neljä merkkiä.

Page 73: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

61

Merkki Lähtötila Siirtymätila Prefix Key Rdata_id9417664

NULL IDLE SELECT TABLE NULL NULL NULL9 SELECT TABLE SELECT TABLE "9" NULL NULL4 SELECT TABLE SELECT TABLE "94" NULL NULL1 SELECT TABLE NOT FOUND "941" NULL NULL9458002

NULL IDLE SELECT TABLE NULL NULL NULL9 SELECT TABLE SELECT TABLE "9" NULL NULL4 SELECT TABLE SELECT TABLE "94" NULL NULL5 SELECT TABLE TABLE SELECTED "945" NULL NULL8 TABLE SELECTED QUERY "945" "8" 99280 QUERY QUERY "945" "80" 99280 QUERY QUERY "945" "800" 99282 QUERY FOUND "945" "8002" 98839458005

NULL IDLE SELECT TABLE NULL NULL NULL9 SELECT TABLE SELECT TABLE "9" NULL NULL4 SELECT TABLE SELECT TABLE "94" NULL NULL5 SELECT TABLE TABLE SELECTED "945" NULL NULL8 TABLE SELECTED QUERY "945" "8" 99280 QUERY QUERY "945" "80" 99280 QUERY QUERY "945" "800" 99285 QUERY FOUND "945" "8005" 99289459996

NULL IDLE SELECT TABLE NULL NULL NULL9 SELECT TABLE SELECT TABLE "9" NULL NULL4 SELECT TABLE SELECT TABLE "94" NULL NULL5 SELECT TABLE TABLE SELECTED "945" NULL NULL9 TABLE SELECTED QUERY "945" "9" NULL9 QUERY QUERY "945" "99" NULL9 QUERY QUERY "945" "999" NULL6 QUERY NOT FOUND "945" "9996" NULL

Taulukko 1. Reititystiedonhaku (peräkkäislähetys)

7.3.5 Hakuoperaatio pisimmän osuman mukaan (kertalähetys)

Kun B-tilaajan numero saadaan yhdessä sanomassa [Kuva 7.6] ei A-tilaajalta tarvitse odottaa lisää

merkkejä, koska kaikki tarvittava informaatio on yhdessä viestissä. Tällöin on tutkittava sekä

numeron alkua että loppua. Alusta tarvitaan merkkejä, jotta haku voitaisiin kohdistaa oikeaan

tauluun. Pisimmän osuman haku tehdään tässä tapauksessa lähtien pisimmästä kohti lyhempiä

numeroita. Tarvitaan ainoastaan eksplisiittisiä hakuja, joten kysely palauttaa aina maksimissaan

yhden rivin:

SELECT R_DATA_ID FROM Subscribers3 WHERE D_NUMBER = ‘774561’

SELECT R_DATA_ID FROM Subscribers3 WHERE D_NUMBER = ‘77456’

SELECT R_DATA_ID FROM Subscribers3 WHERE D_NUMBER = ‘7745’

Tässä tapauksessa riittää kolme hakua.

Page 74: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

62

IDLE

SELECT TABLE

SCAN DIGIT

APPEND TO PREFIX

QUERY

YES

NO

NO

REQUEST

EXECUTE QUERY

SHORTEN KEY

YES

NO

FOUND

RDATA_ID=RESULT

LEN(P)+LEN(K)< MIN(NUMLEN)

PREFIXFOUND

LEN(P) =MAX(PLEN)

NO

RESULT

NOT FOUND

YES

YES

IDLE

SELECT TABLE

SCAN DIGIT

APPEND TO PREFIX

QUERY

YES

NO

NO

REQUEST

EXECUTE QUERY

SHORTEN KEY

YES

NO

FOUND

RDATA_ID=RESULT

LEN(P)+LEN(K)< MIN(NUMLEN)

PREFIXFOUND

LEN(P) =MAX(PLEN)

NO

RESULT

NOT FOUND

YES

YES

Kuva 7.6. Reititystiedon haku (kertalähetys)

Tilasiirtymiä ja numeron käsittelyä voidaan tässäkin tapauksessa tarkastella taulukon [Taulukko 2]

avulla:

Page 75: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

63

Merkki Lähtötila Siirtymätila Prefix Key Rdata_id9417664

NULL IDLE SELECT TABLE NULL "9417664" NULL9417664 SELECT TABLE SELECT TABLE "9" "417664" NULL

SELECT TABLE SELECT TABLE "94" "17664" NULLSELECT TABLE NOT FOUND "941" "7664" NULL

9458002

NULL IDLE SELECT TABLE NULL "9458002" NULL9458002 SELECT TABLE SELECT TABLE "9" "458002" NULL

SELECT TABLE SELECT TABLE "94" "58002" NULLSELECT TABLE QUERY "945" "8002" NULLQUERY FOUND "945" "8002" 9883

9458005

NULL IDLE SELECT TABLE NULL "9458005" NULL9458005 SELECT TABLE SELECT TABLE "9" "458005" NULL

SELECT TABLE SELECT TABLE "94" "58005" NULLSELECT TABLE QUERY "945" "8005" NULLQUERY QUERY "945" "800" NULLQUERY QUERY "945" "80" NULLQUERY FOUND "945" "8" 9928

9459996

NULL IDLE SELECT TABLE NULL "9459996 NULL9459996 SELECT TABLE SELECT TABLE "9" "459996" NULL

SELECT TABLE SELECT TABLE "94" "59996" NULLSELECT TABLE QUERY "945" "9996 NULLQUERY QUERY "945" "999" NULLQUERY QUERY "945" "99" NULLQUERY QUERY "945" "9" NULLQUERY NOT FOUND "945" NULL NULL

Taulukko 2. Reititystiedon haku (kertalähetys)

Page 76: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

64

7.4 Päivitystietokannat

AVCC Advertisement Validity Checking Client

PNDB Ported Number Database

UDB Update Database

PNAC Ported Number Advertising Client

RIS Routing Information Server

NA Numbering Agent

NDB Numbering Database

Regulator

NDB

Service Provider X

AVCC

UDB

PNDB

PNAC

NA

RIS

AVCC Siirtymistiedon tarkistin

PNDB Siirtymistietokanta

UDB Päivitystietokanta

PNAC Siirtymistiedon levittäjä

RIS Reititystietopalvelin

NA Numerointiagentti

NDB Numerotietokanta

AVCC Advertisement Validity Checking Client

PNDB Ported Number Database

UDB Update Database

PNAC Ported Number Advertising Client

RIS Routing Information Server

NA Numbering Agent

NDB Numbering Database

AVCC Advertisement Validity Checking Client

PNDB Ported Number Database

UDB Update Database

PNAC Ported Number Advertising Client

RIS Routing Information Server

NA Numbering Agent

NDB Numbering Database

Regulator

NDB

Service Provider X

AVCC

UDB

PNDB

PNAC

NA

RIS

AVCC Siirtymistiedon tarkistin

PNDB Siirtymistietokanta

UDB Päivitystietokanta

PNAC Siirtymistiedon levittäjä

RIS Reititystietopalvelin

NA Numerointiagentti

NDB Numerotietokanta

Regulator

NDB

Service Provider X

AVCC

UDB

PNDB

PNAC

NA

RIS

AVCC Siirtymistiedon tarkistin

PNDB Siirtymistietokanta

UDB Päivitystietokanta

PNAC Siirtymistiedon levittäjä

RIS Reititystietopalvelin

NA Numerointiagentti

NDB Numerotietokanta

AVCC Siirtymistiedon tarkistin

PNDB Siirtymistietokanta

UDB Päivitystietokanta

PNAC Siirtymistiedon levittäjä

RIS Reititystietopalvelin

NA Numerointiagentti

NDB Numerotietokanta

Kuva 7.7. Päivitystietokantaan liittyvät elementit

7.4.1 Sanallinen kuvaus

Kuvassa 7.7 on vahvennettu päivityspalvelimen transaktioihin liittyvät elementit.

Päivitystietokantoihin lähetetään tieto tilaajan siirtymisestä. Välttämättömiä attribuutteja ovat

tietysti tilaajanumero sekä reititysnumero. Ilmoitetaan siis tilaaja, joka on siirtynyt ja hänen uusi

reititysnumero. Päivitystietokanta on luonteeltaan paljon dynaamisempi kuin numerotietokanta.

Sinne ei kohdistu lainkaan SQL-päivityksiä (SQL UPDATE) – ainoastaan lisäyksiä ja poistoja.

Päivitystietokannat toimivat myös luotettavuuden takeena, koska niiden avulla voidaan

korruptoitunut numerotietokanta palauttaa toimivaksi, koska päivityshistoria on saatavilla

päivitystietokannasta. Tämä tietysti edellyttää, että numerotietokannasta on riittävän uusi

varmuuskopio saatavilla. Jokaiselle päivitykselle on annettava aikaleima, koska sama tilaaja saattaa

siirtyä useamman kerran aikavälillä, jossa edellinen päivitys on vielä kannassa. Päivitystietokantaa

tyhjennetään jatkuvasti, koska jo luettuja päivityksiä ei periaatteessa tarvita. Varmennussyistä

kannattaa esimerkiksi viimeisen viikon tai kuukauden päivitykset pitää kannassa. Vanhemmatkin

päivitykset ylläpidon kannattaa silti säilyttää jollakin tavalla esimerkiksi pakattuna

tekstitiedostoihin, koska joskus jotain tapahtumaa voidaan joutua selvittämään pitkänkin ajan takaa.

Jos päivitysten hauissa ja numerotietokannoissa ei ole häiriöitä, ei vanhoilla päivitystietueilla ole

mitään tehtävää sen jälkeen, kun kaikki numerointiagentit ovat lukeneet tietueet.

7.4.2 Relaatiomalli

Ainakin teoriassa päivitystietokannassa (UDB) tarvitaan ainoastaan yksi relaatio:

moved_numbers(D_NUMBER, R_NUMBER, U_TIME , S_TIME)

Page 77: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

65

Käytännössä päivitystietokantaa voidaan hajauttaa samalla periaatteella kuin numerotietokanta,

mutta yksinkertaisuuden säilyttämiseksi käsitellään tietokantaa tässä yhtenä relaationa. Kolme

attribuuttia on alleviivattu jatkuvalla viivalla, joten ne kaikki yhdessä muodostavat avaimen:

Tilaajanumero, reititysnumero tai nämä yhdessä eivät toimi avaimena, koska sama tilaaja voi siirtyä

useita kertoja – myös takaisin alkuperäiseen verkkoon (engl. donor network). Jokainen

tilaajanumeron, reititysnumeron ja päivitysaikaleiman yhdistelmä on ainutkertainen, joten ne

yhdessä toimivat avaimena. S_TIME-attribuutti on normaalisti sama kuin U_TIME. U_TIME

kuvaa aikaa, jolloin tilaajan siirtyminen suoritetaan ja S_TIME kuvaa aikaa, jolloin päivitys

saadaan onnistuneesti tehtyä. U_TIME:n generoi asiakas (PNAC) ja S_TIME:n palvelin (PNDB).

Mikäli joudutaan turvautumaan uudelleenyrityksiin kyseiset attribuutit eroavat toisistaan. Jako tulee

tehdä esimerkiksi tällä tavalla, koska ainakin teoriassa on mahdollista, että tilaaja siirtyy uudelleen

sinä aikana, kun edellistä päivitystä ei ole saatu perille joka palvelimeen. Numerotietokannan

uusimmat päivitykset haetaan aina S_TIME:n perusteella. Useimmiten reititysnumero vaihtuu vain

esimerkiksi tilaajan muuton yhteydessä, tai tilaajan vaihtaessa palveluntarjoajaa tai operaattoria.

Luultavasti lopullisessa toteutuksessa relaatioon otetaan joitakin lisäattribuutteja – esimerkiksi

tietoa transaktioon liittyvistä osapuolista, mutta teknisessä mielessä riittävät esitetyt neljä

attribuuttia. Attribuuttien nimet kannattaa jättää avoimeksi eli niitä ei kannata kovakoodata

sovellusohjelmaan. Ohjelman käyttäjä voi tällöin itse konfiguroida sen tietokannan kanssa

yhteensopivaksi.

PNDB:ssä tarvitaan joitakin lisäattribuutteja osoittamaan uudelleen lähetystä ja siirtymisen

vahvistusta. Jokaiselle operaattorille luodaan seuraava relaatio:

moved_numbers(D_NUMBER, R_NUMBER, U_TIME , CONFIRM,RETRY)

Avainrajoite on sama kuin edellä esitetyssä. Joissakin ongelmatilanteissa on välttämätöntä tietää,

onko kyseessä uudelleen lähetyksellä tietokantaan saapunut tietue [Kappale 8.2.2]. S_TIME-

attribuuttia ei tarvita.

7.4.3 Toteutus

Päivitystietokantojen toteutus on myös paljon yksinkertaisempi kuin numerotietokantojen.

Aikaleima voidaan generoida päivitystä suorittavien asiakaskoneiden prosessorien kellosta

sekunteina Unixin epookista (1. Tammikuuta 1970 klo 00:00:00) lähtien neljän tavun

etumerkittömänä kokonaislukuna. Näin ollen kaikkien alueen sekä numeropalvelimien että

päivityspalvelimien kellojen tulee olla kohtuullisella tarkkuudella synkronoituja. Muutamien

sekuntien eroavaisuus ei ole vakavaa. Tietyn asteista tarkkuutta tarvitaan kuitenkin tilanteissa,

joissa jostain syystä tehdään lyhyen ajan sisällä useampi samaa tilaajaa koskeva päivitys. Toinen

mahdollisuus on erillisen kellopalvelimen käyttö, josta kaikki asiakaskoneet hakisivat aikaleiman

päivitystilanteissa. Kellojen synkronointia ei tällöin tarvittaisi, koska kellopalvelin tarjoaa kaikille

asiakkaille saman prosessorin kellosta aikaleiman paketin siirtoviiveen tarkkuudella. Tämä hieman

Page 78: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

66

vaikeuttaisi päivitysoperaatioita. Päivitykset tapahtuvat inkrementaalisesti lähettämällä tavallisesti

seuraava kysely kaikkiin alueen palvelimiin:

INSERT INTO COMX (D_NUMBER, R_NUMBER, U_TIME, RETRY) VALUES ($dnum, $rnum,

$cur_time, 0)

EMPTY LIST

UPDATE

UPDATE NEXT

LIST DATA SOURCES

OK

SAVE UPDATE

IDLE

UPDATE

YES

NO

YES

NO

NO

OK

ERROR

YES

EMPTY LIST

UPDATE

UPDATE NEXT

LIST DATA SOURCES

OK

SAVE UPDATE

IDLE

UPDATE

YES

NO

YES

NO

NO

OK

ERROR

YES

Kuva 7.8. Reititysnumeron levitys (PNAC)

Toisinaan päivitykset saattavat myös epäonnistua esimerkiksi verkossa olevan vian tai palvelimen

vikaantumisen vuoksi. Epäonnistuneet päivitykset on talletettava esimerkiksi erilliseen SQL-

tietokannan tauluun tai jonnekin muualle, mistä ne voidaan hakea uudelleenyrityksiä varten. Kuva

7.9 selventää tilannetta. Tällöin S_TIME asetetaan tietueen saavuttua palvelimeen

uudelleenyrityksen ajankohdaksi ja U_TIME ajaksi, jolloin päivitystä ensimmäisen kerran

yritettiin. PNAC soveltaa eksponentiaalisesti kasvavaa väliaikaa päivitysyritysten välillä tiettyyn

rajaan asti, jonka jälkeen väliaikaa ei enää kasvateta. PNAC lähettää päivityksen siis joka

tapauksessa riippumatta siitä, onko se vanhentunut vai ei.

INSERT INTO COMX (D_NUMBER, R_NUMBER, U_TIME, RETRY) VALUES ($dnum, $rnum,

$u_time, 1)

Page 79: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

67

EMPTY LIST

IDLE

FIND UPDATES FORNEXT DATA SOURCE

LIST DATA SOURCES

EMPTY

GET NEXT

YES

NO

YES

NO

TIMER

UPDATE

YES

NO

YES

OK

REMOVE FROMLIST

OK ERRORNO

EMPTY LIST

IDLE

FIND UPDATES FORNEXT DATA SOURCE

LIST DATA SOURCES

EMPTY

GET NEXT

YES

NO

YES

NO

TIMER

UPDATE

YES

NO

YES

OK

REMOVE FROMLIST

OK ERRORNO

Kuva 7.9. Reititysnumeron levityksen uudelleenyritys (PNAC)

7.4.4 Numeropalvelimien päivitys

Operaattoreiden numeron siirrettävyyttä palvelevat agentit (NA) suorittavat siis määrävälein

päivityspalvelimiin (UDB) kohdistuvia SQL-tietokantahakuja, jotka valitsevat kaikki uusimmat

päivitykset tietokannasta:

SELECT D_NUMBER, R_NUMBER, MAX(U_TIME), S_TIME FROM moved_numbers WHERE

S_TIME > $timestamp GROUP BY D_NUMBER ORDER BY ASC S_TIME

Page 80: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

68

TIMESTAMP =CURRENT

EMPTY LIST

GET TIME

UPDATE NEXT

GET TIMESTAMP

OK

TIMESTAMP =LAST.S_TIME

IDLE

TIMER

YES

NO

YES

NO

GET UPDATESS_TIME >TIMESTAMP

SAVE TIMESTAMP

EMPTY LIST

UPDATE

YES

NO

TIMESTAMP =CURRENT

EMPTY LIST

GET TIME

UPDATE NEXT

GET TIMESTAMP

OK

TIMESTAMP =LAST.S_TIME

IDLE

TIMER

YES

NO

YES

NO

GET UPDATESS_TIME >TIMESTAMP

SAVE TIMESTAMP

EMPTY LIST

UPDATE

YES

NO

Kuva 7.10. Numerotietokannan päivitys (NA)

Edellä oleva SQL-kysely hakee tilaajanumerokohtaisesti (tai tilaajanumeron etuliite) suurimman

aikaleiman mukaisen päivityksen tutkien ainoastaan kaikki viimeisen haun jälkeiset päivitykset.

Käytännössä muuttuja ’timestamp’ on viimeisen haun aikaleima vähennettynä kellon

epätarkkuudella mikäli NA käyttää eri UDB:tä kuin edellisessä haussa eli siitä vähennetään ehkä

muutamia sekunteja. Menettely aiheuttaa sen, että yksittäiset numerotietokannan päivitykset

suoritetaan kahteen kertaan, mutta se ei haittaa, koska taulujen tietosisältöhän ei tästä muutu

numerotietokannassa. Korjausta ei tarvita mikäli käytetään samaa UDB:ta kuin edellisessä haussa,

koska S_TIME on aina generoitu palvelimen prosessorin kellosta.

Numerotietokannan päivitys [Kuva 7.10 – UPDATE NEXT] ei useinkaan onnistu normaalilla SQL-

päivitysoperaatiolla (UPDATE). Voihan olla, että mainostetulle siirtyneelle tilaajalle ei ole tietuetta

tietokannasta. Näin ollen ensiksi on tarkistettava löytyykö tietuetta.

Page 81: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

69

Taulun valinta on suoritettava kappaleessa 7.3.3 esitetyllä tavalla. Tällöin loppuosaa numerosta

käytetään avaimena. Jos tietue löytyy, muutetaan vanha reititysnumero uudeksi. Mikäli ei löydy,

pelkkä lisääminen ei riitä, koska tietokannassa saattaa olla aggregoituja tietueita. Esimerkkinä

tilaajanumeron etuliitteen ”1451” lisääminen:

INSERT INTO Subscribers1 (D_NUMBER, R_NUMBER) VALUES (‘451’, ‘$new’)

Reititysnumeron mainostaminen esimerkiksi etuliitteellä ’1451’ merkitsee sitä, että etuliitteet

’1451%’ saavat kaikki saman reititysnumeron. Näin ollen tietueen lisäämisen jälkeen tulee poistaa

kaikki muut tietueet, joihin kyseinen etuliite sisältyy:

DELETE FROM Subscribers1 WHERE D_NUMBER LIKE ‘451_%’

Kuva 7.10 on siis karkeasti yksinkertaistus, mutta sen tarkoitus ei olekaan esittää, kuinka SQL-

kyselyt muodostetaan. ’UPDATE NEXT’-operaatio kattaa siis sekä taulun valinnan että päivityksen

ja tarvittaessa myös vanhentuneiden numerotietojen poiston.

7.4.5 Päivitysten validointi

Edellä esitetyissä päivitysoperaatioissa on tehty se olettamus, että kaikki osapuolet ovat ns.

uskottuja osapuolia eli oletetaan, että ne eivät ole toisilleen vihamielisiä vaan toimivat yhtenäisten

tavoitteiden puolesta. Näin yksinkertainenhan tilanne ei kuitenkaan ole, koska tilaajan siirtyessä

aiemmin häntä palvellut operaattori menettää maksavan asiakkaan ja uusi operaattori saa

vastaavasti uuden asiakkaan. Muistetaan, että usein siirtymisen syy saattaa olla myös se, että

asiakas ei ole tyytyväinen saamaansa palveluun. Huonoa palvelua voi olla esimerkiksi se, että liian

usein hänen puhelunsa eivät onnistu. Puhelut eivät onnistu ainakaan silloin, kun B-tilaajan

reititysosoitetta ei saada oikein. Mikäli jokaisella olisi oikeus kirjoittaa päivitystietokantaan

suoraan, saattaisi jokin vihamielinen päivitysyritys johtaa lopulta numerotietokantojen

korruptoitumiseen pahasti. Jonkin lyhyen etuliitteen (esimerkiksi 94519) lähettäminen jollakin

väärällä reititysnumerolla (esimerkiksi 8883) ilmaisee, että kaikkien 94519-alkuisten

puhelinnumeroiden reititystieto on 8883. Tällöinhän sellaisille tilaajille, joiden reititysnumero ei ole

8883 kyseisen etuliitteen 94519 sisällä, puhelut eivät koskaan mene oikeaan osoitteeseen. Toisaalta

tällainen aggregointi tulee myös sallia, koska niillä pystytään tietyissä tapauksissa piilottamaan

tilaajien tarkka lukumäärä ja ennen kaikkea pienentämään tietokantojen kokoa. Täytyy siis olla

keino, jolla tällaisten vihamielisten päivitysten aiheuttama numerotietokantojen korruptoituminen

voidaan estää. Jokin vihamielinen päivitys tai vaikka toimintavirhe voisi siis tuoda UDB:hen juuri

edellä esitetyn kaltaisia vääriä päivitystietueita, ellei minkäänlaista validointimekanismia käytetä.

On oltava järjestelmä, jossa tilaajan uusi operaattori ja aiemmin häntä palvellut operaattori sopivat

tilaajan siirtymisestä. Täysin itsenäisesti mikään operaattori ei voi mainostaa, että tietty tilaaja tai

tilaajaryhmä on siirtynyt sen asiakkaaksi. Siirtyminen edellyttää jonkinlaista vahvistusta aiemmin

siirtynyttä tilaajaa palvelleelta operaattorilta. Uusi reititystieto ei siis tule voimaan ennen

vahvistusta. Kehittyneimmät SQL-tiedonhallintajärjestelmät tukevat monen tyyppistä autentikointia

Page 82: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

70

ja salausmekanismeja. Esimerkiksi MySQL tarjoaa hyvin moninaiset mahdollisuudet rajata pääsyä

tietokantoihin1.

Com1

UPDATEDATABASE

Service ProviderCom1

Service ProviderCom2

NUMBERINGDATABASE

Regulator

12

3

4

5

6

d_number ”7747”r_number ”Com1”

d_number ”7747”r_number ”Com2”

INSERT INTO Com1 (d_number,r_number) VALUES (”7747, ”Com2)

UPDATE Com1 SET confirm=1WHERE d_number=”7747”

Com1

UPDATEDATABASE

Service ProviderCom1

Service ProviderCom2

NUMBERINGDATABASE

Regulator

12

3

4

5

6

d_number ”7747”r_number ”Com1”

d_number ”7747”r_number ”Com2”

INSERT INTO Com1 (d_number,r_number) VALUES (”7747, ”Com2)

UPDATE Com1 SET confirm=1WHERE d_number=”7747”

Kuva 7.11. Siirtymiseen liittyvät transaktiot

Siirrettävyystietokannassa (PNDB) on jokaiselle siirrettävyysalueella toimivalle palveluntarjoajalle

oma relaationsa (tässä tapauksessa Com1) kyseisen palveluntarjoajan alueelta pois siirtyneitä

tilaajia varten [Kuva 7.11]. Kuva on siirrettävien attribuuttien osalta yksinkertaistettu. Tilaaja 7747

siirtyy operaattorilta Com1 operaattorin Com2 asiakkaaksi säilyttäen siis vanhan tilaajanumeronsa.

Jokaisella palveluntarjoajalla on mahdollisuus lisätä siirtymisiä kaikkien muiden tauluihin

regulaattorin tietokannassa. Tässä tapauksessa Com2 siis mainostaa, että tilaaja on siirtynyt pois

operaattorilta Com1 lisäämällä tietueen (”7747”, ”Com2”) tauluun Com1. Ainoastaan Com1:llä on

oikeus vahvistaa siirtyminen, koska taulu sisältää vain Com1:ltä siirtyneitä tilaajia. Kullakin

operaattorilla on vahvistusoikeus ainoastaan sille kuuluvaan tauluun. SQL:n pääsynhallinnan

funktioilla voidaan tämä toiminnallisuus toteuttaa. Jätetään yksinkertaisuuden vuoksi kappaleessa

7.4.1 esitetyt aikaleimat huomioimatta. Operaattorilla Com2 on tauluun Com1 ainoastaan

lisäysoikeus koskien attribuutteja d_number ja r_number. Attribuutin confirm arvona on

oletusarvoisesti 0, joten se asettuu väkisinkin arvoksi 0, koska ainoastaan operaattorilla Com1 on

oikeus kirjoittaa kyseiseen kenttään. Operaattorilla Com2 ei siis ole mitään mahdollisuutta asettaa

kyseistä kenttää arvoon 1. Vaiheen 1 jälkeen taulu Com1 näyttää seuraavalta:

1 http://mysql.eunet.fi/doc/en/GRANT.html

Page 83: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

71

Vaiheen 2 jälkeen se muuttuu seuraavaksi:

Periaatteessa riittäisi sekin, että ainoastaan tilaajaa aiemmin palvellut operaattori lähettäisi tiedon

siirtymisestä, mutta Com2 ei välttämättä halua luovuttaa kaikkea transaktiossa tarvittavaa tietoa

suoraan Com1:lle. Nyt lähetetty vahvistus on ainoastaan vahvistus, että tilaaja 7747 ei ole enää

Com1:llä.

Vasta vaiheen 2 jälkeen AVCC voi siirtää tiedon siirtymisestä päivitystietokantaan (vaiheet 3 ja 4),

sekä edelleen tietyllä viiveellä NA voi siirtää tiedon numerotietokantoihin (vaiheet 5 ja 6). Millä

sitten varmistetaan, että ainoastaan Com1 pääsee vahvistamaan Com1:stä tapahtuvia siirtymisiä?

Toteutus poikkeaa eri tiedonhallintajärjestelmien välillä, mutta sovellusohjelmoijanhan ei tarvitse

tästä välittää, koska hänen tarvitsee vain antaa käyttäjätunnus ja salasana DSN-parametrin lisäksi.

Esimerkiksi MySQL:llä voidaan edellä esitetyssä esimerkissä [Kuva 7.11] tarvittaville transaktioille

antaa oikeudet seuraavasti: Com2:lle annetaan lisäysoikeus tauluun Com2 kenttiin r_number ja

d_number:

GRANT INSERT (r_number, d_number) ON Com1 TO [email protected] by ’password’

Com1 tarvitsee päivitysoikeudet kyseiseen relaation:

GRANT INSERT, UPDATE (confirm) ON Com1 TO [email protected] by ’password’

Kyseisten komentojen jälkeen siis Com2 pystyy ainoastaan lisäämään puuttumatta kenttään

confirm. Com1 pystyy lisäämään ja päivittämään kenttää confirm, mutta ei esimerkiksi poistamaan

tietueita kyseisestä taulusta. Tietoturvan takaamiseksi voidaan käyttää esimerkiksi MD5:ttä [36] ja

SSL:ää [37]. Validointimenettely on optionaalinen, sillä palvelu tulee olla toteutettavissa myös

siten, että joltakin reititysalueelta mainostetaan siirtyneen tilaajan uutta reititysosoitetta suoraan

päivitystietokantaan eli ei operaattorikohtaisia tauluja varten luodun siirrettävyystietokannan kautta.

Tällainen tulee kysymykseen, jos esimerkiksi numeron siirrettävyys toteutetaan vain yhden

operaattorin sisällä. AVCC:n toinen tärkeä tehtävä on estää myöhässä tulleiden päivitysten pääsy

päivitystietokantaan. Funktio toimii siten, että etsitään UDB:stä PNDB:n tietuetta vastaavaa riviä.

Jos sellainen löytyy, verrataan niitä U_TIME:n perusteella, ja jätetään uudempi voimaan. Päivitystä

ei hyväksytä silloinkaan, jos se on vanhempi kuin se aika, jonka jälkeen tietue automaattisesti

poistuu UDB:sta. Validointimenettelyssä myös AVCC:n täytyy tarkistaa, että päivitystä vastaavan

tilaajan vanha palveluntarjoaja on juuri se, jonka taulusta päivitys luettiin.

7.4.6 Numerotietokannan ja päivitystietokannan synkronointi

Numerotietokantojen luotettavuus perustuu UDB:n aikaleimojen käyttöön ja säännöllisesti

otettaviin varmuuskopioihin. UDB:ssa on siis tallennettu tuorein päivityshistoria. Mikäli NDB

korruptoituu, otetaan varmuuskopio käyttöön ja ladataan UDB:sta päivitykset sen hetken jälkeen,

kun varmuuskopiointi kyseisen version osalta aloitettiin. Toimitaan siis aikaleimojen perusteella.

Page 84: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

72

Synkronointi on tehokasta, koska vain pieni osa tietokannasta joudutaan käsittelemään. Jos

oletetaan, että varmuuskopio otetaan kerran vuorokaudessa, päivityksiä tulee synkronoinnissa

käsiteltäväksi keskimäärin noin 13700, mikäli 50 miljoonasta tilaajasta siirtyy 10% vuodessa.

Linux Debianissa MySQL:llä suoritetuissa testeissä NDB synkronoitui 15-20 sekunnissa kyseisellä

tietuemäärällä. Tosin täytyy ottaa huomioon, että siirrettävä tietomäärä on jo sen verran suuri, että

esimerkiksi verkkoyhteyden laatu vaikuttaa synkronoitumisaikaan. Testit suoritettiin lähiverkossa.

Melko pienikin ruuhkaisuus verkossa aiheuttaa tunnetusti sen, että TCP:n läpäisy vähenee

merkittävästi [38].

Page 85: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

73

8 Ratkaisun arviointi

8.1 Ratkaisun toimivuus

8.1.1 Relaatiotietokantojen suorituskyky

Eri järjestelmiä testattaessa on suoritettu yksinkertaisesta SQL-taulusta1 hakuja, päivityksiä,

lisäyksiä sekä poistoja. Kyselyjä on kokeiltu eri kokoisista tauluista. Taulun koolla [Kuva 3.2

sivulla 19] ei kuitenkaan ole juuri minkäänlaista merkitystä. Kaikki haut on suoritettu paikallisella

asiakkaalla paikalliselta palvelimelta. Tulokset esitetään taulukossa 3. Testauksessa on käytetty

hyväksi PHP-ohjelmointikieltä [26]. Se tarjoaa rajapinnan kaikkiin testattuihin tietokantoihin

[Taulukko 3]. Toinen vaihtoehto olisi käyttää ODBC-rajapintaa minkä tahansa ohjelmointikielen

avulla. Debian Linux-käyttöjärjestelmässä MySQL on testattu myös ODBC:llä C-kielellä

ohjelmoiduilla testiohjelmilla, ja tulokset eivät juurikaan poikkea esitetyistä. PHP-kieltä

käytettäessä on kompensoitava ajanmittauksen vaikutus tuloksiin, koska PHP:lla ajanmittaukseen

kuluva aika on lähellä samaa suuruusluokkaa lyhimpien hakuaikojen kanssa..

Käyttöjär-jestelmä

CPU DBMS ka. hakuaika(ms) SELECT

ka. hakuaika(ms) UPDATE

ka. hakuaika(ms) INSERT

ka. hakuaika(ms) DELETE

Sun Blade100

UltraSPARC-IIe500 MHz

MySQL4.0.2

1.3 1.2 1.1 1.2

DebianLinux

AMD Athlon 800MHz

MySQL4.0.2

0.4 0.3 0.3 0.3

Windows2000Professional

AMD Athlon 800MHz

MySQL4.0.2

0.7 0.6 0.5 0.4

Sun Blade100

UltraSPARC-IIe500 MHz

PostgreSQL7.1.2

30 17 4 4

Sun Blade100

UltraSPARC-IIe500 MHz

mSQL 3.1 100 0.6

Windows2000Professional

AMD Athlon 800MHz

MicrosoftSQL Server7.0

0.4 0.4 0.7 1.0

Taulukko 3. Eri tiedonhallintajärjestelmien transaktionopeus

Microsoft SQL palvelimelle saadussa arvossa (0.4 ms) on käytetty proseduurihakua. Merkille

pantavaa on erittäin suuri ero Sun Blade 100:lle ja Debian Linux:lle saaduissa tuloksissa. Reilusti

alle 1 ms:n hakuajat ovat varmasti riittävän pieniä. Lyhyt vasteaika hakuihin on varmin tae

järjestelmän skaalautuvuudesta. Hakuaika 0.4 ms merkitsee, että sama asiakas pystyy suorittamaan

samalla palvelimella yhdeksän miljoonaa hakua tunnissa paikallisesti. Tällainen testi on

käytännössä hyvin helppo toteuttaa:

1 test1(col1 varchar(33) primary key, col2 varchar(33))

Page 86: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

74

i=0;start_time=clock;

while(i<1000000){query=create_query(i);execute(query);i++;

}

end_time=clock;total_time=end_time – start_time;

Yllä olevan pseudokoodin mukaisesti suoritetaan miljoona kyselyä ja mitataan operaatioon kuluva

aika. MySQL:llä osoittautui, että tällöin asiakkaan käytössä on 40 ja palvelimen 60 prosenttia

CPU:n kapasiteetista. MySQL:ssä hakuoperaatio on kuitenkin säikeistetty (engl. multithreaded),

mikä merkitsee sitä, että palvelin pystyy suorittamaan useita hakuja samanaikaisesti. Järjestelmän

transaktiokyvyn testaamiseksi tarvitaankin testiympäristö, jossa useampi asiakas käyttää

samanaikaisesti samaa yksittäistä palvelinta. Lopulliseen NP-testiympäristöön valitsin edellä

esitetyn [Taulukko 3] mukaisesti tehokkaimman eli MySQL:n. Toisaalta MySQL on vapaasti

jaettava ohjelmisto, joten sen käyttö on yksinkertaisempaa ja teknisesti mielenkiintoisempaa, koska

lähdekoodia voi editoida. On huomattava, että testauksessa käytettiin erittäin realistista laitteistoa.

800 MHz:n CPU on nopea, mutta nykyisin jopa erityisesti palvelinkäyttöön kehitettyjen

laitteistojen prosessorit ovat nopeampiakin. Kaiken lisäksi käytettiin ainoastaan yhden prosessorin

laitteistoja. Säikeistetyt proseduurit voivat käyttää useaa prosessoria, mikä ei nopeuta välttämättä

yksittäisiä hakuja, mutta voi moninkertaistaa transaktionhallintakyvyn.

8.1.2 ODBC-ohjelmistot

Tietokantahakuja suorittavat asiakasohjelmistot suorittavat niin paljon laskentaa varsinaisten

tietokantahakujen lisäksi, että ne on syytä ohjelmoida tehokkuutta silmällä pitäen C:llä. Vapaasti

levitettävän lähdekoodin ohjelmistoista löytyi kaksi vaihtoehtoista ODBC:n ajurin hallitsijaa

[Kappale 4.3]. Testiympäristöön valitsin Openlink iODBC:n1 ajurin hallitsijaksi. Toinen saatavilla

oleva olisi ollut Easysoft unixODBC2, mutta se osoittautui melko huonosto toimivaksi

ongelmatilanteissa Linux-järjestelmässä. ODBC-rajapinta osoittautui hyvin toimivaksi MySQL- ja

PostgreSQL-järjestelmissä. MySQL:ään on saatavilla MyODBC-ajuri, ja PostgreSQL-lähdekoodin

sisältyy järjestelmään sopiva ODBC-ajuri. Sama sovellusohjelma todellakin toimii kummassakin

järjestelmässä.

8.1.3 Päivitysliikenteen volyymi

Pyrittäessä tehokkaaseen ratkaisuun päivitysliikenteen volyymin tulee olla pieni verrattuna

varsinaiseen hyötyliikenteeseen. Tilaajan siirtyessä päivitysliikenne riippuu lineaarisesti

1 http://www.iodbc.org/

2 http://www.odbc.org/

Page 87: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

75

päivityspalvelinten lukumäärästä: Tieto siirtymisestä lähetetään kaikkiin päivityspalvelimiin ja

vastaavasti vahvistus [Kappale 7.4.5] tulee tehdä jokaiseen palvelimeen ennen kuin siirtyminen

astuu voimaan. Toisaalta päivitysliikenne riippuu lineaarisesti siirrettävyysalueen tilaajien

lukumäärästä: Mitä suurempi määrä tilaajia sitä suurempi määrä siirtymisiä, jos oletetaan, että jokin

tietty osuus tilaajista siirtyy jollakin aikavälillä. Päivitysliikenteen vaatima siirtokapasiteetti riippuu

tietysti myös päivityssanomien koosta.

Tarkan päivityksessä siirrettävän tavumäärän laskeminen on erittäin hankala tehtävä, joka

edellyttäisi MySQL:n lähdekoodin melko perinpohjaista tutkimista. Jonkinlainen karkea arvio siitä

voidaan kuitenkin tehdä. Tulee myös huomioida, että TCP/IP-otsikointi vie 40 tavua [38], ja että

TCP:n SYN-mekanismi vaatii yhteensä 2 kehystä ilman hyötykuormaa. Sen sijaan FIN voidaan

sisällyttää viimeiseen kehykseen, jolla hyötykuormaa lähetetään. Varsinainen SQL-kysely vie noin

100 tavua. Palvelin kuitenkin lähettää myös asiakkaalle, koska sovellustason kuittaukset

edellyttävät jonkinlaista informaatiota esimerkiksi siitä onko asiakkaalla oikeus suorittaa lähetetty

kysely, tai onko se edes kieliopiltaan oikein. Ennen lähetystä on myös muodostettava sovellustason

yhteys palvelimeen, mikä on myös kuitattava. Voidaan arvioida, että yhteensä hyötykuorman

kuljetukseen otsikkoineen lähetetään 1000 tavua ja SYN-toiminnolle 100 tavua. Näin yhteensä siis

karkeasti arvioiden saadaan 1100 tavua kahteen kertaan, koska vahvistettaessa siirtyminen

suoritetaan samanlainen operaatio. Oletetaan vielä, että tilaajia on 50 miljoonaa, joista 10% siirtyy

vuosittain. Jos päivityspalvelimia on kymmenen, saadaan keskimääräiseksi siirtonopeudeksi 28

kbps, joka jakaantuu ympäri verkkoa, eli ei siis tietylle linkille. Vuosittain jouduttaisiin lähettämään

yhteensä 11GB. Joskus tietueita voidaan kuitenkin yhdistää yhdeksi SQL-kyselyksi eli lähettää

samalla kertaa tieto useamman tilaajan siirtymisestä. Tämä jonkin verran vielä vähentää

päivitysliikennettä. Kaiken kaikkiaan kyseessä on verkon kannalta melko mitätön hallintaliikenne.

Ylläpito ei vaadi siis verkolta paljon kapasiteettia eikä edes suurta luotettavuutta, koska

uudelleenlähetys toteutetaan arkkitehtuurissa sekä TCP-tasolla että sovellustasolla tarvittaessa.

8.2 Järjestelmän käyttöönotto

8.2.1 Tietokantojen alustaminen

Mitä siirrettävyysalueella tarvitsee tehdä, jotta palvelu saadaan toimimaan? Ensiksi täytyy valita

tietokantajärjestelmä, jota käytetään numerotiedon tallennuksessa ja levityksessä. Edellä olen

esittänyt, että vapaasti saatavilla ohjelmistoilla saadaan aikaan varmasti skaalautuva järjestelmä.

Voidaan siis valita joko vapaan lähdekoodin ohjelmisto tai jokin kaupallinen ohjelmisto. MySQL

osoittautui Linux-käyttöjärjestelmässä kaikkein tehokkaimmaksi. ODBC tarjoaa siis

mahdollisuuden käyttää myös heterogeenista tietokantaympäristöä, mutta tällöin jokaisella

päivitysasiakkaalla (PNAC) tulisi olla ODBC-ajuri jokaiseen erilaiseen järjestelmään. On myös

määritettävä kuinka tieto sijoitetaan eri puolille verkkoa: Huolehtiiko jokin erillinen yhtiö tai

regulaattori päivitystietokannoista vai levitetäänkö tieto tilaajan siirtymisestä suoraan

operaattoreille. Ensiksi mainittu on hallinnollisesti yksinkertaisempi ratkaisu. Ennen kuin

numerotiedot lisätään, tulee tietokannat alustaa. Tässä vaiheessa tulee oleelliseksi, miten

Page 88: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

76

numeroavaruus jaetaan tauluihin. Tehtävä on sitä oleellisempi mitä suuremmasta

siirrettävyysalueesta on kysymys tilaajien lukumäärällä mitattuna. Kuvaus numeroavaruuden

jakamisesta annetaan konfigurointitietona tietokantaa alustettaessa. PNDB:hen tulee puolestaan

luoda siirtymätaulut jokaista operaattoria varten. UDB sisältää varsinaisen päivitystaulun, johon on

kirjoitusoikeudet vain regulaattorilla tai sillä taholla, joka päivityspalvelimia hallitsee. Muita

konfiguroitavia numerotietokantojen parametreja ovat taulujen (relaatioiden) nimet. Pääosa

konfiguroinnista tapahtuu asiakasohjelmistoihin (PNAC, NA, RIS). Niihin täytyy asettaa DSN, jota

asiakas palvelee sekä DSN, josta päivitykset luetaan sekä kaikkien DSN:t, joihin lähetetään tieto

mainostettaessa tilaajan siirtymistä.

8.2.2 Käyttöesimerkki

Tarkastellaan esimerkkinä siirrettävyysaluetta, jossa on 5 palveluntarjoajaa, yksi regulaattori sekä

10 miljoonaa tilaajaa. Com1:llä ja Com2:lla on 3 miljoonaa tilaajaa, Com3:lla on 2 miljoonaa

tilaajaa sekä Com4:llä ja Com5:llä miljoona tilaajaa. Regulaattori on katsonut tarpeelliseksi

ylläpitää kolmea päivityspalvelinta. Com1 ja Com2 käyttävät numeroavaruuden jakoon kahta

ensimmäistä merkkiä tilaajanumerosta, Com3 ainoastaan ensimmäistä merkkiä ja Com4 sekä Com5

sijoittavat kaikki tilaajanumerot (etuliitteet) samaan tauluun numerotietokannassa. Regulaattori

muodostaa yhden siirtymätaulun jokaiselle operaattorille sekä yhden päivitystaulun kuhunkin

päivitystietokantaan. Jokainen operaattori tarvitsee vähintään yhden PNAC:n, joka mainostaa

kaikille regulaattorin päivityspalvelimille uutta reititysnumeroa tilaajalle hänen siirtyessä. Sama

asiakas käy määrävälein lukemassa päivityspalvelimelta regulaattorin vahvistamat siirtymiset ja

päivittää sen mukaisesti numerotietokannan eli toimii samalla numerointiagenttina. Regulaattorin

AVCC lukee päivitykset siirrettävyystauluista (COM1…COM5) päivitystauluun (NP_TABLE).

Page 89: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

77

Regulator

NP1

NP2NP3

Com2

NDB

Com3NDBCom4

Com5

NDB

NUMBERS

NUMBERS2

:

NUMBERS9

NUMBERS1NDB

NUMBERS

NUMBERS12

:

NUMBERS99

Com1

NDB

NUMBERS12

:

NUMBERS99

NUMBERS11

NUMBERS11COM3

COM4

COM2

COM1

NP_TABLE

COM5

COM3

COM4

COM2

COM1

NP_TABLE

COM3

COM4

COM2

COM1

NP_TABLE

COM5

COM5

H_DSN=Com1PNP_DSN=NP3SNP_DSN=NP2

H_DSN=Com2PNP_DSN=NP2SNP_DSN=NP3

{NP1,NP2,NP3}

{NP1,NP2,NP3}

H_DSN=Com3PNP_DSN=NP2SNP_DSN=NP1

{NP1,NP2,NP3}

H_DSN=Com5PNP_DSN=NP1SNP_DSN=NP2

{NP1,NP2,NP3}

H_DSN=Com4PNP_DSN=NP1SNP_DSN=NP2

{NP1,NP2,NP3}

Regulator

NP1

NP2NP3

Com2

NDB

Com3NDBCom4

Com5

NDB

NUMBERS

NUMBERS2

:

NUMBERS9

NUMBERS1NDB

NUMBERS

NUMBERS12

:

NUMBERS99

Com1

NDB

NUMBERS12

:

NUMBERS99

NUMBERS11

NUMBERS11COM3

COM4

COM2

COM1

NP_TABLE

COM5

COM3

COM4

COM2

COM1

NP_TABLE

COM3

COM4

COM2

COM1

NP_TABLE

COM5

COM5

H_DSN=Com1PNP_DSN=NP3SNP_DSN=NP2

H_DSN=Com2PNP_DSN=NP2SNP_DSN=NP3

{NP1,NP2,NP3}

{NP1,NP2,NP3}

H_DSN=Com3PNP_DSN=NP2SNP_DSN=NP1

{NP1,NP2,NP3}

H_DSN=Com5PNP_DSN=NP1SNP_DSN=NP2

{NP1,NP2,NP3}

H_DSN=Com4PNP_DSN=NP1SNP_DSN=NP2

{NP1,NP2,NP3}

Kuva 8.1. Järjestelmän alustus

Relaatio NP_TABLE vastaa kappaleessa 7.4.2 esitettyä relaatiota moved_numbers. Jokainen

operaattori määrittele asiakasparametrit, joita ovat ainakin palveltavan numeropalvelimen DSN

(NDB_DSN), primäärin (PNP_DSN) ja sekundaarin (SNP_DSN) päivityspalvelimen DSN sekä

lista kaikista regulaattorin palvelimista, joihin tieto siirtymisestä lähetetään. Numerointiagentit

käyvät siis määrävälein hakemassa uusimmat siirtymiset regulaattorilta siltä palvelimelta, jota

PNP_DSN-parametri osoittaa. Vikatilanteessa tietoa haetaan toissijaiselta palvelimelta.

Operaattorin numerotietokanta on koko ajan synkronoitu automaattisesti jokaisen regulaattorin

palvelimen kanssa, koska ne kaikki pyrkivät samansisältöiseksi inkrementaalisten päivitysten sekä

mahdollisten uudelleenlähetysten ansiosta. Väliaikaisesti tila saattaa vaihdella juuri

epäonnistuneiden päivitysten sekä operointiviiveen vuoksi.

Kun tietokannat on konfiguroitu, täytyy regulaattorin päivityspalvelimiin saada data, ennen kuin

palvelu voidaan käynnistää. Palvelun käynnistysvaiheessa lisätään lyhyitä numeroita

päivitystietokantoihin. Tietueiden reititysnumeroksi annetaan jokin E.164 numero (tai IP-osoite,

mikäli kyseessä on Internet-puhelinliikennettä välittävä operaattori), jolla puhelu reitittyy oikean

operaattorin verkkoon. Operaattorilla 5 voi olla käytössä numeroavaruudesta kaikki numerolla 2

alkavat numerot. Näin siis alun perin millään muulla operaattorilla ei ole tilaajia, joiden

puhelinnumero alkaa 2:lla. Päivitystietokantoja alustettaessa operaattoria 5 varten tarvitsee lisätä

siirrettävyystauluun (NP_TABLE) periaatteessa vain yksi tietue jokaista sen alueella olevaa

puhelinkeskusta (tai CPS:ää) kohden. Olkoon operaattorilla 5 kolme puhelinkeskusta, joiden

reititysnumerot ovat 243, 267 ja 288. Näin ollen tietueet (”243”, ”243”), (”267”, ”267”) ja (”288”,

”288”) lisätään kaikkiin regulaattorin päivitystietokantoihin. Aikaleimat jätetään tässä

Page 90: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

78

huomioimatta [Kappale 7.4.2]. Operaattoreiden 4 ja 5 NA-asiakkaiden [Kuva 8.1] luettua

päivitykset regulaattorin tietokannasta ne lisäävät paikallisiin numerotietokantoihin tauluihin

NUMBERS samat tietueet. Operaattori 3 lisää tauluun NUMBERS2 tietueet (”43”,”243”),

(”67”,”267”) ja (”88”,”288”). Operaattorit 2 ja 1 puolestaan lisäävät tauluihin NUMBERS24

tietueen (”3”,”243”), tauluihin NUMBERS26 tietueen (”7”,”267”) ja tauluihin NUMBERS28

tietueen (”2”,”288”). Käytännössä käytetään kuitenkin useampia numeroita puhelinkeskusta kohti.

Vastaavalla tavalla määritetään kaikkien muidenkin operaattoreiden reititysnumerot. Jos tilaaja

24377662 siirtyy operaattorin 4 alueelle, operaattorin 4 PNAC lähettää päivitystietueen

(”24377662”,”466”), jokaiseen regulaattorin tietokantaan tauluun COM5 olettaen, että siirtyvä

tilaaja siirtyy reititysalueelle 466. Operaattorin 5 vahvistettua pois siirtyminen regulaattorin AVCC

siirtää päivityksen taulusta COM5 päivitystauluun, josta edelleen operaattoreiden asiakkaat käyvät

sen aikanaan lukemassa. Huomattakoon, että alkusynkronoinnissa numerotietokantaan lisätty tietue

(”243”,”243”) on edelleen voimassa. Haut tehdään noudattaen pisimmän osuman periaatetta, joten

avain ”24377662” antaa lopulta oikean reititysosoitteen 466.

8.2.3 Päivitysoperaatioiden laukaisu

Määrävälein tehtävä haku voidaan määritellä esimerkiksi käyttöjärjestelmän crontab-toiminnolla

UNIX-pohjaisissa järjestelmissä. Sopiva hakujen väliaika voi olla minuutista kymmeneen

minuuttiin. Päivitysoperaatio voidaan laukaista monella eri tavalla – joko ylläpitäjän tai asiakkaan

toimesta. Asiakkaan laukaisemiin päivityksiin täytyy liittyä kuitenkin jonkinlainen autentikointi.

Internetissä voidaan käyttää esimerkiksi jotakin HTTP-pohjaista rajapintaa [39] laukaisemaan

päivitysoperaatio. GSM-verkossa voidaan käyttää puolestaan SMS-palvelua käynnistämään uuden

reititystiedon lähetys, mikäli asiakkaalle halutaan antaa mahdollisuus itse mahdollisuus informoida

siirtymisestä.

Päivityspalvelimien tietosisältöä puhdistetaan koko ajan. Normaalisti siirrettävyystaulun tietueella

ei enää tee mitään sen jälkeen, kun jokainen asiakasoperaattori on lukenut sen ja päivittänyt oman

tietokantansa. Luotettavuuden takaamiseksi kannattaa kuitenkin pitää siirtymiset taulussa riittävän

kauan – esimerkiksi viikon tai kuukauden. Näin numerotietokanta voi korjata korruptoituneen

tietosisällön regulaattorin tietokantojen avulla, mikäli riittävän uusi varmuuskopio on saatavilla.

Mikäli kaikki NDB- ja UDB-palvelimet sekä NA:t palvelimet toimivat moitteettomasti, ei tietueita

tarvitse pitää tauluissa ainakaan tuntia kauemmin. Päivityspalvelin puolestaan toipuu vikatilanteista

ilman minkäänlaisia toimenpiteitä, koska sen sisältö voidaan koska tahansa tuhota. Tämän jälkeen

se alkaa ottaa uusia päivityksiä vastaan operaattoreiden PNAC-asiakkailta, ja tietyn ajan kuluttua se

on valmis palvelemaan operaattoreita. Kuten todettua, useimmiten riittäisi pitää tietueita kannassa

korkeintaan tunnin ajan. Tosin juuri uudelleen käynnistettyä UDB:ta ei voida käyttää NDB:n

uudelleensynkronoinnissa, koska päivityshistoria on tuhottu. Minkäänlaista replikointia muiden

palvelimien kanssa ei siis tarvita. UDB:n uudelleen käynnistyksessä ei voida siirtää PNDB:stä

UDB:hen niitä uudelleen lähetettyjä tietueita, jotka ovat ajalta ennen uudelleen käynnistystä, koska

niiden ajankohtaisuudesta ei voida olla varma. Korruptoituneen UDB:n asiakkaat vaihtavat UDB:tä.

Toipunut UDB jää uudeksi toissijaiseksi palvelimeksi.

Page 91: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

79

8.2.4 Operaattori/regulaattori-rajapinnan SQL-kyselyt

Operaattorin ja regulaattorin välille määritellään siis ODBC pääsyrajapinnaksi. Sen lisäksi tarvitaan

neljä jo aiemmin esiteltyä standardia SQL-kyselyä:

INSERT INTO COMX (D_NUMBER, R_NUMBER, U_TIME, RETRY) VALUES (’$dnum’, ‘$rnum’,

$cur_time, 0)

INSERT INTO COMX (D_NUMBER, R_NUMBER, U_TIME, RETRY) VALUES (’$dnum’, ‘$rnum’,

$u_time, 1)

SELECT D_NUMBER, R_NUMBER, MAX(U_TIME), S_TIME FROM moved_numbers WHERE

S_TIME > $timestamp GROUP BY D_NUMBER ORDER BY ASC S_TIME

UPDATE COMX SET CONFIRM=1 WHERE D_NUMBER=’$dnum’

Kaksi ylintä liittyvät päivitystietueiden levitykseen (PNAC -> PNDB). Seuraava liittyy

päivitystietojen hakuun (NA -> UDB) ja alin siirtymisen vahvistamiseen (PNAC -> PNDB). Edellä

esitetty onkin oikeastaan kaikki, mitä tarvitsee standardoida monien osapuolten ympäristössä. Toki

jos ajatellaan numerotietokantoja ja päivitystietokantoja kaupallisina ohjelmistoina, tulee myös

numerotiedon hakuun liittyvät SQL-kyselyt määritellä, mutta edellä esitetty riittää

siirrettävyystiedon levitykseen.

8.3 Skaalautuvuus

8.3.1 Oletukset

Taulukossa 3 [sivu 73] esitetyt MySQL:n hakuaikojen numeroarvot toteutuvat, jos koko tietokanta

pidetään palvelinkoneen muistissa (RAM). Levyltä hakeminen on huomattavasti hitaampaa. 50

miljoonan tilaajan siirrettävyysalueella tulee varautua noin 1 GB:n suuruiseen tietokantaan. Jos

indeksoinnin oletetaan vievän saman verran muistia kuin data, vaaditaan että tietokantapalvelimen

käytössä tulee olla 2 GB muistia. Tällöin on realistista tehdä oletus kuvan 3.2 [sivu 19] perusteella,

että haut eivät hidastu taulun koon kasvaessa eivätkä taulujen lukumäärän kasvaessa. Taulukon 3

[sivu 73] perusteella arvioidaan, että yksi haku kestää 400µs. Jotta ei oltaisi liian optimistisia,

oletetaan, että 400µs kuluu kokonaisuudessaan palvelimella. Reititystiedon haku suoritetaan

ainoastaan yhden kerran puhelua kohti, ja jokaisessa puhelussa B-tilaajan numero saadaan

peräkkäislähetyksellä käyttäen DTMF-merkkejä (Discrete Tone Multi Frequency) siten, että

näppäilyjen väliaika on kesimäärin 0.5 s.

Palvelimeen kohdistuvaan kuormaan vaikuttavat erityisesti verkossa kutsujen saapumisintensiteetti

(λ). Puhelinkeskuksen kuormitukseen vaikuttaa myös puhelujen pitoaika. CPS:n (Call Processing

Server) osalta puhelun pitoajan vaikutus kuormitukseen on vähäisempi, jos media ei kulje CPS:n

kautta. Esimerkiksi SIP-siganalointia (Session Initiation Protocol) käytettäessä [8] CPS (SIP-proxy)

ei välitä mediaa. Oletetaan kuitenkin, että jokainen tilaaja aiheuttaa kiiretunnin aikana

Page 92: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

80

liikenneintensiteetin (a) 0.03 erlang [40], ja että keskimääräinen puhelun pitoaika (h) on 3

minuuttia. Numerotietokannan päivitykset aiheuttavat liikennettä myös jonkin verran. Arvioidaan

karkeasti kuten aiemminkin tässä työssä, että 10 prosenttia tilaajista siirtyy vuosittain. Vuorokauden

siirtymisistä neljäsosa sattuu kiiretunnille. Oletetaan vielä, että tilaajanumeron pituus vaihtelee

välillä 6-10 numeroa, jolloin RIS joutuu lähettämään NDB:lle keskimäärin 6 SQL-kyselyä, jos

keskimääräinen tilaajanumeron pituus on 9 numeroa [Kappale 7.3.4]. NA puolestaan lähettää

NDB:lle keskimäärin 3 SQL-kyselyä yhtä päivitysoperaatiota kohden.

8.3.2 Laskelmat

Seuraavissa laskelmissa tarkastellaan erityisesti RIS:n ja NDB:n skaalautuvuutta. PNDB:n ja

UDB:n skaalautuvuus on aivan ilmeistä, koska kyselyjä niihin kohdistuu vuosittain vain joitakin

miljoonia. Sen sijaan NDB:hen saattaa kohdistua miljoonia kyselyjä tunnissa. Kiiretunnille saadaan

kyselyjä NA:lta:

h

kyselyä10300

vuosi

vrk365

vuosi

päivitystä105

päivitys

kyselyä3

h

vrk1/4N

6

NA ≈⋅⋅

⋅=

Tilaajakohtaisen liikenneintensiteetin 0.03 erlang ja keskimääräisen puhelun pitoajan 3 minuuttia

avulla voidaan laskea tilaajakohtainen kutsuintensiteetti [40]:

tunnissa

puhelua0.6

1/603

0.03a/hÿÿha =

⋅==ÿ=

Saapuvien kutsujen intensiteetti saadaan jakamalla edellinen tulos kahdella1, joten jokainen tilaaja

aiheuttaa kiiretunnin aikana NDB:hen kutsuintensiteetin 0.3 puhelua tunnissa. Tämä vastaa BHCA-

arvoa 15 miljoonaa. Kiiretunnille saadaan kyselyjä RIS:ltä:

ävyysalueh/siirrett

kyselyä109

yysaluesiirrettäv

tilaajaa1050

puhelu

kyselyä6

tilaaja

puhelua0.3N 6

RIS7⋅=⋅⋅⋅=

Kyselyjä joudutaan suorittamaan paljon. NA:n aiheuttama kuorma on siis varsin mitätön verrattuna

RIS:n aiheuttamaan kuormaan. NA:n aiheuttama kuorma ei pienene palvelimia lisättäessä, jos

NDB:n sisältöä ei hajauteta eri palvelimiin, koska päivitys suoritetaan UDB:n tietojen perusteella

jokaiseen siirrettävyysalueen palvelimeen. Sen sijaan RIS:ien aiheuttama kuorma pienenee

merkittävästi, jos palvelimien lukumäärää lisätään. Lasketaan kuinka monta sarjallista kyselyä

NDB pystyy suorittamaan tunnissa:

1 Pätee ainoastaan likimääräisesti, koska kiiretunnin aikana on todennäköisempää, että B-tilaaja on varattu,

jolloin A-tilaaja yrittää hetken kuluttua uudestaan aiheuttaen lisää kuormaa palvelimeen.

Page 93: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

81

kyselyä/h109.0ly0.4ms/kyse

h3600000ms/C 6

NDB ⋅≈=

Kapasiteetti tukee edellisen kappaleen oletuksilla 1500000 BHCA:n puheluliikennettä. Näin

voidaan laskea tarvittavien palvelimien (NDB) lukumäärä:

1010.001...kyselyä/h109.0

yä/h10300kyselkyselyä/h109

C

NNlkm

6

7

NDB

RISNANDB ≈=

⋅+⋅=+=

Luku on melko pieni ottaen huomioon pessimistiset alkuoletukset. Ensinnäkin tietokantapalvelimen

hakuajat on saatu ajamalla palvelinta PC:ssä, jollaisen saa kaupasta nykyisin korkeintaan parilla

tuhannella eurolla. Tosin muutama ylimääräinen muistikampa täytyy asentaa1. Jokaista puhelua ei

todellisuudessa muodosteta peräkkäislähetyksellä. Esimerkiksi GSM-verkossa peräkkäislähetys ei

ole edes mahdollinen. Ainakaan MySQL ei suorita kyselyjä sarjallisesti, vaan useita hakuja

suoritetaan samanaikaisesti. Varsinaista kuormitustestiä, jossa palvelimen kuormitusta mitattaisiin

useilla asiakkailla samanaikaisesti, ei tähän diplomityöhän sisälly. Oletettu 400µs edustaa pahinta

tapausta. Tosin LIKE-predikaatin sisältävät kyselyt [esim. sivulla 58] ovat hieman hitaampia kuin

taulukon 3 osoittama 0.4 ms sivulla 73. Säikeistettyjen proseduurien etu tulee esiin etenkin monen

CPU:n palvelinlaitteistoilla. Käytännössä kuitenkin edellä laskettu 1500000 BHCA vastaa erittäin

suurta liikennettä. Liikenneintensiteetillä 0.03 erlang/tilaaja ja keskimääräisellä puhelun pitoajalla 3

minuuttia tämä vastaa noin 5 miljoonan tilaajan puhelinkeskusta (tai CPS:ää). Tällaisia tiettävästi ei

ole missään käytössä. Realistisesti voidaan olettaa, että yksi NDB puhelinkeskusta tai CPS:ää

kohden riittää.

NDB:n skaalautuvustarkastelun myötä numeron siirrettävyyteen liittyvä tiedonhallintaongelma on

ratkaistu, koska tilallisista elementeistä (tietokantapalvelimista) NDB:hen kohdistuu suurin kuorma.

Käytännössä suurin osa hakuihin liittyvästä prosessoinnista tapahtuu RIS:ssä. RIS joutuu ajamaan

mahdollisesti tuhansia samanaikaisia prosesseja. Peräkkäislähetys on erittäin kuormittavaa, koska

hakuprosessi kestää tavallisesti useita sekunteja, sillä näppäilyjen välillä voi olla jopa sekuntien

taukoja. Pahin tilanne RIS:n kannalta on se, että merkit lähetettäisiin puhelimella, joka toimii

kiekkopyörittimellä. Tällöin B-tilaajan numeron lähettäminen saattaisi kestää kymmeniä sekunteja.

Suurin osa PSTN-päätelaitteistakin kuitenkin tukee peräkkäislähetystä DTMF-merkeillä. RIS ei

säilytä tilatietoa puhelinnumeroista hakuprosessin elinikää kauemmin. Mikäli RIS kaatuu, puhelu

estyy2, ja tilaaja voi yrittää myöhemmin uudestaan. RIS:n muistin tyhjeneminen aiheuttaa estoa

vain vikaantumishetkellä ja siihen asti, kunnes RIS on käynnistynyt uudelleen. Reititystietojen

integriteettiin RIS:n vikaantumisella ei ole vaikutusta.

1 Edellyttää, että emolevy tukee riittävän lisämuistin asentamista.

2 Puhelu estyy, mikäli tilaajaa palvelevaa RIS:ää ei ole kahdennettu.

Page 94: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

82

Edellä esitettyihin laskelmiin ja oletuksiin perustuen voidaan arvioida prosessien lukumäärää

RIS:issä kiiretunnin aikana. Keskimääräinen hakuprosessin elinikä:

4.0silähetysväl

s0.5

puhelu

iälähetysväl8tPS/RIS =⋅=

Keskimääräinen prosessien lukumäärä kiiretunnin aikana:

16700tilaajaa1050tilaaja/h

puhelua0.3

s

h

3600

1

puhelu

s4.0lkm 6

PS/RIS ≈⋅⋅⋅⋅=

Saatu tulos kuvaa sitä, kuinka montaa hakuprosessia ajetaan keskimäärin samanaikaisesti koko

siirrettävyysalueella kiiretunnin aikana. Liikennevolyymiltaan miljoonan BHCA:n

puhelinkeskukseen arvo olisi hieman yli tuhat. Prosessointikapasiteettia siis tarvitaan. Mikäli

käytettäisiin ainoastaan kertalähetystä, tulos pienenisi erittäin ratkaisevasti, koska yksittäinen haku

kestäisi vain 400µs. Samanaikaisia prosesseja syntyy, jos merkkejä joudutaan odottelemaan A-

tilaajalta. Tässä diplomityössä RIS:stä on ohjelmoitu ainoastaan se puoli, joka lähettää kyselyjä

NDB:lle. Työ ei puutu siihen, miten tilaajan lähettämät numerot saadaan RIS:lle [funktio ”GET

DIGIT” kuvassa 7.5 sivulla 60]. SIP-puhelun muodostukseen kyseinen funktio olisi helpommin

toteutettavissa kuin televerkkoon johtuen erityisesti avoimista standardeista ja protokollista

ohjelmistokehityksessä.

Page 95: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

83

9 Johtopäätökset

9.1 Teknologia

Standardien ja protokollien merkitystä ei tietoliikennetekniikassa voi väheksyä. Numeron

siirrettävyys on kuitenkin palvelu, jossa monet tekijät puoltavat tässä diplomityössä esitettyä

sovellustason ratkaisua. Eli jokaista bittiä tai tavua ei tarvitse määritellä jossakin standardissa, jotta

järjestelmä olisi toimiva, koska käytetään valmista standardia sovellusta, joka piilottaa bittitason

asiat. Tietoa operaattoreiden välillä lähetetään tekstimuotoisena. Osapuolten lukumäärä on melko

pieni. Voidaan melko realistisesti olettaa, että siirrettävyysalueella toimivien palveluntarjoajien

lukumäärä on korkeintaan joitakin kymmeniä. Tilaajien siirtymisestä aiheutuvat päivitykset eivät

tarvitse olla globaalisti saatavilla, vaan ainoastaan siirrettävyysalueen sisällä. Toisaalta jollakin

siirrettävyysalueella toimiva järjestelmä tulee olla siirrettävissä toiselle siirrettävyysalueelle, mikäli

ajatellaan siirrettävyyttä tukevaa järjestelmää kaupallisena ohjelmistona.

Tässä diplomityössä on osoitettu, että luotettava ja tehokas tiedonhallintajärjestelmä numeron

siirrettävyyttä varten saadaan aikaiseksi melko pienillä kustannuksilla. Esitetyt ratkaisut on testattu

ympäristöissä, jotka sisältävät lähes yksinomaan julkisen lähdekoodin ohjelmistoja. Järjestelmä

toimii tarpeeksi tehokkaasti laitteilla, jotka eivät ole kaikkein uusinta uutuutta. Eli mitään 32:n

CPU:n palvelinlaitteistoja ei tarvita tietokantapalvelimille. Ohjelmistojen lisäksi tarvitaan joitakin

työasemia ajamaan palvelimia ja asiakasohjelmistoja [Kuva 8.1 sivulla 77]. Työ ei kuitenkaan ole

puuttunut siihen, mitä muutoksia vaaditaan PSTN/ISDN-puhelinkeskuksiin tai niiden kanssa

toimiviin IN-elementteihin, jotta palvelu voitaisiin toteuttaa. Puhelun muodostukseen tulee ainakin

muutoksia. Jokaiselle puhelulle tulee tehdä numeromuunnos, jonka jälkeen suoritetaan perinteinen

numeroanalyysi. Nykyinen IN-teknologia pystyy tukemaan palvelua, mutta siihen on mahdollisesti

tehtävä joitakin päivityksiä, mikä tietysti maksaa.

Skaalautuvuudessa esitetty ratkaisu on aivan ylivertainen TRIP/CTRIP-ratkaisuun [5] nähden.

Internetissä nykyiset 140000 reittiä runkoverkossa ovat jo siinä määrin liikaa, että BGP ei täysin

toteuta sitä tehtävää, jota varten protokolla on alun perin tehty. Mukautuminen topologian

muutoksiin on hidastunut, koska vasteaikoja (hold time) topologiamuutoksiin on pidennetty.

Yhdenkin runkoverkon linkin vikaantuminen saattaa aiheuttaa todella massiivisen ketjureaktion,

jonka aikana verkon toiminnallinen tila on huono. Reitittimien kapasiteettia kuluu paljon

reititystaulujen uudelleen laskemiseen. TRIP/CTRIP:ssä numeron siirrettävyys sidotaan

reititykseen, jolloin tilaajan siirtyessä mahdollisesti kaikkien palvelimien tietosisältö muuttuu.

Tietosisällön muutos tapahtuu kappaleessa 2.4.4 esitetyn päätösprosessin tuloksena. Näin ollen

tilaajan siirtyminen vastaisi TRIP:llä sitä, että BGP:llä poistettaisiin jostakin reitti ja lisättäisiin

jonnekin reitti. Operaation seuraus vastaa sitä BGP:n ketjureaktiomaista toimintaa, jossa

reititystaulujen uudelleen laskenta pitää suorittaa mahdollisesti jokaisessa reitittimessä, ja sen

mukaisesti mainostaa naapureille uusia reittejä. Jokainen ketjureaktio saattaa aiheuttaa suuren

määrän uusia ketjureaktioita. Jos Internetissä 140000 tietueella prosessointi on raskasta, miten

Page 96: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

84

vaikeaa prosessointi olisi toimittaessa niillä mahdollisesti kymmeniä miljoonia tietueita sisältävillä

tietokannoilla, joita syntyisi 50 miljoonan tilaajan siirrettävyysalueella? Tämän diplomityön

ratkaisussa mitään ketjureaktioita ei synny, koska tilaajan siirtyminen ei muuta verkon loogista

topologiaa, sillä numeron siirrettävyys on irrallaan reitityksestä. Vikatilanteista toipuminen

tapahtuu monistettujen UDB-tietokantojen avulla sekä paikallisella NDB:n varmuuskopioinnilla.

Vikatilanteesta toipuminen tehokkaasti ei edellytä edes kovin korkeatasoista verkkoyhteyttä, koska

synkronoinnissa siirrettävän tiedon määrä on vähäinen. Päivitystietueiden levitys regulaattorin

kautta on perusteltua, koska tieto tilaajan uudesta reititysnumerosta on joka tapauksessa levitettävä

kaikkialle.

TRIP/CTRIP-tutkimus [5] ei esitä ratkaisua skaalautuvuusongelmaan eikä esitä toteutusta sille,

miten reititystieto haetaan palvelimelta. Tässä diplomityössä on otettu huomioon molemmat.

Reititystiedon haussa käytetään hyväksi relaatiotietokantojen tehokkaita hakurakenteita

sellaisenaan. Ohjelmistokehityksessä säästetään paljon resursseja, koska tehokkaita tietorakenteita

ei tarvitse kehittää. Asiakasohjelmistojen tarvitsee ainoastaan generoida SQL-kyselyjä. Voidaan siis

käyttää hyväksi niitä mittavia tuloksia, joihin tietorakenteiden ja erityisesti relaatiotietokantojen

tutkimuksessa ja tuotekehityksessä ollaan päästy. Tällöin selvitään periaatteessa hyvinkin

yksinkertaisilla ja kevyillä ratkaisuilla numeron siirrettävyyden vaatimissa ohjelmistoissa. TRIP:lle

ja CTRIP:lle voi jäädä silti tärkeä rooli televerkon ja IP-verkon välisessä yhteistoiminnassa. TRIP

ja CTRIP tarjoavat mahdollisuuden operaattorin politiikan mukaisen optimaalisen yhdyskäytävän

valintaan televerkon ja IP-verkon rajan ylittäville puheluille. Nähtäväksi jää, kuinka nopeasti

verkkojen konvergenssi etenee vai eteneekö lainkaan. Näin ollen jää myös nähtäväksi, tarvitaanko

TRIP:iä tai CTRIP:iä lainkaan. Tämän diplomityön ratkaisu on riippumaton verkkoteknologiasta ja

jättää TRIP:lle ja CTRIP:lle option etsittäessä sopivaa yhdyskäytävää.

ENUM:in (E.164 Number Mapping) [30] käyttöä toteutettaessa numeron siirrettävyys IP-verkon ja

televerkon välillä on myös esitetty. ENUM:ssa on monia yhtäläisyyksiä tämän diplomityön

ratkaisun kanssa. Se erottaa myös numeron siirrettävyyden reitityksestä. Tiedon tallennuksen

rakenne sen sijaan ENUM:ssa on aivan erilainen, koska käytetään hajautettua hierarkkista

rakennetta. ENUM:in etu on se, että yksittäinen palvelin on vastuussa vain osasta numeroavaruutta.

Haittana tästä on hitaat vasteajat tietueiden muutoksiin, koska hajautuksen etu saadaan aikaan

välimuisteilla. Vastuu siirtyneestä tilaajasta jää tilaajan alkuperäiselle operaattorille. Tietueiden

elinikä välimuistissa määrää, kuinka nopeasti haut tuottavat päivitettyä tietoa. Lyhyet eliniän

määrittelyt vievät pois hajautuksesta saatava etua, ja luotettavuus saattaa heiketä. Monistettu

arkkitehtuuri on hajautettua luotettavampi. Etäälle hajautetut tietokannat lisäävät myös liikennettä

verkossa. Luotettavuuteen vaikuttavat sekä palvelimien että verkon linkkien vikaantumisen

todennäköisyydet. ENUM toisi mukanaan Internetin nimipalvelun ongelmat televerkonkin

numeropalveluun. Nykyisin Internetin nimipalvelu on erittäin altis etenkin

palvelunestohyökkäyksille (engl. denial of service attack).

Page 97: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

85

9.2 Numeron siirrettävyys tulevaisuudessa

Suomessa regulaattorin päätöksen mukaisesti [1] numeron siirrettävyyspuhelinverkossa toteutetaan

kolmessa vaiheessa. 1.7.2003 siirrettävyyden on toimittava siten, että GSM-puhelu ohjataan aluksi

alun perin tilaajaa palvelleeseen verkkoon, josta se ohjataan edelleen siihen verkkoon, johon tilaaja

on siirtynyt. 1.1.2004 pitää GSM-puhelut pystyä välittämään suoraan siihen verkkoon, johon tilaaja

on siirtynyt. Aikataulu on siis erittäin tiukka. Vielä toisessa vaiheessa kiinteän verkon siirtyneille

tilaajille kohdistuvat puhelut voidaan ohjata alkuperäisen operaattorin kautta. Kolmannessa

vaiheessa, jonka aikataulusta ei ole vielä tätä diplomityötä kirjoitettaessa tarkkaa tietoa, kaikki

puhelut välitetään suoraan siihen verkkoon, jossa tilaaja kullakin hetkellä on. Internet-puheluista ei

vielä mitään päätöstä ole tehty.

Numeron siirrettävyyttä arvatenkin haluavat eniten uudet telemarkkinoille pyrkivät operaattorit,

koska tällöin asiakkaiden olisi helpompi vaihtaa liittymää. Vastaavasti merkittävän markkina-

aseman saavuttaneille suurille operaattoreille numeron siirrettävyys merkitsee hyvin ilmeisesti

tilaajien menetyksiä. Puhelujen hintakilpailu varmasti kovenee, koska ensimmäinen keino uusille

operaattoreille saada uusia asiakkaita on tarjota puheluja kilpailijoita halvemmalla. Siirrettävyys

sinällään ei kuitenkaan ole syy vaihtaa palveluntarjoajaa vaan se, että joko hinnoitteluun tai

palveluihin ei olla tyytyväisiä. On kuitenkin selvää, että kovin suuriin investointeihin normaali

liikeyritys ei lähde, jos niillä pyritään toimiin, jotka johtavat asiakkaiden menetyksiin!

Toinen merkittävä markkinapoliittinen ongelma liittyy puhelujen hinnoitteluun. Nykyisinhän tilaaja

pystyy ainakin perinpohjaisen tutkiskelun jälkeen tekemänsä palvelusopimuksen ja puhelinnumeron

perusteella päättelemään, paljonko puhelu kyseiseen numeroon maksaa. Jos siirrettävyys

toteutetaan, ei numerosta enää näe, minkä operaattorin tilaajalle ollaan soittamassa. Näin ollen ei

voida tietää kuinka paljon puhelu maksaa, ellei hinnoittelua yhtenäistetä. Ongelma liittyy siis

kuluttajansuojaan. Mahdollisesti puhelujen hinnoittelua on siis yhtenäistettävä tai muutettava

veloituskäytäntöä siten, että myös B-tilaaja maksaa osan puhelusta. Kolmas keino olisi jonkin

nauhoitteen avulla ilmoittaa jokaista puhelua muodostettaessa A-tilaajalle paljonko puhelu maksaa.

Kun numeromuunnos on tehty, tiedetään missä B-tilaaja on ja sen perusteella paljonko puhelu

maksaa. Eri asia on jälleen se, kuinka helposti kyseinen palvelu olisi toteutettavissa. Ainakin GSM-

verkossa on jo nykyisin nauhoiteviestit käytössä ainakin tilanteessa, jossa soitetaan

matkapuhelimeen, johon ei saa yhteyttä.

Suomessa ainakin ensimmäistä vaihetta silmällä pitäen tämä diplomityö on myöhässä, koska

numeron siirrettävyyteen liittyvät päätökset on siltä osin tehty, ja verkkojen päivitys numeron

siirrettävyyttä tukeviksi on käynnissä. Ratkaisun edut tulevatkin esiin paremmin tulevaisuuden

tietoverkoissa, jossa IP-pohjaisella televiestinnällä on merkittävä asema. Riippumattomuus

verkkoteknologiasta tekee ratkaisusta mukautuvan. Toteutettu prototyyppi tukee numeron

siirrettävyyttä mistä tahansa teknologiasta mihin tahansa teknologiaan. Siirrettävyys

verkkoteknologiasta toiseen edellyttää kuitenkin loogisen numeroinnin yhtenäistämistä. E.164:n

mukaiset numerot ovat yksinkertaisia ja tarjoavat laajan numeroavaruuden. Ainakin teoriassa

Page 98: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

86

tilaajalle voidaan antaa mikä tahansa käytössä olevaan numeroavaruuteen kuuluva luettelonumero,

joka ei ole minkään muun numeron etuliite. Ratkaisu on siis erityisesti tulevaisuuden tietoverkkoja

varten sekä sellaisia maita varten, joissa numeron siirrettävyydestä ei ole tehty vielä päätöksiä.

Page 99: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

87

Lähdeviitteet

1. Viestintävirasto (FICORA): Ennakkopäätös matkaviestinverkkojen numeron siirrettävyydestä.

Nro. 172/520/02 Pvm. 20.3.2002.

2. R. Kantola, J. Requena, N. Beijar: Interoperable routing for IN and IP Telephony. Computer

Networks, 2001. Vol. 35, 597-609

3. M. Peuhkuri: Luentokalvot kurssilla S-38.192 Verkkopalvelujen tuotanto: Luento 2: Domain

Name System. Teknillinen korkeakoulu, Tietoverkkolaboratorio 2002. Saatavilla

http://www.tct.hut.fi/opetus/s38192/k2002/slides/handout-09security.pdf. Sisältö tarkistettu

2.12.2002.

4. J. Rosenberg, H. Salama, M. Squire: RFC 3219 Telephony Routing over IP, IETF Proposed

Standard. Saatavillaftp://ftp.isi.edu/in-notes/rfc3219.txt.

5. N. Beijar: Diplomityö: Distribution of Numbering Information in Interconnected Circuit and

Packet Switched Networks. Teknillinen korkeakoulu, Tietoverkkolaboratorio 2002

6. J. Postel:RFC 791:Internet Protocol, IETF Standard. Saatavillaftp://ftp.isi.edu/in-

notes/rfc791.txt.

7. S. Deering, R. Hinden:RFC 1883, Internet Protocol version 6, IETF Proposed Standard.

Saatavillaftp://ftp.isi.edu/in-notes/rfc1883.txt.

8. H. Schulzrinne. Graduate course “Internet Multimedia”. Oulu, Kesäkuu 2002, Luentomonisteet.

9. Y. Rekhter, P. Gross:RFC 1771: Border Gateway Protocol version 4, IETF Standard. Saatavilla

ftp://ftp.isi.edu/in-notes/rfc1771.txt.

10. J. Moy: RFC 2328: Open Shortest Path First version 2, IETF Standard. Saatavilla

ftp://ftp.isi.edu/in-notes/rfc2328.txt.

11. J. Rosenberg, H. Schulzrinne: RFC 2871: A Framework for Telephony Routing over IP, IETF

Informational Document. Saatavillaftp://ftp.isi.edu/in-notes/rfc2871.txt.

12. J. Luciani, G. Armitage, J. Halpern, N. Doraswamy:RFC 2334 Service Cache Synchronisation

Protocol, IETF Proposed Standard. Saatavillaftp://ftp.isi.edu/in-notes/rfc2334.txt.

13. M. Luoma: Luentokalvot kurssilla S-38.192 Verkkopalvelujen tuotanto: Luento 9: Peering.

Teknillinen korkeakoulu, Tietoverkkolaboratorio 2002. Saatavilla

http://www.tct.hut.fi/opetus/s38192/k2002/slides/09peering.pdf. Sisältö tarkistettu 2.12.2002.

Page 100: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

88

14. R. Kantola, J. Requena, N. Beijar: A Common Numbering Infrastructure for IN and IP

Telephony, IN2000. Saatavillahttp://www.tct.hut.fi/tutkimus/ipana/paperit/. Sisältö tarkistettu

2.12.2002.

15. T. Bates, R. Chandra, E. Chen: RFC 2796 Route Reflection – An Alternative to Full Mesh

IBGP, IETF Poposed Standard. Saatavillaftp://ftp.isi.edu/in-notes/rfc2796.txt.

16. Telstra Corporation & Geoff Huston: Internet BGP Table, saatavilla:http://bgp.potaroo.net/.

Sisältö tarkistettu 2.12.2002.

17. V. Fuller, T. Li, J. Yu, K. Varadhan: RFC 1519: Classless Interdomain Routing, an Address

Assignment and Aggregation Strategy, IETF Proposed Standard. Saatavillaftp://ftp.isi.edu/in-

notes/rfc1519.txt.

18. T. Socolofsky, C. Kale: RFC 1180 A TCP/IP Tutorial, IETF Informational Document.

Saatavillaftp://ftp.isi.edu/in-notes/rfc1180.txt.

19. MySQL Interactive Documentation:http://www.mysql.com, KPNQwest Finland Oy:n peili

http://mysql.kpnqwest.fi. Sisältö tarkistettu 2.12.2002.

20. J. Puustjärvi: Luentokalvot kurssilla T-76.143 Tiedonhallintajärjestelmät. Teknillinen

korkeakoulu, syksy 2001.

21. J. Hoffer, M. Prescott, F. McFadden: Modern Database Management, sixth edition, Prentice

Hall 2002. ISBN 0-13-042355-6.

22. Transaction Processing Performance Council (TPC) Home Page:http://www.tpc.org/. Sisältö

tarkistettu 2.12.2002.

23. Microsoft Universal Data Access websites: Saatavillahttp://www.microsoft.com/data/.

Microsoft Home Pagehttp://www.microsoft.com. Sisältö tarkistettu 2.12.2002.

24. E. F. Codd: A Relational Model of Data for Large Relational Databases. Communications of

the ACM 13. June 1970.

25. PostgreSQL Global Development Group: PostgreSQL Home Pagehttp://www.postgresql.org.

Sisältö tarkistettu 2.12.2002.

26. PHP (Hypertext Preprocessor) Home Page:http://www.php.net. Sisältö tarkistettu 2.12.2002.

27. MyODBC Reference Manual for Version 3.51:http://www.mysql.com/products/myodbc/,

KPNQwest Finland Oy:n peilihttp://mysql.eunet.fi/products/myodbc/manual_toc.html.

28. The X/Open SQL Call Level Interface, X/Open Company LTD, Online, 1995

Saatavilla http://www.rdg.opengroup.org/public/tech/datam/cli.htm. Sisältö tarkistettu

2.12.2002.

Page 101: Lyhennelmä - TKKBHCA Busy Hour Call Attempts Puheluyritysten lukumäärä kiiretunnin aikana CGI Common Gateway Interface Rajapinta HTTP-palvelimen ja ulkoisten järjestelmien väliseen

89

29. C. Perkins: RFC 3344: IP Mobility Support for IPv4, IETF Proposed Standard. Saatavilla

ftp://ftp.rfc-editor.org/in-notes/rfc3344.txt.

30. P. Faltström: RFC 2916: E.164 number and DNS, IETF Proposed Standard. Saatavilla

ftp://ftp.isi.edu/in-notes/rfc2916.txt.

31. R. Kantola: S-38.118 Teletekniikan perusteet, luentomonisteet syksy 2000, TKK,

Tietoverkkolaboratorio. http://www.tct.hut.fi/opetus/s38118/s00/oppimateriaali.shtml. Sisältö

tarkistettu 2.12.2002.

32. J. Costa Requena, "An Implementation of the Server Cache Synchronization Protocol”, M.Sc

thesis, Laboratory of Telecommunications Technology, Helsinki University of Technology,

1999.

33. Open LDAP Foundation Home Page:http://www.openldap.org/. Sisältö tarkistettu 2.12.2002.

34. M. Wahl, T. Howes, S. Kille: RFC 2251 Lightweight Directory Access Protocol (v3). IETF

Proposed Standard. Saatavillaftp://ftp.isi.edu/in-notes/rfc2251.txt.

35. ANSI SQL 92 (SQL-2) määrittely. Saatavillahttp://www.netaktive.com/biblio/sql/. Sisältö

tarkistettu 2.12.2002.

36. R. Rivest: RFC 1321: The MD5 Message-Digest Algorithm, IETF Informational Document.

Saatavillaftp://ftp.isi.edu/in-notes/rfc1321.txt.

37. Netscape SSL 3.0 Specification. Saatavillahttp://wp.netscape.com/eng/ssl3/. Sisältö tarkistettu

2.12.2002.

38. J. Postel. RFC 793: Transmission Control Protocol, IETF Standard: Saatavilla

ftp://ftp.isi.edu/in-notes/rfc793.txt.

39. R. Fielding, J. Gettys, J. Mogul, H. Frystuk, P. Leach, T. Berners-Lee, RFC 2068: HyperText

Transfer Protocol –HTTP/1.1, IETF Proposed Standard. Saatavillaftp://ftp.isi.edu/in-

notes/rfc2068.txt.

40. S. Aalto: Luentomonisteet kurssilla S-38.145: Liikenneteorian perusteet, Teknillinen

korkeakoulu, Tietoverkkolaboratorio. Kevät 2002. Saatavilla

http://www.tct.hut.fi/opetus/s38145/k02/luennot/luento01.pdf. Sisältä tarkistettu 2.12.2002.