NewSQL || 微服务架构的必备选择
共 7705字,需浏览 16分钟
·
2021-08-30 11:29
面向互联网的三高系统(高性能、高并发、高可用),分布式架构是技术迭代的必然选择。
如上图从底层操作系统到最终的应用层开发都提供了相关的解决方案:
SpringCloud[1] 和 Service Mesh[2] 等微服务架构解决应用层扩展、部署问题
Redis Cluster 和 Codis[3] 等方案解决了缓存的分布式架构问题
Kubernetes 完成了操作系统的分布式进化, 更加有效的提高了资源的效率。
数据库领域自然也不会例外,将侵入应用层的数据治理(分库分表、高可用)方案还原至数据库层次,分布式数据库(NewSQL)的发展一定是不可阻挡。
GreatSQL 是什么
GreatSQL[4] 概述 是一款原生分布式关系型数据库软件,具有动态扩展、数据强一致、集群高可用等特性。采用 shared-nothing 架构,基于数据冗余与副本管理确保数据库稳定可靠,基于数据 sharding 与 mpp 技术实现高性能,并具备动态扩展数据节点能力,充分满足业务需要。目前已广泛应用于金融、运营商、能源、政府、互联网等行业核心系统,全面兼容国产操作系统、芯片等国产软硬件生态。
GreatSQL 可以作为 MySQL 或 Percona Server 的可选替代方案,用于线上生产环境;完全免费并兼容 MySQL 或 Percona Server。
GreatSQL VS MySQL 社区版
特性 | GreatSQL | MySQL 社区版 |
---|---|---|
地理标签 | ✅ | ❎ |
全新流控算法 | ✅ | ❎ |
InnoDB 并行查询优化 | ✅ | ❎ |
InnoDB 事务锁优化 | ✅ | ❎ |
网络分区异常应对 | ⭐️⭐️⭐️⭐️⭐️ | ⭐️ |
大事务处理 | ⭐️⭐️⭐️⭐️⭐️ | ⭐️ |
节点异常退出处理 | ⭐️⭐️⭐️⭐️⭐️ | ⭐️ |
一致性读性能 | ⭐️⭐️⭐️⭐️⭐️ | ⭐️ |
提升 MGR 吞吐量 | ⭐️⭐️⭐️⭐️⭐️ | ⭐️ |
多写模式下可能丢数据 | ⭐️⭐️⭐️⭐️⭐️ | ❎ |
单主模式下切主丢数据 | ⭐️⭐️⭐️⭐️⭐️ | ❎ |
MGR 集群启动效率 | ⭐️⭐️⭐️⭐️⭐️ | ❎ |
集群节点磁盘满处理 | ⭐️⭐️⭐️⭐️⭐️ | ❎ |
TCP self-connect 问题 | ⭐️⭐️⭐️⭐️⭐️ | ❎ |
构建 MGR 集群
docker-compose 构建
笔者这里使用 docker-compose 构建一个三个节点的 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 服务
进入被选为 PRIMARY 节点的容器 mgr1,启动 MGR 服务:
[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;
开启另外两个节点的启动 MGR 服务
[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 状态
>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 微服务接入
只需要修改原有 pig-mysql 的 hosts 映射关系即可完成接入到 greatSQL
目前经过笔者测试 最新的 PIG master(3.3) 完全兼容 8.0.25-15 GreatSQL
总结
目前 PIG[5] 微服务平台经过兼容性测试企业级分布式数据库支持如下:
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