αααααααα·ααααΆααααααΎα VKontakte ααΆααα
ααΎαα·ααΈααΈααΆ ααΆααααΌαααΆαααααΆααααα Pavel αααα½αα―αα ααΆβα αΆααβααΌα
βααΆβα’αααβααΆααβααααΆβααΆαβααααΆααβααΆαβαα½α
βα αΎαα α’αααΈαααααααΆααααα»α ααααΆαααααααα αα·ααα
ααΆααααααααααααα ααααααα
ααΎ HighLoad++ Pavel
Alexey Akulovich (
α’ααααααααααΆα 4 ααααΆαα αΎαααααααα»αααΆααααααααΆαααΆαα½αααΉααα·α αα ααΆαααααααααααααααααΆααααααΉααααααααΆααααααα
- ααΆααααα αα αααααΆαα»α ααααΎαααΆα α ααα αΆαααααααααααααααααααΆαα ααΈααα’αΌ ααΆαααααΆαααααΆαα α’αΌααΈαααΌ ααΌααα α―αααΆαα
- α αααααΆαα ααΆαααααααα αααα·ααΆ ααΆααααα½ααα·αα·αααα’αααα’αα·αααααα αααααα ααα» ααααΆαααααααΆαααααα»αααααα CDN αα·ααΈααΆα RPC αααααα·αααα·α
- ααΆααα½ααααα αΌαααΆαα½αααααΆααααααΆααααα α ααΆαααΌαααααΉααααα»α ααΆαααααααααΆααααα ααα·ααααααΆα RSS α
- αα½ααα·ααααα½αααΆαααΆαααΆαα½αααΉααααα½ααααααα α ααααΎαααααααααΌαα±ααααααα»αα αΌααα αααα»αααΌαααααα·αααααΆααα
αααα»αα’αα‘α»ααααααα αααα»αααΆααααα αααα»ααααααααΆα αααΎαααααα αααααα αααα»αα ααα ααααααααααα·ααααααααα
ααααΆααααααααααΌαα
α’αααΈααααααααΆαααΌα ααααααΆ α αΆααααααΎαααααααΆαααΈααα α¬αααα»ααααααΆαααΈααααααααα½αααααααΎα
αααΆαααΈααααααΎααΆααα»α
αααΆαααΈαααααΆααα»αααα½αααααααΎααΆαααα HTTPS, RTMP αα·α WSS α
HTTPS - ααΆαααααααΊααΆααααΎαααααΆααααααααα αααααααααΆαα αα·αα αααααααααα αααααα vk.com αα·α m.vk.com αα·αα’αα·αα·ααααααΌαααΆα αα·ααααα ααααΌαααΆααααααααααα API ααααααΎαα α’αα·αα·ααααΌαααααα α’αααααΆαααΆαα ααΎαααΆαααααααααα½αααααα RTMP α-traffic αααααΆααααΆαααααΆαααααααααΆααααΆαα½ααααΆαααΈαααααΆα ααααα‘αα αα·α WSS- ααΆααααααΆαααααααΆααααααααΈα API α
αααααΆαα HTTPS αα·α WSS αα ααΎ servers ααΆααΆαααααα nginx. αααααΆααααΆαααααΆα RTMP ααααΈαααα ααΎαααΆαααααΌααα αααααααααΆαααααΆαααααα½αααααααΎαα ααΌαααα»ααααααΆα α½αααΈαα·ααΆαααΆααααααΆαααΆαααα αααααΆααααΆαα’ααα±αα ααααααα α»α αααΆαααΈαααααΆαααααααααααααααΆαα’αΆααααααΆα IP ααΌαα αα·αααααΎαααααααΆαααΆαααα»α ααΌα ααααααααα·αααΎααΆααααα αΆαα ααΎαααΆαααΈαααααΆαα½α ααααΎααααα’αααααααΎααααΆαααα·αααααΌαααΆαααΆαααααα‘αΎαα αααααΆαα HTTPS αα·α WSS αααΆαααΈαααααΌα ααααΆααΆαααααα’αα·αααααΈαα ααΆα ααα ααΎααααΈααααααααα½αααααΆααααα»ααααΈααΈααΌααααΎαααα½αααα
ααΎαααΉααα·ααα·ααΆαααααααα’αααΈ WSS αα·α RTMP αα ααα»ααααααααΆααααα’αααΈααααΎ HTTPS αααααααΆα αααααΆααααααΆααααΌαααΆαααααΆααααΆαα½ααααααααααααΆαα
αααααα·ααΈααΆααααααα
αα ααΆαααααααααααααΆααα»αααΆααααααΆααΆααααΆαααΈαααααΆααααααα αα½αααααααΎαααΆαααααΎααααααΆαααΈαααααΆααα»αααα½αααΆαααΈα’αα·αα·ααα
ααα αααΆαααΈααα kPHPααααααα·α HTTP αααα»αααααΎαααΆα ααΈααααα HTTPS ααααΌαααΆααα·ααααΈααα½α α αΎαα kPHP ααΊααΆαααΆαααΈααααααααααΎαααΆα αααΌααα preforkα α αΆααααααΎαααααΎαααΆααα ααΆααααα»αααααααΎαααΆααα»ααΆα ααααααΆααααααααααΆαααα αα½ααα α αΎααα½αααααααΎαααΆαααααΎαααααα½αααα αααα»αααααΈααα ααααΎαααΆααα·αααααΌαααΆαα αΆααααααΎαα‘αΎααα·ααααΆαααααΎααΈαα½ααααΈα’αααααααΎααααΆαααα ααα»ααααααααΆαααααααααααααΆαααΆααααααα½αααα‘αΎααα·ααα ααααΆαααΆαααΌααααααααααΎα - ααααΎαααααΆααααΈααΆαααααΎαα»α αααα½αα±ααααΆαα αΆααααααΎαα‘αΎααα·αα
αααα»αααΆαα ααα αΆα
αααααααΆααααααααααααΎαααΆααα’αααα·ααααααΆαααΆαααΈααααααααααΎααααα’αΆα ααααΎαααΆαααααΎααΆαα½αααΆαααα ααΎααα½αααα αααα ααααΆαααα»αααΆα ααααα‘ααα general, mobile, api, video, staging... αααα αΆαα ααΎαααα»αααΆα ααααα‘αααααααΆαααΈαααΉααα·ααααααΆαααααα’αααααααααααααΆααα’αα αααα»αβααααΈβααΆαβαααα αΆβααΆαα½αβααΈααα’αΌ α’αααβααααΎβαααβααααΆααβαααααααΈβααΉαβαα·αβααΉαβα’αααΈβαααα αΆβαααβααα αααααααΆαααααααα½αααΆαααααααΌαααααΎααααΎαα ααΊααααΌααααααα ααα nginx αα αααααααΆααα»ααααααΆαααΆααααααα
ααΆααααααΌααααααααα·ααα»αααααΆαα‘αΎααα·α
ααΎααααΈαααααΈα ααα½ααααααααααααΎαααααΌαααΆααααα»ααααα»αααΈαα½αα ααΎα αα»αααΉαααα’ααααΎ QPS. αααααααΆααααααααΆαααΆααα»αααααΆ αα½αααααΆαααααΎαα»ααααααΆ ααααΎααΈαα½ααααΆαααΆααααα»αααααΆααα»ααααααΆαααα»αααΆαααααΆ QPS α αααα αΎαααΆααΌαα ααα»αααααΎα ααΎαααααΎαααΆαααΆαα½αααΉααααα·αααααΆααααα»ααα ααΎαααΆαααΈαααααΆααααΌα - αα ααΎ CPU αα·α perf.
ααΎαααΆααααΆαααΈαααααααααααΆααααΆααα αααΆαααΈαααααΆαααΆαααΈαα½ααααααΎαααΆααααα»α kPHP ααΎααααΈααα αααααααΌαααΆααα’ααα‘αΎααα·α (αααααΆααα kPHP ααΊααΆαααααααα½α)α
αααΆαααΈαααααΆαα·ααΆ
CS α¬ Content Server ααΊααΆαααααααααα»α. 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 pool αα·αααΆααΆααΎααααΈααΆαααΆααααΆαααΈαααΈααΆαα αΌαααΈααΆααααα - ααΆαα·αααΆα IP ααΎααααΈα αΌααα αααα»αααΆααα
ααΆααααααΉα IPs αααααΆαα ααααααα. αα αααα»αααααααααααααΆαα’ααα±αααα α»α αααααααΆααααααααααΎαααΆαααΌα ααααΆ - αααΆαααΈαααααΆαααΆαααΆα αααΎαααΆα IP ααΆαααΆαααΌαα α αΎααααααααΉααα ααΈαα»ααα½αααααααΎαααΎααααααααααααααΌαααααΎααααΎα αααα»αααΉααα·ααΆαα’αααΈαααααΎααααααααααα ααααααααα
α ααα»α α ααααΌαα ααααΆαααΊααΆαααα»αααααΈααα α’αα·αα·αααααααΆααΆααααααΆαααα·α ααΆααα»αα. ααααα·αααΎααΆα IP ααΌα ααααΆαααααΆαααααΆαααΈαααΆα αααΎα - ααΆαα½ααααΆαααΈαααΌα ααααΆα pu.vk.com α¬ pp.vk.com αααααα·ααΈαα»αααααΆαα’ααΈαααΊαα·αααααα’αα·αα·ααααΆαααααααααααΎα ααα½αααααΎααααΆαααααΆα αααααααΆαααΈααααα½αα ααα»αααααα αααα»αααααα HTTP/2 αααααααΈαααααα αααα»αααΏααΆααΆαααααΆααααααααααα αΎαα
αα»ααα·ααααα·ααΆααααααααααααααααΆαααααΊααΆααΆααααΌααα ααΌαα ααΆα αααΆααα’ααααααα αΌααα ααΆαααααααααααα»α ααΆαααααααΆαααΈαααααααααααα αααααΆαααΎαααΌαα ααΆα αααΆααααΆαααΈα ααΎααα·αααΆααα’αΆα ααΌαα ααΆα ααααααααααΆααα α§ααΆα ααα ααΈααα’αΌ αααααααΎαααααααΆαααααΌα ααααΆα ααΎααααααΌαααΆαααααααΆαα - ααΆααααααΆαααααααααΆααααΆα ααααα‘αααααααΆααααΆααααα»αααΆα ααααα‘ααααΆαα·ααααααααΆααααΈααα’αΌα ααΎααααααΌαααΆαα·ααΆααααΆαααΆααα»αααΆααααααααΌααααΈα
αα·αααΌαααα»ααααΆαααΎαααα½αααΆαααααααααΌααααΈαααααΎαα‘αΎαα α₯α‘αΌαααααααα»αααΉαααααΆααα’αααααΈααααααααα½ααααα»αααΈααααααΆ α αΎαα ααα»α’αααΈααΆαααΆααΆα αΆαααΆα αα
ααα»α
ααΆαααΈαααααααΆ ααααΆα 2017 αααα»αα αα»α Oracle αααααααΆααααΆααα·α Sun α
pp ααΆααααα αΆαα½αα
ααα½αα IP αα½ααααα»ααα½ααααα»α - ααααΆαααααααΆααααααΆαααααα·αααααΆα. αααΆαααΈαααααΆαααΆαααΆα
αααΎαα
αααααααα’αΆααααααΆα IP ααΌαα
α αΎααα·αααΆααα·ααΈααααααααααααΆαααΈαααααΆαα½ααααααααΎααΉααα
αααααα ααΌα
αααα ααααα·αααΎα’αααααααΎαααααααααΆαααααααΆααα―αααΆαααΌα
ααααΆ αααααααα·αααΎααΆαααααΆαααααααΆαααα
ααΎαααΆαααΈαααααΆααααα α―αααΆαααΉααααα
αααα
αααα»αααααΆαααααααΆαααααααΆαααΈαααααΈαα½ααα αααβααΆβααααααβαα·αβααΆαβααααα·αααααΆαβααααΆααβααΆαα ααα»ααααβαα·αβα’αΆα
βααααΎβα’αααΈβααΆαβααα
ααΆαααααα - ααΎααα·αα’αΆα αααααααΆαα·ααΆααΆααααααΈαααααααΎααα·αα’αΆα ααααΎαααΎααααΆαααΈαααααΆααααΆαααααααΆαααααα»αααααα αα½αααααΆα IP ααΌαα α ααααααααααΆααα ααα»αααααααααα»ααα½αα ααα½ααααααΎαααΆα ααΆαα·αα’αΆα ααα‘αΎααααΆαααΈααααααααααα αααα»ααααααααΆαααα. αα½αααααΆααααααα St.
ααΆαα½αααΉαααααα’αΆαα·ααα ααΎαααΆαααααΆααααααΌαααααααααααααΎαααΎαα α₯α‘αΌααααααΎαααΆα anycast ααΆαααααΌαα ααΆααααααααααΌαααΆααααα, anycast, αααα·ααααα½ααα·αα·ααααααα½αα―αα αααΆαααΈαααααΈαα½ααααΆα IP ααααΆαααααα½αααααααΆ ααα»αααααααααΆαααααΌαα αα½αα α’αααΈααααααααΆαααααΌαααΆαααααααα ααΆααααααααααΆααααααααααααα·αααΎαααΆαααΈααααα½ααααΆααα α ααΆα αααααααΌαααΆαααΈαααΆαααΆααα ααΌααΆαααααΆαααΈααααααααααααααααα»αααΌα ααααΆαααααααααααααααα·α α₯α‘αΌαααα ααΆα’αΆα ααααΎαααΎααααΆαααΈαααααΆααααΆαααα½α ααααΆαβααααΆααβαααααΆααβααααααα·αααΆαααΏααΆαααα·αααααΌαααΆααααααΆααααα
ααΆαααΆααααααααα. α₯α‘αΌααααααΎαα’αΆα ααΆαααααααΆαααα‘αΎααααΆαααΈααααααΆαααΆααααα»ααααααΆααΆααααααΌαααΆα α αΎααααα»αααααΈααΆααααα αΆααααααα’αΆαααα ααααΆααααααΌααααααααα "ααααα’αΆαα·ααα" αααααααΎααΆαααΎααααΈααΆαααααααααααα»αααΎαα½αααΆ ααΌα αααααα½ααα "αααααΆα" α αΎαα αΆααααααΎαααααΎααΆααααααααα
ααΆαα αααααααααΆαααααααααΆααααΆαα·ααΆ. ααΏααα½αα±ααα’ααααααΎα α’αααΈααΆααααα ααα ααΆααααααΆααΎαα αααααααααΆαα·ααΆααΎααααΈα±ααα’αααααααΎααααΆαααααααααααΆα αΌααα ααΆααα―αααΆαααΌα ααααΆααΆαααα "ααααα’αΆαα·ααα" ααΌα ααααΆααΎααααΈα±αααα½αααααΆαααααΆαααααααΆααααΌαα α
ααααΈααααααΎαααΆαα αΆααααααΎααααααα·ααΈ "Clover" α αααααΊααΆααααααααα½αααΆαα’αα·αααααααααα»αααΆαααααΆαααααΆαα αααααα αΆαααααααα½ααααα½α α αΎαα’αααααααΎααααΆααααααΎααααα»ααααααΆααααααα αααααααΎαααΎααααααΎαα αααααα·ααΈαααααΆααααααα·ααΈαααααααα’αααααααΎααααΆααα’αΆα ααααααΆαα α’αΆα ααααΆαααα ααΆαααααΆααααα»ααααααααΆαααααΆα ααΆα 100 ααΆααααΆααα. αα½αααααΆααα’αααααααααΆααααααααΌαααΆαααααΎαα ααΆααα’αααα αΌααα½αααΆααα’αα α αΎαααΌαααααΆαααααΆααααααΆαα½αααΆαα ααααα·αααΎααα»ααα 100 ααΆααααΆααααααααΌαααααΆααα½ααα αααα»α "ααααα’αΆαα·ααα" αα½αααα αα½αααΆαααΆα’αΆα αα·ααα ααΈααααααααα
ααΎααααΈααααααααΉαααΆααααα»αααααΎαα»αα―αααΆαααΌα ααααΆ ααΆααΊαααααΆααααααααααΆααααΆααααααΆαα·ααΆαααααΎαααΎααααααααΆααααααααααααααααΈαααΆαααΆαα―αααΆααα ααΌααΆαα "ααααα’αΆαα·ααα" αααααΆαααΆααα’αααα αααα»ααααααα
ααααα’αΆαα·αααααΈααΆααααα»α
ααααΌααααΈαααα
αααΆααα
ααΎ nginx ααααΆαααααααΆααααΆαααα
αααα»α RAM α¬αα
ααΎααΆα Optane/NVMe αααααΆαααααΏαααΏαα α§ααΆα αααα http://sun4-2.userapi.com/c100500/path
- αααααααΆαααα
"ααααα’αΆαα·ααα" αααααΆαααΈααΆαααα
αααααααΈ 100500 αααααΆαααα»ααααΆαααΈαααααΈααΈαα ααΆαα·αα―αααΆαααααΌα ααααααα·ααα
ααΎαααΆαααΈααα XNUMXα
αααααααααα
ααΎαααααααααααΆαααα½αααααααααααα αααα»ααααααααΆαααααααΆααααααααααααααΎα - ααα·ααΆααΆαααααΆαααααααΆααα
ααΆαααααααααααΆααααΆααααΆαααααα ααααΆαααααααΆαααααα»ααααααααΆααααα αα 20 αααα»αα
αααααα½αααα ααΆαααααααΊααΆαααααααααααααΆαααααααΆαα αα·α "ααααα’αΆαα·ααα" αααα·ααα
αααα’αΆα
αααααΆαα»αα
ααΆα
αααααΆαααααααα½ααα½αααα
αααααΊααΆααααΆαααααααΆααααααΆαα·ααΆαα α»αααα ααααΆααα·ααααααα’αααααααΎααααΆααααααΌαααΆααααααΆαα»ααα
ααΈααααα - ααααΆααααααΆαααααααΈ ααΈααα’αΌ ααΌαααα
ααΎααααΈααααααααααααααα’αααααααΎ ααΎα ααΎααααααΌααα»ααααααααααΆα BGP αααααΆααααααΆααα αααα»αααααα. αα αααα»αααααΈααααΆαααααΆααα α»α ααΎαααααααΌααααααΌαααααΆααα·αααααα Geoip ααααα·αααΎααΎααα·αα’αΆα ααααααα IP ααααα»αααααα ααΎαααααααααααααα IP ααααα’αααααααΎααααΆαα. αα αααα»αααΌα ααΎαα’αΆα ααΎαααααααα½α α¬α αααΎαααααα’αααααααΎααααΆαα - α ααα»α ααΆααααααααααΆαααα αα·ααααα»αααΆαααΌαα·ααΆαααααα
ααΎααΆααααΎαααΆααααΆαααΌα ααααα ?
ααΎαααΆααα ααα½ααααααΆαααα·αααΆαααα―αααΆαααΆαααααα. ααΆαααααΆαααααααΆαααααα»αααααααα½αα ααα½ααααα’αααααααΎααααΆααααΆαααΈααΆαααα αα·αα―αααΆααααααα’ααααααααΆα - ααΎαααααΌααα α αΎααααααΎαααΆαααΆααααααααΆαα½αααΉαααΆαααΆαααααΈαα½ααα
αααα»ααααααΆαα½αααααΆααα α’αΆαααα - ααααΆαααααααα»αααααα - ααΈααααα½ααα ααααα½ααα API α αΎααα·ααΆαααΆα "αααα»αααΆααααΆαααααααΆαααααααα ααΌααααααα±αααααα»αααΌααααααΈα―αααΆαααααα·αααααα»ααα αααα»αααααααααααααα»αααααα·αααΆααααΆααααααΆαααααα»αα β API αααααααΌαα―αααΆαααΆα αααΎααααααααααααΆαα αααΆααααααΆαα αααα·αααΆααααα½αααΆ ααΆααα½ααααα ααΆααααααα αα·ααααααΌαα―αααΆαααΈααΈαααα αααααΊααΆααΆααα»αααααΆααΆααΌαααααΆααααΆα pu/pp αα·α Sun ααΈααααΆαααααααΆααα αα½ααααααααα―αααΆαααΆαααααααα½ααα½αααααααΆαα αααααΈααΆα―αααΆαααααα·ααα αααα»αααααΆαααααααΆααααααα α αΎαααααΆαααααααΆααααααΌαααΆαααα―αααΆααα αααα½αααΆ α αΎααααααΆααααα αΆααααααΎααααααααΆαααα·αα
αααα»αααααΈαααααΎαααα½αααΆα ααΆαα·ααΆααΆαααααα·ααααα·αααααΆαα½αα’αααααααΎααααΆαα αα·αα ααα αΆαααααα»ααααααΆαα ααΆα§ααΆα ααα ααΆαααααΈααααΆαααααααΆααααΈαααα»ααααΌααααΌααα»ααααααααααΎαα ααα αΆαα αααΎαααΆα 1 Tbit/s αααα»αα’αα‘α»ααααααααααααααααα»αα
ααα»ααααααΆααααα αΆ - αααΆαααΈαααααααΆαααααααΆαααα·ααααααΆαα αααΌααα. αααααΆααααααΉαααΆαααααααα·αα αα½αααΆααα·αααΆααααααΆααααααααααΆαααααααΆαααααΆαααΈαααααΆα ααααα‘ααααα αααΆαααΈαααααααΆαααααααΆααααααααΎαααΊ 40-50 Gbit/s ααα»ααααααΆαααΆαα·ααΆααααα·αααΆαααααααααααΆαααααα»αα ααΎααααα»αααααααα ααααΆαα’αα»ααααααΆααααα»αα αααΎαααΆααα½αα αααΆααα ααααααα―αααΆαααααα·αααα αααα»ααααααα αααα»αβαααααΉαβααΆβααΎαβααΉαβα’αα»ααααβααΆβαα βα α»αβααααΆαβαααα
ααΎααααα‘ααααΎαααααΆααααααααααΌαα α
- αααΆαααΈαααααΆααα»ααααααα½αααααααΎα
- αααααα·ααΈααΆαααααααααααααΎαααΆαααααΎα
- αααααααααα»ααααααααΌαααΆααα·ααααααααΌααααΈααΈαααααααα
- ααααΆαααααααΆαααααα»ααααααα
ααΎααΆαα’αααΈααΆααααΈααααΆααααΆαααα? ααΆααΆααα·αααΆαα ααΌαααααΆααα·αααααααααααΎααααααΆαα»ααα·ααααααα
ααΌαααααΆααα·ααααααα¬αααΆαααΈα
ααΎαα α αα½αααααΆαα·ααααααΆααΌαααααΆααα·αααααααα ααα»αααααααΆαααΈα - αααΆαααΈα ααΈαααααααΎαα’αα»αααααα·αααΆαααΌαααααΆααα·αααααααααα»ααααααα½αααααΆααΌαα α
αααααΊααΆαα·ααΆαααΆαα
αΆαααΆα
α. ααΆααΆαααΎαα‘αΎααααααΆααααααα»αααααΆα 2008-2009 αα
αααααα VK ααΆαααΆαααΎαα‘αΎααααΆαααααΆαααα
αααα»ααααααΆαααα·αααΆα αααααααααααΆαααααΎααΆαααΆαααααα»αααΎ MySQL αα·α Memcache α αΎαααΆααααα αΆα MySQL α
αΌαα
α·αααααΆαααΆαα αα·αα―αααΆαααΌα
αααααΆααααααΆααΉααα·αααΎαα‘αΎααα·ααα α αΎα Memcache ααα
α»αααααα·α
ααααααααα»αααααΎαααΆα α αΎαααααΌαα
αΆααααααΎαα‘αΎααα·αα
ααΆααααααΆαααααααααααααα·ααααΆααααααααΆααα‘αΎαααΆαααΆααααα»αααΆααααΆαα αααααααααΆααα·αααααα αα·αααααΆαααααααΆαααααααα α»αα αα αααα»αααααααααααααααααΆαα·ααΆααααα»αααΆαα’αα·ααααααααααααααααα»αααΈαα ααααΎαα ααΆααααΌαααΆααααααα α α·αααααΎααααΈααααΆααΆααααααα‘αΎααα·αααΌαα’αααΈαααααααΆααααααααααααααααααΌαααΆααααααααΎαααααααααΎαααααΆααα
αααααααααΆαααΆααααααα. ααΆαα±ααΆαααΎααααΈααααΎαα·α αα ααΆαααα ααααΌα ααΆααΆαα αΆαααΆα ααααα»α ααΈααααααα·ααΈααααααααααααΆαααααΎααΆαααααααΆααα·αααΆααα ααααααα αα·αααΆαααΌαααααΆααα·ααααααα αααΎααα NoSQL αα·αααΆααααΆααα α‘αΎααα ααΆααα MySQL, Memcache, PostrgreSQL - α αΎααααααΆααΆα
ααααα·ααααα·ααΆαααΆααα. ααΆαα’αα·ααααααααααΌαααΆαααΉαααΆαααααααα»αα’αααα’αα·αααααα C ααααααΎα α αΎαα’αααΈαααααααααΆαααααΌαααΆαααααΎαααα»αααααααααααααααΆα ααααα·ααα·αααΈαααΆαααΈα αα½αααΆααΆααα’ααααΆααααααααααΆαα―αααΆαααΌα ααααΆαααααααααα ααΈα αααΆαααΆααααααααααΆαααΎαααααΎαααΆαααΌα ααααΆ ααααΎαααΆααααααΆαααα»ααα·ααΈααΌα ααααΆ α αΎαααΆαα₯αα·ααΆαααααα αΆαααααα ααααααΆαααα»αααααΈααααΆαααΆαααα αα·ααααα αΆα ααΆαα½αααΉαααΆαααΈαα ααααΎααααααΆαααΈα ααΆααΆααΆαααΆααααα½ααααααΆααα’αααααααααααααααα»αααΆαααααΎαααΆααααααααα αααααΊαα·αααΆααα½ααααααααααααΌαααΆαααΆαααααΆααα α αΎααα½αααααααΌααααααΈααααααααΎαααΆαααΌαααααΆααα·ααααααααΆααΈααΈααΈααααΈααΈαα½αα αααααααΎα±ααααΆα’αΆα αααααΎαααΆααααΆαααΆαααα αα αα·αααΆααααα½αα ααααααααα½αααα
αααααααααααΆαααΈα
αααα»ααααααΆαααααααααΆαααΈααα½αα ααα½αα αααααααΆααααααΆααααααΆααα½αα ααα½αααα»αααααα αα·ααααααααα· ααΆαααααΆα ααΌαααΆα ipdb α’αααα αααααΈ αααααα ααα» memcached meowdb ααααααΆα nostradamus ααΌααα αααααΈα αΆαα pmemcached αααα’ααααααΆα α ααααααα ααΆααααα»α α αΌαα α·ααα ααΆααα·α αα ...
αααααΆαααα·α αα ααΆαααΈαα½αααααααΆαααΆααα ααΆαααααααααα·ααααααααΆααααΆαα α¬ααααΎαααΆαααααΎ atypical αααα»α C ααααααααΆαααΈαααααΈα α ααα»α’αααΈααΆαααΆαα·αααΆαα
ααΎαααΆααααΆαααΈαααΆα ααααα‘αα memcachedαααβααααααβααΉαβααααβααααααΆ ααα»ααααβααΆαβα αααααβααα’ α αΎαβαααβαα·αβαααα’ααβααΌαα αα·αααα ClickHouse αα ααα»ααααααΆααααααΎαααΆααααααα α’αΆα ααααΆααααα‘ααααΈααααΆα pmemcached - αααβααΊααΆ memcached ααΆααααΆαααααα’αΆα αααααΆαα»ααα·αααααααα ααΎααΆα ααΎαααΈααααα αααααΊααααΉα RAM ααΌα ααααααΎααααΈαα»αα±ααααΆααααααα·αααααααα αααα αΆααααααΎαα‘αΎααα·αα ααΆααααΆαααΈαααααααααααΆαααααΆαααα·α αα ααΆαααΈαα½ααα αα½α αααααΈ αααα»α - α’αααΈααααααααΆααααααααααααααααΎαααΆαααΆαα
α ααααα
ααΆαααααααααααΌα αα·αα αΆαααΆα ααα·αααΈαααΆαααΈα α¬ααΌαααααΆααα·ααααααααΆααααΎαααΆα α’αααααΆα α¬α§ααΆα αααααα αααααΌαααααΎαααΆαααΆαα·αααααΆαα½αα ααααα ααΆαα½αααΉααααα»ααααΆαααΈα - αααααααα½ααααα»ααα½ααααα»α. α αΌααα·ααΆαααΆααΆαα ααααα memcached - ααΆααααΆααααααΆαααα»ααααααΆαααΈαααα»αααααα
αααααΌααα·αα αΆαααΆα αααΉαααΈααΈααΆααααΆααααααα ααα α α¬α ααα½ααααΆαααΈαααααΆαααααααα ααΆαααα α ααααααααααααΎα§ααααααααααΆααααΆααααΆααα
ααΎααααΈα±ααααΆααααΎαααΆα α’αααααααΌαααααααα’αααααΆααα½αααααααααα αααααΆαααΈααΆαααα α αααααααΌα αα·ααααΆαααΈα - ααααΌααααΈ.
ααααΌααααΈ RPC
ααααΌααααΈ α‘αΆααααα»ααααααΆαααααααααΎααααααααααα αααααααααΎαααΆαα αααα»ααααααΆαα½αααααΆαααααΎαααΆα ααααΆαααΆαααααΎαααααΆααααααα β αααα»ααα αα·α ααΆαααΆαααααααααααΆααααααΌααααΈααα αααααΉαααΈααΈααΆααααα αααααααΆααα’αα αα·ααααααααΆααα’ααααα ααααααααα αααααΆα’αααΈαααα’ααααααααααααααααΎα
α’αααααααααααααα·ααΈαα·ααααααααΈα ααα½αααα»ααααΆα ααααααααΆ αα·ααααααααα»ααααΆαααααα - αα½αααααααΆααααα αΌααα ααΆααα αααααααα»αααααα αααα’αα»ααααΆαα±ααααΎαα αααΎαα αα αααααα½αααααΎ ααααΌααααΈααααΌααα·αααααΎαααααΉαααΆααααααααΆ - ααΆαααααααΆααααααα½αα―αα
αααα»αααααΈαααααααΌααααΈααΊααΆα
ααα»α
ααΆαααΆααααααΆααααΉαααΆααααΆαααααααααΆααααα ααααα·αααΎαααΆαααΈααααααααααααααΏα α¬ααΆαα αααααααΌααααΈαααα’αααΈαααα αΆααα α αΎαααααΎααααα
ααΆαααΆααΈα’αα·αα·ααα αααα’αα»ααααΆαα±ααα’αααααααΆαα’αααααα
αα - αααααΌααα·ααααα
αΆαα±αααααΆαααΈαααααΎααααα ααα»αααααααααΆααΆαα·αααααΎαααΆααα α αΎαααααΌαααΆαα₯αα·ααΆαααα»αααααΆααααα ααΌαααααΌαααααααΌαααΆααααα
ααααααΆααααΆααα·ααααααΆααΌαααααΆααα·αααααααα·αααααΎαααΆαααΆαα·α
αα
α
ααΆαα’αα»ααααααΆααααΆαα
αααααααααΎααα ααα ααααΆααααααααααααααααααΆααα·ααααααααΆαααΆαααΆαααΈαα αααα»ααααααΆαα½αααααΆααα ααΆααααΌαααΆααααααα α α·ααααα·αααααΎ rpc-proxy αααααααααα½α ααΆααααα ααααααΎα ααααααααΎαααΆαα·ααααααααΆαααααΆαααΈαααααααΎα ααα»ααααααΎααααΈαααααΎαααααΌααααΈααΆα ααααα‘αααααααΆαααα·α αα ααΆαα
αααααΆαα MySQL αααααΎααα ααααΆααα ααΈααα αα·αααΈααα ααΎαααααΎ db-proxy αα·ααααααΆαα ClickHouse - ααααααΌαααααΆ.
ααΆααααΎαααΆαααΆααΌαα ααΌα αααα ααΆααααΆαααΈαααααΆααααΆαααα½α ααΆααααΎαααΆα kPHP, Go, Python - ααΆααΌαα ααΌαααΆαα½ααααα’αΆα ααααΎαα·ααΈααΆα RPC ααααααΎαα ααΌαααααΎαααΆααααα»αααΌαααααΆαααΎααααΌααααΈ RPC - αααΆαααΈαααααΈαα½ααααααααααΌαααΆαααΈααΆαααα ααααΎαααΆαααααΌααααΈααΌαααααΆαααααααΆα ααΆαααΆαααααΎαα»α ααααΌααααΈααααααααααααααααΌααα α
ααααα·αααΎαααΆαααΈααα½αα
αααα
αα½αααα αααααΈααΆααΆα’ααααα·αααΆαααααα ααΆααααααΆααααααΌααααΈ αααααα’ααααα·αααΆαα’αΆα
αααα·ααα
αααα»αααααααααααα·ααααααααααααααα αααΆαααΈααα·ααα½αααΉαααα’ααααΎααΆαααΉαααΈααΈααΆααααααα’αααΈαααα
ααΈαααα½αααΆ - αααααΊααΆαααααααααΆααααααααΆαααααααΎαα ααα»ααααααΆααΆααα·αααΆααααΆαααααΈααΎαααα :)
α§ααΆα ααααααααααααΆααα TL ααααα ααΆααααΆαααΈαααΆααα’ααααααΎαααΆαα
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;
αααααΊααΆαα·ααΈααΆααααααααααααααΈα αααααΆ analogue αα·ααααα»αααΊ protobuf α αααααααΆααααα·αααααΆα’αααΈααΆαααααα α α·ααα αααααααααα»αααααΆα - αααααααααααααααΆαααααααΆααααααααΆααααααΆαα½α αα·ααααα½αα α’αααΈαααααΎαααΆααααα’αα»αααααΆααα·ααΈααΆααααα
RPC ααΎ TL ααΎ TCP/UDPβ¦ UDP?
ααΎαααΆααα·ααΈααΆα RPC αααααΆααα’αα»ααααααααΎαααΆαααΈααααααααΎαααΆαααΎαααααααΆααα TL α ααΆααα’αααααααααΎαααΆαααΎααΆααααααΆαα TCP/UDP α TCP ααΊα’αΆα αααααΆα ααα»ααααα ααα»α’αααΈααΆαααΆααΎαααααΌαααΆα UDP ααΉαααΆαα?
UDP αα½α αααααΆααααα αΆααα ααα½αααα αααΎαααααΆααααααΆαααααΆααααΆαααΈααα. ααααα·αααΎαααΆαααΈαααααΈαα½ααααΆαααααΌααααΈ RPC α αΎαααΆααΌαα ααΆα’αΆα αα αααΆαααΈαααΆαα½α αααααΆαααΆααααααΆαα TCP ααΆαααααΊααααα»ααα½ααααΆαααΈαααα ααΆαααααα»αααα»ααααααΆααααΆαααααααααααα αααα»αααααΈ UDP αααα αΆααααα·αααΆαααα
ααααΆαααΆαα αΆαααα TCP ααααααααααΌαααΆαααααΆααα. αααααΊααΆαααα αΆααααααΆα αα αααααααααΆαααΈαααααΈ α¬αααΆαααΈαααααααΈααααΌαααΆαααΎαααααΎαααΆα ααΆααααααΆαα TCP ααΆα αααΎαααααΌαααΆααααααΎαα‘αΎααααα»αααααααα½αα αααααΆααααααΎααααααααααΆαααΌα α α§ααΆα ααα UDP payload ααΆαααααΆααααααααΆααα’αααααΆαααΌα αα·ααααΆαααΈαααΊ αααα αα UDP ααΈαα αα½αα αααααα»ααα·ααα αα½α ααΈααΈααα αα·αααααααααα ααΆαααααΎααααΎααα½ααα»α - α αΎααααααΌαααΆαααα½αααΆαααααΎαααααΈαααΆαααΈαααααα·αα αΆααααα
ααΆα ααΆααααΆααααααααΎαααΆαααα»αααααα ααΆαα½αααΉαααΆααααα·α αα½α ααααΆαααΆααααααααα ααααααααΆα. αα·ααΈααΆαααΆαααΆαααΆαααααααααΆααααΆααααααΌαααΆαα‘αΎααα·α αα·αααΆαα’ααααα ααα»ααααααααα·αααΎααΎαααΆααααα αααΎα ααΎαααΉαααα½αααΆα TCP ααααΎαααααααα·αααα½αααΆαααα ααααα ααΎααα·αααΎα UDP ααααααΆαααα αΆααα»αααααα
ααΎαααΆααααΆαααΈαααααααααααΆααααΆαα α αΎααααααααΆαααααΊααΌα ααααΆα αααα αααααΆαααΈαααααΌαααΆαααα‘αΎααα ααΎαααΆαααΈαααααΈαα½ααα αα½αααΆααΆαα αααΎαααΆαααααααα½α ααΎααααΈααααΎαααΆαα±ααααΆαααΏαααΆααααα’αΆα ααααΎααΆαααααα·αααΆαααΆααααααααΆαα αα·αααααΌαααΆααααααααΆαααααααααΆααααααΆααααααααα½αα αααα»ααααααΆαα½αααααΆααα ααΎααα·αααΆαα’αααΈαα½αα±αααα»αα α·αααααΆααααΆαααΈαααΆααααααα α αΎαααΆαααα α·ααααα»αααΆααααΆα αααΎαααΊααααΌαααΆαααααα ααΎααΆααααα»ααα·ααααααααΆααααΆααα
ααΆααααα»ααα·ααααααααΆααααΆαα
αααΆαααΈαααααα binlogs. binlog ααΊααΆα―αααΆααα
α
α»ααααα
ααααααααΉαααα·ααΆααααααααΆααααΆαααααΆααααααΌααα
αααα»ααααα α¬αα·ααααααααααΌαααΆαααααααα αα
αααα»ααααααααααΆαααααααααα α
ααΆαα»αααααΆα αααααα ααα»αααααΈαα
ααΎααααΈαααΆααααααΆαααΈαααΈααΆαα’αΆαα‘αΎααα·αααΌα binlog ααΆααααΌαα’ααααααααααΆα αααΎαααααΆααα αααα αΆααααααΎαα‘αΎααα·α αααΆαααΈαααααα ααΌααα - ααααΆαααΆααα αα α»αααααα. ααΎα αΆαααΆα α αα½αααα’αΆαααΈααΆααΆαα»α α αΎααααααΆαααααααα ααααΆαα’αΆαααΈ binlog α binlogs ααΆααα’ααααααΌαααΆαααααααααα»ααααααααααααΈαααΌα ααααΆ - αααααΆααααααααΆααα TL ααΌα ααααα’ααααααααααααα’αΆα ααααααααααα½αααΆαααααααΎαααααΆααΆαα½αααΉαα§ααααααααααα½αααα αα·αα αΆαααΆα αααΆαααΌαααααααααααα ααΆαβααααααΆβααΌαα βαααβαααα αΆαβααΆβααΌαααβααααβα’αααβααΆβααΆ int, αααααααβααααβαααΆαααΈα α αΎαβαα½βααΆβαα·αβααααΆααβαααααΆααβα’αααβααΆβααααΆααα αααααΊααΆαααα αΆααΆαα½ααααΆαααΈααααααΆααααααααΆααΌαααα
αααα»αααΉααααααΆααα’αααΈαααααΆαααααααααα·ααααα·ααΆααααΆαααΆαααα ααα ααΆααααΆαααΈαααααααααΆαααΈαααααΎαααΆαα ααΆααααΎα binlog αααααααΈαα½ααααααΆααααααα αα·ααααααααααΉαααα·ααΆααααα½ααααααΆααααΆαααααΆααααααΌααα ααΆα
αα
α
ααα»α
αααα ααΆαααααααα
α
α·αααααααΌααααα½αα―α α¬ααΆααααα½ααααααΆα αααΆαααΈααααααααΎαα―αααΆαααααΈ αααααααααΆαααΆαααΆααααΌααα
αααα»αααΆ ααααααααα α binlog αα
αα
α»αααααα - offset - αα
α
α»ααααα
ααααα―αααΆα α αΎαααααααααααααααααααα binlog ααααΈαα·αααααΌαααΆααααααΎαααα
αα
α
ααα»α
αα½αα
ααα½α αα
αααααααααΆαααΈαα
αΆααααααΎαα‘αΎααα·α ααΉαααΆαααΆαα binlog αα·αααΌααααα
ααΎααΈαα αααΆαααΈαα’αΆαααΌαααααΆααααΌα αα·ααααααΎαααααΆαααΆαααααααΆαα
α
ααα»α
ααΆααααΆαααα½αα
α’αΆαβααΈααΆααβαααβαα
βαααβαααβααΆαβααβααΌαβααααΌαβααΆαβαααααΎαβα‘αΎα αα·αβααα αβαα binlog α
α’αΆαα
α»ααααα
αααα binlog ααΎααααΈααα½αααΆαααααΆαααΆααα
αα
α»αααααα α αΎααααααααααααααΉαααα·ααΆααααααααααααα αααααΊααΆαααααααΆαααααααΆαααααα½α αααΆαααΈαααααααΎαααΆααα’ααααααΎαααΆααα
ααΆαααΆα
ααΆαα αααααα·αααααα
ααΆαααααα ααΆαα αααααα·αααααααα αααα»αααααααΎαα ααα’ααααΎααα ααααΈαααααααΆααα - ααΎαααααααααα»α binlog αα·αααΆαααΆαααααΆααααααΌααααααααΆαα½ααα ααα»ααααααΊ ααΆαααααΆααααααΌαααααΎ. ααααααβααααΆβαα βααΉαβα’αααΈβαααβααβααΎβαααααΆαβαααβααα ααΊβααΆαβααααααβααααα·α ααααα½α βααα»αααααα
αααααααΆαααααΌα ααααΆαααααααΌαααΆαααααΎαα·αααααΉααααααααΆααααΆαα ααααααα»αααααααααα»αααααααααΆαααααααα ααΎααααΈαααααΎαααΆαααααα»ααα»α. ααΎαααΆααααΆαααΈα - ααααααααααααααααα binlog α αα αααααααααααααααααα’αααααααααααααααα αααΆ binlog αααααααΌαααΆαα αααα α αΎααααα αΎαααΆααΆ - ααΎαααΆαααΆαααααα»ααα»αα
ααααα·αααΎβααααΌαααΆα ααΆαα’αΆαα
ααααααΎααααΈααΆαααααααααααα»αα’αΆααααΈααΈααΌ αααΆαααΈαα’αΆαααααΌαααΆαααΎαααααΎαααΆααααΆαααΆαααα αααα’αΆαα
α»ααααα
αααα binlog αα·αααααα·ααααα·ααΆααααααααΆααΆααααααααα»αααΌαααααΆαα
ααΆαααΊααααΆααα ααΈαααααΊααΌα ααΆαα α αΎαααα’αΆα ααΉαααΆααΎααΆαα αααααααααΊααααΆαααα»ααααΆααΈααα αΆααα
ααΆαα ααααααααα·αααααααα αααα»αααααΌααααΈ RPC
ααΎ sharding ααααΎαααΆααααΆαααΌα ααααα ? ααΎβααααΌααααΈβαααβααΆβα αααααβαα½αβααΆβαααβααααΌαβααααΎβαα βαααβααααβααΆ? αααααΌααα·ααα·ααΆαααΆ "ααααΎαααααΆαα 15 shards!" - αα αααααααΌαααΆαααααΎαααααααΌααααΈα
αααααααΆαααααΆαααααααα»αααΊααααΌα - αααααααΌααααα»αααααΎα
get(photo100_500) => 100 % N.
αααβααΆβα§ααΆα αααβαααααΆααβαα·ααΈααΆαβα’ααααα memcached ααΆαααα ααα»ααααβαα·αααΆαα αααα½αβα’αΆα βαααα»αααααΆα αα·αβααΆαβαα ααΆααααααααα α§ααΆα ααααααααααΈαα½ααααα»ααααα½α αα·ααααααααα ααααα ααααααα αααααααα αα αααααα
ααΆααΆααααααααααα ααααααααΎαα ααααΆαααΌαααααΆααα·ααααααααα’αααααΆααααα½αα α§αααΆααΆ 100 ααΊααΆααααααααΆααα’αααααααΎααααΆαα α¬αααα»α α αΎαααΎαα ααα±αααα·ααααααααΆααα’ααααα’αααααΆααα½ααααα·ααα ααΎααααααααα½ααααααΆαααααα½ααααα»αααααΆαα
ααααα·αααΎααΎααα·ααααααααΈαααααααααααΎααααΌαααΆαααΈαααΆαααΆααα ααΌααΆααα αααααααα ααΆααααααΎααα½ααααααααα - αα»αααΎ shard ααΆααααΌα.
hash(photo100_500) => 3539886280 % N
ααΎαβααβααα½αβααΆαβαααβαααααΆβαααβαα βααααααβααβααΆαβαααα ααβαα·αβαααβ shard α
αααααΎαααΆααααΈααααααααΎαααΆαααΆααα»αααααΆααααΎααααα ααααααΆααααΆααα·ααααααΆαα ααααααααΎααααααΎαααα αααα ααααα ααΎαααΉααααααααΆ α¬αααααΎαααΆαααα αααΎαααα α§ααΆα ααα ααΎαααΆα 16 shards ααΎααα·αααΆααααααααααΆαααα ααΎαα ααααΆαααααααααα - ααΎαα’αΆα ααα½αααΆα 32 ββααααα»ααααα·ααΆαααααα·αααΆααααααααΆααα αΆαα ααΎβααΎαβα ααβαααααΎαβαα·αβααΆαβα αααΎαβαα ααΆβααΉαβααΆαβαααβααααα αααααβααΎαβααΉαβαα·αβα’αΆα βαααααβα’αααΈβαααααβαααΆαβααΆαβααααΉαβααααΌαβαααβαα·αβααΆαα αααααΎαααΆαααααααΆααααααααα ααα»αααααα·ααααααααα
ααααα·αααΎααΎαααααΌαααΆααααααα α¬ααα ααα½ααααΆαααΈαααααΆαα’αααΎα α·ααα ααΎαααααΎ ααΆαβααΆααβααΆααβαα βααΎβαααααα a la Ketama. ααα»αααααααα»ααααααΆαα½αααααΆααα ααΎαααΆαααααααΌαααααΆααα·ααααααααΆαααααα»α ααΎαααααΌααααα αΌαααααΎαα α ααααα ααΎααααΈα±αααα»αααΈαα½αααααα‘ααααΆαααααΎααααα·α αα½α ααααααΆ α αΎααααααΆαααααααα αΌαααΆαααααΎααααα ααααΌααααΈα
ααΆαααααΎααΆααααΆαααα·αααα ααΆααΎααα ααΌα αααα ααααΌααααΈ RPC ααα½αααααΎ αααααα αααααααΆαααααααΌααα αα·αααααα shard α αααααΆααααααΆαααααΆαααααα α¬ααααα·αααΎα αααααααΆαααΆαααΆααααα αααα ααΆααααΎαα α ααααααΆααααααΌαααΆαα ααααΌααααΈααααΎα’αααΈαααΆααα’αααααα
αααααα ααα»
ααΎαααααααααααα ααα»ααΆααα·ααΈααΆα αααΎαα ααΆααααααα αα·αααΆαααααααα»αααΊ ααααααααααα ααα»αα memcache.
ring-buffer: prefix.idx = line
ααΆααα»ααααααααααΉα - ααααααααααααα ααα»αααααΆαααα½αα αΎαααΆαααα ααααααααα ααα»ααα - α ααα½ααααααΆααα ααΎααααααα αααααααΈ 0 αα α ααα½ααααααΆαααα 1α αααααΉααααα»α memcache ααΊααΆαα»ααααααααααααΆααααΆαα½ααααα ααααααααα ααΎααααααΆαα»ααααααΆαααααααα ααα»αα·ααααααααΆαα αα α»αααααααα ααΆαααααα
αα ααααααααΆα αΆαααΆα αααΎααααΈα’αΆααααααα ααα»ααΎαα’αα»αααα ααα½αααΆαα αααΎαα ααααΆααα α»α ααΆααα’αα ααααααααΆααααααααΆ α αΎαααΌα ααααααα½αααΆααααααα ααα»ααα·ααααααααα»ααααααααΆααΆαααααααα αααααααΆααααααααααΌαααΆαααααΎαα ααααααα’αααααααΌαααΆαααααΆααααα α»αα’αααΈαα½ααα αααα»αααα·ααααααααα»ααααααααΆααΆααααααα ααααα·ααααααα’αααΈααΆααα’αα ααααα·ααααααα α¬α’αα»ααααΆαα±ααα ααΆα ααα ααΆαααααΆαααΈααααααααα ααα»αααααααααα ααα»ααααα·αααΆαααααααααΌαααα
αααααΆααααΆααααα»ααααααα ααα»αααα’αΆα αα»αα α·αααααΆα ααΎαααΆααααΆαααΈα logs-αααΆαααΈα. αααβααΆβααΌαα ααα»βαααβααΆβααααΌαβααΆαβαααααΎαβα‘αΎα αα·αβααααΌαβααΆαβααβααααΎβαααΆαβααΌααααΌααΆαβαααα»αβα ααα½αβααα αααΎαβααβα αααααα α ααααααααααααα»αααααααα»αααααΆαα αααααΆαα»α 600 TB αααααααα ααα»ααα ααα ααα
αααΆαααΈαααΊα αΆααααΆααααΆαα ααααααααααΆαα’αΆαα» 6-7 ααααΆααα½α αα α αΎαα ααΆααααα αΆααΆαα½αααΆαααααΎααααα»αααααΆααΆααααααααΆα α§ααΆα ααα ααΎαααΆαα αΆααααααΎαααααΎααααΆαα ClickHouse αααΆααααααααΎααααΈαααααΆαα»ααααααα ααα»α
ααΆααααααΌααααααα ααα»αα αααα»α ClickHouse
ααααΆααααΆαααααααα αΆαααΈαααααααααΎαααΎαα αΌααα αααα»ααααΆαααΈαααααααΎαα
ααΆααααααΌαααααα
αααα»ααααααααΆαααα RPC αα
RPC-proxy α αΎαααΆαααααΈαααααααααααααΌααα
αααΆαααΈαα ααααα·αααΎααΎαα
ααααααααααααα ααα»αα
αααα»α ClickHouse ααΎαααααΌαααααΆααααααΌααααααααΈααα
αααα»ααααααααΆααααααα
- αααα½ααααΆαααΈααα½αα ααα½αααΆαα½α ClickHouse;
- αααα½αααααΌααααΈ RPC ααααα·αα’αΆα α αΌαααααΎ ClickHouse ααΆαα½αααΉααααααααααΆααα½αα ααα½ααααα’αΆα αα·αααΆαααα RPC α
αααΆαααΈαααΊααΆαααα - ααΎααααα½αααΆααααααΆαααΈαααα¬α ααααααααΆαααΈαααααΆαα½α ClickHouse α
α αΎαααΎααααΈαα ClickHouse ααΎαααΆαααααΎ ααααααΌαααααΆ. ααααα·αααΎααΎααα αααααααΆααααΈ KittenHouse αα ClickHouse ααΆααΉααα·αα’αΆα αααααααΆαααΆαααα αααααΈααΆααααΆαααααΎααααα ααΆααααααααΈααΆααααααΆαα HTTP αααααΆαααΈααα½αα ααα½αααα αααααΆαααααααααΆαααααααΎαααΆααα ααΎαααΆαααΈααααααααΆα ClickHouse ααααΌααααΈαααα αααΆααααα»ααααααααααΌαααΆαααΎαα‘αΎααααααααΌαααΆααααααααΆααααααααααΆα’αΆα ααααααααΉαααα·ααΆααααααααΌαααΆαααααΆααααααΆααα ααΆααα’αΆα αααα»ααα·αααααααα αααα»ααααα½αααΆαααααΆαααΏααΆαααααααα
αααααααααΎααα·αα
ααα’αα»αααααααααααΆααα RPC αα
αααα»ααααααααααΆααα·ααααααααΆα α§ααΆα ααααα
αααα»α nginx α ααΌα
αααα KittenHouse ααΆαααααααΆαααα½ααααααα ααα»ααΆαααα UDP α
ααααα·αααΎα’αααααααΎ αα·αα’αααααα½ααααααα ααα»ααααΎααΆααα
ααΎαααΆαααΈααααα½α αααααααΌααΆαααΈααΈααααααΆαααΆααααααααα
ααααααααΆα UDP αα
αααα»ααααΆαααΈαααΌαααααΆαααΊααΆαααΆααα ααΆααΆααααααααααα½ααααΆααααααΌαααΆααααα»αααΆαα’αα»αααα RPC αα
αααα»ααααααααααΆαααΆααΈααΈααΈ αα·αααΆαααΏααΆαα ααΎαααααΆααααααααΎααΆαααααΎ UDP ααα»αααααα ααΎαααΉααααααααα
αααααααΆαααααααα
ααααααααα
ααΆααααα½ααα·αα·ααα
ααΎαβααΆαβαααααβα ααα»βααΈαβααααααα αααβαααααΌαβαααβα’αααβαααααααααβαα βααΎβαααΆαααΈαβαααααΎβααααβαα½ααα αα·αβαααβαααααβαααβα’αααβα’αα·ααααααβααΈβααΌαα αα½αααΆααααΌαααααΆαα ααΉααααααΆααααΈαααααααα αααααααααα·αααα·ααα.
αααααΆαααααααααα
ααΆααααΎαααΆαααΎαααΆαααΈαααααααααΎαααΆααα’ααα
αααααΆααααα·ααα
ααΎααααΈααΆαααΆααααα½α ααΎαααΆααααααααΏαααΆα αααΎαα α§ααΆα ααα ααΆααααα»ααααα»αααΆαααααααΆαααα’αα»ααααΆαα±ααα’αααααααα Counts ααααα UniqueCounts αα αααα»ααααα·αα· αααααααΌαααΆαααααΎαα ααααααααΆαα½ααααααααααα
statlogsCountEvent ( βstat_nameβ, $key1, $key2, β¦)
statlogsUniqueCount ( βstat_nameβ, $uid, $key1, $key2, β¦)
statlogsValuetEvent ( βstat_nameβ, $value, $key1, $key2, β¦)
$stats = statlogsStatData($params)
αααααααααα ααΎαα’αΆα ααααΎααααααααααα αα·αααΆααααΆαααα»α α αΎαααααΎα’αααΈααααααααΆααααααΎαα ααααΆαααΈαααα·αα· - αααααΎαααααΆα αα ααααααα ααΆαααααααα Watchdogs α
ααΎααααααααΆααα ααααααααΆα αααΎαα α ααα½αααααΉαααα·ααΆαααααΊααΈ 600 ααΆααααΆααα 1 ααΆααααΆααααΆααααα»ααα½αααααα ααααααΆαααΆαααααααΎαα αααααααΆαα½αααα αααΆαα αα ααΆααααΈαααΈααααΆαααΎααααΈαααααΈαα·ααααΆααΆααα αααα»αααααααα ααΆαβααΆααβααΆβααΆααβα’ααβααααΆβααΆβαααα αΆβααβαα½αβαααβααΎαβαα·αβααΆααβααΆαβαααααααΆαβαα βα‘αΎαβααα αααα»αααΉαααααΆααα’αααααΈαααααααααΆααααΎαααΆααααα»αααααααααα»ααααΆαααααΆαα α»αααααααααα
ααΎαααΆααα»αααΆαααααααααααααααααΆααααα αα ααΆαα memcache αααα»ααααα»αααΎααααΈααΆαααααααα ααα½αααΆαα»α αΌαα αααααααα»αααααααααααΈαααααααααΆαααααΆααα±ααααααΎαααΆααααα»ααααα»α αααα·αα· - αααα·α αααααΌααααααααααΆααΆααα’ααα αααααΆααβαα αα·ααΆα βαααα αΌαβααααααβαα βααΆβαααααΆααβααΈαβααβαααΆαααΈαβαααααΎ α’ααααααααΌααααααα ααα»ααααααααΌααααα»ααααα·αα·ααΈαααΆαααΈαααααααΎαααΆα αααΎα ααΎααααΈαα»αα±αααααααΆαααα ααΈααααααα½αααΆααααΆααα
ααΎα
αΆαααΆα
α ααΎαα’αΆα
ααααααααααααΆαααα
α’ααααααααΌααααααα ααα»α
ααα»ααααααΆααααααααΈααΌααααααααΆαααα
ααΆααα’ααααααααΌα αααααααααΆαα stas-daemom ααΊααΆαααααααααΆααααα’αΆα
ααααΎααΆαααααααΆαααΆααα·α
αα½α
αααααααΆαααααΎαααααα»αααΎα’ααααααααΌαα αααααααααΆαααΊαααααααα»αααααΆααααΎααα·αα’αΆα
ααα‘αΎα memcache stats-daemon αα
ααΎαααΆαααΈα α¬ααΆααΆαα α αΎαααΎαααΆααα
αααααααΆααα
αααααΆαααα α’ααααααααΌααα·αααααα αααα αΌααααα·αα·αα αααα»α meowDB - αααααΊααΆααΌαααααΆααα·ααααααααααααΎα αααα’αΆα αααα»ααααααααααααα
αααααΆαααα ααΎαα’αΆα
ααααΎααΆαααααΎαααΎα binary βnear-SQLβ ααΈααΌαα
αα·ααααα
αα αααΌααααα ααααΆα 2018 ααΎαααΆααααααα·ααΈ hackathon ααΆααααα»α α αΎααααα·ααααααΆαααΎαα‘αΎαααΎααααΈααααΆααΆααααα½αααααααααα αααααααΆααααΆαααΆαα½αααΉαα’αααΈαα½ααααα’αΆα αααααΆαα»ααααααααα αααα»α ClickHouse α ααΎαααΆααααααα ααα»αα ααΎ ClickHouse - α ααα»α’αααΈαα·αααΆαααααααΆ?
ααΎαααΆααααααααΆααααααααααααααααα ααα»ααΆαααα KittenHouse α
ααΎαβααΆαβααααα
α
α·ααα αααααα "* αααα" αααααααααα
αααα»αααααΆααααΆααααβααΉαβααα½αβααΆαβααααααβαααα»αβαααααααααΆαβααΌα
βαααβααΌαβααααβααΎαβαααααβααΆβααΆα UDPα αααααΆαααα * ααααααααααααααα½αααΆαα
ααΆααΆαα»αααα
αΌα ααΌα
ααΆαααααα ααα» ααα KittenHouse αααα ααΆααα’αΆα
αααααΌααααααα ααα»ααΆααααααααΆαααα’α₯αααα
αααα
ClickHouse ααααα½αααα’αΆα
α’αΆαααΆααΆαα
αααααααΆααααααααΆα memcache, stats-daemon αα·α logs-collectors database ααααΌαααΆααααα½αααααα½ααααα
αααααααΆααααααααΆα memcache, stats-daemon αα·α logs-collectors database ααααΌαααΆααααα½αααααα½ααααα
- ααΆαααΆααααααΌαααΈααΌααα ααΈααα αααααααΌαααΆαααααααααα»αααΌαααααΆααα αααα»α StatsHouse α
- StatsHouse ααααα UDP metrics αααααΆαααααααααα½α ααΆααααα αα αααα»α SQL inserts αα KittenHouse ααΆααΆα αα
- KittenHouse αααααΌααα½ααααα ClickHouse α
- ααααα·αααΎααΎαα ααα’αΆααα½αααΆ αααααΎαα’αΆαααΆαααααααααΆαα StatsHouse - αααααααΆααααΈ ClickHouse αααααααΎ SQL ααααααΆα
ααΎαα ααααΆα ααΆααα·αααααααα»ααααααΎαα αΌαα α·ααααααααααααΆααααα ααα ααααα·αααΎααΎααααααααΆααααα αΆααΆαα½ααααααααΆαααααααααα ααααΆααΎαααΉαααααΌααα ααΆααΆαααααα»αα αααααααΆαααααα»ααααααΉαααΆααΌα ααααα
ααααααααα αα·ααααααααΆαα·ααα. ααααΌαααΆααααΆαααΈααααα·α ααΆααα»α αα·αααααααααα·αα·αααα»ααααα»α αα·αα’ααααααααΌααααααα ααα»αα·αααααΌαααΆααα ααα»αααα ClickHouse ααΆαααΆααααΆαααΈαααααααΆααααΆαααΈααααα αααα»ααααααααΆααααα αα α»ααααααα ααααΌαααΆααααΆαααΈααααα·α ααΆααα»α ααα»αααααα½αααΆααααΌαααααΆααααααααααααΆα αα·αααααΆααααΆα.
ααΆαααααααΆα
ααΆααααΌα ααΌααααα‘ααααΎαααΆαααΆαααααααΆα PHP α ααΎααααα»αα’αα·αααααα αααα»α Git: ααααΎ GitLab ΠΈ αααα»αααΈαααΈααΈα αααααΆααααΆαααΆαααααααΆαα ααΆααΆα’αα·ααααααααααΌαααΆααααα αΌααα αααα»αααΆααΆαα ααΈαααααααΆααααΆαααΆααααα αα½αααααααΌαααΆααααα αΌααα αααα»αααααΆααααΆα αα·αααΈααααΆααααΆααα ααΆααα·αααααα
αα»ααααααΆαααααααΆα ααΆααΆααα·ααααααα αα α»αααααα αα·ααα»αααααΌαααΆααα α αΎαα―αααΆααα»αααααΆααααΌαααΆααα·α αΆαααΆαα αααα»ααα½αααΆ - ααΆαααααΆααααααΌαα αααααΎα αα»α ααααΆααααααΌαα ααΆαααααΆααααααΌααααααααΌαααΆααααααααΆαα αααα»α binlog αααααΆαααΈα copyfast αα·ααα αααα’αΆα α ααααααΆαααααΆααααααΌααααΆαααΆαααα αααα ααΆαααααα»α server ααΆααααΌαααααααΎαα α’αααΈβαααβααααΌαβααΆαβααααΎβαα βααΈαααβααΊβαα·αβαααβααΆβααΆαβα ααααβαααβααααΆαα, ααα»αααα ααΆαα ααααααΆααα·ααΆαααΎααα αααααααααΆαααΈααααα½αααααΎααΆαααααΆααααααΌααα ααΆααα’ααααα·αααΆαααααα αα·ααααα»αααααααΆ ααααα ααΆααα’ααααα·αααΆααααααα½ααα αα·αααΌα αααααα ααΎα αααα’αα»ααααΆαα±ααα’αααααααΎαα αα α»ααααααααΆαααΌααααα»αααααααααΆαααα·α αα·αα―αααΆαααα·ααΆααΈαα ααΌααΆααααααΆααΆααΆααααΌαα αα ααααααααΆαααααΆααααααΌαααΆααααααΆαα αααααααα»ααααα»α ααΆα’αα»ααααααααααΆααααααα ααααααΆα ααααααααα―αααΆααααα»ααααα»α. Rollback ααααααΌαααΆαα’αα»αααααα ααΆααααααααΆαααααΌα ααααΆαααα
ααΎαααααΆαααααααΆα kPHP αααΆαα αααΎα α αΎαααΆααααΆαααΆαα’αα·ααααααααααΆαααααα½ααααααα Git αααααΎαααααΆαααααΆααααΆαααΆαααΎα α αΆααααΆααααΈαααα αααΆαααΈααα HTTP αααααΈααααααΆααααααΎααα·αα’αΆα αααααΎαααΆααα»αααααΆααΆααα - ααΆαα ααααααΆααααααααααααααΈαααΆαααααααααΆαααα MB α ααΌα ααααααΆααααααΎααα½ααααααααααα ααΈααα - ααααααααΌαααΆαααααααα binlog copyfast. ααΆαα½αααΉαααΆαααααΆαααΆααΈαα½ααααΆααΎαα‘αΎα α αΎααααα»αα’αα‘α»αααα rollback ααΆααααΎαα‘αΎααααααα αααα ααΆαα αααααα αααΆαααΈααα. copyfasts αααα»ααααα»αααΎαααΎαααΆααααααααΈααΆαα αΌααα αααα»α binlog α αΎααααααΆαα ααααααΆααα·ααΆαααΎαααΌα ααααΆ αα½αααααααααα α»αααααααααα»ααα binary αααααΆαααααα½αααααααα·αααΏαα αααααΆαααΈαααααααααΎα ααα»ααααααΆαα ααα αΆαααααα»ααααΆααααα»αααααααααααααααΆαααααααΆαα α’αααΈβαααβαααααΆααβαα ααΆαβα αΆααβααααΎαβα‘αΎαβαα·αβααβαα½αβα±ααβαααα αααααΆααααααααααΈα
αααααΆαααααΆαααΈαααααααΎα αααααΆαααααααααααααΈαααααΆααααααα αααααααΆαααααΊααααααααααΆααααΆααααΆααα
- git ααΆααΆαα;
- αααααΈααα αααα»α .deb;
- ααααααααΌαααΆαααααααα binlog copyfast;
- α αααααα αααΆαααΈααα;
- αααΆαααΈαααααΆαα αα .dep ααααα;
- dpkg -i;
- ααΆαβα αΆααβααααΎαβα‘αΎαβαα·αβαααΆαβααα’βα ααααβααααβααααΈα
ααΆααα»αααααΆααΊααΆαααααααααααααΈαααααααΎαααααΌαααΆαααα αααααα»αααααααΆα .debα αΎααα αααααΌαα αα dpkg -i ααααΌαααΆαααΆαααα ααΎααααααααα α ααα»α’αααΈααΆαααΆ kPHP ααααΌαααΆαααΆαααααααΆαααΆαααααααααααααΈα α αΎααααΆαααΈαααααΌαααΆαααΆαααααααΆαααΆ dpkg? ααΆααΆαααΎαα‘αΎαααΆααααααααα ααΆααααΎαααΆα - αα»ααααααΆα
αααααΆαααααΆααααΆααααααααα:
- ααΆαααΆαααααα Anton Kiryushkin
"α’αααααααααααααααααααα Vkontakte α αααΆααααα ?β ααΆαα½αααΉαααααααΆααααα’α·αα’αααΈ copyfast αα·αααΆααα·ααΆαααΎαα - ααΆαααΆαααααα Yuri Nasretdinov
"ααααααα VK αααα αΌααα·αααααααα αααα»α CLickHouse ααΈαααΆαααΈαααααΆαααααΊαααΆαα" . - αααΆαααΆααααααααααα»α
"ααααΆααααααααααααααααααααααα»αααΈαα ααααΎααααααααΎα§ααΆα ααααα VKontakte" ααα»ααααααΆαααααααααααΆαα’αα·αααααα αα·αααααααααααΉαααα
Alexey Akulovich ααΊααΆααα»αααααααΆαααααα»αα ααααα’ααααααααΆααααααα½αααααααααααΆαα·ααΆααααααα·ααΈαα½α
PHP αα»αααααΈ αα ααααααΈ 17 ααα§αααΆααΉαααααΆαααΆααααΉαααα·ααΆααααααααααα»ααααααΆααα’αααα’αα·αααααα PHP ααΆαααααααΈααααα ααααΎαα’αααΈαααααΆαα»αααααΌααααααααΆαααααααΎαααΆαααΆαααα·α (ααΈαααΆαααααα»αα αααααα½ααααααα»αα’αα·ααααααααΌα PHP!) - α αΆααααΌα ααΆα’αααΈαα½ααααα’ααααα·αα’αΆα ααααΆαααααα·αααΎα’αααααααα PHP α
ααααα: www.habr.com