NewSQL || 微服務(wù)架構(gòu)的必備選擇

面向互聯(lián)網(wǎng)的三高系統(tǒng)(高性能、高并發(fā)、高可用),分布式架構(gòu)是技術(shù)迭代的必然選擇。
如上圖從底層操作系統(tǒng)到最終的應(yīng)用層開發(fā)都提供了相關(guān)的解決方案:
SpringCloud[1] 和 Service Mesh[2] 等微服務(wù)架構(gòu)解決應(yīng)用層擴(kuò)展、部署問題
Redis Cluster 和 Codis[3] 等方案解決了緩存的分布式架構(gòu)問題
Kubernetes 完成了操作系統(tǒng)的分布式進(jìn)化, 更加有效的提高了資源的效率。
數(shù)據(jù)庫領(lǐng)域自然也不會例外,將侵入應(yīng)用層的數(shù)據(jù)治理(分庫分表、高可用)方案還原至數(shù)據(jù)庫層次,分布式數(shù)據(jù)庫(NewSQL)的發(fā)展一定是不可阻擋。
GreatSQL 是什么
GreatSQL[4] 概述 是一款原生分布式關(guān)系型數(shù)據(jù)庫軟件,具有動態(tài)擴(kuò)展、數(shù)據(jù)強(qiáng)一致、集群高可用等特性。采用 shared-nothing 架構(gòu),基于數(shù)據(jù)冗余與副本管理確保數(shù)據(jù)庫穩(wěn)定可靠,基于數(shù)據(jù) sharding 與 mpp 技術(shù)實(shí)現(xiàn)高性能,并具備動態(tài)擴(kuò)展數(shù)據(jù)節(jié)點(diǎn)能力,充分滿足業(yè)務(wù)需要。目前已廣泛應(yīng)用于金融、運(yùn)營商、能源、政府、互聯(lián)網(wǎng)等行業(yè)核心系統(tǒng),全面兼容國產(chǎn)操作系統(tǒng)、芯片等國產(chǎn)軟硬件生態(tài)。
GreatSQL 可以作為 MySQL 或 Percona Server 的可選替代方案,用于線上生產(chǎn)環(huán)境;完全免費(fèi)并兼容 MySQL 或 Percona Server。
GreatSQL VS MySQL 社區(qū)版
| 特性 | GreatSQL | MySQL 社區(qū)版 |
|---|---|---|
| 地理標(biāo)簽 | ? | ? |
| 全新流控算法 | ? | ? |
| InnoDB 并行查詢優(yōu)化 | ? | ? |
| InnoDB 事務(wù)鎖優(yōu)化 | ? | ? |
| 網(wǎng)絡(luò)分區(qū)異常應(yīng)對 | ?????????? | ?? |
| 大事務(wù)處理 | ?????????? | ?? |
| 節(jié)點(diǎn)異常退出處理 | ?????????? | ?? |
| 一致性讀性能 | ?????????? | ?? |
| 提升 MGR 吞吐量 | ?????????? | ?? |
| 多寫模式下可能丟數(shù)據(jù) | ?????????? | ? |
| 單主模式下切主丟數(shù)據(jù) | ?????????? | ? |
| MGR 集群啟動效率 | ?????????? | ? |
| 集群節(jié)點(diǎn)磁盤滿處理 | ?????????? | ? |
| TCP self-connect 問題 | ?????????? | ? |
構(gòu)建 MGR 集群
docker-compose 構(gòu)建
筆者這里使用 docker-compose 構(gòu)建一個三個節(jié)點(diǎn)的 MGR 集群 用于測試
相較于官方的部署增加了 network 配置、password 可以直接使用。
version: '3'
services:
mgr1:
image: greatsql/greatsql
container_name: mgr1
hostname: mgr1
restart: unless-stopped
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: root
MYSQL_INIT_MGR: 1
MYSQL_MGR_LOCAL: '172.27.0.2:33061'
MYSQL_MGR_SEEDS: '172.27.0.2:33061,172.27.0.3:33061,172.27.0.4:33061'
extra_hosts:
- "mgr1:172.27.0.2"
- "mgr2:172.27.0.3"
- "mgr3:172.27.0.4"
ports:
- 3306:3306
networks:
mgr-net:
ipv4_address: 172.27.0.2
mgr2:
image: greatsql/greatsql
container_name: mgr2
hostname: mgr2
restart: unless-stopped
depends_on:
- "mgr1"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: root
MYSQL_INIT_MGR: 1
MYSQL_MGR_LOCAL: '172.27.0.3:33061'
MYSQL_MGR_SEEDS: '172.27.0.2:33061,172.27.0.3:33061,172.27.0.4:33061'
extra_hosts:
- "mgr1:172.27.0.2"
- "mgr2:172.27.0.3"
- "mgr3:172.27.0.4"
networks:
mgr-net:
ipv4_address: 172.27.0.3
mgr3:
image: greatsql/greatsql
container_name: mgr3
hostname: mgr3
restart: unless-stopped
depends_on:
- "mgr2"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: root
MYSQL_INIT_MGR: 1
MYSQL_MGR_LOCAL: '172.27.0.4:33061'
MYSQL_MGR_SEEDS: '172.27.0.2:33061,172.27.0.3:33061,172.27.0.4:33061'
extra_hosts:
- "mgr1:172.27.0.2"
- "mgr2:172.27.0.3"
- "mgr3:172.27.0.4"
networks:
mgr-net:
ipv4_address: 172.27.0.4
networks:
mgr-net:
ipam:
config:
- subnet: 172.27.0.0/16
啟動 MGR 服務(wù)
進(jìn)入被選為 PRIMARY 節(jié)點(diǎn)的容器 mgr1,啟動 MGR 服務(wù):
[root@greatsql]# docker exec -it mgr1 bash
[root@mgr1 /]# mysql
...
[root@GreatSQL][(none)]> set global group_replication_bootstrap_group=ON;
[root@GreatSQL][(none)]> start group_replication;
開啟另外兩個節(jié)點(diǎn)的啟動 MGR 服務(wù)
[root@greatsql]# docker exec -it mgr2 bash
[root@mgr2 /]# mysql
...
[root@GreatSQL][(none)]> start group_replication;
Query OK, 0 rows affected (2.76 sec)
查看 MGR 狀態(tài)
>select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 07455a01-0898-11ec-ac58-0242ac1b0002 | mgr1 | 3306 | ONLINE | PRIMARY | 8.0.25 |
| group_replication_applier | 124a583d-0898-11ec-bbb7-0242ac1b0003 | mgr2 | 3306 | ONLINE | SECONDARY | 8.0.25 |
| group_replication_applier | 1bf7df25-0898-11ec-9dd5-0242ac1b0004 | mgr3 | 3306 | ONLINE | SECONDARY | 8.0.25 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
3 rows in set (0.01 sec)
PIG 微服務(wù)接入
只需要修改原有 pig-mysql 的 hosts 映射關(guān)系即可完成接入到 greatSQL
目前經(jīng)過筆者測試 最新的 PIG master(3.3) 完全兼容 8.0.25-15 GreatSQL

總結(jié)
目前 PIG[5] 微服務(wù)平臺經(jīng)過兼容性測試企業(yè)級分布式數(shù)據(jù)庫支持如下:
GreatSQL 8.0.25-15
TIDB 4.x
OceanBase 3.1
參考資料
SpringCloud: https://spring.io/projects/spring-cloud
[2]Service Mesh: https://istio.io/latest/about/service-mesh
[3]Codis: https://github.com/CodisLabs/codis
[4]GreatSQL 背景介紹來源: https://www.greatdb.com
[5]PIG: https://pig4cloud.com
