
åœæããã°ãä¿åããŠåŠçããæ¹æ³ã¯2ã€ãããŸãããç¬èªã®ãã°ãšã³ãžã³ãšrsyslogã§ããããã䞊è¡ããŠäœ¿çšããŠããŸããã ç§ãã¡ã¯ä»ã®ãªãã·ã§ã³ãæ€èšãå§ããYandexã®ClickHouseãç§ãã¡ã«éåžžã«é©ããŠããããšã«æ°ä»ããŸãã-ç§ãã¡ã¯ãããå®è£ ããããšã«ããŸããã
ãã®èšäºã§ã¯ãVKontakteã§ClickHouseãã©ã®ããã«äœ¿ãå§ããã®ããç§ãã¡ãèžã¿èŸŒãã ã¬ãŒããããã³KittenHouseãšLightHouseã«ã€ããŠèª¬æããŸãã äž¡æ¹ã®è£œåã¯ãèšäºã®æåŸã«ãããªãŒãã³ãœãŒã¹ã®ãªã³ã¯ã«é 眮ãããŠããŸãã
ãã°åéã¿ã¹ã¯
ã·ã¹ãã èŠä»¶ïŒ
- æ°çŸãã©ãã€ãã®ãã°ã®ã¹ãã¬ãŒãžã
- æ°ã¶æãŸãã¯ïŒãŸãã«ïŒå¹Žéã®ä¿ç®¡ã
- æžã蟌ã¿é床ãéãã
- èªã¿åãé床ãéãïŒèªã¿åãã¯ãŸãã§ãïŒã
- ã€ã³ããã¯ã¹ã®ãµããŒã
- é·ãè¡ïŒ> 4 KbïŒã®ãµããŒãã
- æäœã®ã·ã³ãã«ãã
- ã³ã³ãã¯ããªã¹ãã¬ãŒãžã
- æ°äžå°ã®ãµãŒããŒããæ¿å ¥ããæ©èœïŒUDPã¯ãã©ã¹ã«ãªãã§ãããïŒã
å¯èœãªè§£æ±ºç
æ€èšãããªãã·ã§ã³ãšãã®çæãç°¡åã«ãªã¹ãããŸãããã
ãã°ãšã³ãžã³
ãã°çšã®èªå·±èšè¿°åãã€ã¯ããµãŒãã¹ã
-RAMã«åãŸãæåŸã®Nè¡ã®ã¿ãæäŸã§ããŸãã
-éåžžã«ã³ã³ãã¯ããªã¹ãã¬ãŒãžã§ã¯ãããŸããïŒééå§çž®ãªãïŒã
Hadoop
-ãã¹ãŠã®åœ¢åŒã«ã€ã³ããã¯ã¹ãããããã§ã¯ãããŸããã
-èªã¿åãé床ãé«éã«ãªãå ŽåããããŸãïŒåœ¢åŒã«ãã£ãŠç°ãªããŸãïŒã
-èšå®ã®è€éãã
-æ°äžå°ã®ãµãŒããŒããæ¿å ¥ããå¯èœæ§ã¯ãããŸããïŒKafkaãŸãã¯ã¢ããã°ãå¿ èŠã§ãïŒã
Rsyslog +ãã¡ã€ã«
-ã€ã³ããã¯ã¹ãªãã
-èªã¿åãé床ãé ãïŒéåžžã®grep / zgrepïŒã
-ã¢ãŒããã¯ãã£äžãµããŒããããŠããªãæåå> 4 KbãUDPã¯ããã«å°ããïŒ1.5 KbïŒã
±ã¯ã©ãŠã³äžã§å¯Ÿæ°å転ããããšã§ã³ã³ãã¯ããªã¹ãã¬ãŒãžãå®çŸ
é·æã¹ãã¬ãŒãžã®ãã©ãŒã«ããã¯ãšããŠrsyslogã䜿çšããŸããããé·ãè¡ã¯åãæšãŠããããããçæ³ãšã¯èšãé£ãã§ãã
LSD +ãã¡ã€ã«
-ã€ã³ããã¯ã¹ãªããä»åã®ã±ãŒã¹ã®rsyslogãšã®éãã¯ãLSDãé·ãæååããµããŒãããŠããããšã§ãããäœäžå°ãã®ãµãŒããŒããæ¿å ¥ããã«ã¯å éšãããã³ã«ãå€§å¹ ã«å€æŽããå¿ èŠããããŸãããããã¯å¯èœã§ãã
-èªã¿åãé床ãé ãïŒéåžžã®grep / zgrepïŒã
-æ°äžå°ã®ãµãŒããŒããã®æ¿å ¥çšã«ç¹ã«èšèšãããŠããŸããã
±ã¯ã©ãŠã³äžã§å¯Ÿæ°å転ããããšã«ãããã³ã³ãã¯ããªã¹ãã¬ãŒãžãå®çŸããŸãã
Elasticsearch
-æäœã«é¢ããåé¡ãELKã¹ã¿ãã¯ã¯ããã§ã«ãã°ã¹ãã¬ãŒãžã®ã»ãšãã©ã®æ¥çæšæºã§ãã ç§ãã¡ã®çµéšã§ã¯ããã¹ãŠãèªã¿åãã®é床ã§åé¡ãããŸããããããšãã°ã€ã³ããã¯ã¹ãããŒãžãããšããªã©ãæžã蟌ã¿ã«åé¡ããããŸãã
-äžå®å®ãªé²é³ã
-UDPãªãã
-å§çž®äžè¯ã
ElasticSearchã¯ãäž»ã«å šææ€çŽ¢ããã³æ¯èŒçé »ç¹ãªèªã¿åãèŠæ±çšã«èšèšãããŠããŸãã ç§ãã¡ã«ãšã£ãŠãæ£ç¢ºãªå¶ç¶ã®äžèŽã«ãããå®å®ããèšé²ãšãããŒã¿ãå€ããå°ãªããçŽ æ©ãèªã¿åãèœåãããéèŠã§ãã ElasticSearchã®ã€ã³ããã¯ã¹ã¯å šææ€çŽ¢çšã«ã·ã£ãŒãåãããŠããããã£ã¹ã¯å®¹éã¯å ã®ã³ã³ãã³ãã®gzipãšæ¯èŒããŠéåžžã«å€§ãããªã£ãŠããŸãã
ã¯ãªãã¯ããŠã¹
-UDPãªãã
æŠããŠãClickHouseã§ç§ãã¡ã«åããªãã£ãå¯äžã®ããšã¯ãUDPãä»ããéä¿¡ã®æ¬ åŠã§ããã å®éãäžèšã®ãªãã·ã§ã³ã®ãã¡rsyslogã®ã¿ã«ãããŸããããrsyslogã¯é·ãè¡ããµããŒãããŠããŸããã§ããã
ä»ã®åºæºã«ãããšãClickHouseãç§ãã¡ã®ãšããã«æ¥ãŠãç§ãã¡ã¯ããã䜿çšããããšã«æ±ºãã茞éã®åé¡ã¯ãã®éçšã§è§£æ±ºãããŸããã
KittenHouseãå¿ èŠãªçç±
ãããããåç¥ã®ããã«ãVKontakteã¯PHP / KPHPã§åäœããC / C ++ã®ããšã³ãžã³ãïŒãã€ã¯ããµãŒãã¹ïŒãšGoã§åäœããŸãã PHPã«ã¯ãããããå ±æã¡ã¢ãªãšãªãŒãã³æ¥ç¶ãé€ããŠããªã¯ãšã¹ãéã®ãç¶æ ãã®æŠå¿µã¯ãããŸããã
ClickHouseã«ãã°ãéä¿¡ã§ããããã«ãããµãŒããŒãæ°äžå°ãããããåPHPã¯ãŒã«ãŒããã®éããæ¥ç¶ãç¶æããã®ã¯äžå©ã§ãïŒåãµãŒããŒã«100人以äžã®ã¯ãŒã«ãŒãããå ŽåããããŸãïŒã ãããã£ãŠãClickHouseãšPHPã®éã«ã¯äœããã®ãããã·ãå¿ èŠã§ãã ãã®ãããã·ãKittenHouseãšåŒã³ãŸããã
KittenHouseãv1
ãŸããç§ãã¡ã®ã¢ãããŒããæ©èœãããã©ãããç解ããããã«ãå¯èœãªéãåçŽãªã¹ããŒã ãè©Šãããšã«ããŸããã ãã®åé¡ã解決ãããšãã«ã«ãã«ãæãæµ®ãã¶ãªããããªãã¯äžäººã§ã¯ãããŸããã ãã ããè¿œå ã®äžéãµãŒããŒã䜿çšããããããŸããã§ãã-ãã®å ŽåãClickHouseèªäœã§ã¯ãªãããããã®ãµãŒããŒã®ããã©ãŒãã³ã¹ã«ç°¡åã«äŸåã§ããŸãã ããã«ããã°ãåéãããããããŒã¿æ¿å ¥ã®äºæž¬å¯èœãªããããªé 延ãå¿ èŠã§ããã ã¹ããŒã ã¯æ¬¡ã®ãšããã§ãã

åãµãŒããŒã«ã¯ããŒã«ã«ãããã·ïŒkittenhouseïŒãã€ã³ã¹ããŒã«ãããåã€ã³ã¹ã¿ã³ã¹ã¯å¿ èŠãªClickHouseãµãŒããŒãšã®HTTPæ¥ç¶ãå³å¯ã«1ã€ä¿æããŸãã MergeTreeã¯è²Œãä»ãã«ã¯æšå¥šãããªãããšãå€ãããã貌ãä»ãã¯ã¹ããŒã«ããŒãã«ã§è¡ãããŸãã
KittenHouseãv1ã®æ©èœ
KittenHouseã®æåã®ããŒãžã§ã³ã¯ããªãç¥ã£ãŠããŸãããããã¹ãã«ã¯ããã§ååã§ããïŒ
- RPCïŒTLã¹ããŒã ïŒãä»ããéä¿¡ã
- ãµãŒããŒããšã«1ã€ã®TCP / IPæ¥ç¶ãç¶æããŸãã
- ããã©ã«ãã§ã¯ããããã¡ãµã€ãºãå¶éãããã€ã³ã¡ã¢ãªãããã¡ãªã³ã°ïŒæ®ãã¯ç Žæ£ãããŸãïŒã
- ãã£ã¹ã¯ã«æžã蟌ãæ©èœããã®å Žåãé ä¿¡ã®ä¿èšŒããããŸãïŒå°ãªããšã1åïŒã
- æ¿å ¥ééã¯2ç§ã«1åã§ãã
æåã®åé¡
æåã®åé¡ã¯ãClickHouseãµãŒããŒãæ°æéãè¿æžãããŠããåã³ãªã³ã«ãããšãã«çºçããŸããã 以äžã«ããµãŒããŒããäžæãããåŸã®ãµãŒããŒã®å¹³åè² è·ã瀺ããŸãã

ãã®çç±ã¯éåžžã«åçŽã§ããClickHouseã«ã¯ã¹ã¬ããããšã®ãããã¯ãŒã¯ã¢ãã«ããããããæ°åã®ããŒãããåæã«INSERTãå®è¡ããããšãããšãCPUãªãœãŒã¹ããããæ¿ãã競äºãããããµãŒããŒã¯ã»ãšãã©å¿çããŸããã§ããã ãã ãããã¹ãŠã®ããŒã¿ãæçµçã«æ¿å ¥ãããäœãèœã¡ãŸããã§ããã
ãã®åé¡ã解決ããããã«ãClickHouseã®åã«nginxãé 眮ããŸããããäžè¬çã«ã¯åœ¹ç«ã¡ãŸããã
ãããªãéçº
æäœäžã«ãäž»ã«ClickHouseã§ã¯ãªããæäœæ¹æ³ã«é¢é£ããããã€ãã®åé¡ã«ééããŸããã ããã«ç§ãã¡ãèžã¿èŸŒãã å¥ã®ã¬ãŒãããããŸãïŒ
ãããã¡ãŒããŒãã«ã®ãæçããå€æ°ãããšãMergeTreeã§é »ç¹ã«ãããã¡ãŒããã©ãã·ã¥ããã
ãã®äŸã§ã¯ã16åã®ãããã¡ãŒãš2ç§ããšã«1åã®ãªã»ããééãããã20åã®ããŒãã«ãããã1ç§ãããæ倧160åã®æ¿å ¥ãè¡ãããŸããã ããã¯å®æçã«æ¿å ¥ããã©ãŒãã³ã¹ã«éåžžã«æªã圱é¿ãäžããŸãã-ããã¯ã°ã©ãŠã³ãããŒãžãå€ãããã£ã¹ã¯äœ¿çšçã80ïŒ ä»¥äžã«éããŸããã
解決çïŒããã©ã«ãã®ãããã¡ãŒãªã»ããééãå¢ãããããŒã¹ã®æ°ã2ã«æžãããŸãã
Nginxã¯ãã¢ããã¹ããªãŒã ãšã³ããžã®æ¥ç¶æã«502ãè¿ããŸã
ããèªäœã¯åé¡ã§ã¯ãããŸãããããããã¡ã®é »ç¹ãªãã©ãã·ã¥ãšçµã¿åãããŠãSELECTãå®è¡ããããšãããšãã ãã§ãªããããŒãã«ã«æ¿å ¥ããããšãããšãã«ã502ãšã©ãŒãšããããªãé«ãããã¯ã°ã©ãŠã³ããçºçããŸããã
解決çïŒ fasthttpã©ã€ãã©ãªã䜿çšããŠãªããŒã¹ãããã·ãäœæããŸããã ãã®ã©ã€ãã©ãªã¯ãæ¿å ¥ãããŒãã«ã«ã°ã«ãŒãåããæ¥ç¶ãéåžžã«çµæžçã«æ¶è²»ããŸãã ãŸããSELECTãšINSERTãåºå¥ããæ¿å ¥ãšèªã¿åãçšã®åå¥ã®æ¥ç¶ããŒã«ãåããŠããŸãã

éäžçãªæ¿å ¥ã§ã¡ã¢ãªäžè¶³
fasthttpã©ã€ãã©ãªã«ã¯é·æãšçæããããŸãã æ¬ ç¹ã®1ã€ã¯ããªã¯ãšã¹ããã³ãã©ã«å¶åŸ¡ãäžããåã«ããªã¯ãšã¹ããšã¬ã¹ãã³ã¹ãã¡ã¢ãªã«å®å šã«ãããã¡ãããããšã§ãã ãã®ãããClickHouseãžã®æ¿å ¥ããæéããªãã£ããå Žåããããã¡ãŒãå¢å€§ãå§ããæçµçã«ãµãŒããŒäžã®ãã¹ãŠã®ã¡ã¢ãªãäžè¶³ããOOMã«ãããªããŒã¹ãããã·ã®åŒ·å¶çµäºã«ã€ãªãããŸããã ååã¯ããæ°ãèµ·ããããã

解決çïŒ POSTèŠæ±ã®æ¬æã®ã¹ããªãŒãã³ã°ããµããŒãããããã«fasthttpã«ããããåœãŠãããšã¯å°é£ãªäœæ¥ã§ããããšãå€æãããããèŠæ±ã«HTTPã¡ãœããKITTENãå«ãŸããå ŽåãHijackïŒïŒæ¥ç¶ã䜿çšããŠãããã³ã«ãžã®æ¥ç¶ãã¢ããã°ã¬ãŒãããããšã«ããŸããã ãµãŒããŒã¯å¿çã§MEOWãå¿çããå¿ èŠãããããããã®ãããã³ã«ãç解ããŠããå Žåãã¹ããŒã å šäœã¯KITTEN / MEOWãããã³ã«ãšåŒã°ããŸãã
TCP / IPã®ãããã§ãäžåºŠã«50ã®ã©ã³ãã ãªæ¥ç¶ããããèªã¿åãããšãã§ããŸããããããã£ãŠãæ®ãã®ã¯ã©ã€ã¢ã³ãã¯ãåŸ æ©ããããã¥ãŒãããããã®ã¯ã©ã€ã¢ã³ãã«å°éãããŸã§ãããã¡ã«ã¡ã¢ãªãè²»ãããŸããã ããã«ãããã¡ã¢ãªæ¶è²»ãå°ãªããšã20ååæžããããã®ãããªåé¡ã¯çºçããªããªããŸããã
é·ãã¯ãšãªãããå ŽåãALTERããŒãã«ã¯é·ããªãå¯èœæ§ããããŸã
ClickHouseã«ã¯ãSELECTã¯ãšãªãšINSERTã¯ãšãªã®äž¡æ¹ã®å®è¡ã«å¹²æžããªããšããæå³ã§ãéããããã³ã°ALTERããããŸãã ãã ããALTERã¯ãALTERã®å®è¡ãå®äºããåã«ãã®ããŒãã«ãžã®ã¯ãšãªãéä¿¡ããããŸã§éå§ã§ããŸããã
ãµãŒããŒäžã®ããŒãã«ãžã®ãé·ããã¯ãšãªã®èæ¯ãããå Žåããã®ããŒãã«ã§ALTERãããã©ã«ãã®ã¿ã€ã ã¢ãŠãã§ãã60ç§ã§å®è¡ããæéããªãå ŽåããããŸãã ããããããã¯ALTERããã¹ããªãããšãæå³ãããã®ã§ã¯ãããŸãããSELECTã¯ãšãªãçµäºãããšããã«å®è¡ãããŸãã
ããã¯ãALTERãå®éã«ã©ã®æç¹ã§çºçãããããããªãããšãããã³ãããã¡ããŒãã«ãèªåçã«åäœæãããŠã¬ã€ã¢ãŠããåžžã«åãã«ãªãããšããªãããšãæå³ããŸãã ããã«ãããæ¿å ¥ã®åé¡ãçºçããå¯èœæ§ããããŸãã


解決çïŒçµæãšããŠããããã¡ãŒããŒãã«ã®äœ¿çšãå®å šã«æŸæ£ããäºå®ã§ãã äžè¬ã«ããããã¡ããŒãã«ã«ã¯ã¹ã³ãŒãããããŸãããããŸã§ã®ãšããããããã¡ããŒãã«ã䜿çšããŠããã倧ããªåé¡ã¯çºçããŠããŸããã ããããããããããªããŒã¹ãããã·åŽã§ãããã¡ããŒãã«ã®æ©èœãå®è£ ããæ¹ãããããã®æ¬ ç¹ãææ ¢ãç¶ãããããç°¡åã«ãªããŸããã åè·¯äŸã¯æ¬¡ã®ããã«ãªããŸãïŒç Žç·ã¯INSERTã®ACKéåæã瀺ããŠããŸãïŒã

ããŒã¿ã®èªã¿åã
æ¿å ¥ãç解ãããšããŸãããã ClickHouseãããããã®ãã°ãèªã¿åãæ¹æ³ æ®å¿µãªãããClickHouseããçããŒã¿ãïŒã°ã©ãããã®ä»ã®ãããããªãã§ïŒèªã¿åãããã®äŸ¿å©ã§äœ¿ããããããŒã«ãèŠã€ãããªãã£ããããç¬èªã®ãœãªã¥ãŒã·ã§ã³ã§ããLightHouseãäœæããŸããã ãã®æ©èœã¯ããªãæ§ããã§ãã
- ããŒãã«ã®å 容ã®ã¯ã€ãã¯ãã¥ãŒã
- ãã£ã«ã¿ãªã³ã°ããœãŒãã
- SQLã¯ãšãªã®ç·šéã
- ããŒãã«æ§é ã衚瀺ããŸãã
- ãããã®è¡æ°ãšäœ¿çšãããŠãããã£ã¹ã¯å®¹éã瀺ããŸãã
ãã ããLightHouseã¯é«éã§ãããå¿ èŠãªããšãå®è¡ã§ããŸãã 以äžã«ã¹ã¯ãªãŒã³ã·ã§ãããããã€ã瀺ããŸãã
ããŒãã«æ§é ãèŠã

ã³ã³ãã³ããã£ã«ã¿ãªã³ã°

çµæ
ClickHouseã¯ãäºå®äžãVKontakteã«æ ¹ãããå¯äžã®ãªãŒãã³ãœãŒã¹ããŒã¿ããŒã¹ã§ãã ç§ãã¡ã¯ãã®äœæ¥ã®é床ã«æºè¶³ããŠããã以äžã§èª¬æããæ¬ ç¹ã«å¯Ÿå¿ããæºåãã§ããŠããŸãã
ä»äºã®é£ãã
å šäœãšããŠãClickHouseã¯éåžžã«å®å®ããããŒã¿ããŒã¹ã§ãããéåžžã«é«éã§ãã ãã ããä»ã®è£œåãšåæ§ã«ãç¹ã«è¥ããŠãæ€èšããå¿ èŠãããæ©èœã«ã¯æ¬¡ã®ãããªæ©èœããããŸãã
- ãã¹ãŠã®ããŒãžã§ã³ãåãããã«å®å®ããŠããããã§ã¯ãããŸãããæ¬çªç°å¢ã§æ°ããããŒãžã§ã³ã«çŽæ¥ã¢ããã°ã¬ãŒãããªãã§ãã ãããããã€ãã®ãã°ä¿®æ£ãªãªãŒã¹ãåŸ ã€ããšããå§ãããŸãã
- æé©ãªããã©ãŒãã³ã¹ãåŸãã«ã¯ãæ瀺ã«åŸã£ãŠRAIDãªã©ãèšå®ããããšã匷ããå§ãããŸãã ããã¯æè¿highloadã§å ±åãããŸãã ã
- ã¬ããªã±ãŒã·ã§ã³ã«ã¯é床å¶éãçµã¿èŸŒãŸããŠããªããããèªåã§å¶éããªããšãµãŒããŒã®ããã©ãŒãã³ã¹ãå€§å¹ ã«äœäžããå¯èœæ§ããããŸãïŒãã ããä¿®æ£ãããšçŽæãããŠããŸãïŒã
- Linuxã«ã¯ãä»®æ³ã¡ã¢ãªã¡ã«ããºã ã®äžå¿«ãªæ©èœããããŸãããã£ã¹ã¯ã«ã¢ã¯ãã£ãã«æžã蟌ã¿ãããŒã¿ããã©ãã·ã¥ããæéããªãå Žåãããæç¹ã§ãµãŒããŒãå®å šã«ãèªåèªèº«ã«å ¥ãããããŒãžãã£ãã·ã¥ããã£ã¹ã¯ã«ã¢ã¯ãã£ãã«ãã©ãã·ã¥ãå§ããClickHouseããã»ã¹ãã»ãŒå®å šã«ãããã¯ããŸãã ããã¯å€§èŠæš¡ãªããŒãžã§çºçããå Žåãããããããç£èŠããå¿ èŠããããŸããããšãã°ãå®æçã«èªåã§ãããã¡ããã©ãã·ã¥ããããåæãããããŸãã
ãªãŒãã³ãœãŒã¹
KittenHouseãšLightHouseãgithubãªããžããªã®ãªãŒãã³ãœãŒã¹ã§å©çšå¯èœã«ãªããŸããïŒ
- KittenHouseïŒ github.com/vkcom/kittenhouse
- LightHouseïŒ github.com/vkcom/lighthouse
ãããããé¡ãããŸãïŒ
VKontakteã®ããã¯ãšã³ãã€ã³ãã©ã¹ãã©ã¯ãã£éšéã®éçºè ãYuri Nasretdinov