ä½è | ç°ç»´ç¹
çå | æå¬æ¢
ä½è ï½ç°ç»´ç¹ï¼ç½æ游æå ³ç³»åæ°æ®åºå°ç»è´è´£äºº
ç½æ游æä½ä¸ºä¸å½é¢å ç游æå¼åå ¬å¸ä¹ä¸ï¼ä¸ç´å¤äºç½ç»æ¸¸æèªä¸»ç åé¢åçå端ãç½æ游æç产å以åå¨è¾¹äº§å线ä¼å¤ï¼éè¦ä¸åçæ°æ®å¤ç产åæ¥æ»¡è¶³ä¸åçä¸å¡åºæ¯ãç½æ游æçæ°æ®åºå¢é主è¦é¢åç½æ游æå é¨æä¾ä¸ç«å¼çæ°æ®åºç§æäºæå¡ï¼æä¾ä¼å¤æ°æ®åºäº§å以满足ç½æ游æ对æ°æ®åºäº§åçéæ±ã
尽管ç½æ游æå·²æ¥ææ¯è¾å ¨é¢çæ°æ®åºäº§åç©éµï¼ä½æ¯ç§æ°æ®åºäº§åå¨ç¹å®ä¸å¡åºæ¯ä¸é½æå ¶ææ¾çä¼å¿åå±éæ§ï¼é´äºæ们å é¨æ¶µççä¸å¡åºæ¯å¤æ ·ä¸å¤æï¼æ们ææè½å¤æ ¹æ®å ·ä½çä¸å¡åºæ¯éæ±çµæ´»éæ©éåçæ°æ®åºäº§åãå¨æ¤èæ¯ä¸ï¼ä¸ºäºè§£å³ç¹å®ä¸å¡é®é¢ï¼æä»¬å° OceanBase å¼å ¥äºç½æ游æã
ä¸å¡æ¶æåä¸å¡ç¹æ§éæ±
ä¸å¾æ¯ç½æ游ææä¸å¡å¹³å°å½åä½¿ç¨ MySQL çæ°æ®åºæ¶æï¼éçç³»ç»æ¿æ¥çä¸å¡æ°æ®éå请æ±æ°çä¸æå¢å ï¼è¯¥æ¶æéæ¸æ¼å为 MySQL ç»å ¸çä¸ä¸»å¤ä»æ¶æï¼éè¿ä¸»å¤åºæ¥äºåä½ä¸ªä»åºæ¥è´è´£ä¸å¡è¯»è¯·æ±ã
ç¶èï¼è¿æ ·çä¸å¡æ¶æåå¨ä»¥ä¸å个çç¹ï¼
- 并åéé«ï¼å¯¹å»¶è¿ææï¼å¨é«å³°æï¼ä¸»åºè¯·æ±éè¾¾å°æ¥è¿åä¸ QPSï¼å个ä»åºè¯»ç请æ±ä¹å¨å ä¸å·¦å³ï¼ææä»åºçæ» QPS å¨é«å³°ææ¥è¿ç¾ä¸ï¼æ´ä½å¹¶åéé«ï¼æ们çä¸å¡å¯¹å»¶è¿æ为ææï¼ä¸è½å®¹å¿æ³¢å¨ã
- ååºåå¨ç©ºé´åå大ï¼åèç¹çåå¨ç©ºé´å·²ç»è¶ è¿åå TB 以ä¸ï¼å¯¹äºå¤çé«å¹¶å TP ä¸å¡ç MySQL æ¥è¯´ï¼è¿æ ·çååæ¯é常巨大çã
- ä»åºæ°æ®å®æ¶æ§è¦æ±ï¼ä»åºæ°æ®å®æ¶æ§è¦æ±å¾é«ï¼ä¸æ¦ä»åºåºç°æ ¢æ¥è¯¢æå ¶ä»æ åµå½±åå°ä»åºå»¶è¿ï¼ä¼å¯¹ä¸å¡é ææ大影åã
- è¿ç»´å°é¾ï¼è¿ç»´å·¥ä½ä¹é¢ä¸´å¾å¤§çææï¼å¨çªåæµéçæ åµä¸ï¼å³ä½¿ä½¿ç¨é¡¶çº§é ç½®ç MySQL åªè½éè¿å¢å å®ä¾çæ¹å¼æ¥ç¼è§£ååãå¦å¤ï¼å¦æå个åªè¯»ä»åºåºç°æ éï¼å°±éè¦è¿è¡å®ä¾é建çæä½ãç±äº MySQL å®ä¾çæ°æ®éå¾å¤§ï¼æ©å®¹ä»åºãå¤ä»½æ¢å¤é½éè¦è费大éæ¶é´ï¼è¿å¯¹ä¸å¡æ¥è¯´æ¯é¾ä»¥æ¥åçã
为äºè§£å³ä¸è¿°é®é¢ï¼æ们迫åéè¦ä¸æ¬¾å¯ä»¥å¹³æ»æ¨ªåæ©å±ä¸æ§è½ç¨³å®çåå¸å¼æ°æ®åºãåæ¶ï¼èèå° MySQL éè¦å¯¹ç©ºé´å ç¨å¤§çæ°æ®è¿è¡å½æ¡£ï¼å¹¶ä¸å½æ¡£æ¶æ¥è¯¢éæ大ï¼å æ¤æ们éè¦åå¸å¼æ°æ®åºä¿è¯å¨æ©å±çåæ¶è½å¤æ¿è½½å¤§æ¹éæ¥è¯¢ï¼ä¸å¨åä¸å¥æ°æ®åºé群ä¸çä¸å¡é´äºä¸å½±åãæ们å¸æè¿æ¬¾æ°æ®åºä¸ä» è½å¤ä¿è¯æ§è½ï¼è¿è½å¤éä½ææ¬ã
ç»è¿æ¢³çï¼æ们对åå¸å¼æ°æ®åºçéæ±ä¼å 级ä»é«å°ä½æåºå¦ä¸ï¼
- æ§è½ç¨³å®ï¼ä¸å¡å¯¹æ¥è¯¢å»¶è¿é常ææï¼éè¦æ°æ®åºè¿è¡ç¨³å®ï¼å ä¹ä¸åºç°æå¨ï¼å¹¶ä¸ä¸ä¼ææ ¢æ¥è¯¢çé®é¢ã
- æ¯æé«å¹¶åï¼æ»¡è¶³é«å³°æ主åºè¯·æ±æ¥è¿åä¸ QPSï¼ææä»åºæ¥è¿ç¾ä¸è¯»è¯·æ±çé«å¹¶åè¦æ±ã
- å¹³æ»æ©å±ï¼åæºåå¨ç©ºé´éè¦è¶³å¤å¤§ï¼å¯æ¯ææªæ¥æ°æ®æç»å¢é¿ã
- ä½å»¶è¿ï¼æ¯æä¸å¡ç§çº§åæ¥ä¸»åºã
- ä½ææ¬ï¼å æ°æ®éè¾å¤§ï¼ææéä½è¿è¡ææ¬ã
为ä½å¼å ¥ OceanBase
å¨äºè§£ OceanBase åå¸å¼æ°æ®åºçæ¶åï¼æ们åç°å°å ¶å ·å¤è§£å³ä¸è¿°ä¸å¡çç¹çç¹æ§ï¼å ¶ä¸æçéçå æ¬ä»¥ä¸å 个æ¹é¢ã
第ä¸ï¼ç¨³å®æ§ã对äºæ¸¸æè¡ä¸å¨çº¿äº¤æç³»ç»ä¸å¡ï¼æ°æ®åºç稳å®æ§è³å ³éè¦ï¼OceanBase é群ä¸å¯æ¬çåå¸å¼æ¶ææ¯æèªå¨æ éåæ¢ï¼è½å¤ä¿è¯å°æ°èç¹æ éæ åµä¸æ°æ®ä¸ä¸¢å¤±ï¼æå¡ä¸åé¡¿ï¼æ»¡è¶³ RPO=0ï¼RTO<8s ç容ç¾æ åï¼ç¡®ä¿ä¸å¡è¿ç»è¿è¡ä¸ä¸æãOceanBase å¨æ¯ä»å®è¶ 大è§æ¨¡åºæ¯ä¸ä½¿ç¨ï¼å¹¶ä¸å¨éèæ ¸å¿åºæ¯ä¸ç»è¿å¤å¹´åç»ï¼ç¨³å®æ§ä¹ ç»ä¸å¡èéªã
第äºï¼éæå¯æ©å±ãOceanBase å ·ææ强çå¯æ©å±æ§ï¼å¯ä»¥å¨çº¿è¿è¡å¹³æ»æ©å®¹æ缩容ï¼å¹¶ä¸å¨æ©å®¹åèªå¨å®ç°ç³»ç»è´è½½åè¡¡ï¼å¯¹åºç¨éææ éæ´æ¹ä¸å¡ä»£ç ï¼ç¡®ä¿ç³»ç»çæç»è¿è¡ï¼å®å ¨è½æ»¡è¶³ç½æ游æ对åå¨æ¨ªåæ©å±çè¦æ±ã
第ä¸ï¼æ°æ®åæ¥çå®æ¶æ§ãä¸å¡å¯¹æ°æ®å®æ¶æ§è¦æ±æé«ï¼å æ¤å¨åæå¼å ¥æ°çæ°æ®åºäº§åæ¶ï¼æ们è¿è¡äºé¿è¾¾ä¸ä¸ªæçåæµå线ä¸è·æ¹æµè¯ãéè¿ä½¿ç¨ OceanBase å®æ¹æä¾çæ°æ®è¿ç§»å·¥å · OMSï¼æ°æ®åæ¥é¾è·¯å ä¹æ²¡æåºç°ææ¾å»¶è¿ï¼å®å ¨æ»¡è¶³æ¥è¯¢ä¸å¡æ°æ®å®æ¶æ§çè¦æ±ã
第åï¼å¤ç§æ·èµæºé离ãOceanBase æ°æ®åºæ¯æå¤ç§æ·ï¼æ¯ä¸ä¸ªç§æ·å¯ä»¥çåæ¯ MySQL çä¸ä¸ªå®ä¾ï¼å个 OceanBase é群å¯ä»¥æ¯æå建å¤ä¸ªç§æ·ï¼ä¸ºå¤ä¸ªä¸å¡æä¾æå¡ã为äºç¡®ä¿ä¸å¡ç¨³å®è¿è¡ï¼OceanBase é对ç§æ·é´çèµæºè¿è¡äºé离ï¼ä¾å¦ CPUãå åãIOPSãéè¿ä¸ºæ¯ä¸ªä¸å¡å建ä¸ä¸ªç§æ·æ¥ä½¿ç¨ OceanBaseï¼ä¸å¡é´ä¸ä¼ç¸äºå¹²æ°ï¼äº¤ä»ä¹å¯ä»¥æ´å ææ·ã
第äºï¼éä½ææ¬ï¼åå¨å缩ï¼ãOceanBase 使ç¨åºäº LSM-Tree èªç çä¸å¥é«çº§å缩çåå¨å¼æï¼å¨åå¨å°ç£çä¸æ¶ï¼é»è®¤å¯¹å¾®åçæ°æ®è¿è¡ç¼ç åå缩ï¼ç¸æ¯äº MySQL ç B+ æ åå¨ç»æï¼OceanBase è½å¤è约 70%-90% çåå¨ææ¬ï¼å¹¶ä¸å³ä½¿åäºç¼ç ï¼ä¹ä¸ä¼éä½æ¥è¯¢æ§è½ï¼èæ¯ä¼ç±äºå个微åä¸åå¨çæ°æ®æ´å¤èæåæ¥è¯¢æçã
ç½æ游æè¿ç§»äºä¸å¡æ°æ®ä»¥åï¼åç°å³ä½¿ OceanBase æ¯ä¸å¯æ¬çæ åµï¼ä¹è½å¸¦æ¥æ¾èçåå¨è约ï¼å¹¶ä¸æ§è½ä¹æ»¡è¶³ä¸å¡éæ±ã
é¤äºä¸è¿°çè½åå¤ï¼OceanBase è¿æä¸äºç¹æ§ä¹æ¯æ们æå ³æ³¨çï¼æ¯å¦ï¼
- MySQL å ¼å®¹æ§ï¼æ¹ä¾¿ä¸å¡è¿ç§»ï¼æ éä¿®æ¹ä¸å¡ä»£ç ï¼è±è´¹å¤ªå¤äººååéé æµè¯ï¼
- HTAP è½åï¼å¯¹äºä¸äº TPãAP å ¼æçä¸å¡åæå¯ä»¥å°è¯å°ä¸å¡æ¾å°ä¸å¥ OceanBase é群ä¸ï¼æ éç»´æ¤ä¸æ´å¥ TP+AP çæ¶æã
å¼å ¥ OceanBase çåææµè¯
å¨å³å®å¼å ¥ä¸ä¸ªæ°çæ°æ®åºä¹åï¼ä¸ºäºç¡®ä¿å ¶éé æ§ãé«æ§è½ãé«å¯é ç满足ä¸å¡éæ±ï¼æ们éè¦å¯¹å ¶è¿è¡ä¸¥æ ¼çåºåæµè¯ãä¸å¡æµè¯ãç°åº¦æµè¯ï¼åªæç»è¿éªè¯æè½éæ¥æ¥å ¥åºç¨ç¯å¢ãå¨åææµè¯ä¸ï¼æ们主è¦ä»æ¶æï¼é«å¯ç¨ï¼ä¸è´æ§ï¼å ¼å®¹æ§ï¼åå¨ææ¬ï¼æ§è½çæ¹é¢æ¥å对æ¯ï¼ä»¥ä¸æ¯å ·ä½çæµè¯æ åµã
ï¼ä¸ï¼æµè¯ç¯å¢
ï¼äºï¼æµè¯å·¥å ·
æ¬æ¬¡æµè¯ä½¿ç¨ Sysbench å®æï¼åå«è¿è¡äºæ··å读åï¼è¯»åæ¯ä¾ 8/2ï¼ãåªè¯»åºæ¯ãåªååºæ¯çæµè¯ã
ï¼ä¸ï¼æµè¯ç»æ
- OLTP æ§è½æ¹é¢ï¼å¨å°è§æ¨¡æ°æ®éï¼10 å¼ è¡¨ï¼æ¯å¼ 表 2000 ä¸ï¼æ¶ï¼OceanBase 4.0 çæ¬çæ§è½è¡¨ç°å ä¹ä¸ MySQL æå¹³ï¼OceanBase 4.1 çæ¬çæ§è½è¡¨ç°ä¼äºåæº MySQLï¼å¨æ°æ®éè¾å¤§æ¶ï¼1 亿以ä¸ï¼OceanBase æ©å®¹èç¹åçæ§è½ä¼å¿è¿è¶ åæº MySQLã
- OLAP æ§è½æ¹é¢ï¼å¨å¤ä¸ªå¤§è¡¨å ³èæèååæçæ åµä¸ï¼1 亿以ä¸ï¼ï¼ OceanBase 4.x çæ¬æ´ä½è¡¨ç°ç¸å¯¹å¹³ç¨³ï¼å¹¶æ²¡æåºç°è¾å¤§æ³¢å¨ï¼æ¥è¯¢èæ¶ä¹è¿ä½äº MySQL ï¼MySQL æ¬èº«ä¸éç¨äº AP ä¸å¡ï¼æ¤å¯¹æ¯æä¹ä¸å¤§ï¼ã
- å ³äºåå¨æ°æ®å缩è½åï¼æ们ä»ä¸æ¸¸ MySQL å¯¼åº 5TB æ°æ®å° OceanBaseï¼ä¸ä¸ªå¯æ¬æ»åå¨æ 2.1TBï¼å个å¯æ¬ 700GBã以å份æ°æ®è®¡ç®ï¼æ°æ®å缩çæ¥è¿ 86%ï¼ç±äºä¸æ¸¸ MySQL åå¨ä¸å®çç¢ç空é´ï¼è¯¥æ°æ®å¯è½ä¹æç¥å¾®åå·®ï¼ã
*注ï¼è¿éåªæ¯è¯´ææ°æ®å缩çè½åï¼æ²¡æèè CPU 以åå ¶ä»æ¹é¢çææ¬ï¼æ»çææ¬éè¦æ ¹æ®ä¸åä¸å¡åºæ¯åç¬è®¡ç®ã
ï¼åï¼å¤ç§æ·èµæºé离ä¸é¡¹æµè¯
é对å¤ç§æ·åèµæºé离ï¼æ们åæ¶å¯¹ä¸¤ä¸ªç§æ·è¿è¡æ§è½åæµï¼ä¸»è¦æ¯æµè¯å¨å个ç§æ·ç±äºèµæºè¢«æ满çæ åµä¸ï¼å¦ä¸ä¸ªç§æ·ç请æ±ååºçæ¯å¦åå°å½±åï¼æµè¯è¿ç¨å¦ä¸ï¼
é¦å ï¼å建两个ç§æ·
1. CPUï¼2Cï¼å åï¼2G
create resource unit test_unit max_cpu 2, max_memory '2G', max_iops 128, max_disk_size '2G', max_session_num 128, MIN_CPU=2, MIN_MEMORY='2G', MIN_IOPS=128; create resource pool test_pool unit = 'test_unit', unit_num = 1, zone_list=('zone1','zone2','zone3'); create tenant test_tenant resource_pool_list=('test_pool'), charset=utf8mb4, replica_num=3, zone_list('zone1', 'zone2', 'zone3'), primary_zone=RANDOM, locality='F@zone1,F@zone2,F@zone3' set variables ob_compatibility_mode='mysql', ob_tcp_invited_nodes='%';
å¤å¶ä»£ç
2. CPUï¼4Cï¼å åï¼4G
create resource unit test_unit2 max_cpu 4, max_memory '4G', max_iops 1280, max_disk_size 53687091200, max_session_num 128, MIN_CPU=4, MIN_MEMORY='4G', MIN_IOPS=1280; create resource pool sysbench_pool unit = 'test_unit2', unit_num = 1, zone_list=('zone1','zone2','zone3'); create tenant sysbench_tenant resource_pool_list=('sysbench_pool'), charset=utf8mb4, replica_num=3, zone_list('zone1', 'zone2', 'zone3'), primary_zone=RANDOM, locality='F@zone1,F@zone2,F@zone3' set variables ob_compatibility_mode='mysql', ob_tcp_invited_nodes='%';
å¤å¶ä»£ç
ç§æ· 2ï¼2048 个线ç¨è¿è¡å¹¶ååæµ
å¨ç§æ· 2 åæµåååæµä¸ï¼åå«æ¥çç§æ· 1 çååºæ åµï¼ä»¥ååæµè¿ç¨ä¸ç§æ·ç CPU 使ç¨æ åµã
ç§æ· 2 åæµåï¼ç§æ· 1 çåæµæ§è½å¦ä¸ï¼
ç§æ· 2 åæµè¿ç¨ä¸ï¼ç§æ· 1 çåæµæ§è½å¦ä¸ï¼
å ¶æ¬¡ï¼æ¥çç§æ· 2 çèµæºä½¿ç¨æ åµ
- CPUï¼
- å åï¼
å¾åºæµè¯ç»è®ºå¦ä¸ï¼
- èµæºç¨³å®æ§æ»¡è¶³æå¾ ï¼é«å¹¶å线ç¨å¯¹ç§æ·èµæºè¿è¡åæµæ¶ï¼ç§æ·ç CPU åå åèµæºä½¿ç¨ç¨³å®ï¼å¹¶æ²¡æè¶ è¿éå¶çæ大å¼ã
- é离æ§æ»¡è¶³æå¾ ï¼ç§æ·é´æ²¡æææ¾å½±åï¼å½ç§æ· 2 é«å¹¶å线ç¨è¿è¡åæµæ¶ï¼ç§æ· 1 ç请æ±éç¥æä¸éï¼ QPS éä½å¤§æ¦ 20%ãæ们æ¨æµå¯è½æ¯ç±äº IO èµæºæ²¡æåå°å åçéå¶ï¼åºç°ä¸å®ç¨åº¦ç IO äºç¨ãéè¦æåºçæ¯ï¼3.x çæ¬å¹¶æ²¡æéå¶ IOï¼ä½ 4.0 çæ¬å·²ç»å®ç°äºå¯¹ IO çéå¶ãå°±æ´ä½å½±åèè¨ï¼ä» CPU åå åç使ç¨æ åµæ¥çï¼æ´ä½æ²¡æææ¾çå½±åã
综å以ä¸æµè¯ç»æï¼æ们认为 OceanBase å¨æ§è½ã稳å®æ§ãèµæºé离ãéæ¬çæ¹é¢å符åç½æ游æçé¢æï¼å æ¤ï¼æ们å³å®ä¸ä¸å¡æ¹å ±åå¨åºç¨ç¯å¢ä¸æ£å¼éç¨ OceanBaseã
å¼å ¥ OceanBase æ¶æçæ¶ç
å¼å ¥ OceanBase åï¼æ们çä¸å¡æ¶æå¦è§ä¸å¾æ示ï¼ä¸å¡çç¹å¾å°ææ解å³ãç®åï¼OMS å·¥å ·ä¼å° MySQL 主åºæææ°æ®åæ¥å° OceanBase é群ä¸ï¼ä¸æ¸¸ MySQL 主åºä¼ä¾æ®ä¸å¡é»è¾å®ææ¸ ç大éæ°æ®ï¼ä»¥éä½ MySQL çåå¨ç©ºé´ï¼è OMS çé¾è·¯è®¾ç½®äºå¿½ç¥ MySQL ä¸æ¸ çæ°æ®ç DMLãDDL æä½ï¼ä¿è¯ OceanBase é群ä¸æä¸ä»½å®æ´æ°æ®ï¼ä¾ä¸å¡æ¥è¯¢ã
æ´ä¸ªæ¶ææ¿æ¢ä»¥åï¼æ们è·å¾ç以ä¸å ç¹æ¶çï¼
- ä¸å¡æ¥è¯¢ç¨³å®ï¼OceanBase è¿è¡ç¨³å®ï¼å¨æ¿æ äºååªè¯»ä»åº MySQL QPS ç 15% æµéåï¼æ¶å»¶ç¨³å®ï¼æå¨å°ã
- çµæ´»æ©å±éä½é«å¹¶åååï¼OceanBase çæ©å±è½åå¯ä»¥é«ææ¯æä¸å¡æªæ¥é«å¹¶å请æ±ï¼åæ¥ MySQL åªè¯»ä»åºç QPS 请æ±ï¼è¿ç§»å° OceanBase ååå骤éï¼é£é©å¾å°æææ§å¶ã
- æ°æ®å®æ¶æ§å¾å°æææ§å¶ï¼OMS çé»è¾å¤å¶æ¹å¼è¯»å MySQL Binlog æä½ï¼åæ¾å° OceanBase é群ä¸ï¼ä¸ä¼åºç° MySQL 常è§ç主ä»å»¶è¿é®é¢ãå¦æåºç°æ°æ®åæ¥å»¶è¿ãæ ¢æ¥è¯¢ï¼OceanBase é½æ对åºççæ§æ¥åã
- åä»åå¨ææ¬å¤§å¹ ä¸éï¼ä¸ MySQL åå¯æ¬å¯¹æ¯ï¼OceanBase æ´ä½åå¨ææ¬ä¸éè¶ è¿ 80%ï¼å°ä¸æ¸¸ MySQL æ°æ®éè¿è¡å¤§éå½æ¡£åï¼åå¨ææ¬åç¼©äº 30% 以ä¸ï¼åå¨ååå¤§å¹ åå°ãéè¿ OMS è¿ç§» MySQL æ°æ®å° OceanBase é群ï¼å¹¶å®ææ¸ ç MySQL çä¸å¡æ°æ®ï¼å¤§å¹ éä½ MySQL å æ°æ®éè¿å¤§å¸¦æ¥çåç§é£é©ã
- è¿ç»´æ´å ç®åï¼åºç°çªåæµéæ¶ï¼å¯ä»¥éè¿å¨æè°æ´ç§æ·ãé群èµæºçæ¹å¼ä¸´æ¶åºæ¥ãåºç°çªåæµéæä¸å¡ä¸çº¿ SQL åºç°æ ¢ SQL æ¶ï¼å¯ä»¥ä½¿ç¨ç½å±åç SQL éæµåè½ãå¦æéè¦æ°´å¹³æ©å®¹ï¼æ´ä¸ªæ©å®¹æä½å¯¹åºç¨æ æãåæ¶ï¼å¨æ éåºæ¯ä¸ï¼é群ç Paxos é«å¯ç¨æ¨¡å¼åºæ¬ä¿é对åºç¨æ æãå¤ä»½åæ¢å¤æçå¤§å¹ æåï¼å æ´ä½åç¼©è¶ è¿ 30%ï¼åå°æ¿æ¢æ éèç¹æ¶ï¼éè¦æ¢å¤çæ°æ®éç¸å¯¹ MySQL æ´å°ï¼å¤ä»½æ¢å¤æ¶é´ä¹æ´çï¼æçæåäº 3 å以ä¸ã
å¼å ¥ OceanBase çæä½³å®è·µå»ºè®®
åçåå¸å¼æ°æ®åºä¸ä¸é´ä»¶æ¨¡å¼çåå¸å¼æ°æ®åºï¼å¨ä½¿ç¨æä½å±é¢æä¸å®çä¸åãå¨å¼å ¥ OceanBase çè¿ç¨ä¸ï¼ç½æ游æ积累äºä¸äºæä½³å®è·µå»ºè®®ï¼ä¾å¤§å®¶åèã
建议 1ï¼ä¼åæ°æ®åæ¥æ§è½
ä½¿ç¨ OMS åæ¥ MySQL æ°æ®å° OceanBase åæï¼æ们éå°äºä¸äºææãç¹å«æ¯å¨è¿è¡å¢éè¿ç§»æ¶ï¼æ们åç°è¿ç§»ç延æ¶è¾å¤§ï¼å¯¼è´è¿ç§»çæ§è½è¾ä½ãéè¿æ¥è¯¢æ¥å¿ï¼æ们åç°åå ¥ OceanBase çè¯å¥æ¯ replace intoï¼æå¨æ§è¡æµè¯ SQL æ¶åç°é度确å®è¾æ ¢ãç»è¿ SQL è¯æææ¥ï¼æ们确认äºä¸ä¸ªå ³é®é®é¢ï¼OB_GAIS_PUSH_AUTO_INC_RE å½æ°å¼èµ·äºèªå¢å RPC èæ¶è¾é«ã
å¨ä¸ OceanBase å¢éçæ²éä¸ï¼æ们äºè§£å°è¿ä¸ªé®é¢ç主è¦åå å¨äº OceanBase ä¸çè¿å¼ 表æ¯ååºè¡¨ï¼å建çèªå¢åå±æ§æ¯ orderãå æ¤ï¼å¨ OceanBase æ§è¡ replace into å update æä½æ¶ï¼ä¼è¿è¡å ¨å±åæ¥æ´æ°èªå¢åï¼è¿å¯¼è´äº RPC ç代价è¾é«ãç¹å«æ¯å¨æ°æ®é大çæ åµä¸ï¼æ§è½å°±æ¶å°æ¯è¾ææ¾çå½±åã
解å³æ¹æ³ï¼
- å¯ä»¥æ»¡è¶³ä¸å¡çæ åµä¸ï¼å¯ä»¥èèå»æèªå¢åå±æ§ï¼è¿æ ·å¯ä»¥é¿å OceanBase æ´æ°èªå¢å±æ§æ¶çå ¨å±æ«æãæ们æç»éç¨äºè¿ä¸ªæ¹æ¡è§£å³ï¼ç±ä¸æ¸¸ MySQL æ¥æ§å¶ id çå¯ä¸æ§ã
- å¦ä¸ä¸ªæ¹æ³æ¯å°èªå¢åç AUTO_INCREMNT_MODE å±æ§ç± ORDER æ¹æ NOORDERï¼ç¶å replace into éä¸æå®èªå¢åçå¼ï¼è®© replace into ä½¿ç¨ autoincrement_service 产ççèªå¢å¼ã
建议 2ï¼åç设计ååºè¡¨
å¨å¼å ¥ OceanBase æ¶ï¼å©ç¨å ¶åå¸å¼çæ©å±è½åï¼å æ¤å¨ MySQL åä¸å¡ä¸å表å å亿è¡æ°æ®çæ åµä¸ï¼è¿ç§»å° OceanBase ä¸ï¼æ们èè建æååºè¡¨ãåææµè¯è¿ç¨ä¸ï¼èèå°ç°é¶æ®µçæ¥è¯¢æ§è½åæªæ¥çæ©å±è½åï¼ç»åä¸å¡ç¹æ§ï¼å¤§é¨åä¸å¡æ¥è¯¢é½ä¼å¸¦äº¤æ id å·çæ¡ä»¶ï¼ï¼æ们å°è¿ç§»ç表ç»æ设计æ交æ id å·ç 512 个 hash ååºï¼å°½å¯è½åå°åå¨åæ§è½å¹³è¡¡ã
å¨ä¸å¡ç°åº¦æµè¯è¿ç¨ä¸ï¼æå°é¨åä¸å¡æ¥è¯¢æ²¡æ带交æ id å·çæ¡ä»¶ï¼èæ¯ä½¿ç¨äºå ¶ä»å段å»åå¹é æ¥è¯¢ï¼è½ç¶è¿ä¸ç±» SQL å¨ææçä¸å¡è¯·æ±ä¸å æ¯ä¸ç®é«ï¼ä½å®é ä¹æå å QPSãç±äºè¿ç±»æ¥è¯¢æ²¡æèµ°ååºé®ï¼æ以æ¯æ¬¡è¯·æ±é½ä¼å»æ«æåæ£å¨ææ OBServer èç¹ç 512 个ååºæ°æ®ï¼å¯¼è´ RPC å¤æ¬¡è¯·æ±ï¼é æè¿å¤çç½ç»å»¶è¿ï¼ååºåºæ¥çç»æå°±æ¯ SQL æ§è¡é常ç¼æ ¢ï¼å½±åæ´ä¸ªä¸å¡ã
解å³æ¹æ³ï¼
1. é对è¿ç±»ä¸èµ°ååºé®çæ¥è¯¢è¯·æ±ï¼éæ©åéçè¿æ»¤æ¡ä»¶åï¼åå»ºå ¨å±ç´¢å¼ï¼éè¿èµ°å ¨å±ç´¢å¼æ¹å¼ï¼æ¾èåå°æ«æçæ°æ®éãä½è¿éè¦æ³¨æï¼å¦æè¿ç±»æ¥è¯¢è¯·æ±è¿å¤ï¼è¿æ»¤æ¡ä»¶ååä¸ä¸æ ·çæ åµä¸ï¼è¯¥ååºè¡¨å¯è½éè¦å建å¤ä¸ªå ¨å±ç´¢å¼ï¼ä¼å¸¦æ¥é¢å¤çç»´æ¤ä»£ä»·ï¼ä¸è¬ä¸å»ºè®®ä¸å¼ 表ä¸å»ºå¤ªå¤ä¸ªå ¨å±ç´¢å¼ã
2. åå°ååºè¡¨çååºæ°ï¼ç±åæ¥ç 512 个éå° 10+ 个ï¼å¨æ»¡è¶³æ¨ªå Balance çåæ¶ï¼å³ä½¿æ«ææçååºï¼RPC 延è¿ä¹ç¸å¯¹éä½ä¸äºãæ们æç»éç¨äºè¿ä¸ªæ¹æ¡æ¥è§£å³ã
建议 3ï¼ç¡®ä¿ä¸æ¸¸ MySQL å° OceanBase çäºå¡ååæ§
å¨ä¸å¡è¯è¿è¡è¿ç¨ä¸ï¼åå¨ä¸ç§ä¸å¡åºæ¯ï¼æ¯å¦å家æ¹éåä¸è¥¿ç»ä¹°å®¶ï¼ä¸æ¬¡ä¼çæä¸ç¾ä¸ªè®¢åï¼å ä¸åç§èµéç»ç®ï¼å¯¹åºå°æ°æ®åºä¸ï¼ä¸ä¸ªäºå¡éå¯è½ä¼æå ç¾ä¸ªä¸åç DML è¯å¥éè¦æ§è¡ãäºå¡ç DML æ§è¡å¨ MySQL 侧ï¼ä¸å¡çæ¥è¯¢è¯·æ±æ¯å¨ OceanBase é群ä¸ï¼ææ¶åä¼åç°å¨ OceanBase æ¥è¯¢çæ¶åï¼è¯»åå°äºä¸ä¸ªäºå¡ä¸é¨å SQL å®æçç»æï¼ä¸å¤ªç¬¦åäºå¡çååæ§ã
æ¥ç OMS çæ¥å¿åç°ï¼å¢éåæ¥çé¾è·¯éæææ¾æ示ï¼maxRecords is 64, cut itï¼ï¼å°å¤§äºå¡é»è®¤ååæäºå 个å°äºå¡æ§è¡ï¼åå å¨äº OMS åæ¥ä¸æ¸¸ Binlog çæ¶åï¼æä¸ä¸ªé»è®¤åæ° splitThreshold æ¥æ§å¶è§£æä¸æ¸¸äºå¡çè®°å½æ°ï¼å½äºå¡å¤§å°è¶ è¿è¿ä¸ªåæ°éå¶æ¶ï¼å°±ä¼ååæå 个å°äºå¡æ¥æ§è¡ï¼è¿ç§æ åµå°±å¯¼è´å¨è¯»å OceanBase ä¸çæ°æ®æ¶ï¼è¿å 个å°äºå¡å¯è½åªå®æäºä¸é¨åï¼å¯¹ä¸å¡æ¥è¯´å°±æ¯è¯»å°äº MySQL ä¸ä¸ä¸ªäºå¡çä¸é´ç¶æã
解å³æ¹æ³ï¼
å¯å° OMS ä¸ç JDBCWriter.sourceFile.splitThreshold è°å¤§ï¼æ¯å¦æ们è°æ´å°äº 1024ï¼ä¿è¯æ°æ®åæ¥å° OceanBase è¿ç¨æ¶ï¼ä¹æ¯ä¸ä¸ªäºå¡å®æãä½è¿éè¦æ³¨æçæ¯ï¼è¿ä¸ªåæ°ä¸å»ºè®®è¿å¤§ï¼è®¾ç½®å¾è¶å¤§ï¼OMS å ç¨çèµæºè¶å¤ã
建议 4ï¼è®¾è®¡ä¸»é®æå¯ä¸é®ï¼ä¿è¯æ°æ®åæ¥çæ°æ®ä¸è´æ§
å¨ OMS åæ¥ MySQL å° OceanBase çè¿ç¨ä¸ï¼æ¥è¯¢ OceanBase ç表æ°æ®ï¼åå¨éå¤çè¡æ°æ®ãç»è¿ææ¥ï¼è¯¥ååºè¡¨æ²¡æ主é®åå¯ä¸é®ï¼å¯¼è´åæ¥è¿ç¨ä¸ï¼æ æ³è¿è¡ä¸è´æ§æ ¡éªï¼å¨ OMS åæ¥è¿ç¨ä¸ï¼å¦æåºç°éå¯ãéè¯çæ åµæ¶ï¼å°±æå¯è½éå¤åæ¥æ°æ®ï¼å¼èµ·æ°æ®å²çªã
解å³æ¹æ³ï¼
对 OceanBase ç表å ä¸ä¸»é®æè å¯ä¸é®ï¼å³ä½¿éè¯ï¼ä¹ä¼ä¿è¯åæ¥çæ°æ®ä¸è´ã
æ»ç»ä¸å±æ
ç½æ游æå¼å ¥ OceanBase å·²è¿åå¹´ï¼æ»ä½è¡¨ç°é常稳å®ï¼æªåºç°ä»»ä½æ§è½æå¨ååæ¥å»¶è¿é®é¢ï¼ææ解å³äºä¸å¡çç¹ã
æªæ¥ï¼éç OceanBase 稳å®è¿è¡ï¼å ¶å¯é æ§åæ§è½å¾å°è¿ä¸æ¥éªè¯ï¼ç½æ游æå°ç»§ç»æ¢ç´¢ OceanBase çåºç¨ï¼æ们计åéæ¥åå°æ´å¤ç MySQL ä»åºï¼å¹¶èèå°å ¨é¨ä¸å¡è¿ç§»å° OceanBaseã
åæ¶ï¼æ们æ£å¨å° OceanBase ççæçº³å ¥ç½æ SaaS DB å¹³å°ï¼ä»¥ä¸°å¯æ们çæå¡è½åï¼è¿å°ä½¿æ们è½å¤ä¸ºæ´å¤ç产åæä¾æ°æ®åºå±é¢çæ¯æï¼å©åç½æ游ææ´å¤äº§ååå ³é®ä¸å¡åå±ã
åæé¾æ¥ï¼OceanBaseå¨ç½æ游æçææ¯å®è·µ_æ°æ®æ¹ä»_InfoQç²¾éæç«