| ±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜËÕÄþÈ«Á´Â·¼à¿ØÆ½Ì¨Éè¼Æ£¬ÈçºÎ½«
ClickHouse ÄÉÈëÈ«Á´Â·¼à¿ØÆ½Ì¨£¬ClickHouse ¼¯Èº×´Ì¬¼à¿Ø£¬È«Á´Â·¼à¿ØµÄÓÅÊÆºÍÕ¹Íû£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚËѺüÍø£¬ÓÉAlice±à¼¡¢ÍƼö¡£ |
|
¼ò½é
ClickHouse ÊÇÒ»¿îÓÅÐãµÄ OLAP ·ÖÎöÒýÇæ£¬ÓÈÆäÊÇÔÚµ¥±í·ÖÎö ¡¢Colocate Join
·½ÃæÐÔÄܱíÏÖÓÈΪͻ³ö¡£
ClickHouse Ö®ËùÒÔÔÚÖÚ¶àµÄ OLAP ·ÖÎöÒýÇæÖгÉΪٮٮÕߣ¬Ö÷ÒªÊÇÒòΪËü¾ß±¸ÒÔÏÂÌØµã£ºÁÐʽ´æ´¢¡¢LSM-Tree
´æ´¢ÒýÇæ¡¢ÏòÁ¿»¯Ö´ÐÐÒýÇæ¡¢Òì²½ Merge ºÍ Mutation »úÖÆ¡¢²¢·¢ MPP+ SMP µÈ¡£
Ŀǰ£¬ClickHouse ÔÚËÕÄþ´óÊý¾ÝµÄÖ¸±êºÍ±êÇ©µÄÓ¦Óý϶ࣺ
´Ó¼¼Êõ²ãÃæÀ´¿´£¬Ö÷Òª½â¾öµÄ³¡¾°ÓУº¸ß»ùÊýµÄÊý¾Ý·ÖÎö¡¢¾«È·È¥ÖØ¡¢½»»¥Ê½·ÖÎö¡¢¶à±äģʽ²éѯ¡¢´ó¿í±í·ÖÎö¡¢Ê±Ðò»¯Êý¾Ý´æ´¢¡¢ÊµÊ±¾ÛºÏµÄÎﻯÊÓͼµÈ£»
´ÓÒµÎñ²ãÃæÀ´¿´£¬Ö÷ÒªÓ¦Óõij¡¾°ÓУºÐÂÂò¼Ò¡¢ÀÏÂò¼Ò¡¢¸´¹º¡¢Áô´æ¡¢ÊµÊ±Óû§»Ïñ¡¢ÈËȺ°üȦѡµÈ¡£¶ø»ùÓÚ ClickHouse
µÄ RoaringBitmap ·½°¸£¬±£Ö¤ÁËÒÔÉϳ¡¾°Êý¾Ý·ÖÎöµÄʵʱºÍ¸ßЧ¡£
ÔÚ ClickHouse ¼à¿Ø·½Ã棬ĿǰÊÐÃæÉÏÌṩµÄ¿ÉÊÊÅä·½°¸²»¶à£¬³£ÓõÄÓÐ Prometheus
+Grafana+ ClickHouse_Exporter ×éºÏµÄ·½Ê½£¬¿Éͨ¹ýÌṩµÄ Dashboards
À´¼à¿Ø¼¯Èº×´¿ö£¬µ«ÐèÒª°²×° Prometheus ºÍ ClickHouse_Exporter£¬²»±àÒëµÄ»°»¹ÐèÒª°²×°
GO »·¾³ºÍ Docker£¬Õû¸ö¿ò¼Ü¹ýÖØ£¬³É±¾¹ý¸ß£¬¶Ô¸öÐÔ»¯µÄ¼à¿ØÒ²²»Ö§³Ö¡£»¹ÓÐһЩÆäËû¼à¿Ø×é¼þÈç
Graphite + Grafana£¬ÔÚÕâÀï¾Í²»×ö½éÉÜ¡£
ÎÒÃǽ« ClickHouse ÈÚÈëËÕÄþÈ«Á´Â·¼à¿ØÉú̬Ìåϵ£¬ÔÚÍêÉÆ¼à¿ØÌåϵµÄͬʱ£¬Ò²Ö§³ÅÁ˸öÐÔ»¯µÄ¼à¿Ø£¬½øÒ»²½ÍØÕ¹ÁËÈ«Á´Â·¼à¿ØÆ½Ì¨µÄÉî¶ÈºÍ¹ã¶È¡£
Ò»¡¢ËÕÄþ´óÊý¾ÝÈ«Á´Â·¼à¿ØÆ½Ì¨
1¡¢ËÕÄþÈ«Á´Â·¼à¿ØÆ½Ì¨½éÉÜ

ͼ 2-1 È«Á´Â·¼à¿Ø¼Ü¹¹
ËÕÄþ´óÊý¾ÝÖÐÐÄÊý¾ÝÖÐ̨ÓÐÒ»ÕûÌ×ÍêÉÆµÄÖ¸±ê½¨ÉèÌåϵ£¬°üº¬ÁËÖ¸±êÉúÃüÖÜÆÚ¹ÜÀí¡¢Ö¸±ê·ÖÎöÌåϵÒÔ¼°Êý¾Ý¿ìËÙ¿ÉÊÓ»¯Æ½Ì¨£¬Êý¾Ý·ÖÎöʱ¿çÔ½¿ÉÊÓ»¯Æ½Ì¨¡¢Ö¸±ê·þÎñƽ̨¼°
OLAP ·ÖÎöÒýÇæÈý´óƽ̨£¬²éѯÁ´Â·½Ï³¤¡£Èç¹ûûÓÐÒ»Ì×ÍêÕûµÄÈ«Á´Â·¼à¿Ø·ÖÎöƽ̨£¬¶ÔÓÚ¶¨Î»ÎÊÌâ»á´æÔڽϴóµÄÀ§ÄÑ¡£
È«Á´Â·¼à¿ØÕûÌåµÄÉè¼ÆË¼ÏëÊǽ«Ò³ÃæµÄÿ´Î http ÇëÇóÉú³ÉΨһµÄÁ÷Ë®ºÅ (serialId)£¬ºóÐøÃ¿·ÃÎÊÒ»´ÎÖ¸±ê¹ÜÀíϵͳ£¬Éú³ÉΨһµÄ
traceId£¬Ã¿´Îµ÷Óà OLAP ½Ó¿ÚÉú³ÉΨһµÄ olapId£¬ÕâÑù 1 ¸öÁ÷Ë®ºÅ¶ÔÓ¦¶à¸ö traceId£¬¹ØÁª¶ÔÓ¦ºóÐø¶à¸ö
olapId£¬ÐγÉÒ»¸öÊ÷×´ÇëÇó£¬ÒԴ˵õ½Ò»¸öÍêÕûµÄÇëÇóÁ´Â·¡£
¾ßÌåÉè¼ÆÈçÏ£º
±¨±íÉè¼ÆÏµÍ³ºó¶ËÕë¶Ô±¨±íǰ¶ËµÄÿ´ÎÇëÇóÉú³ÉΨһ traceId£¬Õë¶ÔÇëÇóµÄÿһ²½Éú³É²ã¼¶¹ØÏµµÄ spanId£¬²¢ÏòÖ¸±ê¹ÜÀíϵͳ͸´«
traceId ºÍ¶ÔÓ¦µÄ spanId£»
Ö¸±ê¹ÜÀíϵͳ½ÓÊÜÇëÇóºó£¬¸ù¾ÝÊáÀíµÄ²éÑ¯È¨ÖØ¼ÆË㷽ʽÉú³É¡°²éÑ¯È¨ÖØ¡±priority£¬ÔÚ±¨±íÉè¼ÆÏµÍ³µÄ
spanId »ù´¡ÉϼÌÐøÉú³Éµ÷Óò㼶¹ØÏµµÄ spanId£¬²¢Ïò OLAP ͸´« traceId ºÍ¶ÔÓ¦µÄ
spanId£»
Spark RDD ʵÏÖ½« Druid¡¢PostGreSQL ºÍ ClickHouse ÖÐµÄ queryId
Óë Spark worker ÖÐµÄ StageID ÒÔ¼° JobID ¹ØÁªÆðÀ´£»
OLAP ½ÓÊÜÇëÇóºó£¬ÔÚÖ¸±ê¹ÜÀíϵͳµÄ spanId »ù´¡ÉϼÌÐøÉú³Éµ÷Óò㼶¹ØÏµµÄ spanId£¬²¢Ïò
OLAP ÒýÇæ²ã͸´« traceId ºÍ¶ÔÓ¦µÄ spanId£»
OLAP ·ÖÎöÒýÇæ²ã£¬Í¨¹ý´òͨ traceId ºÍ¸÷×Ô·ÖÎöÒýÇæÖ´Ðз¾¶µÄ·½Ê½£¬ÊµÏÖ¸ú×Ù¸÷Ö´Ðмƻ®¡¢Ö´Ðз¾¶µÄºÄʱ¡£ÀýÈ磬¿Éͨ¹ý
bigQueryId Óë Druid ¹ØÁª£¬¶ø PostGreSQL ºÍ ClickHouse Ôò¿ÉÒÔͨ¹ý
traceId Ó³Éäµ½ÒýÇæÄÚ²¿µÄ·½Ê½½øÐйØÁª¡£
2¡¢ ÈçºÎ½« ClickHouse ÄÉÈëÈ«Á´Â·¼à¿ØÆ½Ì¨
ClickHouse È«Á´Â·¼à¿Ø¸²¸Ç·¶Î§½Ï¹ã£¬°üÀ¨£º²éÑ¯Éæ¼°µ½µÄ½Úµã¡¢·ÖƬ¡¢¸¸²éѯºÍ×Ó²éѯµÄ¹ØÏµ¡¢ÔÚ¸÷¸ö½ÚµãµÄ²éѯºÄʱ¡¢ÇëÇóÄÚ´æÊ¹Óᢸ߷åʹÓÃÄÚ´æ¡¢CPU
ʹÓÃÊý¡¢²éѯÐÐÊý¡¢MergeTree ʹÓÃ×´¿ö¡¢²éѯ·½Ê½£¨TCP/HTTP£©ÒÔ¼°²ÎÓë²éѯÏß³ÌÊýµÈ¡£
ÔÚµ÷Óà ClickHouse Ìṩ·þÎñ²éѯ£¨spark-jdbc£©µÄʱºò£¬ÈçºÎ½« traceId
͸´«¸ø ClickHouse µÄ query_id ÄØ?
ʵÏÖÈ«Á´Â·¼à¿Ø£¬Ö÷ÒªÊÇͨ¹ý traceId ¹á´©Õû¸öÁ´Â·¡£±í system.processes ºÍ±í
system.query_log ÖÐµÄ query_id ÊÇËæ»úÉú³ÉµÄ£¬ClickHouse µÄ query_id
Ö§³Ö×Ô¶¨Ò壬¿É½«×Ô¶¨ÒåµÄ query_id Ó³É䵽ϵͳ×ÔÉú³ÉµÄ query_id ÉÏ£¬ÕâÑù ClickHouse
ÄÚ²¿µÄ¼à¿Ø¾ÍÄÜÓëÈ«Á´Â·´òͨ£¬¾ßÌå²Ù×÷ÈçÏ£º
ClickHouse-client --port 1***5 --time --format=Null
--query="select count() from aggr_member"
--query_id="suning20200706¡° echo 'select count()
from aggr***member' | curl 'http://localhost:8**3/?query_id=suning2020&query='
--data-binary @-
¶þ¡¢ClickHouse Âý²éѯ¼à¿Ø
1¡¢ÊµÊ±Âý²éѯ¼à¿Ø

ͼ 3-1 ʵʱÂý²éѯ¼à¿Ø
¸¸½Úµã²éѯ ID(initial_query_id) ÊÇ´ÓÉÏÓÎϵͳ´«ÈëµÄ traceId£¬´Ë´Î²éѯµÄËùÓÐ×Ó²éѯ¾ù¿É¸ù¾Ý
traceId »ñÈ¡£¬¿ÉÒÔʵʱ·ÖÎöij´Î²éѯÔÚ¼¯ÈºÖи÷¸ö½ÚµãµÄ״̬£¬ÆäÖаüÀ¨²éѯ query_id µÄ¸¸×Ó¹ØÏµ¼°¶ÔÓ¦µÄ½ÚµãÐÅÏ¢¡¢¸÷¸ö½ÚµãµÄ²éѯ½Å±¾¡¢²éѯºÄʱ¡¢¶ÁÈ¡µÄÐÐÊý¡¢ÇëÇóʹÓõÄÄÚ´æ¡¢¸ß·åʹÓõÄÄÚ´æ¡¢²ÎÓë²éѯµÄÏß³ÌÊý¡¢user¡¢ProfileEvents¡¢Settings
µÈ¡£

ͼ 3-2 µ¥´Î²éѯÄÚ´æ /CPU/MergeTree/ ºÄʱ TOPN ¼à¿Ø
ͼ 3-2 չʾ¸÷¼¯ÈºÖеÄÂý²éѯ TOPN¡¢µ¥´Î²éѯÄÚ´æÊ¹Óà TOPN¡¢µ¥´Î²éѯ CPU ʹÓÃÊý
TOPN¡¢MergeTree ºÄʱ TOPN£¬Ö§³Ö¶Ô³¬¹ýÔ¤ÆÚãÐÖµµÄ²éѯ½øÐи澯¡£
2¡¢ÀúÊ·Âý²éѯ¼à¿Ø

ͼ 3-3 ÀúÊ·Âý²éѯ¼à¿Ø
ClickHouse ĬÈϵÄÇé¿öÏ query_log ±íÊÇ먦ÆôµÄ״̬£¬±ØÐ뽫Æä¿ªÆô£¬ÐÞ¸ÄÅäÖÃÎļþ
users.xml£¬Â·¾¶Îª /etc/clickhouse-server/£¬ÐÂÔöÅäÖÃÏî<log_queries>1</log_queries>£¬µ±²éѯÈÕÖ¾·þÎñÆ÷²ÎÊýlog_queries=1
ʱ£¬ClickHouse ²Å»á´´½¨´Ë±í¡£
ÿ¸ö²éѯÔÚ query_log ±íÖлᴴ½¨Ò»Ìõ»òÁ½Ìõ¼Ç¼£¬¾ßÌåÈ¡¾öÓÚ²éѯµÄ״̬£º
Èç¹û²éѯִÐгɹ¦£¬Ôò»á·Ö±ð´´½¨Ê¼þÀàÐÍΪ 1 ºÍ 2 µÄÁ½Ìõ¼Ç¼£»
Èç¹ûÔÚ²éѯ´¦ÀíÆÚ¼ä·¢Éú´íÎó£¬Ôò»á·Ö±ð´´½¨Ê¼þÀàÐÍΪ 1 ºÍ 4 µÄÁ½Ìõ¼Ç¼£»
Èç¹ûÔÚ²éѯÆô¶¯Ö®Ç°·¢Éú´íÎó£¬Ôò»á´´½¨Ê¼þÀàÐÍΪ 3 µÄµ¥Ìõ¼Ç¼£»
±í query_log ÖеļǼ£¬´æ´¢µÄÊÇÀúÊ·²éѯÔÚ¼¯ÈºÖеĸ÷¸ö½ÚµãµÄ״̬£¬ÆäÖаüÀ¨²éѯ query_id
µÄ¸¸×Ó¹ØÏµ¼°¶ÔÓ¦µÄ½ÚµãÐÅÏ¢¡¢¸÷¸ö½ÚµãµÄ²éѯ½Å±¾¡¢²éѯ¿ªÊ¼Ê±¼ä¡¢²éѯÈÕÆÚ¡¢²éѯʱ¼ä¡¢²éѯºÄʱ¡¢²éѯÐÐÊý¡¢²éѯ½á¹ûµÄ×Ö½Ú´óС¡¢ÇëÇóʹÓõÄÄÚ´æ¡¢¸ß·åʹÓõÄÄÚ´æ¡¢²ÎÓë²éѯµÄÏß³ÌÊý¡¢¶ÑÕ»¸ú×ÙÒÔ¼°²éѯÒì³£ÐÅÏ¢µÈ¡£
3¡¢MergeTree ¼à¿Ø

ͼ 3-4 MergeTree »ù´¡±íÒýÇæ
MergeTree ±íÖÐÊý¾Ý´æ´¢ÔÚ Part ÖУ¬µ±²åÈëÊý¾ÝµÄʱºò£¬»á½«Êý¾Ý´´½¨ÔÚÒ»¸öÐ嵀 Part
ÖУ¬Part µÄÊýÁ¿´ú±í×ÅÌá½»µÄƵÂÊ¡£ºǫ́»á½øÐÐÒì²½µÄ Merge ¹ý³Ì£¬½«Ð¡µÄ Part ½øÐкϲ¢£¬²¢ÇÒ»áÏà¶Ô¾ùºâµÄƽºâºÃºÏ²¢ËٶȺÍ
Part ÊýÁ¿µÄ¹ØÏµ¡£
¶ÔÓÚÿ¸ö Part ¾ù»áÉú³ÉÒ»¸öË÷ÒýÎļþ£¬Ë÷ÒýÎļþ´æ´¢µÄÊÇÿ¸öË÷Òý¿éÊý¾ÝÖ÷¼üµÄ value Öµ¡£¶ÔÓÚ
MergeTree µÄ¼à¿Ø£¬Ö÷Òª¼à¿Ø MergeTree µÄÒì³£Çé¿ö£¬¸ù¾ÝÒì³£ÐÅÏ¢½øÐи澯¡£
4¡¢Âý²éѯ¹éÒò·ÖÎö
ͨ¹ýÒÔÉÏµÄ¼à¿Ø£¬¿ÉÒÔ¿ìËÙ¶¨Î»³öÂý²éѯ¡£µ¼ÖÂÂý²éѯµÄÔÒò¿ÉÄÜÓкܶ࣬¿ÉÒÔ´ÓÈçϼ¸¸ö·½Ãæ½øÐзÖÎö£º
ÅжϲéѯµÄÊý¾ÝÊÇ·ñ´æÔÚ page cache ÖУ¬´Ó page cache »ñÈ¡Êý¾ÝËÙ¶ÈÔ¶¸ßÓÚ´ÅÅÌ£»
¸ß»ùÊýµÄ¾ÛºÏ»òÅÅÐò¶Ô²éѯЧÂÊÓ°Ïì½Ï´ó£¬JOIN ²Ù×÷ʱӦ½«Ð¡±í·ÅÓұߣ¬·ÖÇø×ֶβ»Ò˹ý¶à£¬µ¼ÈëÊý¾Ýʱºò×îºÃ¶ÔÊý¾Ý½øÐÐÊÂÏÈÅÅÐò£»
Ó°ÏìÐÔÄÜ×î¹Ø¼üµÄÖ¸±êÊÇ CPU ºÍÄڴ棬CPU ³¬¹ý 70% Ôò¿ÉÄÜ»á³öÏÖ´ó·¶Î§µÄ²éѯ³¬Ê±¡£ÁíÍâÐèÒª¹Ø±ÕÐéÄâÄڴ棬·ñÔòÎïÀíÄÚ´æºÍÐéÄâÄÚ´æ¿ÉÄÜ»á½øÐÐÊý¾Ý½»»»£¬´Ó¶øµ¼Ö²éѯ±äÂý£»ClickHouse
¶Ô¸ß²¢·¢Ö§³Ö²»Ì«ÓѺã¬ÐèÒª¶Ôµ¥¸ö²éѯµÄ×ÊÔ´¼ÓÒÔÏÞÖÆ£¬·ñÔò»áÓ°Ï쵱ǰÆäËü²éѯµÄÖ´ÐÐЧÂÊ¡£
ÒÔÉÏÊdz£¹æµÄÂý²éѯÔÒò·ÖÎö£¬¶øÓÐЩ¸´ÔÓ¡¢¸ß»ùÊýµÄ²éѯ¿Éͨ¹ýÇÉÃîµÄÉè¼Æ·½Ê½£¬´ïµ½¸ßЧ²éѯµÄÄ¿±ê¡£
ÔÚ»ùÓÚ ClickHouse ¼ÆËã»áÔ±ÐÂÂò¼Ò¡¢ÀÏÂò¼ÒÊý¡¢¸´¹º¡¢Áô´æµÈ³¡¾°µÄʱºò·¢ÏÖ£¬Èç¹ûÓûáÔ± ID
½øÐÐ HASH ·ÖƬºóÔÙ×ö RoaringBitmap ¼ÆË㣬×îºóÔÙ½«Ã¿¸ö·ÖƬµÄ¼ÆËã½á¹û»ã×Ü£¬ÆäÖ´ÐÐЧÂʽ«Ìá¸ßÊý±¶¡£
ÁíÍâÔÚ¼ÆËã´¿ÐÂÂò¼ÒºÍ´ÎÐÂÂò¼ÒµÄʱºò£¬Í¨¹ýÔÚ×Ó²éѯÖÐʹÓà ClickHouse-CTE µÄ WITH
·½Ê½£¬Í¬Ñù¿ÉÒԴﵽʵʱ¡¢¸ßЧµÄ²éѯĿ±ê¡£
Èý¡¢ClickHouse ¼¯Èº×´Ì¬¼à¿Ø
1¡¢¼¯Èº¡¢½Úµã״̬¼à¿Ø
¿É¶Ô¼¯Èº¡¢½ÚµãµÄ²éѯ״̬½øÐÐ¼à¿Ø£¬Èç³É¹¦´ÎÊý¡¢Òì³£´ÎÊýºÍʧ°Ü´ÎÊý£¬²¢ÇÒ¸ù¾ÝÉ趨µÄãÐÖµ¶Ôʧ°Ü»ò³¬Ê±µÄ²éѯ½øÐÐÔ¤¾¯¡£
ͬʱ¿É¶Ô¸÷¸ö½ÚµãµÄÁ¬½ÓÊý¡¢CPU ʹÓÃÂÊ¡¢ÄÚ´æÊ¹ÓÃÂÊ¡¢FileOpen¡¢¸ù·ÖÇøÊ¹ÓÃÂÊÒÔ¼°×î´ó·ÖÇøÊ¹ÓÃÂʽøÐÐ¼à¿Ø¡£
2¡¢¼¯Èº¡¢½Úµã¡¢·ÖƬ QPS ºÍÁ¬½ÓÊý¼à¿Ø

ͼ 4-1 ¼¯Èº¡¢½Úµã¡¢·ÖƬ QPS ¼à¿Ø

ͼ 4-2 ¼¯Èº¡¢½Úµã¡¢·ÖƬÁ¬½ÓÊý¼à¿Ø
ClickHouse µÄ¼ÆËãºÍ´æ´¢ÊÇÒ»ÌåʽµÄ£¬²¢Î´×ö×ÊÔ´¸ôÀ룬ΪÁËÌá¸ßϵͳµÄ²¢·¢ÄÜÁ¦£¬¿ÉÒÔ½«Êý¾Ý±£´æÎª¶à¸ö¸±±¾£¬Ã¿¸ö¸±±¾²¿Êðµ½²»Í¬µÄ½ÚµãÉÏ£¬ÔÙͨ¹ý
Chproxy ·Óɵ½²»Í¬µÄ½Úµã½øÐвéѯ¡£
ΪÁ˱£Ö¤¼¯ÈºµÄ³ÖÐøÎȶ¨¡¢¿ÉÓã¬ÐèÒª¶Ôµ¥¸ö²éѯµÄ×ÊÔ´ÒÔ¼°¼¯Èº×î´óÖ§³ÖµÄ²¢·¢½øÐÐÏÞÖÆ£¬¾ßÌ巽ʽÈçÏ£º
¼¯ÈºÍ¬Ê±Ö§³ÖµÄ×î´ó²¢·¢Á¬½ÓÊý¿Éͨ¹ý Max_Concurrent_queries À´ÉèÖã¬Ä¬ÈÏΪ
100£»
Ò»¸ö²éѯÔÚµ¥Ì¨·þÎñÉÏ×î´óʹÓõÄÄÚ´æ¿Éͨ¹ý Max_memory_usage À´ÉèÖã»
µ¥¸ö½ÚµãÉÏËùÓвéѯµÄ×î´óÄÚ´æÏÞÖÆÊÇ¿Éͨ¹ý Max_memory_usage_for_all_queries
À´ÉèÖã»
µ¥´Î²éѯµÄ×ִÐÐʱ¼ä¿Éͨ¹ý Max_execution_time À´ÉèÖá£
3¡¢¼¯Èº¡¢½Úµã¡¢·ÖƬ¿ÉÓÃÐÔ¼à¿Ø
¾ßÌå¿ÉÒÔͨ¹ý HTTP API ¼àÊÓ·þÎñÆ÷µÄ¿ÉÓÃÐÔÀ´ÊµÏÖ¡£Í¨¹ý HTTP GET ÇëÇóºó£¬Èç¹û·þÎñÆ÷¿ÉÓã¬Ôò·µ»Ø
200 OK£¬·ñÔò·µ»ØÒì³£ÏûÏ¢¡£
´Ë´¦ÐèÒªÓиö¸æ¾¯ÅäÖÃ¼à¿ØÏһµ©¼à²âµ½½Úµã²»¿ÉÓ㬿ɼ°Ê±Í¨ÖªÏà¹Ø¼¼ÊõÈËÔ±½øÐÐά»¤£¬ÆäÖи澯ÐÅÏ¢¿Éͨ¹ý¶ÌÐÅ¡¢ÓʼþµÈ·½Ê½½øÐÐÍÆËÍ¡£
4¡¢È«Á´Â· Replicas Delay ¼à¿Ø

ͼ 4-3 Replicas Delay ¼à¿Ø
Random ·Ö²¼Ê½Ëæ»úѡȡ¸±±¾ÓÐËÄÖÖËã·¨£º
Random£ºÑ¡È¡¸±±¾µÄĬÈÏ·½Ê½£¬¸ÃËã·¨Ö÷ÒªÊÇͨ¹ý¼ÆË㸱±¾µÄ´íÎóÊýÁ¿£¬²éѯ·¢Ë͵½³ö´í×îÉٵĸ±±¾£¬µ«ÕâÖÖË㷨ûÓп¼Âǵ½·þÎñ½ÚµãÊÇ·ñÏàÁڵij¡¾°£»
In order£ºÑ¡È¡¸±±¾µÄ·½Ê½ÊǸù¾ÝÅäÖÃÖÐÖ¸¶¨µÄ˳Ðò£»
First or random£ºÑ¡Ôñ¼¯ºÏÖеÚÒ»¸ö¸±±¾£¬Èç¹ûµÚÒ»¸ö¸±±¾²»¿ÉÓã¬ÔòËæ»ú½øÐи±±¾Ñ¡Ôñ£»
Nearest hostname£ºÃ¿¸ô 5 ·ÖÖÓ¼ÆË㸱±¾µÄ´íÎóÊýÁ¿£¬Èç¹û¸±±¾µÄ´íÎóÊýÁ¿×îÉÙ£¬Ôò½«²éѯ·¢Ë͸øËü¡£
¸±±¾ÔÊÐíµÄ×ÑÓ³Ùʱ¼ä£¬¿Éͨ¹ý²ÎÊý max_replica_delay_for_distributed_queries
À´ÉèÖ㻸±±¾µÄÑÓ³Ùʱ¼ä£¬¿ÉÒÔʹÓà HTTP resource /replicas-delay À´²éѯ£¬²»ÑÓ³ÙÔò·µ»Ø
200 OK£¬ÑÓ³ÙÔò·µ»ØºÍĬÈÏʱ¼äµÄ²î¾à¡£
5¡¢È«Á´Â· Chproxy ¼à¿ØÐÅÏ¢

ͼ 4-4 ClickHouse Manger ¹¤×÷Á÷³Ì
ClickHouse µÄ Http ´úÀíºÍ¸ºÔؾùºâÆ÷ÊÇ Chproxy£¬ËÕÄþͨ¹ý ClickHouse
Manger À´¹ÜÀí Chproxy ×é¼þµÄÆô¶¯¡¢Í£Ö¹¡¢¹ö¶¯Éý¼¶ÒÔ¼°¼à¿Ø£¬²¢Í¨¹ý ZK Ïò Chproxy
ͬ²½ÅäÖÃÊý¾Ý¡£
ClickHouse ¼¯Èº¿ÉÒÔ²¿Êð¶à¸ö Chproxy ʵÀý£¬¿Í»§¶ËÁ¬½Ó ClickHouse ¼¯ÈºµÄ´úÀí·þÎñºó£¬Í¨¹ý¶Ô²éѯ
SQL ½âÎö£¬ÖÇÄܵĽøÐиºÔؾùºâ¡£Í¬Ê±£¬Chproxy Ò²Ö§³ÖˮƽÀ©Õ¹¡£
Chproxy ÄÜ¼à¿Øµ½µÄÖØµãÖ¸±êÓУº¼¯ÈºÇëÇó¶ÓÁдóС¡¢Ô¶³Ì¿Í»§¶ËÁ¬½ÓÊý¡¢²éѯ×ÜÇëÇóÊý¡¢È¡ÏûÇëÇóÊý¡¢±»¾Ü¾øÇëÇóÊý¡¢»º´æÃüÖÐÇé¿ö¡¢¼¯ÈººÍ½Úµã½¡¿µ×´Ì¬µÈ£¬ËÕÄþÈ«Á´Â·¼à¿ØÆ½Ì¨¿É¶ÔÉÏÊöÖØµãÖ¸±ê½øÐÐ¼à¿Ø¡£
ËÄ¡¢È«Á´Â·¼à¿ØµÄÓÅÊÆºÍÕ¹Íû
È«Á´Â·¼à¿ØÆ½Ì¨ÍØÕ¹ÁËÎÒÃÇ¼à¿ØÏµÍ³ÄÜÁ¦µÄÉî¶ÈºÍ¹ã¶È£¬Í¬Ê±Îª ClickHouse µÄ×ÊÔ´¸ôÀëºÍ·þÎñ»¯ÌṩÁ˲ο¼¡£
È«Á´Â·¼à¿ØÆ½Ì¨Ä¿Ç°ÒѾ½«Êý¾ÝÓ¦Óò㡢SparkSQL ½âÎö²ã¡¢OLAP ·ÓɼÓËÙ²ãÒÔ¼°Êý¾Ý¼ÓËÙ²ãÈ«²¿¹á´©£¬Óû§·¢ÆðµÄÇëÇóÔÚ¸÷¸ö½×¶ÎµÄºÄʱһĿÁËÈ»¡£
ÎÒÃÇÄܰѸ÷¸ö OLAP ·ÖÎöÒýÇæÄÚ²¿Ö´ÐеĺÄʱ£¬Í¨¹ýͳһµÄ queryId ÄÉÈëµ½ËÕÄþÈ«Á´Â·¼à¿ØÆ½Ì¨£¬ÐγÉÒ»ÌõÍêÕûµÄÖ´ÐкÄʱ¼à¿ØÁ´Â·¡£¸÷½×¶ÎÔ¤ÉèµÄ³¬Ê±Ô¤¾¯£¬»áÔÚµÚһʱ¼ä֪ͨÏà¹ØÔðÈÎÈË£¬ÕâÖÖ·½Ê½¶ÔÎÊÌⶨλ¡¢Ö÷¶¯Ô¤¾¯¶¼Æðµ½ÁËÖØÒªµÄ×÷Óã¬Í¬Ê±¸ø¼à¿ØÔËά´øÀ´Á˼«´óµÄ±ãÀû¡£
ÔÚ OLAP ·Óɲ㣬ÎÒÃÇÒѾ¶Ô½ÓÁË Druid¡¢Elasticsearch¡¢PostGreSQL
ÒÔ¼° ClickHouse ·ÖÎöÒýÇæ£¬ºóÐøÎÒÃǽ«¶Ô½ÓÆäËü¸ü¶àµÄ OLAP ·ÖÎöÒýÇæ£¬Èç Doris¡¢Dremio
ºÍ RocksDB µÈ£¬Í¬Ê±ÎÒÃÇÒ²½«³ÖÐøÏ¸»¯¡¢·ÖÎö¸÷ÒýÇæÄÚ²¿Ö´Ðн׶εĺÄʱÇé¿ö£¬¶ÔÈ«Á´Â·¼à¿ØÄÜÁ¦½øÐиü½øÒ»²½µÄÓÅ»¯ÌáÉý¡£
|