Upload
elton
View
66
Download
4
Embed Size (px)
DESCRIPTION
Elosztott programozás I.C.E.-al C#-ban. Hernyák Zoltán. 2005. Eszterházy Károly Főiskola. Információtechnológiai tsz. Szekvenciális programozás. Programozás ≈ Algoritmus implementálása Algoritmus jellemzője: egyértelmű ! Így a kapott program egy egyszálú, ún. szekvenciális - PowerPoint PPT Presentation
Citation preview
Elosztott programozás
I.C.E.-al C#-ban
Hernyák Zoltán
Eszterházy Károly Főiskola
Információtechnológiai tsz.
2005
Szekvenciális programozás
22
Programozás ≈ Algoritmus implementálása
Algoritmus jellemzője: egyértelmű!
Így a kapott program egy egyszálú, ún. szekvenciális program.
Szekvenciális programozás
3
Szekvenciális programozás előnyei:
-Nagyon sok algoritmus létezik ezen stílusra
-Ezen algoritmusok „egyszerűek”
-Könnyű őket implementálni
-A kész programot egyszerű elindítani
-A futó programot könnyű debug-olni
-A futó programot könnyű leállítani
-A program elvileg mindig ugyanúgy működik
-A programra „egyszerű” helyességet bizonyítani
Szekvenciális programozás
4
Szekvenciális programozás hátrányai:
Hatékonysági kérdések merülnek fel:
- Az adott gépen kell minden erőforrásnak lennie
- Memória
- Processzor
- Háttértár
( ezek nem minden határon túl fejleszthetőek )
- Nem tudja kihasználni a többprocesszoros
rendszerek előnyeit sem
Többszálú programozás
5
Többszálú programozás:
Továbbra is egyetlen gépen belül vagyunk
Kiegészül 2 utasítással
(1) új szál indítása ( START )
(2) szál befejezésének megvárása ( JOIN )
MEGOSZTOTT VÁLTOZÓK
Többszálú programozás
6
Többszálú programozás:
A két szál ugyanazon számítógép által van futtatva:
- A szálak elérik ugyanazon memóriaterületeket
- Ez jó: a plusz szál a a számítás eredményét el tudja
helyezni egy megadott memóriaterületen, ahol
a fő szál majd meg tudja találni
- Ez rossz: közös változókat használnak, amelyek
használatát szinkronizálni kell
Többszálú programozás
7
Közös memóriaterületek hozzáférésének szinkronizálása
x := x + 1a := sin(x) / cos(x)
...
lock(x)
{
x = x+1;
}
...
...
lock(x)
{
x = x+1;
}
...
...
lock(x)
{
a = sin(x) / cos(x);
}
...
...
lock(x)
{
a = sin(x) / cos(x);
}
...
Elosztott programozás
8
Ha …
-A számítási folyamat programjai különböző hardware
elemeken futnak
-Nincs közös memória -> nem kell lock-olni
-Így mentesülünk a lehetséges programozási hibáktól
-A teljesítményt könnyű fokozni újabb gépek beállításával
-Ezek egyszerű, olcsó, 1 processzoros gépek
Elosztott programozás
9
-A különböző hardware elemeken futó programok egymással
hálózaton keresztül tartják a kapcsolatot
- adatokat cserélnek
- a feladatokhoz szükséges információkat küldik át
- részeredményeket küldenek át
- „hol tartasz” jellegű információkat küldenek át
- a végén általában egyik gép begyűjti a részered-
ményeket, összesíti, és befejezi a számítást
Elosztott programozás
Szerver
A szolgáltatást nyújtja
A szolgáltatást igénybe veszi
adatok
adatok
10
Kliens
Elosztott programozás
11
Szinkron kommunikáció: a hívó oldal megvárja a
kommunikációs üzenet (adat) nyugtázását (ez gyakran
a számítás eredményét jelenti)
Aszinkron kommunikáció: a hívó oldal nem vár, fut
tovább (ameddig csak lehet), majd általában egy
ponton bevárja a választ.
Busy waiting: a várakozás közben egy ciklusban
folyamatosan ellenőrzi, hogy a válasz megérkezett-e
már (terheli a helyi processzort)
Elosztott programozás
Speed-up =
Overhead: nem az algoritmusból eredő plusz idők
szekvenciális futási idő elosztott futási idő
12
Elosztott programozás
13
Adatcsere módszerei:
Message Passing: üzenetküldő rendszer, csomagok összeállítása, és
elküldése. A fogadó oldalon egy puffer fogadja és tárolja az üzeneteket,
és a kliens program ebből „ válogathat ”.
Általában nem típus-biztos, a csomag belseje tetszőleges mennyiségű
és típusú adatot tartalmazhat, melyet a kliens programnak meg kell értenie.
Jellemzően aszinkron: a küldő elküldi az üzenetet, és „elfeledkezik” róla.
Elosztott programozás
14
Adatcsere módszerei:
Remote Procedure Call:a kliens program ismeri a másik oldalon egy
függvény nevét és paraméterezését, és egyszerűen meghívja azt
átadván az aktuális paramétereket. A függvény visszatérési értéke
pedig a válasz.
Általában típus-biztos, a fordítóprogram a távoli eljáráshívás paraméterezését
a szokásos módon ellenőrzi.
Lehet szinkron: a küldő oldal „megvárja” a függvény lefutását a túloldalon.
Lehet aszinkron: a küldő oldal fut tovább, majd egy ponton „bevárja” a
visszatérési értéket.
fv. megvalósítása:fv. megvalósítása:
Elosztott programozás
15
Szerver
bool Primszam_e(int x)
{
.. számítás ...
...
}
bool Primszam_e(int x)
{
.. számítás ...
...
}
Kliens
fv. meghívása:fv. meghívása:
bool b = Primszam_e(10);bool b = Primszam_e(10);
bool Primszam_e(int x)
{
hálózaton ‘x’ átküldése
várakozás
eredmény visszaadása
}
bool Primszam_e(int x)
{
hálózaton ‘x’ átküldése
várakozás
eredmény visszaadása
}
interface lekérdezés, egyeztetés
Generált kód:Generált kód:
Elosztott programozás – WEB service
Web Service:Web Service:
16
WEB SzerverWEB Szerver
[WebMethod]bool Primszam_e(int x)
{
.. számítás ...
...
}
[WebMethod]bool Primszam_e(int x)
{
.. számítás ...
...
}
KliensKliens
Tetszőleges U.I. :Tetszőleges U.I. :
bool b = Primszam_e(10);bool b = Primszam_e(10);
bool Primszam_e(int x)
{
hálózaton ‘x’ átküldése
várakozás
eredmény visszaadása
}
bool Primszam_e(int x)
{
hálózaton ‘x’ átküldése
várakozás
eredmény visszaadása
}HTTP, SOAP, XML
Interoperábilis, típus-biztos, de lassúInteroperábilis, típus-biztos, de lassú
Proxy kód:Proxy kód:
Elosztott programozás – Remoting
Remote Service:Remote Service:
17
SzerverSzerver
bool Primszam_e(int x)
{
.. számítás ...
}
void Main()
{
port nyitása
fv regisztrálása
várakozás …
}
bool Primszam_e(int x)
{
.. számítás ...
}
void Main()
{
port nyitása
fv regisztrálása
várakozás …
}
KliensKliens
Tetszőleges U.I. :Tetszőleges U.I. :
bool b = Primszam_e(10);bool b = Primszam_e(10);
értesíteni a futtatót
hogy a Primszam_e() fv
melyik szerveren fut
értesíteni a futtatót
hogy a Primszam_e() fv
melyik szerveren fut
DLL
A két alkalmazás között azonos DLL kell!A két alkalmazás között azonos DLL kell!
TCP/IP
DLL
http://www.zeroc.com the home of ICE
Proxy kód:Proxy kód:
Elosztott programozás – I.C.E.
19
SzerverSzerver
bool Primszam_e(int x) { ... }bool Primszam_e(int x) { ... }
KliensKliens
generálva van a SLICE
leírásból
generálva van a SLICE
leírásból
I.C.E. kommunikációs DLL
A szerver interface-t egy nyelvfüggetlen leírássalkell rögzíteni: SLICE
A szerver interface-t egy nyelvfüggetlen leírássalkell rögzíteni: SLICE
TCP/IP
bool b = Primszam_e(10);bool b = Primszam_e(10);
I.C.E. kommunikációs DLL
Skeleton kód:Skeleton kód:generálva van a SLICE
leírásból
generálva van a SLICE
leírásból
Printer.ICEPrinter.ICE
module Demo { interface Printer { void printString(string s); }; };
module Demo { interface Printer { void printString(string s); }; };
C#
JAVA
C++
Python
V.B.
SLICE file
20
PHP
Win 98 SE Win 2000 Win XP
Linux on x86
Solaris 9 on SPARC
HP-UX 11.11 on PA-RISC
AIX 5.2 on Power
Win ME
MacOS X 10.3.x
Ice-E for Mobile and Embedded Devices
Type Range of Mapped Type Size of Mapped Type
bool false or true ≥ 1bit
byte −128 − 127 ≥ 8 bits 0−255
short −215 to 215−1 ≥ 16 bits
int −231 to 231−1 ≥ 32 bits
long −263 to 263−1 ≥ 64 bits
float IEEE single-precision ≥ 32 bits
double IEEE double-precision ≥ 64 bits
string All Unicode characters, Variable-lengthexcluding the character with all bits zero.
SLICE típusok
21
enum, structure, sequence, dictionary
exception , interface
operationnonmutating- nem változtat állapototidempotent - többször is meghívhatónincs overloading
SSL, TCP, UDP
Batch üzemű üzenetküldés
Saját thread ütemezés
SLICE egyéb lehetőségek
22
ICE működési struktúra
23
Object AdapterName = MyObjectAdapter
EndPoint = -h 193.225.3.16 –p 12002ThreadPool.Size = 10
ICE COMMUNICATORICE COMMUNICATOR
Object Adapter
Object Adapter
Obje
ct n
am
e =
MA
TH
Obje
ct n
am
e =
MA
TH
Ob
ject
nam
e =
SQ
LDB
Obje
ct n
am
e =
SQ
LDB
Ob
ject
Obje
ct
Ob
ject
Obje
ct
SLICE egyéb lehetőségek
Printer.ICEPrinter.ICE
module Demo { interface Printer { void printString(string s); }; };
module Demo { interface Printer { void printString(string s); }; };
slice2cs Printer.ice
24
Szerver oldali leprogramozás
Szerver oldali megvalósításSzerver oldali megvalósítás
using System;
public class PrinterI : Demo.Printer
{
public override void printString (string s,
Ice.Current current)
{
…
Console.WriteLine(s); …
}
}
using System;
public class PrinterI : Demo.Printer
{
public override void printString (string s,
Ice.Current current)
{
…
Console.WriteLine(s); …
}
}
25
Szerver oldali leprogramozás
Szerver oldali megvalósításSzerver oldali megvalósításSzerver oldali főprogram-részlet:Szerver oldali főprogram-részlet:
public static void Main (string[] args)
{
Ice.Communicator ic = Ice.Util.initialize ( ref args );
Ice.ObjectAdapter adapter =
ic.createObjectAdapterWithEndpoints
( „MainAdapter", "default -p 9000");
Ice.Object obj = new PrinterI();
adapter.add( obj,
Ice.Util.stringToIdentity("SimplePrinter"));
adapter.activate();
ic.waitForShutdown();
}
public static void Main (string[] args)
{
Ice.Communicator ic = Ice.Util.initialize ( ref args );
Ice.ObjectAdapter adapter =
ic.createObjectAdapterWithEndpoints
( „MainAdapter", "default -p 9000");
Ice.Object obj = new PrinterI();
adapter.add( obj,
Ice.Util.stringToIdentity("SimplePrinter"));
adapter.activate();
ic.waitForShutdown();
}26
Szerver oldali leprogramozás
Szerver oldali megvalósításSzerver oldali megvalósításKliens oldali felhasználás:Kliens oldali felhasználás:
public static void Main (string[] args)
{
Ice.Communicator ic = Ice.Util.initialize ( ref args );
Ice.ObjectPrx obj = ic.stringToProxy
( "SimplePrinter:default –h 192.168.1.100 -p 9000" );
PrinterPrx printer=PrinterPrxHelper.checkedCast(obj);
printer.printString("Hello World!");
}
public static void Main (string[] args)
{
Ice.Communicator ic = Ice.Util.initialize ( ref args );
Ice.ObjectPrx obj = ic.stringToProxy
( "SimplePrinter:default –h 192.168.1.100 -p 9000" );
PrinterPrx printer=PrinterPrxHelper.checkedCast(obj);
printer.printString("Hello World!");
}
27
Batched Oneway Latency Ice TAO Difference
Linux 7.73 µs 132.14 µs 1609%
Windows XP 16.78 µs 78.47 µs 368%
Text over Slow Connections ( 56 Kb / sec )
Ice TAO Difference
Message Size 6.9 kb 7.6 kb 10%
Transfer Time 1.02 s 1.12 s 10%
Text over Slow Connections with Ice Compression
Ice TAO Difference
Message Size 3.2 kb 7.6 kb 138%
Transfer Time 0.47 s 1.12 s 135%
Sebesség-összehasonlítás ( ICE – TAO )
28
29
Eszterházy Károly Főiskola
Információtechnológiai tsz.
2005
Köszönöm a figyelmet…
Elosztott programozás
I.C.E.-al C#-ban
Hernyák Zoltán