analýza/stdio-fs.txt
author František Kučera <franta-hg@frantovo.cz>
Sat Jun 30 18:28:01 2012 +0200 (2012-06-30)
changeset 2 20899c371377
parent 0 92b32c3f9b8e
permissions -rw-r--r--
hgignore
franta-hg@0
     1
STDIO-FS
franta-hg@0
     2
--------
franta-hg@0
     3
franta-hg@0
     4
Souborový systém (FUSE) komunikující přes standardní vstup/výstup (STDIO).
franta-hg@0
     5
Tzn. jeden kanál, který lze posílat buď mezi dvěma procesy lokálně (nemá moc velký smysl)
franta-hg@0
     6
nebo po síti – tunelovaně např. unitř SSH, nebo nešifrovaně přes obyčejné TCP.
franta-hg@0
     7
franta-hg@0
     8
Skládá se ze dvou částí:
franta-hg@0
     9
 - server – zpřístupňuje skutečný souborový systém pomocí STDIO zvláštním protokolem
franta-hg@0
    10
 - klient – FUSE souborový systém, který se připojuje k serveru
franta-hg@0
    11
franta-hg@0
    12
franta-hg@0
    13
Požadavky
franta-hg@0
    14
---------
franta-hg@0
    15
franta-hg@0
    16
 - pouze jeden kanál pro všechny operace → multiplexování (lze např. kopírovat dva soubory současně)
franta-hg@0
    17
 - efektivní binární protokol
franta-hg@0
    18
 - zpřístupnit co nejvíce informací o souborech včetně rozšířených atributů a pravdivého údaje o obsazeném místě na disku
franta-hg@0
    19
 - pomocí rozšířených atributů zpřístupnit další nestandardní informace a funkce – např. umožnit výpočet hashe souboru na serveru → po síti (STDIO) se pak přenese pouze otisk, ne celý soubor
franta-hg@0
    20
franta-hg@1
    21
Příklad použití
franta-hg@1
    22
---------------
franta-hg@1
    23
franta-hg@1
    24
Typické použití bude pro sdílení souborového systému směrem z desktopu na vzdálený server.
franta-hg@1
    25
Uživatel na desktopu zadá něco jako:
franta-hg@1
    26
$ socat EXEC:"stdio-fs-server /home/…/sdílený-adresář" EXEC:"ssh example.com stdio-fs-klient /home/…/bod-připojení"
franta-hg@1
    27
franta-hg@0
    28
franta-hg@0
    29
Implementatce
franta-hg@0
    30
-------------
franta-hg@0
    31
franta-hg@0
    32
 - klient i server by měly být ve finální verzi v C++ případně v C
franta-hg@0
    33
 - prototyp může být v libovolném jazyce – Java, Perl?
franta-hg@0
    34
 - server může mít více implementací – pracuje pouze se standardním vstupem/výstupem a soubory, nemá nic spolenčného s FUSE
franta-hg@0
    35
 - neřešíme bezpečnost – případné šifrování si řeší uživatel o úroveň níž (SSH, TLS) podle svých potřeb
franta-hg@0
    36
 - vrstvu, která se stará o multiplexování by bylo dobré napsat jako znovupoužitelnou knihovnu
franta-hg@0
    37
franta-hg@0
    38
franta-hg@0
    39
Multiplexování
franta-hg@0
    40
--------------
franta-hg@0
    41
franta-hg@0
    42
 - přes jeden kanál (vstupní a výstupní proud) umožnit přenos libovolného počtu virtuálních kanálů
franta-hg@0
    43
 - kusy dat se označí číslem virtuálního kanálu a poskládají se do STDIO proudu
franta-hg@0
    44
 - na druhé straně se opět dekódují a rozloží jako samostatné kanály
franta-hg@0
    45
 - budeme mít nultý servisní kanál, který slouží k řízení toku a přenosu dalších metadat, tento kanál je prioritní
franta-hg@0
    46
 - ostatní kanály se vytváří na přání – podobně jako se vytvářejí TCP spojení
franta-hg@0
    47
 - klientem (iniciátorem kanálu) i serverem u virtuálních kanálů můžou být obě strany
franta-hg@0
    48
 - je potřeba řešit zahlcení
franta-hg@0
    49
	- když se z jednoho virtuálního kanálu nebude číst vůbec nebo pomalu, musí být možné číst ostatní kanály, aniž by bylo potřeba čekat na odbavení paketů pomalejšího kanálu
franta-hg@0
    50
	- částěčně lze řešit mezipamětí
franta-hg@0
    51
	- pokud dojde k jejímu zaplnění na straně příjemce, je potřeba odesílateli sdělit, že má přestat na tomto kanále posílat data a posílat zatím data jiných kanálů
franta-hg@0
    52
		- pokud odesílatel neposlechne, dojde k zablokování a je potřeba počkat, až budou pakety tohoto pomalejšího kanálu odbaveny na straně příjemce (do té doby bude zablokována i komunikace na všech ostatních kanálech)
franta-hg@0
    53
		- v krajním případě může nespokojený příjemce reagovat na neposlušného odesílatele odpojením – před tím pošle servisním kanálem informaci, proč ukončuje spojení
franta-hg@0
    54
	- kanál je možné odblokovat:
franta-hg@0
    55
		- po uplynutí určitého času (stanovený v požadavku na blokaci)
franta-hg@0
    56
		- po odvolání blokace příjemcem (řekne, že už má místo na další data)
franta-hg@0
    57
		- pokud v ostatních kanálech nejsou žádná data k odeslání
franta-hg@0
    58
			- potenciálně nebezpečné – může opět dojít k zahlcení tohoto kanálu a v té době už se objeví data v jiných kanálech a nepůjde je odeslat
franta-hg@0
    59
			- musí být povoleno příjemcem
franta-hg@0
    60
	- mohlo by jít řídit rychlost jednotlivých kanálů
franta-hg@0
    61
		- plynulá komunikace, bez blokování
franta-hg@0
    62
		- příjemce řekne, jakou rychlostí je schopný odbavovat data na daném kanále
franta-hg@0
    63
		- průběžně lze rychlost měnit
franta-hg@0
    64