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.pdfnamísto algoritmu OPT (theoretically optimal page replacement algorithm) by se použilo toto:
http://www.almaden.ibm.com/cs/people/dmodha/clockfast.pdfStruktura 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