Blocks Storage - nápad

Waseihou

Blocks Storage - nápad
« kdy: 05. 04. 2012, 15:58:59 »
V hlavě se mi rýsuje nápad na který bych si snad i našel čas abych ho naimplementoval, mé zjištění totiž je že teoretizovat je sice krásné, ale nic z toho není a na mega projekt nemám čas a prostředky, takže bych se měl pokusit vytořit něco co bude k užitku těm, kteří mají podobné cíle jako já a doufat že to bude natolik dobré že to použijí, čímž zvýším pravděpodobnost že mých cílů bude dosaženo.

Takže nápad je: nazvěme to třeba Blocks Cache nebo Blocks Storage

lokální služba (service) která umí uchovávat, obstarávat, ukládat bloky dat podle různých hashů, a k tomu vhodný interface ať už na 127.0.0.1:<port> nebo přes sdílenou pamět. Na tom vlastně vůbec nic není, to má kdejaký program. Takže je třeba to trochu zkomplikovat. Jednou vlastností kterou by to mělo mít je, aby bloky šlo ukládat na více lokací (disk, flashka, SSD, ramdisk, přímo pamět) z nichž ne všechny jsou persistentní. To čím se liší je rychlost a především IOPS. Cílem by bylo, aby se bloky ke kterým je často přistupováno postupně přesunuly či duplikovaly na míto s vysokým IOPS, jako je SSD. Ty nejčastější by dokonce mohly být přeneseny do RAM vždy při startu služby.

Takže možná struktura paměti:

hos1, host2, ...
 |
127.0.0.1:37024/op=get&protov=1.0&hashtype=sha-1&nhashes=1&<hash>
  |
[ram]
   |     \
  ssd  flash
    |    /
   hdd

[xxx] = není perzistentní a při startu aplikace se načte z hdd

velikosti jednotlivých částí a propojení by šlo konfigurovat v konfiguračním souboru

Pro přenášení často používaných bloků dat by se používal algoritmus popsaný zde:
http://www.cs.technion.ac.il/~gala/Proposal.pdf

namísto algoritmu OPT (theoretically optimal page replacement algorithm) by se použilo toto:
http://www.almaden.ibm.com/cs/people/dmodha/clockfast.pdf

Struktura adresářů kam by se ukládaly bloky:
<00-ff>/<00-ff>/<name=block-hash>
tedy 65536 adresářů aby aplikace nemusela řešit kvalitu filesystému kde bude nainstalovaná.

Sice je to pro normální cache, ale proč to nepoužít i na bloky.

Ukládání pozice hashe v cache:
datová struktura na bázi n-árního stromu, pro pohyb ve struktuře by se použily znaky hashe, při startu programu by se nahrála do RAM

nějaký ten protokol pro čtení a zápis zatím jen indexováním obsahu adresáře

výhoda: dvě p2p aplikace chtějí získat stejný blok který má nějaký hash, pak pokud mají plugin pro takovouto službu tak mohou tahat z této cache jako dalšího zdroje, checknout jestli to tam není (někdo si vyžádá blok) takže pokud se něco tahá přes bittorrent tak už se to rovnou bude sdílet i v retroshare a nebo naopak, časem by pak šla nad takovouto cache vytvořit další p2p aplikace, ale pro začátek to bude jen pomocník

proč?

mnohé aplikace pro ukládání dočasných downloadů používají pouhý adresář a nic víc extra, tohle by mohlo snížit zatížení disků

první krok k propojení různých p2p aplikací, prakticky jde o to aby uživatelé jiných p2p sítí mohli tak trochu parazitovat na bittorrentu

Nápad na zajímavé programátorské cvičení na dobu velikonoc ;)

zhodnoťte jestli má cenu se o něco takového pokoušet

Waseihou


Waseihou

Re:Blocks Storage - nápad
« Odpověď #1 kdy: 05. 04. 2012, 16:14:10 »
Jinak ta aplikace-servisa by měla být multiplatformní, tedy by se mi hodilo vědět jestli existuje nějaký rozumný způsob jak to udělat. Tedy aby šla nainstalit jako služba do services.msc a jako démon v linuxu/unixu. Předpokladem je že většina uživatelů bude na Windows...

hu

Re:Blocks Storage - nápad
« Odpověď #2 kdy: 05. 04. 2012, 16:23:20 »
Normální multi-level cache. Využitelnost = 0.

Waseihou

Re:Blocks Storage - nápad
« Odpověď #3 kdy: 05. 04. 2012, 17:00:04 »
Jasně no, existuje někde něco open source co tohle implementuje?

ldj

Re:Blocks Storage - nápad
« Odpověď #4 kdy: 05. 04. 2012, 20:01:23 »
existuje tu uz implementace neceho podobneho peknou radku let. (google: plan9 a venti, vcetne i funkcniho portu na linux, vcetne filesystemu nad tim, nahrady taru - vax atp)