ืืืืกืืืจืื ืฉื ืืฆืืจืช VKontakte ื ืืฆืืช ืืืืืงืืคืืื; ืืื ืกืืคืจื ืขื ืืื ืคืืื ืขืฆืื. ื ืจืื ืฉืืืื ืืืจ ืืืืจืื ืืืชื. ืขื ืืคื ืื, ืืืจืืืืงืืืจื ืืืืื ื ืฉื ืืืชืจ ื-HighLoad++ Pavel
ืืืืกืื ืืงืืืืืืฅ' (
ืืืจ ืืืชืจ ืืืจืืข ืฉื ืื ืฉืื ื ืขืืกืง ืืื ืืื ื ืืฉืืืืช ืืงืฉืืจืืช ื-backend.
- ืืขืืื, ืืืกืื, ืขืืืื, ืืคืฆืช ืืืื: ืืืืื, ืกืืจืืืื ื ืืฉืืืืจ ืื, ืืืืื, ืชืืื ืืช, ืืกืืืื.
- ืชืฉืชืืช, ืคืืืคืืจืื, ื ืืืืจ ืืคืชืืื, ืืืื ืื, ืืืืื ืื ืืืืจืืื, CDN, ืคืจืืืืงืื RPC ืงื ืืื ื.
- ืืื ืืืจืฆืื ืขื ืฉืืจืืชืื ืืืฆืื ืืื: ืืืืขืืช ืืืืคื, ื ืืชืื ืงืืฉืืจืื ืืืฆืื ืืื, ืืื ืช RSS.
- ืขืืจื ืืขืืืชืื ืืฉืืืืช ืฉืื ืืช, ืฉืืชืฉืืืืช ืขืืืื ืืืจืฉืืช ืฆืืืื ืืชืื ืงืื ืื ืืืืข.
ืืืืื ืชืงืืคื ืื, ืืื ืื ืื ืืืจืืืืื ืจืืื ืฉื ืืืชืจ. ืื ื ืจืืฆื ืืืืืง ืืช ืืืืืื ืืื.
ืืจืืืืงืืืจื ืืืืืช
ืืื, ืืจืืื, ืืชืืื ืืฉืจืช ืื ืืงืืืฆืช ืฉืจืชืื ืฉืืงืืืื ืืงืฉืืช.
ืฉืจืช ืงืืื
ืืฉืจืช ืืงืืื ืืงืื ืืงืฉืืช ืืืืฆืขืืช HTTPS, RTMP ื-WSS.
HTTPS - ืืื ืื ืืงืฉืืช ืืืจืกืืืช ืืืื ืืจื ื ืืจืืฉืืืช ืืื ืืื ืฉื ืืืชืจ: vk.com ื-m.vk.com, ืืืงืืืืช ืจืฉืืืื ืืืืชื ืจืฉืืืื ืืืจืื ืฉื ื-API ืฉืื ื: ืืงืืืืช ื ืืืืื, ืฉืืืืื. ืืฉ ืื ื ืงืืืช ืคื ืื RTMP-ืชื ืืขื ืืฉืืืืจืื ืืืื ืขื ืฉืจืชืื ืงืืืืื ื ืคืจืืื ื WSS- ืืืืืจืื ืขืืืจ Streaming API.
ืขืืืจ HTTPS ื-WSS ืืฉืจืชืื ืื ืฉืืื nginx. ืขืืืจ ืฉืืืืจื RTMP, ืขืืจื ื ืืืืจืื ื ืืคืชืจืื ืืฉืื ื ืงืืื, ืืื ืื ืืขืืจ ืืชืืื ืืืื. ืืฆืืจื ืกืืืื ืืช ืชืงืืืช, ืฉืจืชืื ืืื ืืคืจืกืืื ืืชืืืืช IP ื ืคืืฆืืช ืืคืืขืืื ืืงืืืฆืืช ืื ืฉืื ืืฉ ืืขืื ืืืื ืืฉืจืชืื, ืืงืฉืืช ืืืฉืชืืฉ ืื ืืืืื. ืขืืืจ HTTPS ื-WSS, ืืืชื ืฉืจืชืื ืืฆืคืื ืื ืชืขืืืจื ืขื ืื ืช ืืงืืช ืืืง ืืขืืืก ืืืขืื ืขื ืขืฆืื.
ืื ื ืืืจ ืืืชืจ ืขื WSS ื-RTMP, ืืื ืจืง ืขื ืืงืฉืืช HTTPS ืกืื ืืจืืืืช, ืืืฉืืืืืช ืืืจื ืืื ืืคืจืืืงื ืืื ืืจื ืื.
ืงืฆื ืืืืจื
ืืืืืจื ืืืืืช ืืฉ ืืืจื ืืื ืฉืจืชื ืืืืจื. ืื ืืขืืืื ืืงืฉืืช ืฉืืฉืจืช ืืงืืื ืืงืื ืืืงืืืืช.
ืื ืฉืจืชื kPHP, ืฉืขืืื ืคืืขื ืืืื ื-HTTP, ืืืืืื ืฉ-HTTPS ืืืจ ืืคืืขื ื. kPHP ืืื ืฉืจืช ืฉืคืืขื ืขืืื ืืืื prefork: ืืชืืื ืชืืืื ืืืกืืจ, ืืืืจื ืฉื ืชืืืืื ืืื, ืืขืืืจ ืืื ืฉืงืขื ืืืื ื ืืื ืืขืืืื ืืช ืืืงืฉืืช ืฉืืื. ืืืงืจื ืื, ืชืืืืืื ืืื ื ืืืคืขืืื ืืืืฉ ืืื ืื ืืงืฉื ืืืืฉืชืืฉ, ืืื ืคืฉืื ืืืคืกืื ืืช ืืฆืื ืืืฆื ืืืคืก ืืืงืืจื - ืืงืฉื ืืืจ ืืงืฉื, ืืืงืื ืืคืขืื ืืืืฉ.
ืืืืงืช ืขืืืกืื
ืื ืืงืฆื ืืืืืจื ืฉืื ื ืืื ื ืืืืจ ืขืฆืื ืฉื ืืืื ืืช ืฉืืืืืืช ืืขืื ืื ืืงืฉื. ืื ืื ื ืื ืืืืืงืื ืืงืืืฆืืช ื ืคืจืืืช: ืืืื, ืืืืืื, API, ืืืืื, ืืืืื... ืืืขืื ืืงืืืฆื ื ืคืจืืช ืฉื ืืืื ืืช ืื ืชืฉืคืืข ืขื ืื ืืืืจืื. ืืืงืจื ืฉื ืืขืืืช ืืืืืืื, ืืืฉืชืืฉ ืฉืืืืื ืืืืืืงื ืืคืืื ืื ืืืืข ืขื ืืืขืืืช. ืืืืื ืงืฆื ืืืืจื ืืฉืืื ืืช ืืืงืฉื ืืืืื nginx ืืืืืช ืืคื ืืชืฆืืจื.
ืืืกืืฃ ืืืืื ืืืืืื ืืืืฉ
ืืื ืืืืื ืืื ืืืื ืืืช ืื ืื ื ืฆืจืืืื ืฉืืืื ืื ื ืืื ืงืืืฆื, ืื ืื ื ืื ืชืกืชืื ืขื QPS. ื-backends ืฉืื ืื, ืืฉ ืืื ืืงืฉืืช ืฉืื ืืช, ืืื ืืงืฉื ืืฉ ืืืจืืืืช ืฉืื ื ืฉื ืืืฉืื QPS. ืืืื ืื ืื ืื ื ืื ื ืคืืขืืื ืขื ืืจืขืืื ืฉื ืขืืืก ืขื ืืฉืจืช ืืืืืืชื - ืขื ืืืขืื ืืืคืจืค.
ืืฉ ืื ื ืืืคื ืฉืจืชืื ืืืื. ืื ืฉืจืช ืคืืื ืืคืขืื ืงืืืฆืช kPHP ืืื ืืืืืจ ืืช ืื ืืืืืืช (ืืืืืื ืฉ-kPHP ืืื ืคืชืื ืืืื).
ืฉืจืช ืชืืื
CS ืื ืฉืจืช ืชืืื ืืื ืืืกืื. CS ืืื ืฉืจืช ืฉืืืืกื ืงืืฆืื ืืื ืืขืื ืงืืฆืื ืฉืืืขืื ืืื ืืื ื ืืฉืืืืช ืกืื ืืจืื ืืืช ืืจืงืข ืฉืืืืืช ืืจืืฉืืช ืฉื ืืืื ืืจื ื ืืงืฆื ืื.
ืืฉ ืื ื ืขืฉืจืืช ืืืคื ืฉืจืชืื ืคืืืืื ืืืืืกื ืื ืงืืฆืื. ืืฉืชืืฉืื ืืืืืื ืืืขืืืช ืงืืฆืื, ืืื ืื ื ืืืืืื ืืืืกื ืืืฉืชืฃ ืืืชื. ืืืง ืืืฉืจืชืื ืืืื ืกืืืจืื ืขื ืืื ืฉืจืชื pu/pp ืืืืืืื.
pu/pp
ืื ืคืชืืช ืืช ืืฉืื ืืช ืืจืฉืช ื-VK, ืจืืืช ืืช pu/pp.
ืื ืื pu/pp? ืื ื ืกืืืจ ืฉืจืช ืืื ืืืจื ืืฉื ื, ืื ืืฉ ืฉืชื ืืคืฉืจืืืืช ืืืขืืืช ืืืืืจืื ืงืืืฅ ืืฉืจืช ืฉื ืกืืจ: ืืฉืืจืืช ืืจื http://cs100500.userapi.com/path
ืื ืืจื ืฉืจืช ืืื ืืื - http://pu.vk.com/c100500/path
.
Pu ืืื ืืฉื ืืืืกืืืจื ืืืขืืืช ืชืืื ืืช, ื-pp ืืื ืคืจืืงืกื ืชืืื ื. ืืืืืจ, ืฉืจืช ืืื ืืืืขื ืืืขืืืช ืชืืื ืืช, ืืืืจ ืืื ืืืขืืื. ืืขืช ืื ืจืง ืชืืื ืืช ื ืืขื ืืช, ืืื ืืฉื ื ืฉืืจ.
ืืฉืจืชืื ืืืื ืืกืืื ืืคืขืืืช HTTPSืืื ืืืกืืจ ืืช ืขืืืก ืืืขืื ืืืืืกืื. ืืื ืื, ืืืืืื ืฉืงืืืฆื ืืฉืชืืฉ ืืขืืืืื ืืฉืจืชืื ืืื, ืืื ืฉืืืืข ืจืืืฉ ืคืืืช ืืืืืกื ืืืืื ืืช ืืื, ืื ืืืื. ืืืืืื, ืืคืชืืืช ืืฆืคื ื ืฉื HTTPS.
ืืืืืื ืฉืืืืื ืืช ืกืืืจืืช ืขื ืืื ืืืืื ืืช ืืืืจืืช ืฉืื ื, ืื ื ืืืืืื ืืืจืฉืืช ืืขืฆืื ื ืื ืืชืช ืืื ืืชืืืืช IP ืืืฆืื ืืืช "ืืื ืืช", ื ืชื "ืืคืืจ". ืื ืืกืื ื ืืืืืจ ื-IP ืืืืืื ื ืืืื ืขื ืืืืื ืืช ืืืืฉื ืืืฆืื ืืช - ืคืฉืื ืืื IP ืืืืื ืก ืืืื.
ืืืกื ืขื ืืชืืืืช IP ืืฉืืชืคืืช. ืืืืื ืช ืกืืืืืช ืืชืงืืืช, ืืกืืืื ืคืืขืืช ืืืชื ืืืืจ โ ืืืกืคืจ ืฉืจืชืื ืคืืืืื ืืฉ IP ืคืืื ืืฉืืชืฃ, ืืืืืืจื ืฉืืคื ืืื ืืืืจืช ืืื ืืฉืืื ืืช ืืืงืฉื. ืื ื ืืืืจ ืขื ืืคืฉืจืืืืช ืืืจืืช ืืืืืจ ืืืชืจ.
ืื ืงืืื ืืฉื ืืื ืืืืืืงืช ืืื ืฉืืืงืจื ืื ืืืงืื ืฉืืืจ ืขื ืคืืืช ืงืฉืจืื. ืื ืืฉ ืืืชื IP ืขืืืจ ืืกืคืจ ืืืื ืืช - ืขื ืืืชื ืืืจื: pu.vk.com ืื pp.vk.com, ืืืคืืคื ืืืงืื ืืฉ ืืืืื ืขื ืืกืคืจ ืืืงืฉืืช ืื-ืืื ืืช ืืืืจื ืืื. ืืื ืืชืงืืคื ืฉื HTTP/2 ืืื ืืงืื, ืื ื ืืืืื ืฉืื ืืืจ ืื ืื ืื ืจืืืื ืื.
ืืืืกืจืื ืืืจืืจ ืฉื ืืชืืื ืืช ืืื ืฉืืื ืืืืืช ืืฉืืื ืืช ืื ืืชื ืืขื, ืฉืขืืืจ ืืืืกืื, ืืจื ืฉืจืช ืืืจ. ืืืืืื ืฉืื ื ืืืจืืืื ืชื ืืขื ืืจื ืืืื ืืช, ืืื ื ื ืขืืืื ืื ืืืืืื ืืฉืืื ืชื ืืขื ืืืื, ืืืฉื, ืืืืื, ืืืืฆืขืืช ืืืชื ืชืื ืืช. ืื ื ืืฉืืจืื ืืืชื ืืฉืืจืืช - ืืืืืจ ืืฉืืจ ื ืคืจื ืืืืกืื ื ืคืจื ืืืืืื ืขืืืจ ืืืืื. ืื ื ืืขืืืจืื ืชืืื ืงื ืืืชืจ ืืืืฆืขืืช ืคืจืืงืกื.
ืื ืืืื ืงืืืื ื ืืจืกื ืืฉืืคืจืช ืฉื ืคืจืืงืกื. ืขืืฉืื ืื ื ืืืื ืื ืืื ืื ืฉืื ืื ืืืื ืจืืืืื ืืืืืข ืื ืืืจืื.
ืฉืืฉ
ืืกืคืืืืจ 2017, ืืืจืงื, ืฉืจืืฉื ืืขืืจ ืืช ืกืื,
ื-pp ืืื ืืื ืืขืืืช. IP ืืื ืืงืืืฆื - ืืืืื ืื ืืขืื. ืืกืคืจ ืฉืจืชืื ืคืืืืื ืืืืงืื ืืชืืืช IP ืืฉืืชืคืช, ืืืื ืืจื ืืฉืืื ืืืืื ืฉืจืช ืืืงืฉื ืชืคื ื. ืืื, ืื ืืืื ืืฉืชืืฉืื ืฉืื ืื ืขืืืจ ืืืชื ืงืืืฅ, ืื ืื ืืฉ ืืืืื ืืฉืจืชืื ืืื, ืืงืืืฅ ืืกืืคื ืฉื ืืืจ ืืืืืื ืฉื ืื ืฉืจืช. ืื ืชืืื ืืช ืืืื ืื ืืขืืื, ืืื ืื ื ืืชื ืืื ืืขืฉืืช ืืืจ.
ืืชืืฆืื ืืื - ืื ืื ื ืื ืืืืืื ืืคืืจ ืชืืื, ืืืืืื ืฉืืื ื ื ืืืืืื ืืืืืจ ืฉืจืช ืกืคืฆืืคื ืืงืืืฆื ืื - ืืฉ ืืื IP ืืฉืืชืฃ. ืื ืืกืืืืช ืคื ืืืืืช ืฉืืฉ ืื ื ืื ื ืืชื ืืื ืืืชืงืื ืฉืจืชืื ืืืื ืืืืืจืื. ืื ืขืืื ืจืง ืืกื ื ืคืืจืืืจื.
ืขื ืืฉืืฉืืช ืฉืื ืื ื ืืช ืฉืืืช ืืืืืจื. ืขืืฉืื ืืฉ ืื ื ื ืืชืื anycast: ื ืืชืื ืืื ืื, Anycast, ืืืื ืืืืงื ืขืฆืืืช. ืืื ืฉืจืช ืืฉ IP ืืืฉื ืืฉืื, ืืื ืชืช ืจืฉืช ืืฉืืชืคืช. ืืื ืืืืืจ ืืฆืืจื ืืื ืฉืื ืฉืจืช ืืื ื ืืฉื, ืืชืขืืืจื ืืชืคืืจืช ืขื ืคื ื ืืฉืจืชืื ืืืืจืื ืฉื ืืืชื ืงืืืฆื ืืืืคื ืืืืืืื. ืืขืช ื ืืชื ืืืืืจ ืฉืจืช ืกืคืฆืืคื, ืืื ืืืืื ืืืืชืจ, ืืืืืื ืืช ืื ืืืฉืคืขื.
ืชืืืื ืืืฉืงื. ืืขืช ืื ื ืืืืืื ืืืจืฉืืช ืืขืฆืื ื ืืืชืงืื ืืืื ืืช ืืขืืืช ืืกืคืง ืฉืื ื ืืคื ืืฆืืจื, ืืื, ืืืงืจื ืฉื ืืขืืืช ืืื ืืืช, ืืฉื ืืช ืืช ืืฉืงืื ืฉื "ืืฉืืฉืืช" ืืคืืขืืืช ืืื ืืืคืืืช ืืช ืืขืืืก ืขืืืื, ืื ืฉืื "ืื ืืื" ืืืชืืืื ืืขืืื ืฉืื.
ืฉืืชืืฃ ืืคื ืืืื ืชืืื. ืืืจ ืืฆืืืง ื-Sharding: ืืืจื ืืื ืื ื ื ืืชื ืื ืชืืื ืื ืฉืืฉืชืืฉืื ืฉืื ืื ืขืืืจืื ืืืืชื ืงืืืฅ ืืจื ืืืชื "ืฉืืฉ" ืื ืฉืืืื ืืื ืืืืื ืืฉืืชืฃ.
ืืืืจืื ื ืืฉืงื ื ืืช ืืคืืืงืฆืืืช "ืชืืชื". ืืื ืืืืื ืืงืืื ืืฉืืืืจ ืื, ืฉืื ืืืืจื ืฉืืื ืฉืืืืช ืืืืฉืชืืฉืื ืขืื ืื ืืืื ืืืช, ืืืืจืื ืืคืฉืจืืืืช. ืืืคืืืงืฆืื ืืฉ ืฆ'ืื ืฉืื ืืฉืชืืฉืื ืืืืืื ืืฉืืื. ืืืื ืืืชืืืจ ืืฉืืืืจ ืื ืืื ืืช ืืืชืจ ื-100 ืืืฃ ืืืฉ. ืืืื ืืืชืืื ืืืืขืืช ืฉื ืฉืืืืช ืืื ืืืฉืชืชืคืื, ืืืืืืืจ ืืืืข ืืื ืขื ืืืืืขื. ืื 100 ืืืฃ ืื ืฉืื ืืืื ืืฉืืื ืืืืืืจ ืืื ื"ืฉืืฉ", ืื ืื ืืืื ืืคืขืืื ืืืชืืืื ืืืืืจื ืขื ื.
ืขื ืื ืช ืืขืืื ืืคืจืฆื ืืงืฉืืช ืืืืชื ืงืืืฅ, ืขืืืจ ืกืื ืืกืืื ืฉื ืชืืื ืื ื ืืคืขืืืื ืกืืื ืืืืคืฉืช ืฉืืคืืฆื ืงืืฆืื ืขื ืคื ื ืื ื"ืฉืืฉืืช" ืืืืื ืืช ืืืืืจ.
ืฉืืฉ ืืืคื ืื
ืคืจืืงืกื ืืคืื ื-nginx, ืฉืืืจ ืืืืืื ื-RAM ืื ืืืืกืงืื ืืืืจืื ืฉื Optane/NVMe. ืืืืื: http://sun4-2.userapi.com/c100500/path
- ืงืืฉืืจ ื"ืฉืืฉ", ืฉื ืืฆืืช ืืืืืจ ืืจืืืขื, ืงืืืฆืช ืืฉืจืชืื ืืฉื ืืื. ืื ืกืืืจ ืืช ืงืืืฅ ืื ืชืื, ืฉื ืืฆื ืคืืืืช ืขื ืฉืจืช 100500.
ืกืืืง
ืื ื ืืืกืืคืื ืขืื ืฆืืืช ืืื ืืชืื ืืช ืืืจืืืืงืืื ืืช ืฉืื ื - ืกืืืืช ืืืืืื.
ืืืื ืชืจืฉืื ืืคืจืืกื ืืืืื ืื ืืืืจืืื, ืืฉ ืืขืจื 20 ืืื. ืืื ืื ืืืงืืืืช ืฉืืื ื ืืฆืืื ืืืืื ืื ื"ืฉืืฉืืช", ืฉืืืืืื ืืืืกื ืชื ืืขื ืืจื ืขืฆืื.
ืืื ืฉืืืจื ืืืืืื ืฉื ืชืืื ืืืืืืืืื; ืื ืืืืืกื ืื ืืื ื ืชืื ื ืืฉืชืืฉ - ืจืง ืืืืืงื, ืืืืื, ืชืืื ืืช.
ืืื ืืงืืืข ืืช ืืืืจ ืืืฉืชืืฉ, ืื ื ืื ื ืืืกืคืื ืงืืืืืืช ืจืฉืช BGP ืฉืืืืจืื ืืืืืจืื. ืืืงืจื ืฉื fallback, ืขืืื ื ืื ืื ืชื ืืช ืืกื ืื ืชืื ืื ืฉื geoip ืื ืื ืืฆืืื ื ืืืฆืื ืืช ื-IP ืืคื ืงืืืืืืช. ืื ื ืงืืืขืื ืืช ืืืืืจ ืืคื ื-IP ืฉื ืืืฉืชืืฉ. ืืงืื ื ืืื ืืืกืชืื ืขื ืืืืจ ืืื ืื ืืืชืจ ืฉื ืืืฉืชืืฉ - ืืืชื ื ืงืืืืช ืฉืืื ืืื ืงืจืื ืืืืื ืืืืื ื ืืืืืืจืคืืช.
ืืื ืื ืขืืื?
ืื ื ืกืืคืจืื ืืช ืืคืืคืืืจืืืช ืฉื ืงืืฆืื ืืคื ืืืืจ. ืืฉ ืืช ืืืกืคืจ ืฉื ืืืืืื ืืืืืจื ืฉืื ืืืฉืชืืฉ ื ืืฆื, ืืืืื ืืงืืืฅ - ืื ืื ื ืืืงืืื ืืช ืืฆืื ืืื ืืืืืืืื ืืช ืืืืจืื ืขื ืื ืืืจืื.
ืืืงืืื, ืฉืืื - ืฉืืจืืชืื ืืืืืจืื - ืืืืขืื ืืื ืคืขื ื-API ืืืืืจืื: "ืื ื ืืืืื ืืื ืืืื, ืชื ืื ืจืฉืืื ืฉื ืืงืืฆืื ืืื ืคืืคืืืจืืื ืืืืืจ ืฉืื ืฉืขืืืื ืื ืืฆืื. โ ื-API ืืกืคืง ืืืืจื ืฉื ืงืืฆืื ืืืืื ืื ืืคื ืืืจืื, ืืืืื ืืืจืื ืืืชื, ืืืงื ืืืชื ืืืืืจืื ืืืฉื ืืช ืืงืืฆืื. ืื ืืืืื ืืืืืชื ืืื pu/pp ื-Sun ืืืืืื ืื: ืื ื ืืชื ืื ืืช ืืงืืืฅ ืืจื ืขืฆืื ืืื, ืื ืื ืืงืืืฅ ืืื ืื ื ืืฆื ืืืืืื, ืืืืืืื ืงืืื ืื ืืืจืื ืืขืฆืื ืืช ืืงืืืฅ, ืืื ืืชืืื ืืืืืืจ ืืืชื.
ืืืงืจื ืืื ืื ืื ื ืืงืืืื ืชืืื ืงืจืื ืืืชืจ ืืืฉืชืืฉืื ืืคืืืืจ ืขืืืก ืืจืฉืช. ืืืืืื, ืจืง ืืืืืืื ืฉื ืืืกืงืื ืื ื ืืคืืฆืื ืืืชืจ ื-1 Tbit/s ืืฉืขืืช ืืฉืื.
ืืื ืืฉ ืืขืืืช - ืฉืจืชื ืืืืื ืืื ื ืืืื. ืขืืืจ ืชืืื ืกืืคืจ ืคืืคืืืจื, ืืคืขืืื ืืื ืืกืคืืง ืจืฉืช ืืฉืจืช ื ืคืจื. ืฉืจืชื ืืืืืื ืฉืื ื ืื 40-50 Gbit/s, ืืื ืืฉ ืชืืื ืฉืกืืชื ืืืืจื ืขืจืืฅ ืืื. ืื ื ืืชืงืืืื ืืงืจืืช ืืืฉืื ืืืกืื ืฉื ืืืชืจ ืืขืืชืง ืืื ืฉื ืงืืฆืื ืคืืคืืืจืืื ืืืืืจ. ืื ื ืืงืืื ืฉื ืืื ืืืืฉื ืืช ืื ืขื ืกืืฃ ืืฉื ื.
ืืกืชืืื ื ืขื ืืืจืืืืงืืืจื ืืืืืืช.
- ืฉืจืชืื ืงืืืืื ืฉืืงืืืื ืืงืฉืืช.
- Backends ืื ืชืืืื ืืงืฉืืช.
- ืืืกื ืื ืกืืืจืื ืขื ืืื ืฉื ื ืกืืืื ืฉื ืคืจืืงืกื.
- ืืืืื ืื ืืืืจืืื.
ืื ืืกืจ ืืชืจืฉืื ืืื? ืืืืื, ืืืืจื ืืืืืข ืฉืืื ืื ื ืืืืกื ืื ื ืชืื ืื.
ืืกืื ื ืชืื ืื ืื ืื ืืขืื
ืื ืื ื ืงืืจืืื ืืื ืื ืืกืื ื ืชืื ืื, ืืื ืื ืืขืื - ืื ืืขืื, ืื ืืืขืฉื ืืื ืื ื ืืกืื ื ืชืื ืื ืืืืื ืืืงืืื.
ืืื ืืืฆืขื ืืืจืื.. ืื ืงืจื ืืืื ืฉืืฉื ืื 2008-2009, ืืืฉืจ ื-VK ืืืืชื ืฆืืืื ื ืคืืฆื ืืคืืคืืืจืืืช, ืืคืจืืืงื ืขืื ืืืื ืขื MySQL ื-Memcache ืืืื ืืขืืืช. MySQL ืืื ืืงืจืืก ืืืืฉืืืช ืงืืฆืื, ืืืืืจ ืืื ืืื ืื ืืชืืืฉืฉ, ื-Memcache ืืจื ืืืืจืื ืืืืฆืืขืื ืืืื ืฆืจืื ืืืคืขืื ืืืชื ืืืืฉ.
ืืกืชืืจ ืฉืืคืจืืืงื ืืืืื ืืคืืคืืืจื ืืื ืืืกืื ืืชืืฉื, ืืฉืจ ืืฉืืืช ื ืชืื ืื, ืืืืืื ืฉืืื. ืืชื ืืื ืืืื, ืงืฉื ืืคืชื ืคืจืืืงื ืฆืืื. ืืืืื ืื ืกืืช ืืฉืืชื ืืช ืืืืจืื ืืงืจืืืืื ืฉืืคืจืืืงื ืืชืืงื ืืื ืขื ืืืืคื ืืื ืฉืื ื.
ืืคืชืจืื ืืฆืืื. ืืืืชื ืืืืื ืืช ืืขืฉืืช ืืืช, ืืื ืื ืืืจื ืงืืฆืื ื, ืืืืืื ืฉืืจืืื ืืืจืืช ืฉื ืงื ื ืืืื ืื ืืื ืงืืืืืช ืืืืชื ืชืงืืคื. ืื ืืื ืืืืจื ืฉื ืืกืื ื ืชืื ืื, NoSQL ืขืืืื ืื ืืื ืงืืื, ืืื ืจืง MySQL, Memcache, PostrgreSQL - ืืืื.
ืคืขืืื ืืื ืืืจืกืืืช. ืืคืืชืื ืืืื ืขื ืืื ืฆืืืช ืืคืชืื C ืฉืื ื ืืืื ื ืขืฉื ืืฆืืจื ืขืงืืืช. ืืื ืงืฉืจ ืืื ืืข, ืืืืื ืืื ืืขืจื ืืืชื ืคืืจืื ืงืืืฅ ืฉื ืืชื ืืืืกืง, ืืืชื ืคืจืืืจืื ืฉื ืืฉืงื, ืขืืืื ืืืชืืช ืืืืชื ืืืคื, ืืืชื ืืื ืืขืจื ืืืชื ืืืจ ืืืงืจื ืฉื ืืฆืื ืงืฆื ืืืขืืืช. ืขื ืฆืืืืช ืืื ืืขืื ื ืื ืืื ืืืื ืืชืคืขื ืืช ืืืขืจืืช - ืืื ืื ืืืืช ืฉืฆืจืื ืืชืืืง, ืืื ืฆืจืืืื ืืืืื ืืืืฉ ืืืฆื ืืชืคืขื ืื ืืกื ื ืชืื ืื ืืืฉ ืฉื ืฆื ืฉืืืฉื, ืื ืฉืืคืฉืจ ืืืืืื ืืืืืจืืช ืืื ืืืืช ืืืกืคืจ ืฉืืื.
ืกืืื ืื ืืขืื
ืืฆืืืช ืืชื ืื ืืขื ืื ืืขืื. ืื ื ืจืง ืืืง ืืื: ืืืจ, ืจืืืื, ืชืืื ื, ipdb, ืืืชืืืช, ืจืฉืืืืช, ืืืื ืื, memcached, meowdb, ืืืฉืืช, nostradamus, ืชืืื ื, ืจืฉืืืืช ืืฉืืขื, pmemcached, ืืจืื ืืื, ืืืคืืฉ, ืืืกืื, ืืืืงืื, ืืฉืืืืช, โฆ
ืขืืืจ ืื ืืฉืืื ืืืืจืฉืช ืืื ื ื ืชืื ืื ืกืคืฆืืคื ืื ืืขืืืช ืืงืฉืืช ืื ืืืคืืกืืืช, ืฆืืืช C ืืืชื ืื ืืข ืืืฉ. ืืื ืื.
ืืฉ ืื ื ืื ืืข ื ืคืจื ื ืฉืื ืืืืฉื, ืฉืืืื ืืจืืื, ืืื ืขื ืฉืื ืืืจืื ืืืืื, ืืฉืืื ื ืืื. ืื ืงืืืงืืืืก, ืืื ืื ืื ืขืืื. ืืืื ืื ืคืจื pmemcached - ืืื ืืงืืฅ ืืงืืฅ ืืชืืฉื, ืืฉืจ ืืืื ืื ืืืืกื ื ืชืื ืื ืืืืกืง, ืืชืจ ืขื ืื, ืืืฉืจ ืืชืืื ื-RAM, ืืื ืื ืืืื ื ืชืื ืื ืืขืช ืืคืขืื ืืืืฉ. ืืฉื ื ืื ืืขืื ืฉืื ืื ืืืฉืืืืช ืืืืืืช: ืชืืจืื, ืจืฉืืืืช, ืกืืื - ืื ืื ืฉืืคืจืืืงื ืฉืื ื ืืืจืฉ.
ืืฉืืืืืช
ืื ืงืืืช ืืื ืฉื ืงืื, ืืื ืฆืืจื ืืืฉืื ืขื ืื ืืขืื ืื ืืกืื ื ืชืื ืื ืืขื ืชืืืืืื, ืืฉืืืืช ืื ืืืคืขืื. ืืงืื ืขืืื ืืืืืื ืขื ืืฉืืืืืช, ืขื ืงืืืฆืืช ืฉื ืื ืืขืื - ืกืื ืืื ืืื ืืฉืืื. ื ื ืื ืฉืืฉ ืืงืืฅ ืฉืืืจ - ืื ืจืง ืงืืืฆื ืฉื ืืืื ืืช.
ืืงืื ืื ืฆืจืื ืืืขืช ืืช ืืืืงืื ืืคืืื, ืืืืื ืื ืืกืคืจ ืืฉืจืชืื ืืืื. ืืื ืืืื ืืืฉืืื ืืืืฆืขืืช ืืืื ืืกืืื.
ืืื ืฉืื ืืขืืื, ืืชื ืฆืจืื ืืืืกืืฃ ืืฉืืช ืืืช ื ืืกืคืช ืฉื ืืฆืืช ืืื ืืงืื ืืื ืืขืื - ืคืจืืงืกื.
ืคืจืืงืกื RPC
ืคืจืืงืกื ืืืืืืืก ืืืืจ, ืฉืขืืื ืคืืขื ืืืขื ืื ืืืชืจ. ืืืงืืื ืืฉ ืื ื ืืื ืืืืื ืฉืืจืืช - ืืืงืื ืืืช, ืืฉ ืชืฆืืจื ืขืืืจ ื-proxy ืืื, ืฉืืืืข ืืช ืืืืงืื ืฉื ืื ืืืฉืืืืืช ืืื ืืจืกืืกืื ืฉื ืืืฉืืื ืืื. ืื ืื ืฉืื ืืืื ืขืืฉืื.
ืืืชืื ืชืื ืื ืืืคืช ืืืื ืืื, ืืืคื ืืื ืื ืขืืื - ืื ืคืฉืื ืืืืืื ืืืฉืืื. ืื ืืืคืฉืจ ืื ื ืืจืื. ืืขืช ืงืืืช ืืงืฉื, ื-proxy ืืคื ื ืืช ืืืงืฉื, ืืืืืขื ืืื - ืืื ืงืืืข ืืืช ืืขืฆืื.
ืืืงืจื ืื, ืคืจืืงืกื ืืืืื ื ืงืืืช ืืื ื ืืคื ื ืืฉื ืืฉืืจืืช. ืื ืื ืืข ืืืฉืื ืืื ืื ืงืืจืก, ืื ืืคืจืืงืกื ืืืื ืืืช ืืืืื ืืืชืื ืืฆื ืืืงืื. ืื ืืืคืฉืจ ืืืกืืจ ืืช ืคืกืง ืืืื - ืืงืื ืื ืืืื ืฉืืื ืืข ืืืื, ืืื ืืืื ืฉืืื ืื ืขืืื ืืฆืจืื ืืืชื ืื ืืืืฉืื ืืืจืช. ืืฉ ืืืืื ืืช ืืงืื ืืื ืฉืืืืจื ืืืืืข ืื ืชืืื ืขืืืืื.
ืืืฉืืืื ืกืคืฆืืคืืื
ืืคืขืืื ืื ืื ื ืขืืืื ืืืืช ืจืืฆืื ืฉืืืื ืื ื ืืืืฉืื ืคืชืจืื ืื ืกืื ืืจืื ืืื ืืข. ืืืงืืื, ืืืืื ืื ืืืฉืชืืฉ ื-rpc-proxy ืืืืื ืฉืื ื, ืฉื ืืฆืจ ืืืืืื ืขืืืจ ืืื ืืขืื ืฉืื ื, ืืื ืืืฆืืจ ืคืจืืงืกื ื ืคืจื ืืืฉืืื.
ืขืืืจ MySQL, ืฉืขืืืื ืืฉ ืื ื ืคื ืืฉื, ืื ื ืืฉืชืืฉืื ื-db-proxy, ืืขืืืจ ClickHouse - ืืืช ืืชืืืื.
ืื ืขืืื ืืืจื ืืื ืืื. ืืฉ ืฉืจืช ืืกืืืื, ืืื ืืจืืฅ kPHP, Go, Python - ืืืืคื ืืืื, ืื ืงืื ืฉืืืื ืืืฉืชืืฉ ืืคืจืืืืงืื ื-RPC ืฉืื ื. ืืงืื ืคืืขื ืืืืคื ืืงืืื ืขื ืคืจืืงืกื RPC - ืื ืฉืจืช ืื ื ืืฆื ืืงืื ืืคืขืื ืคืจืืงืกื ืืงืืื ืืฉืื. ืืคื ืืงืฉื, ืืืืคื ืืืื ืืืื ืืื ืืคื ืืช.
ืื ืื ืืข ืืื ืจืืฆื ืืขืืืจ ืืื ืืข ืืืจ, ืื ืื ืืื ืฉืื, ืืื ืขืืืจ ืืจื ืคืจืืงืกื, ืื ืืืชืื ืฉืืฉืื ื ืืฆื ืืืจืื ื ืชืื ืื ืืืจ. ืืื ืืข ืื ืฆืจืื ืืืกืชืื ืขื ืืืืขืช ืืืงืืื ืฉื ืฉืื ืืืจ ืืืื ืขืฆืื - ืื ืืคืชืจืื ืืกืื ืืจืื ืฉืื ื. ืืื ืืืืื ืฉืืฉ ืืืฆืืื ืืืืื :)
ืืืืื ื-TL-scheme ืฉืืคืื ืคืืขืืื ืื ืืื ืืขืื.
memcache.not_found = memcache.Value;
memcache.strvalue value:string flags:int = memcache.Value;
memcache.addOrIncr key:string flags:int delay:int value:long = memcache.Value;
tasks.task
fields_mask:#
flags:int
tag:%(Vector int)
data:string
id:fields_mask.0?long
retries:fields_mask.1?int
scheduled_time:fields_mask.2?int
deadline:fields_mask.3?int
= tasks.Task;
tasks.addTask type_name:string queue_id:%(Vector int) task:%tasks.Task = Long;
ืืื ืคืจืืืืงืื ืืื ืืจื, ืฉืืื ืืืื ืืงืจืื ืืืืชืจ ืฉืื ืืื protobuf. ืืกืืืื ืืชืืจืช โโืืจืืฉ ืฉืืืช ืืืคืฆืืื ืืืื, ืกืืืื ืืืจืืืื - ืืจืืืืช ืฉื ืกืงืืจืื ืืืื ืื ืืฉืืืืชืืช. ืืื ืขืืื ืืคื ืืคืจืืืืงืื ืืื.
RPC ืขื TL ืขื TCP/UDP... UDP?
ืืฉ ืื ื ืคืจืืืืงืื RPC ืืืืฆืืข ืืงืฉืืช ืื ืืข ืฉืคืืขื ืขื ืืื ืกืืืืช TL. ืื ืื ืขืืื ืขื ืืืืืจ TCP/UDP. TCP ืืืื, ืืื ืืื ืื ืื ื ืฆืจืืืื UDP ืืขืชืื ืงืจืืืืช?
UDP ืขืืืจ ืืื ืืข ืืช ืืืขืื ืฉื ืืกืคืจ ืขืฆืื ืฉื ืืืืืจืื ืืื ืฉืจืชืื. ืื ืืื ืฉืจืช ืืฉ ืคืจืืงืกื RPC ืืืืืคื ืืืื ืืื ืืืื ืืขืืืจ ืืื ืื ืืข, ืื ืืฉ ืขืฉืจืืช ืืืคื ืืืืืจื TCP ืืื ืฉืจืช. ืืฉ ืขืืืก, ืืื ืืื ืืกืจ ืชืืขืืช. ืืืงืจื ืฉื UDP ืืขืื ืื ืื ืงืืืืช.
ืืื ืืืืฆืช ืื ืืืืชืจืช ืฉื TCP. ืืืื ืืขืื ืืืคืืื ืืช: ืืืฉืจ ืื ืืข ืืืฉ ืื ืฉืจืช ืืืฉ ืืืคืขื, ื ืืฆืจืื ืืืืืจื TCP ืจืืื ืืืช ืืืช. ืขืืืจ ืืงืฉืืช ืงืื ืืช ืงืืืช ืืฉืงื, ืืืฉื, ืขืืืก UDP, ืื ืืชืงืฉืืจืช ืืื ืืงืื ืืื ืืข ืืื ืฉืชื ืื ืืช UDP: ืืื ืืก ืืืืืื ืืื, ืืฉื ื ืืืืืื ืืฉื ื. ื ืกืืขื ืืืช ืืืื ืืฉืื - ืืืงืื ืงืืื ืชืฉืืื ืืืื ืืข ืืื ืืืืฆืช ืื.
ืื, ืืื ืคืฉืื ืขืืื ืขื ืืืื ืงืื ืืืื ืฉื ืืืืื ืื ืืช. ืืคืจืืืืงืื ืืฉ ืชืืืื ืืฉืืืืจืื ืืืืจืื ืืคืกืงื ืืื, ืืื ืื ื ืคืกืื ืืจืื, ื ืงืื ืืืขื TCP, ืืื ืื ืืืขืื. ืื ืื ื ืื ื ืืกืขืื UDP ืขื ืคื ื ืืืงืืื ืืกืื.
ืืฉ ืื ื ืืืคื ืฉืจืชืื ืืืื, ืืืกืืื ืืื: ืืืืืช ืื ืืขืื ืืืชืงื ืช ืืื ืฉืจืช ืคืืื. ืื ืืจืื ืขื ืืืืื ืืืืืื ืืจืืฅ ืืืจ ืืื ืืืคืฉืจ ืืื ืืกืืื, ืืื ืืจืืกืงืื ืืคืชืจืื ืืช ืขื ืืืืื ืืืืืื. ืืื ืขื ืืืช, ืืื ืื ื ืืืจ ืืืื ืืืชืจ ืืืื ืืขืื ืืืื, ืืชืฉืืืช ืื ืจืื ืืืงืืฉืช ืืืืกืื ื ืชืื ืื ืืชืืฉื.
ืืืกืื ื ืชืื ืื ืืชืืฉื
ืื ืืขืื ืืืชืืื ืืืืืื. ืืื ืืื ืืื ืงืืืฅ ืฉืืกืืคื ืืชืืืกืฃ ืืืจืืข ืืฉืื ืื ืืฆื ืื ื ืชืื ืื. ืืคืชืจืื ืืช ืฉืื ืื ืื ื ืงืจื ืืืจืช: ืืืื ืืื ืืจื,
ืืื ืืื ืืข ืืืื ืืข ืืงืจืื ืืืืฉ ืืช ืื ื-binlog ืืืฉื ืฉื ืื ืจืืืช ืืขืช ืืคืขืื ืืืืฉ, ืืืชืืื ืืื ืืขืื ืชืืื ืืช - ืืฆื ื ืืืื. ืื ืฆืจืื, ืื ืงืืจืืื ืืื ื ืงืืื, ืืืืจ ืื ืืกืืืืื ืืงืจืื ืืืืื ืืื. ืื ื-binlogs ื ืืชืืื ืืืืชื ืคืืจืื ืืื ืืจื - ืืคื ืกืืืืช TL, ืื ืฉืื ืืื ืืขืจืืช ืืืืืื ืื ืื ืืืชื ืืืืคื ืฉืืื ืืืืฆืขืืช ืืืืื ืฉืืื. ืืื ืฆืืจื ืืื ืืฆืืืืื ืืฆื. ืืฉ ืืืชืจืช ืืืืืช ืฉืืฆืืื ืช ืฉื ืื ืชืืื ืช ืืืฆื ืืื int, ืงืกื ืฉื ืืื ืืข ืืืืื ืืืฃ ืื ืืฉืื ืืืฃ ืืื. ืื ืืขืื ืืื ืืข ืฉืจืฉื ืืช ืชืืื ืช ืืืฆื.
ืืชืืจ ืืืืืจืืช ืืช ืขืงืจืื ืืคืขืืื. ืืฉ ืฉืจืช ืฉืขืืื ืคืืขื ืืื ืืข. ืืื ืคืืชื ืืืื ืืืฉ ืจืืง ืืืชืืื ืืืืชื ืืืจืืข ืืฉืื ืื ืื.
ืืฉืื ืืกืืื, ืื ืฉืืื ืืืืื ืืฆืื ืชืืื ื ืืขืฆืื, ืื ืฉืืื ืืงืื ืืืช. ืืฉืจืช ืืืฆืจ ืงืืืฅ ืืืฉ, ืืืชื ืืชืืื ืืช ืื ืืฆืื, ืืืกืืฃ ืืช ืืืื ืืืื ืืื ืื ืืืื - offset - ืืกืืฃ ืืงืืืฅ, ืืืืฉืื ืืืชืื. ืื ื ืืฆืจ ืืื ืืื ืืืฉ.
ืืฉืื ืืกืืื, ืืฉืืื ืืข ืืชื ืืข ืืืืฉ, ืืืื ืื binlog ืืื ืชืืื ืช ืืฆื ืขื ืืืืกืง. ืืื ืืข ืงืืจื ืืช ืื ืชืืื ืช ืืืฆื ืืืขืื ืืช ืืฆืื ืื ืงืืื ืืกืืืืช.
ืงืืจื ืืช ืืืืงืื ืฉืืื ืืืื ืืฆืืจืช ืชืืื ืช ืืืฆื ืืืช ืืืื ื-binlog.
ืงืืจื ืืช ืกืืฃ ื-binlog ืืื ืืงืื ืืช ืืืฆื ืื ืืืื ืืืืฉืื ืืืชืื ืืืจืืขืื ื ืืกืคืื. ืืืื ืชืื ืืช ืคืฉืืื; ืื ืืื ืืขืื ืฉืื ื ืคืืขืืื ืืคืื.
ืฉืืคืื ื ืชืื ืื
ืืชืืฆืื ืืื, ืฉืืคืื ื ืชืื ืื ืืฆืื ื ืืืืกืก ืืฆืืจืืช - ืื ืื ื ืืืชืืื ื-binlog ืื ืื ืฉืื ืื ืืขืืื, ืืื ืืืืืจ ืฉืื ืื ืืงืฉืืช. ืืืื ืืืื ืืื ืฉืืืืข ืืจืฉืช, ืจืง ืืขื ืฉืื ื.
ืืืชื ืกืืืื ืืฉืืฉืช ืื ืจืง ืืฉืืคืื, ืืื ืื ืืืฆืืจืช ืืืืืืื. ืืฉ ืื ื ืื ืืข - ืืืกืืจ ืืชืืื ืฉืืืชื ืืืื ืืื. ืืื ืืงืื ืืืจ ืฉืื ืืื ืืืื ืืืืืจืื ืืช ืื, ืืืื ืืื ืืื ืืืขืชืง, ืืืื - ืืฉ ืื ื ืืืืื.
ืืืืืช ืฆืืจื ืงืืจื ืืขืชืงืืื ืืืคืืืช ืืช ืขืืืก ืืงืจืืื ืฉื ืืืขืื, ืคืฉืื ืืืคืขื ืื ืืข ืืงืจืืื, ืฉืงืืจื ืืช ืกืืฃ ื-binlog ืืืืฆืข ืืช ืืคืงืืืืช ืืืื ืืืืคื ืืงืืื.
ืืคืืืืจ ืืื ืงืื ืืืื, ืืืคืฉืจ ืืืืืช ืขื ืืื ืืขืชืง ืืคืืจ ืืืจื ืืืืกืืจ.
ืืืืงืช ื ืชืื ืื ืืคืจืืงืกื RPC
ืืื ืขืืื ืืจืืกื? ืืื ื-proxy ืืืื ืืืืื ืจืกืืกื ืืฉืืื ืืฉืืื? ืืงืื ืื ืืืืจ: "ืฉืื ืขืืืจ 15 ืจืกืืกืื!" - ืื, ืื ื ืขืฉื ืขื ืืื ื-proxy.
ืืกืืืื ืืคืฉืืื ืืืืชืจ ืืื firstint - ืืืกืคืจ ืืจืืฉืื ืืืงืฉื.
get(photo100_500) => 100 % N.
ืืืื ืืืืื ืืคืจืืืืงืื ืืงืกื ืคืฉืื ืืืืืกื ืืืืืจืื, ืืื, ืืืืื, ืฉืืืืชืืช ืืืืืืช ืืืืืช ืืืจืืืืช ืืืืื ืืช. ืืืืืื ืืืงืืช ืืช ืืืกืคืจ ืืจืืฉืื ืืฉืืืืชื ืืืช ืืฉืืจ ืืืฉืจ ืืืืงืื ืืืืื ืืืฉืืื.
ืื ืฉืืืืฉื ืืืฉืจ ืื ื ืจืืฆืื ืืงืื ืืืงืื ื ืชืื ืื ืฉื ืืฉืืช ืืืช. ื ื ืื ืฉ-100 ืืื ืืืื ืืฉืชืืฉ ืื ืงืืืฆื, ืืื ื ืจืืฆืื ืฉืื ืื ืชืื ืื ืฉื ืืฉืืช ืืืช ืืืื ืืจืกืืก ืืื ืขืืืจ ืฉืืืืชืืช ืืืจืืืืช.
ืื ืื ืืืคืช ืื ื ืืื ืืืงืฉืืช ืืคืืืจืืช ืืจืืื ืืืฉืืื, ืืฉื ื ืืคืฉืจืืช ื ืืกืคืช - ืืืืื ืืช ืื ืืจืกืืก.
hash(photo100_500) => 3539886280 % N
ืื ืื ื ืืงืืืื ืื ืืช ื-hash, ืืช ืฉืืจ ืืืืืงื ืืืช ืืกืคืจ ืืจืกืืก.
ืฉืชื ืืืคืฉืจืืืืช ืืืื ืขืืืืืช ืจืง ืื ืื ืื ื ืืืื ืื ืืื ืฉืืืฉืจ ื ืืืื ืืช ืืืื ืืืฉืืื, ื ืคืฆื ืืืชื ืื ื ืืืื ืืืชื ืืืื ืคืขืืื. ืืืืืื, ืืื ืื ื 16 ืจืกืืกืื, ืืื ืื ื ืืกืคืืง, ืื ืื ื ืจืืฆืื ืืืชืจ - ืื ืื ื ืืืืืื ืืืฉืื 32 ืืืืื ืืื ืืฉืืชื. ืื ืื ืื ื ืจืืฆืื ืืืืืื ืืื ืืคืืืืช, ืชืืื ืืฉืืชื, ืื ืื ื ืืื ืืคืฆื ืืช ืืื ืืืืืืง ืืื ืืคืกืืื. ืืคืฉืจืืืืช ืืื ืฉืืืืฉืืืช, ืื ืื ืชืืื.
ืื ืื ืื ื ืฆืจืืืื ืืืืกืืฃ ืื ืืืกืืจ ืืกืคืจ ืฉืจืืจืืชื ืฉื ืฉืจืชืื, ืื ืื ื ืืฉืชืืฉืื ืืืืื ืขืงืื ืขื ืืืืขืช ื-ืื-ืงืืื. ืืื ืืื ืขื ืืืช, ืื ืื ื ืืืืืื ืืืืืืื ืืช ืืงืืืืืช ืื ืชืื ืื; ืขืืื ื ืืืื ืืช ืืืงืฉื ืืืฉืืื ืื ืฉืื ืืืง ืืืืืจ ืืช ืืชืืืื ืืงืื ื ืฉืื, ืืื ืืืื ืืช ืืชืืืืืช ื-proxy.
ืืฉ ืืงืฉืืช ืกืืคืจ ืกืคืฆืืคืืืช. ืื ื ืจืื ืื: ืคืจืืงืกื RPC ืืงืื ืืช ืืืงืฉื, ืงืืืข ืืืืื ืืฉืืื ืืืืช ืืงืืืข ืืช ืืจืกืืก. ืื ืืฉ ืื ืืืกืืจืื ืืืชืืื, ืื, ืื ืืืฉืืื ืืฉ ืชืืืืช ืืขืชืง, ืืื ืฉืืื ืืขืืชืง ืืคื ืืจืืฉื. ืืคืจืืงืกื ืขืืฉื ืืช ืื ืื.
ืืืื ืื
ืื ื ืืืชืืื ืืืื ืื ืืืื ืืจืืื. ืืืจืืจ ืืืคืฉืื ืืืืชืจ ืืื ืืืชืื ืืืื ืื ื-memcache.
ring-buffer: prefix.idx = line
ืืฉ ืงืืืืืช ืืคืชื - ืฉื ืืืืื, ืฉืืจื, ืืืฉ ืืช ืืืืื ืฉื ืืืืื ืืื - ืืกืคืจ ืืฉืืจืืช. ื ืืงื ืืกืคืจ ืืงืจืื ื-0 ืืืกืคืจ ืืฉืืจืืช ืืื ืืก 1. ืืืคืชื ื-memcache ืืื ืงืืืืืช ืืืฉืืจืฉืจืช ืืืกืคืจ ืืืงืจืื ืืื. ืื ื ืฉืืืจืื ืืช ืฉืืจืช ืืืืื ืืืช ืืฉืขื ืื ืืืืืช ืืขืจื.
ืืืฉืจ ืืฉ ืฆืืจื ืืงืจืื ืืืื ืื, ืื ื ืืืฆืขืื Multi Get ืื ืืืคืชืืืช, ืืืืื ืื ืืคื ืืื, ืืื ืืงืืืื ืืืื ืืืฆืืจ ืืืื ืืืช. ืืกืืืื ืืฉืืฉืช ืืืฉืจ ืืชื ืฆืจืื ืื ืคืืช ืืืืื ืืืฉืื ืืืืฆืืจ ืืืื ืืืช, ืืื ืืฉืืืจ ืฉืื ืืืจ, ืืื ืืขืฆืืจ ืื ืืืคืฉืจ ืชืขืืืจื ืืืืื ืืช ืืืจืืช, ืืื ืืืื ืื ืื ื ืืฉื ืืื ืจื.
ืืืืกืื ืืืื ืฉื ืืืื ืขืฅ ืืฉ ืื ื ืื ืืข ืื ืืข ืืืื ืื. ืื ืืืืืง ืืกืืื ืฉืืื ื ืืฆืจ ืื ืืฆื ืืฉืืืืฉ ื ืจืื ืืืกืคืจ ืขืฆืื ืฉื ืืฉืืืืืช. ืืืฉืืื ืืืืื ืืืืชืจ ืฉืื ื ืืืืจ ืืืืกื 600 TB ืฉื ืืืื ืื ืืจืืืื.
ืืื ืืข ืืฉื ืืืื, ืืฉ ืืฉืืืืืช ืฉืืืจ ืื ื 6-7 ืฉื ืื. ืืฉ ืืืชื ืืขืืืช ืฉืื ืื ื ืื ืกืื ืืคืชืืจ, ืืืฉื, ืืชืืื ื ืืืฉืชืืฉ ืืืืคื ืคืขืื ื-ClickHouse ืืืืกืื ืืืื ืื.
ืืืกืืฃ ืืืื ืื ืืงืืืงืืืืก
ืชืจืฉืื ืื ืืจืื ืืืฆื ืื ื ื ืื ืกืื ืืชืื ืืื ืืขืื ืฉืื ื.
ืืฉ ืงืื ืฉืขืืืจ ืืืืคื ืืงืืื ืืจื RPC ื-RPC-proxy, ืืืื ืืืื ืืื ืืืืช ืืื ืืข. ืื ืืจืฆืื ื ื ืืืชืื ืืืื ืื ื-ClickHouse, ืขืืื ื ืืฉื ืืช ืฉื ื ืืืงืื ืืกืืืื ืื:
- ืืืืืืฃ ืื ืืข ืืืฉืื ืืงืืืงืืืืก;
- ืืืืืืฃ ืืช ืคืจืืงืกื RPC, ืฉืืื ื ืืืื ืืืฉืช ื-ClickHouse, ืืคืชืจืื ืืืฉืื ืฉืืืื, ืืืืืฆืขืืช RPC.
ืืื ืืข ืคืฉืื - ืื ืื ื ืืืืืคืื ืืืชื ืืฉืจืช ืื ืืืฉืืื ืฉืจืชืื ืขื ClickHouse.
ืืืื ืืืืช ืืงืืืงืืืืก, ืขืฉืื ื ืืืช ืืืช ืืืชืืืื. ืื ื ืขืืืจ ืืฉืืจืืช ื- KittenHouse ื- ClickHouse, ืื ืื ืืชืืืื. ืืคืืื ืืื ืืงืฉืืช, ืื ืืฆืืืจ ืืืืืืจื HTTP ืฉื ืืกืคืจ ืขืฆืื ืฉื ืืืื ืืช. ืืื ืฉืืชืืื ืืช ืชืขืืื, ืืฉืจืช ืขื ClickHouse ืคืจืืงืกื ืืคืื ืืงืืื ืืืขืื, ืฉื ืืชื ืืฆืืจื ืืื ืฉืืื ืืืื ืืขืืื ืื ืคืื ืืืืืืจืื ืื ืืจืฉืื. ืื ืื ืืืื ืืืืกื ื ืชืื ืื ืืชืื ืขืฆืื ืืฆืืจื ืืืื ื ืืืกืืช.
ืืคืขืืื ืื ืื ื ืื ืจืืฆืื ืืืืฉื ืืช ืกืืืืช ื-RPC ืืคืชืจืื ืืช ืื ืกืื ืืจืืืื, ืืืฉื, ื-nginx. ืืื, ื- KittenHouse ืืฉ ืืช ืืืืืืช ืืงืื ืืืื ืื ืืจื UDP.
ืื ืืฉืืื ืืืืงืื ืฉื ืืืืื ืื ืขืืืืื ืขื ืืืชื ืืืฉื, ืืื ืืืกืชืืจืืช ืืืื ืืืืืช UDP ืืชืื ืืืืจื ืืืงืืื ืืื ื ืืืื ืืืื. ืืคืฉืจื ืืื ืืฆืืจื ืืืืฉื RPC ืืคืชืจืื ืฆื ืฉืืืฉื ืืืื ืืืื ืืช, ืื ื ืคืฉืื ืืฉืชืืฉืื ืืฉืืืืช UDP. ืืชืื ืืช ืื ื ืืืืจ ืืืืฉื.
ื ืืืืจ
ืืฉ ืื ื ืฉื ื ืกืืืื ืฉื ืืืื ืื: ืืื ืฉื ืืกืคื ืขื ืืื ืื ืืื ืืขืจืืช ืืฉืจืชืื ืฉืืื ืืืื ืฉื ืืชืื ืขื ืืื ืืคืชืืื ืืงืื. ืื ืชืืืืื ืืฉื ื ืกืืืื ืฉื ืืืืื: ืืขืจืืช ืืืืฆืจ.
ืืืื ืืขืจืืช
ืื ืขืืื ืขื ืื ืืฉืจืชืื ืฉืื ื
ืืืื ืืืฆืจ
ืืืขืื ื ืืืืช, ืืชืื ื ืืจืื ืืืจืื. ืืืืืื, ืืฉ ืงืืืฆื ืฉื ืคืื ืงืฆืืืช ืจืืืืืช ืืืืคืฉืจืืช ืื ืืืชืื ืกืคืืจืืช, ืขืจืื UniqueCounts ืืชืื ืกืืืืกืืืงื, ืื ืฉืืืช ืืืงืื ืืืจ.
statlogsCountEvent ( โstat_nameโ, $key1, $key2, โฆ)
statlogsUniqueCount ( โstat_nameโ, $uid, $key1, $key2, โฆ)
statlogsValuetEvent ( โstat_nameโ, $value, $key1, $key2, โฆ)
$stats = statlogsStatData($params)
ืืืืจ ืืื, ื ืืื ืืืฉืชืืฉ ืืืกื ื ื ืืืื ืืงืืืืฅ ืืืขืฉืืช ืื ืื ืฉื ืจืฆื ืืกืืืืกืืืงื - ืืื ืืช ืืจืคืื, ืืืืืืจ ืืช ืืืื ืืฉืืืจื.
ืื ืื ื ืืืชืืื ืืืื ืืืืื ืจืืื ืืกืคืจ ืืืืจืืขืื ืืื ืืื 600 ืืืืืืจื ื-1 ืืจืืืืื ืืืื. ืขื ืืืช, ืื ืื ื ืจืืฆืื ืืฉืืืจ ืืืชื ืืคืืืช ืฉื ืชืืืืืืืื ืืืืืช ืืืืืื. ืืืืจ ืืช ืืื ืืืื ืื ืืขืื ืืืืื ืฉืขืืืื ืื ืคืชืจื ื. ืื ื ืืืื ืื ืืื ืื ืขืืื ืืฉื ืื ืืืืจืื ืืช.
ืืฉ ืื ื ืคืื ืงืฆืืืช ืฉืืืชืืืช ืืช ืืืืืื ืืืื ื-memcache ืืงืืืืืื ืืฆืืฆื ืืช ืืกืคืจ ืืื ืืกืืช. ืคืขื ืืคืจืง ืืื ืงืฆืจ ืืืฉืง ืืืืคื ืืงืืื ืกืืืืกืืืงื-ืืืืื ืืืกืฃ ืืช ืื ืืจืฉืืืืช. ืืืืจ ืืื, ืืฉื ืืืื ืืช ืืืืืื ืืฉืชื ืฉืืืืช ืฉื ืฉืจืชืื ืืืื ืขืฅ-ืืกืคื ืื, ืฉืืืกืฃ ืกืืืืกืืืงืืช ืืืืืจื ืืืืืื ืืช ืฉืื ื ืืื ืฉืืฉืืื ืฉืืืืืจืืื ืื ืชืืืช.
ืืืืืช ืืฆืืจื, ื ืืื ืืืชืื ืืฉืืจืืช ืืืืกืคื ืืืื ืื.
ืืื ืืชืืื ืืงืื ืืฉืืจืืช ืืืกืคื ืื, ืชืื ืขืงืืคืช stas-daemom, ืืื ืคืชืจืื ืื ื ืืชื ืืืจืืื ืืืืืื ืฉืืื ืืืืืจื ืืช ืืขืืืก ืขื ืืืกืคื. ืืคืชืจืื ืืชืืื ืจืง ืื ืืกืืื ืืืฉืื ืืื ื ื ืืืืืื ืืืขืืืช ืืช ื-memcache stats-daemon ืืืืื ื, ืื ืฉืืื ืงืจืก ืืืืื ื ืืฉืืจืืช.
ืืืืจ ืืื, ืืืกืคื ืืืื ืื ืืืืืื ื ืชืื ืื ืกืืืืกืืืื ืืชืื meowDB - ืืื ืืกื ืื ืชืื ืื ืฉืื ื, ืฉืืืื ืืืืกื ืื ืืืืื.
ืื ื ืืื ืืืฆืข ืืืืจืืช ืืื ืืจืืืช ืฉื "ืงืจืื ื-SQL" ืืืงืื.
ืื ืืกืื
ืืงืืฅ 2018 ืืื ืื ื ืืืงืชืื ืคื ืืื, ืืขืื ืืจืขืืื ืื ืกืืช ืืืืืืฃ ืืช ืืืืง ืืืืื ืฉื ืืืืืืจืื ืืืฉืื ืฉืืืื ืืืืกื ืืืืื ื-ClickHouse. ืืฉ ืื ื ืืืื ืื ืขื ClickHouse - ืืื ืื ืื ืกืืช ืืช ืื?
ืืืืชื ืื ื ืชืืื ืืช ืฉืืชืื ืืืื ืื ืืจื KittenHouse.
ืืืืื ื ืืืกืฃ ืขืื "*ืืืช" ืืชืจืฉืื, ืฉืืงืื ืืืืืง ืืช ืืืืืื ืืคืืจืื ืืคื ืฉืืงืื ืฉืื ื ืืืชื ืืืชื ืืจื UDP. ืืื *ืืืืช ืืื ืืืคื ืืืชื ืืชืืกืคืืช, ืืื ืืืื ืื, ืฉ-KittenHouse ืืืื ื. ืืื ืืืื ืืืขืืืจ ืืช ืืืืื ืื ืืืื ืืฆืืจื ืืืฉืืืช ื-ClickHouse, ืฉืืืืจื ืืืืืช ืืกืืืืช ืืงืจืื ืืืชื.
ืืกืืืื ืขื memcache, stats-daemon ื-logs-collectors ืืกื ืื ืชืื ืื ืืืืืคืช ืืื.
ืืกืืืื ืขื memcache, stats-daemon ื-logs-collectors ืืกื ืื ืชืื ืื ืืืืืคืช ืืื.
- ืืฉ ืืื ืฉืืืืช ืงืื, ืฉื ืืชืืช ืืืืคื ืืงืืื ื-StatsHouse.
- StatsHouse ืืืชื ืืืื UDP, ืฉืืืจ ืืืืจื ืืชืืกืคืืช SQL, ื-KittenHouse ืืืฆืืื.
- KittenHouse ืฉืืื ืืืชื ื- ClickHouse.
- ืื ืื ืื ื ืจืืฆืื ืืงืจืื ืืืชื, ืื ืื ืื ื ืงืืจืืื ืืืชื ืขืืงืคืื ืืช StatsHouse - ืืฉืืจืืช ื-ClickHouse ืืืืฆืขืืช SQL ืจืืื.
ืืื ืื ืขืืืื ื ืืกืื, ืืื ืื ืื ื ืืืืืื ืืื ืื ืืืฆื. ืื ื ืชืงื ืืช ืืืขืืืช ืืชืืื ืืช, ืื ืืืื ื ืขืืืจ ืืืื ืืืืืืื. ืืืฉืืช, ืื ื ืืงืืื ืฉืื.
ืขืจืืชื ืื ืืืกื ืืจืื. ืืฉ ืฆืืจื ืืคืืืช ืฉืจืชืื, ืืื ืฆืืจื ืืกืืืืกืืืงื-ืืืื ืื ืืืืืกืคื ืืืื ืื, ืื ClickHouse ืืืจืฉ ืฉืจืช ืืืื ืืืชืจ ืืืื ืฉืืชืื ืืช ืื ืืืืืช. ืืฉ ืฆืืจื ืืคืืืช ืฉืจืชืื, ืืื ืื ืืืืืื ืืืืืช ืืงืจืื ืืืชืจ ืืืืงืื ืืืชืจ.
ืืคืจืืก
ืจืืฉืืช, ืืืื ื ืกืชืื ืขื ืคืจืืกืช PHP. ืื ืื ื ืืชืคืชืืื ื ืกืืืื: ืืืฉืชืืฉ GitLab ะธ TeamCity ืืคืจืืกื. ืขื ืคื ืคืืชืื ืืชืืืืื ืืชืื ืขื ืฃ ืืืืกืืจ, ืืืืืกืืจ ืืฆืืจื ืืืืงื ืื ืืชืืืืื ืืืื, ืืืืฉืื ืืืืฆืืจ.
ืืคื ื ืืคืจืืกื ื ืืงืืื ืขื ืฃ ืืืืฆืืจ ืื ืืืื ืืืงืืื, ืืงืืืืื ืืื ืงืืฆื diff - ืฉืื ืืืื: ื ืืฆืจ, ื ืืืง, ืืฉืชื ื. ืฉืื ืื ืื ืืชืืขื ื-binlog ืฉื ืื ืืข copyfast ืืืืื, ืฉืืืื ืืฉืืคื ืืืืืจืืช ืฉืื ืืืื ืืื ืฆื ืืฉืจืชืื ืฉืื ื. ืื ืฉืืฉืืฉ ืืื ืืื ืื ืืขืชืงื ืืฉืืจื, ืืื ืฉืืคืื ืจืืืืืช, ืืืฉืจ ืฉืจืช ืืื ืฉืืื ืฉืื ืืืื ืืฉืื ืื ืืงืจืืืื ืืืืชืจ, ืืื ืืฉืื ืืื ืืื ืืืื. ืื ืืืคืฉืจ ืื ืืขืืื ืืช ืืงืื ืืขืฉืจืืช ืืืืืืืช ืฉื ืฉื ืืืช ืขื ืคื ื ืื ืืฆื. ืืืฉืจ ืืฉืื ืื ืืืืข ืืขืชืง ืืืงืืื, ืืื ืืืื ืืช ืืชืืงืื ืื ืืืื ืขื ืฉืื ืืขืจืืช ืงืืฆืื ืืงืืืืช. ืืืืจื ืืืืืจ ืืชืืฆืขืช ืื ืขื ืคื ืืืชื ืชืืื ืืช.
ืื ืื ื ืื ืคืืจืกืื ืืจืื kPHP ืืืฉ ืื ืื ืคืืชืื ืืฉืื ืกืืืื ืืคื ืืชืจืฉืื ืืืขืื. ืืื ืฉืจืช HTTP ืืื ืืจื, ืื ืื ืื ื ืื ืืืืืื ืืืืฆืจ diff - ืืืื ืืจื ืืฉืืจืืจ ืฉืืงื ืืืืช MB. ืืื, ืืฉ ืืื ืืคืฉืจืืช ื ืืกืคืช - ืืืจืกื ืืชืืื binlog copyfast. ืขื ืื ืื ืืื ืืื ืืืื, ืืืืื ืืืืจื ืืื ืื ืขืืื. ืึดืจึฐืกึธื ืืฉืืืคื ืืฉืจืชืื. ืงืืืคืกืืื ืืงืืืืื ืจืืืื ืฉื ืื ืกื ืืจืกื ืืืฉื ื-binlog, ืืขื ืืื ืืืชื ืฉืืคืื ืจืืืืืช ืื ืืืงืืื ืืขืฆืื ืืช ืืืจืกื ืืขืืื ืืช ืืืืชืจ ืฉื ืืืื ืืจื, ืืืื ืืขืืืฃ ืืช ืืฉืจืช ืืจืืฉื ืฉืื ื, ืืื ืืคืืจ ืืืืืจืืช ืืช ืืขืืืก ืืจืืื ืืจืฉืช. ืื ืขืืงื ืืฉืงื ืืืืืฉืช ืืืื ื ืืช ืขืืืจ ืืืจืกื ืืืืฉื.
ืขืืืจ ืืื ืืขืื ืฉืื ื, ืฉืื ืื ืืขืฆื ืืื ืืจืืื, ืืกืืืื ืืืื ืืืื:
- ืขื ืฃ git master;
- ืืื ืืจื ื deb;
- ืืืจืกื ื ืืชืืช ื-binlog copyfast;
- ืืฉืืืคื ืืฉืจืชืื;
- ืืฉืจืช ืฉืืืฃ .dep ืืจื;
- dpkg -i;
- ืืฉืงื ืืืืฉ ืืื ื ืืช ืืืจืกื ืืืฉื.
ืืืืื ืืื ืฉืืืื ืืจื ืฉืื ื ืืจืื ืืืจืืืื ืื deb, ืืืืฉืจ ืฉืืืืื ืืืชื dpkg -i ืืื ืืื ืขื ืืืขืจืืช. ืืืืข kPHP ื ืคืจืก ืืงืืืฅ ืืื ืืจื, ืืื ืืขืื ื ืคืจืกืื ื-dpkg? ืื ืงืจื ืืื. ืื ืขืืื - ืื ืชืืืข ืืื.
ืงืืฉืืจืื ืฉืืืืฉืืื:
- ืืืืื ืืืช ืื ืืื ืงืืจืืฉืงืื
"ืื ืื ืืขืจืืช Vkontakte. ืึตืื?" ืขื ืคืจืืื ืขื copyfast ืืจืืืืืช. - ืืืืื ืฉื ืืืจื ื ืกืจืืื ืื
"ืืืฆื VK ืืื ืืกื ื ืชืื ืื ื-CLickHouse ืืขืฉืจืืช ืืืคื ืฉืจืชืื" . - ืืืืืื ืฉืื
"ืืจืืืืงืืืจื ืฉื ืคืจืืืงื ืฆืืื ืชืื ืฉืืืืฉ ืืืืืื ืฉื VKontakte" , ืืื ืื ืงืืืช ืืื ืฉื ืคืืชืื, ืื ืืืืจื.
ืืืืกืื ืืงืืืืืืฅ' ืืื ืืื ืืืื ืฉืืกืืืขืื ืืืกืืจืช ืืขืืช ืืชืื ืืช
PHP ืจืืกืื ื-17 ืืืื ืืืคืื ืืืืจืืข ืืืืื ืืืืชืจ ืขืืืจ ืืคืชืื PHP ืืชืงืืคื ืืืืจืื ื. ืชืจืื ืืืื ืืืฉื ืืื ืื ืืฉ ืื ื, ืืืจืืงืืืื (ืฉื ืืื ืืื ืืคืชืืื ืืืืช PHP!) - ื ืจืื ืืื ืืฉืื ืฉืื ืืคืฉืจ ืืคืกืคืก ืื ืืชื ืืืชื PHP.
ืืงืืจ: www.habr.com