NewSQL || 微服务架构的必备选择

JAVA架构日记

共 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 社区版

特性GreatSQLMySQL 社区版
地理标签
全新流控算法
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

参考资料

[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


浏览 23
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报