แซแแแ แคแแกแ แกแแแแแแแแแแแ, แแก แกแขแแขแแ แงแฃแ แแแฆแแแแก แแแแแแฎแแแแแแก แแกแแแแ แแแแแแแ แแแขแแ แ แคแแแแแก แแคแแฅแขแฃแ แแ แจแแแแฎแแแกแ แแ แแฆแแแแแแแ. แแ แแขแแแแ, แกแแแแแแ แแแแแฌแงแแแขแ แจแแแแแแแแแแแฃแแแ POSIX-แแแ แแแแกแแแแแ แคแแแแฃแ แ แกแแกแขแแแแแแกแแแแก แกแแแแขแแแแก แกแ แฃแแ แแฎแแ แแแญแแ แแ, แแแแกแขแแ แฃแแ แแแแแแ แแแแก แฉแแแแแแ แแ, แ แแแแ แช แฉแแแก, แฎแแแฏแแฎแแแแก แแแ แแจแแช แแ.
แแกแ แ แแ, แแ แแแแฌแแ แ แฉแแแ แกแแแฃแแแ แ แกแแ แแแ แ แแ แแแแแแ.
แแ แแแแชแแแแก แแแแฎแแ แชแแแแแแแก แแ แแชแแกแจแ แฉแแแ แแแแแฎแแ แฎแแ แแแแแแ แ แแ แแแแแแแก แแแแแญแ แ แแ แแแแแแ แแฃแแแ แแแแแฆแฌแแแ แแแแแแแแก แแแกแแแ แแ RAM-แจแ, แ แแแแแกแแช แฉแแแแ แแแแกแขแแ แฃแแ แคแแแแฃแ แ แกแแกแขแแแ แฃแแแฌแงแแแแ แแแแฎแแแ แแ. แกแแแแแแแแแแจแ, แคแแแแแแแก แแกแแแ แ แแแแแแแแ แกแแแแแแแ แแแแแกแแแแ แ แแแแกแขแแ แฃแแ แคแแแแฃแ แ แกแแกแขแแแแกแแแแก.
แแแแ แแกแแแแ:
แแแ แขแแแ แกแแขแงแแแแแ, แกแแ แแแ แแก แกแแจแฃแแแแแแ แแขแแแ แแแแ แแแขแแ แ แคแแแแแแ, แแแแฎแแแ แแแ แแแแแ แแ แฅแแแจแ แแ แแกแแแ แแแแแฎแแแ แแแกแแแ แแ แแแแ แคแแแแแแ แแแแกแแแแ แแแแ แแแแแแ แ. แกแฅแแแ: 1 แกแแฅแแฆแแแแ = 1 แแ แฅแแแ, แฏแแแจแ แแแแฅแแก แ แแแแแแแแ แแแแแแแ แแ แฅแแแ แแแขแแ แ แคแแแแแแแ แแ แแ แ แ แแแแแแแแ แแกแแฃแแ แแแแแแแ แคแแแแ. แแ แแก แงแแแแแคแแ แ แฎแแ แชแแแแแแแ แกแ แฃแแแ, แงแแแแแแแแ แ แกแแ แแแขแแก แแ แคแแแแแแแก tar/zip แแ แฅแแแแแจแ แฉแแกแแแก แแแ แแจแ.
แแแชแแแแ แแแแแแ แแแแฌแแ แ, แฌแแแแกแฌแแ แแแแแจแก แแแฎแแแ แแฃ แแแกแขแ แแ แซแแแแ.
แแก แงแแแแแคแแ แ แแแแฌแงแ แแแแ, แ แแ แแ แแแ แแแแแแ แแกแแคแแแแจแ แจแแกแแคแแ แแกแ แกแแ แแแ แ, แ แแแแแกแแช แจแแแซแแ HTTP แแ แแขแแแแแแ แแแฆแแแฃแแ แแแแแชแแแแแแก แจแแแแฎแแ แแแ แแแแแ แแ แฅแแแแแจแ, แฉแแแฃแแแแ แแแ แแ แฅแแแแแแกแ แแ แแแแแฅแขแแแแก แจแแแแฎแแแก แแแแฃแกแแแแก แแแ แแจแ. แซแแแแแก แแแแแแ แแ แแงแ 10 แกแแ แแแ แแกแแแ แจแแแแแแ แ Origin แแแแกแขแแ แ, แ แแแแแแช แคแแ แแ แแแกแจแขแแแแ แแแแแแ แแ, แ แแแแแจแแช แฃแแแ แแแแ แแแแ 250,000,000 XNUMX XNUMX แแแขแแ แ แคแแแแ แแ แแ แแแก แขแแแแแแชแแ แจแแฉแแ แแแแก แแ แแแแ แแแแ.
แแแแแแแก, แแแกแแช แแ แฃแงแแแ แก แกแขแแขแแแแแก แแแแฎแแ, แแชแแ แ แแแแฃแแแแขแแชแแ แฃแคแ แ แแแแแแแ:
แแ แแแแแ แ แแแแแ แแ แแก, แแฎแแ แแ แแก แแแ แแแแขแ แแฎแแแแ 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 แแ. แแแฃ 3, 10 แแ 30 แแ แแแแแก แคแแแแแแแกแแแแก แกแแญแแ แแ แแแกแแแ 64 แแ. แแฃ แแ แกแแแแแก แแแแแฎแแแ แแแแแแ แแ แคแแแแ, แฉแแแ แแแแ แแแแ 2-แแแ 10 แขแแ แแแแแขแแแแ. แจแแฃแซแแแแแแ แแฅแแแแ แแฎแแแ แคแแแแแแแก แจแแฅแแแ แแแแฃแกแแแฆแแ แแแ แแแแแ, แ แแแแแ MooseFS-แก แแฅแแก แจแแแฆแฃแแแ: แแ แแฃแแแขแแก 1 แแแแแแ แแ แแแแแแฃแแ แคแแแแแก แแ แแ แแกแแแ.
แ แแแแ แช แคแแแแแแแก แ แแแแแแแแ แแแ แแแแ, แแแขแแแแแแชแแแแแแกแแแแก แกแแญแแ แแ แแแแ แ แแแแ แแขแแฃแแ แแแฎแกแแแ แแแ. แฎแจแแ แ แแแแ แแแขแแแแแแชแแแแแแก แแแแแงแ แ แแกแแแ แฎแแแก แฃแฌแงแแแก SSD แแแกแแแแแก แชแแแแแก.
wZD แกแแ แแแ แ. แแแกแแแแแ แแแแแฌแแกแ แแแแแ แแแแแแแก.
แกแแ แแแ แ Go-แจแแ แแแฌแแ แแแ. แแแ แแแ แ แแแจแ, แแญแแ แแแแแแ แคแแแแแแแก แ แแแแแแแแแก แจแแแชแแ แแแ. แฒ แแแแ แแแแแแแแ แแก? แแแแ แฅแแแแแแก แแแแ, แแแแ แแ แแ แจแแแแฎแแแแแจแ แจแแแฃแแจแแแก แแแ แแจแ, แ แแแแแ แฉแแแ แคแแแแแแ แฃแแ แแแแ แจแแแฃแแจแฃแแ แกแฃแ แแแแแแ. แกแแแแจแแแแแจแ แแแแแแ BoltDB, แ แแแแแแช แฏแแ แแแแแ แฃแแแ แแฆแแแแคแฎแแ แแก แแแกแ แแแแแแแแแแแแแ, แแก แแกแแฎแฃแแแ แแแแฃแแแแขแแชแแแจแ.
แแแแแแแแแแจแ, แแแแแฎแแแ แแแแแแ แแ แคแแแแแก แแแชแแแแ, แฉแแแก แจแแแแฎแแแแแจแ แแแ แฉแ แแฎแแแแ 10 แแแแแแแ Bolt-แแก แแ แฅแแแ. แแ แ แแ แแฅแแแแแ แจแแกแแซแแแแแแแ แจแแชแแแแแก แแ แกแแแฃแแ แแแ แแฅแขแแ แแ แคแแแแแก แกแขแ แฃแฅแขแฃแ แ, แจแแกแแซแแแแแแ แแฅแแแแแแ แแแกแ แจแแแชแแ แแแ แแแแฎแแแแแแ 1 แแแแแแ แคแแแแแแแ.
แงแแแแ แแแขแแ แ แคแแแแ แจแแคแฃแแฃแแแ Bolt-แแก แแ แฅแแแแแจแ, แ แแแแแแแช แแแขแแแแขแฃแ แแ แแฆแแแแ แแ แแแ แแฅแขแแ แแแแแก แกแแฎแแแแแก, แ แแแแแแจแแช แแกแแแ แแแแแแ แแแแก แแ แงแแแแ แแแแ แคแแแแ แ แฉแแแ แแ แฅแแแแแแก แแแแ แแแ; แแแ แ แแ แแฅแแก แแแ แจแแคแฃแแแแก, แแก แแ แแก แแแแคแแแฃแ แแ แแแแแ. แแแขแแ แแแ แแ แฅแแแแแแ, แแแแ แฃแชแแแแแ แ แฉแแแ. แกแแ แแแ แ แแ แแแแกแแแ แแแแญแแแ แแแแแ แแฃแจแแแแก.
wZD แกแแ แแแ แแก แแ แฅแแขแแฅแขแฃแ แ แแ แแแฎแแกแแแแแแแแแ.
แกแแ แแแ แ แแฃแจแแแแก Linux, BSD, Solaris แแ OSX แแแแ แแชแแฃแแ แกแแกแขแแแแแแ. แแ แแฎแแแแ AMD64 แแ แฅแแขแแฅแขแฃแ แแกแแแแก แแแแแแชแแแ Linux-แแ, แแแแ แแ แแก แฃแแแ แแฃแจแแแแแแก ARM64, PPC64, MIPS64-แแ.
แฒซแแ แแแแแ แแแฎแแกแแแแแแแแแ:
- Multithreading;
- แแฃแแขแแกแแ แแแ แ, แ แแแแแแช แฃแแ แฃแแแแแงแแคแก แฎแแ แแแแแแแก แขแแแแ แแแขแแแแก แแ แแแขแแแ แแแแก แแแแแแแแกแแแแก;
- แแแฅแกแแแแแฃแ แ แแแแญแแแ แแแแแแ แแแแฎแแแ แแแแแก แแ แแแแแแแแแ แแกแแแแก;
- แแฎแแ แแแญแแ แแแ HTTP แแแแแแแแ: GET, HEAD, PUT แแ DELETE;
- แแแแฎแแแกแ แแ แฉแแฌแแ แแก แฅแชแแแแก แแแ แแแ แแแแแแขแแก แแฎแแ แแก แกแแแแฃแ แแแแก แแแจแแแแแแ;
- แแแฆแแแแแแคแแแฃแ แแ แแแแแ แแแ แขแฃแแแฃแ แ แฐแแกแขแแแแก แแฎแแ แแแญแแ แ;
- CRC แแแแแชแแแแ แแแแแแแแแแก แแฎแแ แแแญแแ แ แฌแแ แแก/แแแแฎแแแกแแก;
- แแแฎแแแ แแ แแแแแแแฃแ แ แแฃแคแแ แแแ แแแฎแกแแแ แแแแก แแแแแแแแฃแ แ แแแฎแแแ แแแแกแแแแก แแ แฅแกแแแแก แแฃแจแแแแแก แแแขแแแแแฃแ แ แ แแแฃแแแ แแแแกแแแแก;
- แแแแแชแแแแ แแแแแแแแฃแแ แจแแแฃแแจแแ;
- แแแ แแ แแแแกแ, แแ แแแแแแแแแแแแแ แแ แฅแแแแขแแ แ wZA แจแแแแแแแแแแแฃแแแ แคแแแแแแแก แแแแ แแชแแแกแแแแก แกแแ แแแกแแก แจแแฌแงแแแขแแก แแแ แแจแ.
แ แแแแฃแ แ แแแแแชแแแแแแ:
แแ แกแแแแแแ แแแแ แฎแแแแ แแแแแแแ แแ แแ แแแแแฌแแแ แกแแ แแแ แกแ แแ แแ แฅแแแแ แก แชแแชแฎแแ แแแแแชแแแแแแ, แแฎแแ แแก แฌแแ แแแขแแแแ แแฃแจแแแแก แแแแกแขแแ แแ, แ แแแแแแช แแแแชแแแก 250,000,000 15,000,000 10 แแแขแแ แ แคแแแแก (แกแฃแ แแแแแก), แ แแแแแแแช แแแแแแ แแแแก 2 2 XNUMX แแแ แแฅแขแแ แแแจแ แชแแแแ SATA แแแกแแแแแ. XNUMX แกแแ แแแ แแก แแแแกแขแแ แ แแ แแก Origin แกแแ แแแ แ, แ แแแแแแช แแแแแแขแแแแแฃแแแ CDN แฅแกแแแแก แฃแแแ. แแแกแ แแแแกแแฎแฃแ แแแแกแแแแก แแแแแแงแแแแแ XNUMX Nginx แกแแ แแแ แ + XNUMX wZD แกแแ แแแ แ.
แแแแแแแก, แแแแช แแแแแฌแงแแแขแก แแ แกแแ แแแ แแก แแแแแงแแแแแแก, แแแแแแ แฃแแ แแฅแแแแ, แแแแแงแแแแแแแแ แแแแแแแแแก แแแ แแฅแขแแ แแ แกแขแ แฃแฅแขแฃแ แ, แแฃ แแก แจแแกแแซแแแแแแแ. แแแแ แแแแแชแแ แแแฃแงแแแแแแแแ แแแแแแแแ แแแฏแแแจแแ, แ แแ แกแแ แแแ แ แแ แแ แแก แแแแแแแฃแแ แงแแแแแคแ แแก 1 Bolt-แแก แแ แฅแแแจแ แฉแแงแ แ.
แจแแกแ แฃแแแแแก แขแแกแขแแ แแแ:
แ แแช แฃแคแ แ แแชแแ แแ zipped แคแแแแแก แแแแ, แแแ แฃแคแ แ แกแฌแ แแคแแ แแแกแแ GET แแ PUT แแแแ แแชแแแแ. แแแแแ แจแแแแแแ แแ HTTP แแแแแแขแแก แฉแแฌแแ แแก แกแแแ แแ แแ แ แฉแแแฃแแแแ แแ แคแแแแแแแแ แแ Bolt-แแก แแ แฅแแแแแแแ, แแกแแแ แ แแแแ แช แแแแฎแแแกแแแ. แจแแแแ แแแฃแแแ 32 KB, 256 KB, 1024 KB, 4096 KB แแ 32768 KB แแแแแก แคแแแแแแแแ แแฃแจแแแแ.
Bolt-แแก แแ แฅแแแแแแแ แแฃแจแแแแแกแแก แแแฌแแแแแ แแแแแแฃแแ แคแแแแแก แแแแแชแแแแ แแแแแแแแแ (แแแแแแงแแแแแ CRC), แฉแแฌแแ แแแแ แแ แแกแแแ แฉแแฌแแ แแก แจแแแแแ แฎแแแแ แคแ แแแแก แฌแแแแแฎแแ แแ แฎแแแแฎแแแ แแแแแแแแ, แแก แแฃแแแแ แแแแ แแฌแแแแก แจแแคแแ แฎแแแแแก, แแแแ แแ แแแแแแ แแ แแแแแชแแแแ แฃแกแแคแ แแฎแแแแ.
แแ แฉแแแแขแแ แ แจแแกแ แฃแแแแแก แขแแกแขแแแ SSD แแแกแแแแแ, แ แแแแแ SATA แแแกแแแแแ แขแแกแขแแแ แแ แแฉแแแแแแก แแจแแแ แ แแแแกแฎแแแแแแแก.
แแ แแคแแแแแ แขแแกแขแแ แแแแก แจแแแแแแแแ แแแงแ แแแแแแ:
แ แแแแ แช แฎแแแแแ, แแชแแ แ แคแแแแแแแกแแแแก แฌแแแแแฎแแแกแ แแ แฉแแฌแแ แแก แแ แแจแ แแแแกแฎแแแแแแ แแ แฅแแแแแฃแ แแ แแ แฅแแแแ แแแฃแ แคแแแแแแก แจแแ แแก แแชแแ แแ.
แกแ แฃแแแแ แแแแกแฎแแแแแแฃแ แกแฃแ แแแก แแแฆแแแ 32 แแ แแแแแก แคแแแแแแแก แฌแแแแแฎแแแกแ แแ แฉแแฌแแ แแกแแก:
แคแแแแแแแก แฌแแแแแฎแแแก แจแแ แแก แแ แแแก แกแฎแแแแแ 5-25 ms แคแแ แแแแแจแแ. แฉแแฌแแ แแ, แงแแแแแคแแ แ แฃแแ แแกแแ, แแแแกแฎแแแแแแ แแ แแก แแแแฎแแแแแแ 150 ms. แแแแ แแ แแ แจแแแแฎแแแแแจแ แแ แแ แแก แกแแญแแ แ แแแแ แคแแแแแแแก แแขแแแ แแแ; แฃแแ แแแแ แแแ แ แแ แแฅแแก แแแแก แแแแแแแแแก; แแแ แจแแฃแซแแแแ แแชแฎแแแ แแ แแ แฅแแแแแแ แแแแแฃแแแแแแแแ.
*แขแแฅแแแแฃแ แแ, แจแแแแซแแแแ แแแแแแงแแแแ แแก แกแแ แแแ แ แแแแชแแแแแแก แจแแกแแกแ แฃแแแแแแ, แ แแแแแแแช แกแแญแแ แแแแแ 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 แแแแแแ แแกแแแ แแ แแ แแก แแฎแแ แแแญแแ แแแ (แฏแแ แแ แแ แแก แแแแแฌแงแแแขแแแ, แกแแญแแ แแ แแฃ แแ แ).
แแแแช แแญแ แแแ แฌแงแแ แแก แแแแจแ, แแฅ แแแแแแก แแแ แแฅแก, แงแแแแแก แแ แแแกแฌแแแก, แแแแ แแ แแ แแ แแแแแแแ แ แแแแแแ แ แแแแ แแแ แฉแแ แฉแแก แคแฃแแฅแชแแแแก, แแแ แแ แจแแคแแ แฎแแแแก แแแแแฃแจแแแแแแแกแ, แแกแ แ แแ, แแแแแแแแจแ แจแแแแซแแแ แกแฌแ แแคแแ แแแแแแฌแแ แ แแแ แแแแฅแแแก แแแแแกแแแแ แแกแแแแก. แซแ แแแ.
แฒแแแแแ:
- แแฅแแแแ แกแแแฃแแแ แ แ แแแแแแแขแแ แแกแ แแ แแแกแขแ แแแฃแขแแ แแก แจแแแฃแจแแแแแ + แแแแแ แแคแแแก แแแแแงแแแแแแก แจแแกแแซแแแแแแแแกแแแแก แแแ แกแแกแขแแแแแจแ แแแแกแขแแ แฃแแ แคแแแแฃแ แ แกแแกแขแแแแแแก แแแ แแจแ (แงแแแแแคแแ แ แแแแ แแแแแแแกแแแแก)
- แแแขแแแแแแชแแแแแแก แกแ แฃแแ แกแแแแ แแกแแแ แ แแฆแแแแแแก แจแแกแแซแแแแแแแ, แแฃ แแก แแแแแแแแ แแแแแแ แแแแ (แแแกแขแ แแแฃแขแแ แแก แแแแแงแแแแแแก แจแแแแฎแแแแแจแ)
- แแจแแแแแฃแ แ แแ แแขแแแแแ แแฃแแแแแ แฅแกแแแฃแ แ แแแแจแแ แแแแกแ แแ แแ แแแแแ แแแแก แแแแแงแแแแแแก แจแแกแแซแแแแแแแแกแแแแก แกแฎแแแแแกแฎแแ แแ แแแ แแแแ แแแแก แแแแแแกแแแแก
- NoSQL แแแแแแแแแขแแก แแแแแงแแแแแแก แแแคแแ แแแแแฃแแ แจแแกแแซแแแแแแแแแ
- แกแฎแแแแแกแฎแแ แขแแแแก แจแแแฃแแจแแ (gzip, zstd, snappy) แคแแแแแแแกแแแแก แแ แแแแจแแแแแแแแแแกแแแแก Bolt-แแก แแ แฅแแแแแจแ แแ แฉแแแฃแแแแ แแแ แคแแแแแแแกแแแแก
- แกแฎแแแแแกแฎแแ แขแแแแก แแแจแแคแแ แ แคแแแแแแแกแแแแก แแ แแแแจแแแแแแแแแแกแแแแก Bolt-แแก แแ แฅแแแแแจแ แแ แฉแแแฃแแแแ แแแ แคแแแแแแแกแแแแก
- แแแแแแแแแแฃแแ แกแแ แแแ แแก แแฎแ แแแแ แแแแแ แแแแแแ แขแแชแแ, แแแ แจแแ แแก GPU-แแ
แงแแแแแคแแ แ แแแฅแแก, แแแแแแ แแแแแแก แแแแแแแแแแ แแก แกแแ แแแ แ, BSD-3 แแแชแแแแแ, แแ แแแแ แกแแแแขแแ แ แฃแคแแแแ, แ แแแแแ แแ แงแแคแแแแงแ แแแแแแแแ แกแแแแช แแแฃแจแแแ, แกแแ แแแ แ แแ แแแแฌแแ แแแแแ. แแ แแแ แแ แแแแแ แแ แแแแแแแแแ แ. แแแแแแแแแ แแแฅแแแแ แแแแแกแแแแ แ แจแแชแแแแแกแ แแ แคแฃแแฅแชแแแก แแแแฎแแแแแกแแแแก, แ แแแแแกแแช แแฆแแแแฉแแแ.
แฌแงแแ แ: www.habr.com