ืงืืืื ืืงืจื, ืืืืจ ืื ืืชืืงื ืืืืกืื ืืืืืืจ ืืขืื ืฉื ืืืืช ืืืืืื ื ืงืืฆืื ืงืื ืื. ืืฉืื ืื ืืืฆืข ืืคืชืจืื ืืกืืคื ืืืขืจืืืช ืงืืฆืื ืชืืืืืช POSIX ืขื ืชืืืื ืืืื ืืื ืขืืืื, ืืืื ืื ืขืืื ืืฉืืื, ืืืืืืจื ืืฃ ืืื ืงืืืื.
ืื ืืชืืชื ืฉืจืช ืืืชืื ืืืฉืืช ืืฉืื ืืืืจื ืื.
ืืืืื ืืืฉืื ืืืฉืืื ืืื, ืืฆืืื ื ืืคืชืืจ ืืช ืืืขืื ืืขืืงืจืืช, ืืืืงืืื ืืืฉืื ืืืกืืื ืืฉืื ืืืกืง ื-RAM, ืฉืืขืจืืช ืืงืืฆืื ืฉื ืืืฉืืืืืช ืฉืื ื ืฆืจืื ืืื ืจืืืื. ืืืขืฉื, ืืกืคืจ ืืื ืฉื ืงืืฆืื ืืืืง ืืื ืืขืจืืช ืงืืฆืื ืืงืืืฆืช.
ืืจืขืืื ืืื ืื:
ืืืืืื ืคืฉืืืืช, ืงืืฆืื ืงืื ืื ืขืืืื ืืจื ืืฉืจืช, ืื ื ืฉืืจืื ืืฉืืจืืช ืืืจืืืื, ืืื ืงืืจืืื ืืื ื, ืืงืืฆืื ืืืืืื ืืื ืืื ืื ืืฆื ืื. ืกืืืื: ืชืืงืื ืืืช = ืืจืืืื ืืื, ืืกื ืืื ืืฉ ืื ื ืืื ืืืืืื ื ืืจืืืื ืื ืขื ืงืืฆืื ืงืื ืื, ืืื ืืื ืืืืช ืืืืืื ื ืงืืฆืื. ืืื ืื ืืืืฉื ืืืืืื, ืืื ืกืงืจืืคืืื ืื ืืื ืกืช ืงืืฆืื ืืืจืืืื ื tar/zip.
ืืฉืชืื ืืงืฆืจ, ืื ื ืืชื ืฆื ืืจืืฉ ืื ืืคืืกื ืืจืื.
ืืื ืืชืืื ืืื ืฉืื ืืฆืืืชื ืืืฆืื ืฉืจืช ืืชืืื ืืขืืื ืฉืืืื ืืฉืืืจ ื ืชืื ืื ืฉืืชืงืืื ืืืืฆืขืืช ืคืจืืืืงืื HTTP ืืฉืืจืืช ืืืจืืืื ืื, ืืื ืืืกืจืื ืืช ืืืืืืื ืืืจืืืื ืื ืืืืกืื ืืืืืืงืืื ืงืื ืื ืฆืืื ืืืื. ืืืกืืื ืืืืคืืฉ ืืืืชื ืืฉืืื ื-Origin ืฉื 10 ืฉืจืชืื ืฉืฆืืื ืืงื ื ืืืื ืืืื, ืฉืืื ืืืจ ืืฆืืืจื 250,000,000 ืงืืฆืื ืงืื ืื, ืืืืืช ืืฆืืืื ืื ืืชืืืื ื ืืืืคืกืง.
ืืื ืฉืื ืืืื ืืงืจืื ืืืืจืื, ืงื ืืืชืจ ืชืืขืื ืงืื:
ืืืืงืจ ืืืืชื ืืืื, ืขืืฉืื ืืฉ ืืคืฉืจืืช ืจืง ืขื nginx ืืคื ืื ืืืงืจื:
docker run -d --restart=always -e host=localhost -e root=/var/storage
-v /var/storage:/var/storage --name wzd -p 80:80 eltaline/wzd
ืื:
ืื ืืฉ ืืจืื ืงืืฆืื, ืืฉ ืฆืืจื ืืืฉืืืื ืืฉืืขืืชืืื, ืืืืืง ืืืจืืข ืืืืชืจ ืืื ืฉืืืงื ืืืืืืืื. ืืืืืื, ืืขืช ืฉืืืืฉ ืืืขืจืืช ืงืืฆืื ืืงืืืฆืช (ืืืงืจื ืื, MooseFS), ืืงืืืฅ, ืืื ืงืฉืจ ืืืืืื ืืืืืชื, ืชืืื ืชืืคืก ืืคืืืช 64 KB. ืืืืืจ, ืขืืืจ ืงืืฆืื ืืืืื 3, 10 ืื 30 KB, ื ืืจืฉืื 64 KB ืืืืกืง. ืื ืืฉ ืจืืข ืืืืืืจื ืงืืฆืื, ื ืืื ื-2 ื-10 ืืจื-ืืืื. ืื ื ืืชื ืืืื ืืืฆืืจ ืงืืฆืื ืืืฉืื ืืื ืืืืืช ืืื, ืฉืื ื-MooseFS ืืฉ ืืืืื: ืื ืืืชืจ ืืืืืืืจื ืขื ืืขืชืง ืืื ืฉื ืื ืงืืืฅ.
ืืื ืฉืืกืคืจ ืืงืืฆืื ืืื, ืืฉ ืฆืืจื ืืืจืื ืืืืจืื RAM ืขืืืจ ืืื ื ืชืื ืื. ืืฉืืืืช ืชืืืคืืช ืฉื ืืื ื ืชืื ืื ืืืืืืช ืชืืจืืืช ืื ืืืืื ืฉื ืืื ื ื SSD.
ืฉืจืช wZD. ืขืฉืื ื ืกืืจ ืืืืจืื ืขื ืืืืกืงืื.
ืืฉืจืช ืืชืื ื-Go. ืงืืื ืื, ืืืืชื ืฆืจืื ืืืคืืืช ืืช ืืกืคืจ ืืงืืฆืื. ืืื ืืขืฉืืช ืืช ืื? ืืืื ืืจืืืื, ืืื ืืืงืจื ืื ืืื ืืืืกื, ืืืืืื ืฉืืงืืฆืื ืฉืื ืื ืจืง ืชืืื ืืช ืืืืกืืช. ืืขืืจื ืืืืขื BoltDB, ืฉืขืืืื ืืื ืฆืจืื ืืืกื ืืืกืจืื ืืชืื, ืืืืจ ืื ืืืื ืืืืื ืืชืืขืื.
ืืกื ืืื, ืืืงืื ืจืืข ืืืืืืจื ืชืืงืื, ืืืงืจื ืฉืื ื ืฉืืจื ืจืง 10 ืืืืืื ืืจืืืื ืื ืฉื ืืืื. ืื ืืืืชื ืื ืืืืื ืืช ืืฉื ืืช ืืช ืืื ื ืงืืฆื ืืกืคืจืืืช ืื ืืืื, ืืคืฉืจ ืืื ืืฆืืฆื ืืืชื ืืืืืืืื ืงืืฆืื.
ืื ืืงืืฆืื ืืงืื ืื ื ืืจืืื ืืืจืืืื ื Bolt, ืฉืืงืืืื ืืืืืืืืช ืืช ืฉืืืช ืืกืคืจืืืช ืฉืืื ืื ื ืืฆืืื, ืืื ืืงืืฆืื ืืืืืืื ื ืฉืืจืื ืืื ืืืจืืืื ืื; ืืื ืืขื ืืืจืื ืืืชื, ืื ื ืืชื ืืืชืืื ืืืฉืืช. ืงืื ืื ื ืฉืืจืื ืืืจืืืื, ืืืืืื ื ืฉืืจืื ืืื ืฉืื ืื. ืืฉืจืช ืขืืื ืืฉืงืืคืืช ืขื ืฉื ืืื.
ืืจืืืืงืืืจื ืืชืืื ืืช ืฉื ืฉืจืช wZD.
ืืฉืจืช ืคืืขื ืชืืช ืืขืจืืืช ืืืคืขืื Linux, BSD, Solaris ื-OSX. ืืืงืชื ืจืง ืขืืืจ ืืจืืืืงืืืจืช AMD64 ืชืืช ืืื ืืงืก, ืืื ืื ืืืืจ ืืขืืื ืขืืืจ ARM64, PPC64, MIPS64.
ืชืืื ืืช ืขืืงืจืืืช:
- ืจืืืื ืืฉืจืฉืืจืื;
- ืืืืื-ืฉืจืช, ืืกืคืง ืกืืืื ืืช ืชืงืืืช ืืืืืื ืขืืืกืื;
- ืฉืงืืคืืช ืืจืืืช ืขืืืจ ืืืฉืชืืฉ ืื ืืืคืชื;
- ืฉืืืืช HTTP ื ืชืืืืช: GET, HEAD, PUT ื-DELETE;
- ืฉืืืื ืืืชื ืืืืช ืงืจืืื ืืืชืืื ืืืืฆืขืืช ืืืชืจืืช ืืงืืืืช;
- ืชืืืื ืืืืจืืื ืืืจืืืืืืื ืืืืฉืื;
- ืชืืืื ืืฉืืืืช ื ืชืื ื CRC ืืขืช ืืชืืื/ืงืจืืื;
- ืืืืจืื ืืฆื ืืื ืืืื ืืฆืจืืืช ืืืืจืื ืืื ืืืืืช ืืืืื ืื ืืืฆืืขื ืจืฉืช ืืืคืืืืืืื;
- ืืืืงืช ืืืืกืช ื ืชืื ืื;
- ืื ืืกืฃ, ืืืฆืข wZA ืืจืืืื ืจื-ืืืืื ืืืขืืจืช ืงืืฆืื ืืืื ืืืคืกืืง ืืช ืืฉืืจืืช.
ื ืืกืืื ืืืืชื:
ืื ื ืืคืชื ืืืืืง ืืช ืืฉืจืช ืืืืจืืืื ืขื ื ืชืื ืื ืืืื ืืืจ ืื ืืจืื ืืื, ืืขืช ืืื ืคืืขื ืืืฆืืื ืขื ืืฉืืื ืืืืื 250,000,000 ืงืืฆืื ืงืื ืื (ืชืืื ืืช) ืื ืืฆืืื ื-15,000,000 ืกืคืจืืืช ืขื ืืื ื ื SATA ื ืคืจืืื. ืืฉืืื ืฉื 10 ืฉืจืชืื ืืื ืฉืจืช Origin ืืืืชืงื ืืืืืจื ืจืฉืช CDN. ืืื ืืฉืจืช ืืืชื, ื ืขืฉื ืฉืืืืฉ ืืฉื ื ืฉืจืชื Nginx + 2 ืฉืจืชื wZD.
ืืื ืฉืืืืื ืืืฉืชืืฉ ืืฉืจืช ืื, ืืืื ืื ืืื ืืชืื ื ืืช ืืื ื ืืกืคืจืืืช, ืื ืืฉืื, ืืคื ื ืืฉืืืืฉ. ืชื ืื ืืขืฉืืช ืืืื ื ืืื ืฉืืฉืจืช ืื ื ืืขื ืืืืืก ืืื ืืืจืืืื 1 Bolt.
ืืืืงืช ืืืฆืืขืื:
ืืื ืฉืืืื ืืงืืืฅ ืืืืืก ืงืื ืืืชืจ, ืื ืืืฆืขืื ืื ืคืขืืืืช GET ื-PUT ืืืืจืืช ืืืชืจ. ืืื ื ืฉืืื ืืช ืืืื ืืืืื ืฉื ืืชืืืช ืืงืื HTTP ืืงืืฆืื ืจืืืืื ืืืจืืืื ื Bolt, ืืื ืื ืงืจืืื. ืขืืืื ืขื ืงืืฆืื ืืืืืื 32 KB, 256 KB, 1024 KB, 4096 KB ื-32768 KB ืืืฉืืืืช.
ืืขืืืื ืขื ืืจืืืื ื Bolt, ืืืืงืื ืืช ืฉืืืืช ืื ืชืื ืื ืฉื ืื ืงืืืฅ (ืืฉืชืืฉืื ื-CRC), ืืคื ื ืืืงืืื ืืื ืืืืจ ืืืงืืื ืืชืจืืฉืช ืงืจืืื ืชืื ืืื ืืืกื ืืืืฉืื ืืืืฉ, ืื ืืืืื ืืื ืืก ืขืืืืืื, ืืื ืืขืืงืจ ืืื ืืืืืช ืืืืข.
ืขืจืืชื ืืืืงืืช ืืืฆืืขืื ืขื ืืื ื ื SSD, ืฉืื ืืืืงืืช ืขื ืืื ื ื SATA ืื ืืจืืืช ืืืื ืืจืืจ.
ืืจืคืื ืืืืืกืกืื ืขื ืชืืฆืืืช ืืืืืงื:
ืืคื ืฉืืชื ืืืื ืืจืืืช, ืขืืืจ ืงืืฆืื ืงืื ืื ืืืืื ืืืื ื ืืงืจืืื ืืืืชืืื ืืื ืงืืฆืื ืืืจืืืื ืืงืืฆืื ืฉืืื ื ืืืจืืืื ืงืื.
ืื ื ืืงืืืื ืชืืื ื ืฉืื ื ืืืืืืื ืืขืช โโืืืืงืช ืงืจืืื ืืืชืืื ืฉื ืงืืฆืื ืืืืื 32 MB:
ืืคืจืฉ ืืืื ืืื ืงืจืืืช ืงืืฆืื ืืื ืืื 5-25 ืืืคืืืช ืืฉื ืืื. ืขื ืืงืืื, ืืืฆื ืืจืืข ืืืชืจ, ืืืืื ืืื ืืขืจื 150 ืืืคืืืช ืืฉื ืืื. ืืื ืืืงืจื ืื ืืื ืฆืืจื ืืืขืืืช ืงืืฆืื ืืืืืื; ืคืฉืื ืืื ืืขื ืืขืฉืืช ืืืช; ืื ืืืืืื ืืืืืช ืื ืคืจื ืืืืจืืืื.
*ืืื ืืช, ืืชื ืืืื ืืืฉืชืืฉ ืืฉืจืช ืื ืืืฉืืืืช ืืืืจืฉืืช NoSQL.
ืฉืืืืช ืืกืืกืืืช ืืขืืืื ืขื ืฉืจืช wZD:
ืืขืื ืช ืงืืืฅ ืจืืื:
curl -X PUT --data-binary @test.jpg http://localhost/test/test.jpg
ืืขืืืช ืงืืืฅ ืืืจืืืื Bolt (ืื ืืื ืืจืืื ืืคืจืืืจ ืืฉืจืช fmaxsize, ืืงืืืข ืืช ืืืื ืืงืืืฅ ืืืงืกืืืื ืฉื ืืชื ืืืืื ืืืจืืืื; ืื ืืจืืื, ืืงืืืฅ ืืืขืื ืืจืืื ืืื ืืืจืืืื):
curl -X PUT -H "Archive: 1" --data-binary @test.jpg http://localhost/test/test.jpg
ืืืจืืช ืงืืืฅ (ืื ืืฉ ืงืืฆืื ืขื ืืืชื ืฉืืืช ืืืืกืง ืืืืจืืืื, ืื ืืขืช ืืืืจืื ื ืืชื ืช ืขืืืคืืช ืืืจืืจืช ืืืื ืืงืืืฅ ืฉืื ืืืขืืจ ืืืจืืืื):
curl -o test.jpg http://localhost/test/test.jpg
ืืืจืืช ืงืืืฅ ืืืจืืืื Bolt (ืืืืืฅ):
curl -o test.jpg -H "FromArchive: 1" http://localhost/test/test.jpg
ืชืืืืจืื ืฉื ืฉืืืืช ืืืจืืช ื ืืฆืืื ืืชืืขืื.
ืืฉืจืช ืชืืื ืืจืืข ืจืง ืืคืจืืืืงืื HTTP; ืืื ืขืืืื ืื ืขืืื ืขื HTTPS. ืื ืฉืืืช POST ืืื ื ื ืชืืืช (ืขืืืื ืื ืืืืื ืื ืืฉ ืื ืฆืืจื ืื ืื).
ืื ืฉืืืคืืจ ืืงืื ืืืงืืจ ืืืฆื ืฉื Butterscotch, ืื ืืืื ืืืืืื ืืช ืื, ืืื ืื ืงืฉืจืชื ืืช ืืงืื ืืจืืฉื ืืคืื ืงืฆืืืช ืฉื ื-web framework, ืคืจื ื-interrupt handler, ืื ืฉืืขืชืื ืืืื ืืฉืืชื ืืืชื ืืืืืจืืช ืืืขื ืืื ืืื. ืื ืืข.
ToDo:
- ืคืืชืื ืืฉืืคื ืืืคืืฅ ืืฉืื + ืืืืืืจืคื ืืืคืฉืจืืช ืฉืืืืฉ ืืืขืจืืืช ืืืืืืช ืืื ืืขืจืืืช ืงืืฆื ืืฉืืื (ืืื ืืืืืืจืื)
- ืืคืฉืจืืช ืืฉืืืืจ ืืคืื ืืืืืืื ืฉื ืืื ื ืชืื ืื ืื ืื ืืืืืื ืืืืืืื (ืื ืืฉืชืืฉืื ืืืคืืฅ)
- ืคืจืืืืงืื ืืงืืจื ืืืืืืช ืืืฉืชืืฉ ืืืืืืจื ืจืฉืช ืืชืืฉืืื ืืืื ืืื ืืชืงื ืื ืขืืืจ ืฉืคืืช ืชืื ืืช ืฉืื ืืช
- ืืคืฉืจืืืืช ืืชืงืืืืช ืืฉืืืืฉ ืืจืืื NoSQL
- ืืืืกืืช ืืกืืืื ืฉืื ืื (gzip, zstd, snappy) ืขืืืจ ืงืืฆืื ืื ืขืจืืื ืืชืื ืืจืืืื ื Bolt ืืขืืืจ ืงืืฆืื ืจืืืืื
- ืืฆืคื ื ืืกืืืื ืฉืื ืื ืขืืืจ ืงืืฆืื ืื ืขืจืืื ืืชืื ืืจืืืื ื Bolt ืืขืืืจ ืงืืฆืื ืจืืืืื
- ืืืจืช ืืืืื ืืฆื ืฉืจืช ืืืฉืืืช, ืืืื ื-GPU
ืืฉ ืื ืืื, ืื ื ืืงืืื ืฉืืฉืจืช ืืื ืืืื ืฉืืืืฉื ืืืืฉืื, ืจืืฉืืื BSD-3, ืืืืืืช ืืืฆืจืื ืืคืืืืช, ืฉืื ืื ืื ืืืืชื ืืืจื ืฉืื ืื ื ืขืืื, ืืฉืจืช ืื ืืื ื ืืชื. ืื ื ืืืคืชื ืืืืื. ืื ื ืืืื ืืื ืืืืื ืืืงืฉืืช ืชืืื ื ืฉืชืืฆื.
ืืงืืจ: www.habr.com