29
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

Elosztott programozás I.C.E.-al C#-ban

  • 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

Page 1: Elosztott programozás I.C.E.-al C#-ban

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

Page 2: Elosztott programozás I.C.E.-al C#-ban

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.

Page 3: Elosztott programozás I.C.E.-al C#-ban

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

Page 4: Elosztott programozás I.C.E.-al C#-ban

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

Page 5: Elosztott programozás I.C.E.-al C#-ban

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

Page 6: Elosztott programozás I.C.E.-al C#-ban

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

Page 7: Elosztott programozás I.C.E.-al C#-ban

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

}

...

Page 8: Elosztott programozás I.C.E.-al C#-ban

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

Page 9: Elosztott programozás I.C.E.-al C#-ban

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

Page 10: Elosztott programozás I.C.E.-al C#-ban

Elosztott programozás

Szerver

A szolgáltatást nyújtja

A szolgáltatást igénybe veszi

adatok

adatok

10

Kliens

Page 11: Elosztott programozás I.C.E.-al C#-ban

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)

Page 12: Elosztott programozás I.C.E.-al C#-ban

Elosztott programozás

Speed-up =

Overhead: nem az algoritmusból eredő plusz idők

szekvenciális futási idő elosztott futási idő

12

Page 13: Elosztott programozás I.C.E.-al C#-ban

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.

Page 14: Elosztott programozás I.C.E.-al C#-ban

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.

Page 15: Elosztott programozás I.C.E.-al C#-ban

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

Page 16: Elosztott programozás I.C.E.-al C#-ban

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ú

Page 17: Elosztott programozás I.C.E.-al C#-ban

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

Page 18: Elosztott programozás I.C.E.-al C#-ban

http://www.zeroc.com the home of ICE

Page 19: Elosztott programozás I.C.E.-al C#-ban

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

Page 20: Elosztott programozás I.C.E.-al C#-ban

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

Page 21: Elosztott programozás I.C.E.-al C#-ban

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

Page 22: Elosztott programozás I.C.E.-al C#-ban

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

Page 23: Elosztott programozás I.C.E.-al C#-ban

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

Page 24: Elosztott programozás I.C.E.-al C#-ban

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

Page 25: Elosztott programozás I.C.E.-al C#-ban

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

Page 26: Elosztott programozás I.C.E.-al C#-ban

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

Page 27: Elosztott programozás I.C.E.-al C#-ban

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

Page 28: Elosztott programozás I.C.E.-al C#-ban

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

Page 29: Elosztott programozás I.C.E.-al C#-ban

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