Virtlab:Protokoly/Rezervační server

Z VirtlabWiki

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
Verze z 11:37, 10. 1. 2007
Hra196 (Diskuse | příspěvky)
(Stránka Virtlab:DistrProtokolRezervServer přemístěna na stránku Virtlab:Rezervační server – komunikační protokol: Konečně srozumitelný název ;))
← Předchozí porovnání
Verze z 12:20, 8. 2. 2007
Hra196 (Diskuse | příspěvky)
(Přepsání do wiki vzhledu (potřebuje úpravy))
Následující porovnání →
Řádka 1: Řádka 1:
-== Protokol rezervačního serveru ==+Tento článek popisuje '''komunikační prokokol mezi rezervačními servery''' distribuovaného Virtlabu.
-První návrh:+== Navržené vlastnosti ==
-* Dotaz na prvky lokality daného rezervačního serveru (parametry: ID dotazující se lokality - filtrace podle ní, časový úsek - spec. případ bez udání času vrátí všechny potenciálně zapůjčitelné prvky pro žádající lokalitu)+* Dotaz na prvky lokality daného rezervačního serveru (parametry: ID dotazující se lokality - filtrace podle ní, časový úsek - speciální případ:bez udání času vrátí všechny potenciálně zapůjčitelné prvky pro žádající lokalitu)
* Dotaz na všechny prvky systému (zevnitř lokality lokálnímu rezervačními serveru, dotazy zvnějšku lokality budou filtrovány aplikací serveru (nepřicházejí z privátní zdrojové adresy) * Dotaz na všechny prvky systému (zevnitř lokality lokálnímu rezervačními serveru, dotazy zvnějšku lokality budou filtrovány aplikací serveru (nepřicházejí z privátní zdrojové adresy)
Řádka 29: Řádka 29:
-== Komunikační protokol (návrh [[Uživatel:hra196|Tomáše Hrabálka]]) ==+== Popis protokolu ==
-'''Výpis ze souboru ''reserv/doc/popis.txt'':'''+=== Vlastnosti ===
- Popis komunikačního protokolu+* Přes TCP spojení
- =============================+* Textové příkazy, oddělené <LF> (0x0A), <CR> (0x0D) je ignorováno
- - pres TCP spojeni+* Case insensitive
- - textove prikazy, oddelene <LF>, <CR> je ignorovano+* První řádek určuje příkaz, další jeho argumenty
- - case insensitive+* Na pořadí argumentů nezáleží
- - prvni radek urcuje prikaz, dalsi jeho argumenty+* Za názvem argumentu je dvojtecka, za kterou ihned nasledují jeho parametry
- - na poradi argumentu nezalezi+* Whitespace (tabelátory (0x09), mezery (0x20)) nejsou povoleny, slouží jako oddělovače parametrů pro argumenty
- - za nazvem argumentu je dvojtecka, za kterou ihned nasleduji jeho parametry+* Odeslání prázdného řádku (jen <LF>), potvrdí, že všechny argumenty byly odeslány a je možno zpracovat příkaz
- - whitespace (<tab>, mezery) nejsou povoleny, slouzi jako oddelovace parametru pro arg.+* Spojení ukončeno vždy na žádost klienta
- - odeslani prazdneho radku, jen <LF>, potvrdi, ze vsechny argumenty byly odeslany +* Server po komunikaci neukončuje spojení, pouze po určitém timeoutu
- - spojeni ukonceno vzdy na zadost klienta+* Při odpovědi je na prvním řádku kód odpovědi, mezera a za popis odpovědi, poté jsou poslána textová data
- - pri odpovedi je na prvnim radku kod odpovedi, mezera a za ni popis odpovedi,+
- pote jsou poslana textova data+
- - server po komunikace neukoncuje spojeni, pouze po urcitem timeoutu+
- Zjisteni obecne nabidky RS+=== Zjištění obecné nabídky Rezervačního serveru ===
- --------------------------+* Příkaz: "GET-OFFER\n"
- Prikaz: "GET-OFFER\n"+* Argument (povinný): "FOR: +'jednoznačný název lokality'\n" např. "FOR:vsb_ostrava\n"
- Argument (povinny): "FOR: +'jednoznacny nazev lokality'\n" napr. "FOR:vsb_ostrava\n"+* Odpověď: XML soubor s přefiltrovanou nabídkou fyzických zařízení pro danou lokalitu
- Odpoved: XML soubor s prefiltrovanou nabidkou fyzickych zarizeni pro danou lokalitu+
- Zjisteni nabidky celeho distribuovaneho RS+=== Zjištění nabídky celého distribuovaného RS ===
- -----------------------------------------+* Stejné jako obecné zjištení "GET-OFFER"
- Stejne jako obecne zjisteni "GET-OFFER"+* Argument (povinný): DISTRIB Parametr: "YES", "DISTRIB:YES"
- Argument (povinny): DISTRIB Parametr: "YES", "DISTRIB:YES"+* Odpověď: XML soubor s přefiltrovanou nabídkou fyzických zařízení pro celý distribuovaný RS
- Odpoved: XML soubor s prefiltrovanou nabidkou fyzickych zarizeni pro cely distribuovany RS+
- Zjisteni nabidky v danem case (Co je volne?)+=== Zjištění nabídky v daném čase (Co je volné?) ===
- --------------------------------------------+* Opět "GET-OFFER"
- Argument (povinny): "TIME:FROM{YYYY-MM-DD HH:MM}TO{YYYY-MM-DD HH:MM}\n" +* Argument (povinný): "TIME:FROM{YYYY-MM-DD HH:MM}TO{YYYY-MM-DD HH:MM}\n"
- napr. "TIME:FROM{2006-12-24 09:45}TO{2007-01-01 15:14}\n"+** Příklad: ''"TIME:FROM{2006-12-24 09:45}TO{2007-01-01 15:14}\n"''
- Odpoved: XML soubor s nabidkou vsech fyzickych zarizeni lokalne nebo v celem Distr VL pro danou lokalitu,+* Odpověď: XML soubor s nabídkou všech fyzických zařízení lokalně nebo v celem distribuovaném VL pro danou lokalitu, podle argumentu (DISTRIB)
- podle argumentu (DISTRIB)+ 
- +=== Potvrzení rezervace ===
- Potvrzeni rezervace+* Rezervace je potvrzovana <<dvojitým '''commit'''>>,
- -------------------+* Nejprve voláním příkazu "RESERVE\n" a poté "COMMIT"
- - Rezervace je potvrzovana <<dvojtym commit>>,+* Zavolání "RESERVE" na vzdalený rezervační server znamená, že si server daný čas zablokuje, ostatnim ho neposkytne a čeká (daný čas) na "COMMIT".
- nejprve volanim prikazu "RESERVE\n" a pote "COMMIT"+* Druhý COMMIT je zavolán, byl-li první u všech serverů úspěšný
- - Zavolani "RESERVE" na vzdaleny rezervacni server znamena, ze si server dany cas zablokuje,+* Nebyl-li úspěšný, volá se přikaz "ROLLBACK"
- ostatnim ho neposkytne a ceka (dany cas) na "COMMIT". +* Nastane-li timeout, volá se ROLLBACK automaticky
- - Druhy COMMIT je zavolan, byl-li prvni u vsech serveru uspesny+* Povinným argumentem je vygenerované globalní Reservation id, které je složené z lokality a místního čísla id: "ID:<LocalID>@<lokalita>"
- - Nebyl-li uspesny, volame prikaz ROLLBACK+* Povinné je rovnež uvést čas ve stejném formátu jako u zjištování nabídky
- - Nastane-li timeout, vola se ROLLBACK automaticky+* Jako další argumenty COMMIT jsou ID síťových prvků dané lokace (každé jako zvláštní argument)
- - Povinnym argumentem je vygenerovane globalni Reservation id,+** Argument: DEVICE:id_zarizeni\n
- ktere je slozene z lokality a mistniho cisla id: "ID:<LocalID>@<lokalita>"+* Odpovědi:
- - Povinne je rovnez uvest cas ve stejnem formatu jako u zjistovani nabidky+** 200 ACCEPTED<lf> ...kladná odpověď
- - Jako dalsi argumenty COMMIT jsou ID sitovych prvku dane lokace (kazde jako zvlastni argument)+** 400 REFUSED<lf> ...zaporná odpověď
- - Argumet: DEVICE:id_zarizeni\n+
- - Odpoved: 200 ACCEPTED<lf> ...kladna odpoved+
- 400 REFUSED<lf> ...zaporna odpoved+
- Smazani rezervace+=== Smazání rezervace ===
- -----------------+* Příkaz "CANCEL"
- - Prikaz "CANCEL"+* Povinný argument "ID:<lokalita> <id>"
- - Povinny argument "ID:<lokalita> <id>"+* Argument "DISTRIB:YES" pro distribuovanou verzi
- - Argument "DISTRIB:YES" pro distribuovanou verzi+* Odpovědi:
- - Odpoved "210 Cancelled" operace provedena+** "210 Cancelled" operace provedena
- "410 Bad ID" zadne takove ID neexistuje+** "410 Bad ID" žádne takové ID neexistuje
- Priklad+=== Příklad ===
- -------+
User->Local RS User->Local RS

Verze z 12:20, 8. 2. 2007

Tento článek popisuje komunikační prokokol mezi rezervačními servery distribuovaného Virtlabu.

Obsah

Navržené vlastnosti

  • Dotaz na prvky lokality daného rezervačního serveru (parametry: ID dotazující se lokality - filtrace podle ní, časový úsek - speciální případ:bez udání času vrátí všechny potenciálně zapůjčitelné prvky pro žádající lokalitu)
  • Dotaz na všechny prvky systému (zevnitř lokality lokálnímu rezervačními serveru, dotazy zvnějšku lokality budou filtrovány aplikací serveru (nepřicházejí z privátní zdrojové adresy)
    • slouží jako proxy, zeptá se všech rezervačních serverů jiných lokalit (zprávou dotaz na prvky lokality)
    • může být speciálním případen zprávy pro dotaz na prvky lokality s nastaveným příznakem žádosti o rekurzi.
  • Zadost o rezervaci - DOPRACOVAT PARAMETRY A MOZNE ODPOVEDI NA ZPRAVU
  • Zrušení rezervace podle globálního čísla rezervace (u sebe nebo rekurzivně u všech, rekurze přijímána jen při poždavku zevnitř lokality)
  • Výpis rezervací – výpis rezervační tabulky (lokálního rezervačního serveru nebo rekurzivně, ale v rekurzivním případě vrátí jen rezervace rezervace z tázající se lokality)


ID rezervace – bude vymýšlet rezervující lokalita (název lokality + sekvenční číslo). Bude sloužit i k možnosti zruseni rezervace


Při komunikaci mezi rezervačními servery uvádět jako parametr ID tázající se lokality + vymyslet systém autentizace, aby se ID tázající lokality nedalo podvrhnout.

Lze počítat s tím, že komunikace půjde IPSec tunelem.

Distribuovaná rezervace prvků je distribuovanou transakcí, vymyslet 2-fázový commit, včetně podpory rollbacku od timeoutu při neaktivitě rezervačního klienta. Rezerv. server obsluhuje více spojení najednou, promyslet, zda nevznikají potenciální deadlocky.

Administrátorské CLI rezervačního serveru - navrh

  • Výpis všech rezervací (dle časového intervalu od-do)
  • Smazání záznamů o již proběhnuvších rezervacích
  • Smazání budoucí rezervace


Popis protokolu

Vlastnosti

  • Přes TCP spojení
  • Textové příkazy, oddělené <LF> (0x0A), <CR> (0x0D) je ignorováno
  • Case insensitive
  • První řádek určuje příkaz, další jeho argumenty
  • Na pořadí argumentů nezáleží
  • Za názvem argumentu je dvojtecka, za kterou ihned nasledují jeho parametry
  • Whitespace (tabelátory (0x09), mezery (0x20)) nejsou povoleny, slouží jako oddělovače parametrů pro argumenty
  • Odeslání prázdného řádku (jen <LF>), potvrdí, že všechny argumenty byly odeslány a je možno zpracovat příkaz
  • Spojení ukončeno vždy na žádost klienta
  • Server po komunikaci neukončuje spojení, pouze po určitém timeoutu
  • Při odpovědi je na prvním řádku kód odpovědi, mezera a za ní popis odpovědi, poté jsou poslána textová data

Zjištění obecné nabídky Rezervačního serveru

  • Příkaz: "GET-OFFER\n"
  • Argument (povinný): "FOR: +'jednoznačný název lokality'\n" např. "FOR:vsb_ostrava\n"
  • Odpověď: XML soubor s přefiltrovanou nabídkou fyzických zařízení pro danou lokalitu

Zjištění nabídky celého distribuovaného RS

  • Stejné jako obecné zjištení "GET-OFFER"
  • Argument (povinný): DISTRIB Parametr: "YES", "DISTRIB:YES"
  • Odpověď: XML soubor s přefiltrovanou nabídkou fyzických zařízení pro celý distribuovaný RS

Zjištění nabídky v daném čase (Co je volné?)

  • Opět "GET-OFFER"
  • Argument (povinný): "TIME:FROM{YYYY-MM-DD HH:MM}TO{YYYY-MM-DD HH:MM}\n"
    • Příklad: "TIME:FROM{2006-12-24 09:45}TO{2007-01-01 15:14}\n"
  • Odpověď: XML soubor s nabídkou všech fyzických zařízení lokalně nebo v celem distribuovaném VL pro danou lokalitu, podle argumentu (DISTRIB)

Potvrzení rezervace

  • Rezervace je potvrzovana <<dvojitým commit>>,
  • Nejprve voláním příkazu "RESERVE\n" a poté "COMMIT"
  • Zavolání "RESERVE" na vzdalený rezervační server znamená, že si server daný čas zablokuje, ostatnim ho neposkytne a čeká (daný čas) na "COMMIT".
  • Druhý COMMIT je zavolán, byl-li první u všech serverů úspěšný
  • Nebyl-li úspěšný, volá se přikaz "ROLLBACK"
  • Nastane-li timeout, volá se ROLLBACK automaticky
  • Povinným argumentem je vygenerované globalní Reservation id, které je složené z lokality a místního čísla id: "ID:<LocalID>@<lokalita>"
  • Povinné je rovnež uvést čas ve stejném formátu jako u zjištování nabídky
  • Jako další argumenty COMMIT jsou ID síťových prvků dané lokace (každé jako zvláštní argument)
    • Argument: DEVICE:id_zarizeni\n
  • Odpovědi:
    • 200 ACCEPTED<lf> ...kladná odpověď
    • 400 REFUSED<lf> ...zaporná odpověď

Smazání rezervace

  • Příkaz "CANCEL"
  • Povinný argument "ID:<lokalita> <id>"
  • Argument "DISTRIB:YES" pro distribuovanou verzi
  • Odpovědi:
    • "210 Cancelled" operace provedena
    • "410 Bad ID" žádne takové ID neexistuje

Příklad

 User->Local RS
 
 -> GET-OFFER<lf>
    FOR:su_karvina<lf>
    DISTRIB:yes<lf>
    <lf>
 <- 200 OK
    <?XML ..... >
 end of the connection   
 
 -> GET-OFFER<lf>
    FOR:su_karvina<lf>
    DISTRIB:yes<lf>
    TIME:FROM{2007-01-18 10:00}TO{2007-01-18 11:00}<lf>
    <lf>
 <- 200 OK
    <? XML .... >
 end of the connection   
 
 -> RESERVE<lf>
    FOR:su_karvina<lf>
    ID:14@su_karvina
    TIME:FROM{2007-01-18 10:00}TO{2007-01-18 11:00}<lf>
    DEVICE:r1
    DEVICE:r5
    DEVICE:sw2
    <lf>
 <- 200 ACCEPTED
 end of the connection
 
 -> COMMIT<lf>
 <- 200 ACCEPTED
 end of the connection
Osobní nástroje