2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

利用已有的数据库构建安全的分布式数据库集群

作者:Trista Pan

  • 2022-08-28
    北京
  • 本文字数:3426 字

    阅读完需:约 11 分钟

利用已有的数据库构建安全的分布式数据库集群

背景

数据流量增长到我们在十多年前从未想到的水平,而且没有放缓的迹象。数据流量的指数级增长引领我们进入了大数据时代,数据从四面八方汹涌而出——移动应用程序、社交网络、客户数据库或物联网设备。

 

大数据的出现意味着对新技术、新挑战和新技能的关注,以跟上数据库新技术的发展步伐。

 

与此同时,现在我们称之为“传统数据库”的东西正在输给创新的数据库解决方案。作为大数据首选存储解决方案的数据湖,它的出现意味着建立在关系型数据库(传统数据库)之上、只能存储结构化数据的传统数据仓库正陷入挣扎的泥潭。相比之下,数据湖通常建立在 Hadoop 集群或 NoSQL 数据库之上。

 

本文从介绍自互联网成为主流以来出现的挑战开始,然后展示一些想法和解决其中一些问题(特别是数据分布和安全)的实践指南。

 

因为这两个问题与大数据的不同领域相关,所以你可能会想到很多可用的数据库。为了让事情简单明了,本文只考虑如何用分布式和安全特性来升级传统的数据库,如 MySQL、PostgreSQL 或 SQLServer。这种解决方案将你的数据库集群转换成分片的分布式系统,并加入数据加密和流量管理等有用的特性。这些优势可不是小打小闹,除此之外还有更多——如果你关注成本效益,你会看到升级和迁移数据库集群将为你带来净效益。

大数据带来的数据库挑战

在深入实际的层面之前,我们先来看看大数据的 5V 特征及其挑战。

 

  1. 容量(Volume)——数据量太大,无法进行有效的管理和使用。

  2. 多样性(Variety)——数据类型非常广泛,如结构化数据、非结构化数据和混合数据。

  3. 速度(Velocity)——蓬勃发展的互联网流量导致数据的生成速度不断增长。

  4. 准确性(Veracity)——数据的准确性决定了高管们对商业决策和前景的信心。

  5. 价值(Value)——数据积累和分析为企业发现新的潜在市场/产品创造了新的机会,并帮助他们作出更明智的决策。

 

因为“准确性”和“价值”与数据分析更为相关,所以不是本文的讨论重点。至于容量、多样性和速度,很多行业的企业正在为以下这些问题寻找解决方案。

 

  1. 如何有效存储和管理空前数量的数据?

  2. 如何按需灵活伸缩数据库实例?

  3. 在某些情况下,我们从多个数据源收集数据,然后组合成一个结果,那么如何同时管理结构化和非结构化的数据?

  4. 如何在最小化重构数量的情况下保护在线系统用户的隐私?

 

这些问题有多种可能的解决方案,例如寻找新的数据库供应商,或者开发中间件或插件。

 

但是,如果你正在使用或考虑使用开源的传统 DBMS,那么你可以参考本文后面的部分,并将其作为一种建议来改进或构建一种以传统 DBMS 为基础的安全分布式数据库系统。你可以选择 PostgreSQL、MySQL 或 RDS,下面的这些步骤都可以应用到你的系统中。

架构介绍

Apache ShardingSphere

Apache ShardingSphere是一个开源生态系统,它可以将任意数据库转换成分布式数据库系统,并加入分片、弹性伸缩、加密等特性。

 

关于这个项目的介绍已经在告诉我们——它可以帮助我们将现有的数据库转换成分布式数据库系统,并通过有用的特性来改进新系统。

 

这个过程相当简单。为了实现这个效果,你所要做的就是将项目导入到数据库系统中(也就是创建了一个分片数据库系统),然后按需进行伸缩,还可以对数据进行加密。下图是这种架构的概览。

 


如上图所示,分布式数据库系统由 ShardingSphere(本例为 ShardingSphere-Proxy)和各种数据库(MySQL、PostgreSQL、Aurora 或其他 SQL92 数据库)组成,ShardingSphere 位于应用程序和数据库之间。

 

在这个系统中,ShardingSphere 作为接收用户请求的计算节点,数据库作为保存数据和进行一些本地计算的存储节点。应用程序将查询发送到 ShardingSphere,就像它们将查询发送到 DBMS 一样。

 

传统的 SQL 用于查询数据库。然而,因为在分布式数据库系统中添加了多个新特性(比如自动伸缩、加密、SQL 审计),所以我们需要一种类似 SQL 的语言来操作这些新特性。

 

为了满足这一需求,并且不给用户造成新的障碍或学习曲线,ShardingSphere 使用了分布式 SQL (DistSQL)来实现无缝的转换。这意味着你可以登录到 ShardingSphere,然后输入 SQL 和 DistSQL 来创建分片表、加密表,或者启动伸缩作业。在下面的小节中,我将展示它的魔力和多功能性。

 

在继续其他内容之前,我们先来进一步分析前面的那张架构图。架构图对包括 ShardingSphere 在内的部署架构进行了概览,下面将对其进行“放大”,让你更深入地了解它。

 


从图中可以看出,ShardingSphere 不仅是分布式数据库系统的计算节点,还提供了很多有用的特性。其中 ShardingSphere-Proxy 和 ShardingSphere-JDBC 是两个客户端。

Database Plus

Database Plus 是 ShardingSphere 项目遵循的指导性开发概念。它是分布式数据库系统的一个概念,超越了简单的数据分片。

 

最初的设想是在现有的碎片化数据库之上建立一个标准化的层和生态系统,提供统一的 SQL 操作服务,最大限度地减少数据库差异。应用程序可以直接与标准化服务通信,不需要费劲匹配每一个不同的数据库。ShardingSphere 利用了传统 DBMS 和 NoSQL 数据库(在规划中),并成为最终用户的标准数据库服务器。

 


功能插件

Database Plus 术语中的“功能插件”是指所有这些特性既可以独立运行,也可以同时运行。

 

这意味着基于 Database Plus 的数据库系统是可调节和“可插拔”的,为最终用户简化了组合多种功能插件的复杂性。ShardingSphere 目前支持分片、读写分离、数据库网关、数据加密、分布式权限、影子数据库等功能。

客户端

生态系统中包含了两个客户端,可以单独或同时部署。

 

ShardingSphere-Proxy 是透明的数据库代理,也作为数据库服务器。因此,它应该独立部署在服务器上。目前,PostgreSQL 和 MySQL 与 ShardingSphere 配合得很顺畅。

 

ShardingSphere-JDBC 是一个扩展了 Java JDBC 层的轻量级 Java 框架,可以集成到 JDBC 应用程序中。

 

我们可以同时部署这两个客户端,ShardingSphere-JDBC 作为高性能的驱动程序,ShardingSphere-Proxy 作为管理客户端。

 

利用 DBMS 创建安全的分布式数据库集群

 

在了解了架构之后,现在让我们来一步一步地创建分片和安全的 Aurora 数据库系统(步骤指南在后面)。我们将使用 ShardingSphere 的分片插件、数据加密插件以及 ShardingSphereProxy 来构建一个分布式数据库系统,如下图所示。



完成指南中的步骤后,你将得到的最终解决方案将如下图所示。



应用程序将 ShardingSphere + PostgreSQL 实例看成是一个分布式数据库,并像对待 PostgreSQL 那样对待 ShardingSphere。从用户的角度来看只有一个逻辑表 t_user。但实际上,这个逻辑表是由四个实际表组成的,从 t_user_0 到 t_user_3,它们位于两个不同的 PostgreSQL 实例中。

 

逻辑表 t_user 有一个 tel 列,用于存储用户的电话号码。由于电话号码是敏感数据,所以在存储到数据库中时必须进行加密。为此,在实际表中创建了 tel_cipher 和 tel_plain 两个列,用于保存相应的密文和明文(可选,这里仅为演示目的)。

 

生态系统的用户友好性体现在最终用户不需要关心实际表中的列,也不需要关心如何将逻辑列映射到实际列。他们只需使用逻辑列和明文数据构造 SQL 语句,ShardingSphere 会完成数据分片的整个过程,并自动对数据进行加密和解密。

 

ShardingSphere-Proxy 在后台处理这些过程,大大简化了用户的工作,用户只需要处理逻辑表 t_user 的逻辑列 tel。但是,在运行 SQL 查询之前,用户需要告诉 ShardingSphere 如何分片和加密数据。

步骤指南

 

下面的演示是在 AWS 上进行的,将 Aurora 数据库作为存储节点,运行在 EC2 上的 ShardingSphere 作为计算节点。

 

1. 创建 ShardingSphere-Proxy EC2 实例



2. 创建 Aurora 数据库



3. 部署 ShardingSphere-Proxy



4. 登录 ShardingSphere-Proxy


5. 初始化 Aurora 数据库




6. 通过 SQL 和分布式 SQL 使用加密规则和分片规则初始化 ShardingSphere






7. 在 ShardingSphere-Proxy 上插入测试数据行

 


8. 运行查询 SQL

 


 

9. 检查 Aurora 数据库中的数据

 



总结

这篇文章的重点是介绍如何使用 ShardingSphere 在 Aurora 上创建安全的分布式数据库,同时也提供了添加新特性的可能性。

 

本文提供的指南也可用于将其他各种受支持的数据库作为这种分布式数据库的存储节点。由于开源的强大力量,可能也有许多其他的解决方案可以解决类似的问题,我希望本文的读者能够找到最适合他们的解决方案。

 

作者简介:

 

Trista Pan 是 SphereEx 联合创始人兼 CTO、Apache 成员和孵化器导师、Apache ShardingSphere PMC、AWS Data Hero、腾讯云 TVP。曾负责京东数科智能数据库平台的设计与开发。

 

原文链接

Creating a Secure Distributed Database Cluster Leveraging Your Existing Database Management System

2022-08-28 08:005566

评论

发布
暂无评论
发现更多内容

热敏电阻、RTD、热电偶的原理和特性

不脱发的程序猿

PT100 热敏电阻 RTD 热电偶

Grpc服务开发和接口测试初探【Java】

FunTester

学生管理系统详细架构设计文档

踩着太阳看日出

架构训练营

Go 语言入门很简单:sort 包

宇宙之一粟

排序 Go 语言 4月月更

你不知道的 parseInt?

战场小包

JavaScript 前端 4月月更

虎符交易所完成三月份HOO回购 生态板块持续扩展

区块链前沿News

Hoo 虎符交易所 回购

睡眠革命

石刻掌纹

spring-cloud-kubernetes与k8s的configmap

程序员欣宸

Java 4月月更

Linux下BusyBox根文件系统制作

DS小龙哥

4月月更

云效钉钉小程序上线啦!业务方请痛快一键三连

阿里云云效

阿里云 云原生 钉钉 研发 云效钉钉小程序

2022年,我加入了微软MVP大家庭

不脱发的程序猿

开源社区 技术影响力 微软MVP

[Day21]-[动态规划] 494. 目标和

方勇(gopher)

LeetCode 动态规划 数据结构算法

OpenMLDB Pulsar Connector:高效打通实时数据到特征工程

第四范式开发者社区

数据库 数据传输 OpenMLDB 特征 特征平台

事务的隔离级别与MVCC

蝉沐风

MySQL 事务隔离级别 事务

Flutter 使用 Dio 的 Post 请求添加数据

岛上码农

flutter ios 安卓开发 4月月更 跨平台开发

Pipy MQTT 代理之(三)Logging

Flomesh

IoT 代理 mqtt Pipy

linux之sshpass命令

入门小站

Linux

Robot OS网络通信MQTT实战

轻口味

c++ android IoT mqtt 4月月更

阿里云移动研发平台EMAS,3月产品动态

移动研发平台EMAS

ios 阿里云 移动应用 Andriod 移动推送

Python图像处理丨OpenCV+Numpy库读取与修改像素

华为云开发者联盟

Python OpenCV 图像处理 Numpy库 像素

MongoDB Java 原生使用示例

Java mongodb 4月月更

模块三作业(学生管理系统架构设计文档)

Dean.Zhang

预测猝死时间:AI与死神的争夺

脑极体

Python 中删除列表元素的三种方法

AlwaysBeta

Python List 编程 程序员 列表

活动精彩预告 | 维塔士+龙智:数字化打造游戏行业「头号玩家」

龙智—DevSecOps解决方案

数字化转型 游戏开发 游戏引擎

外包学生管理系统

流火

在线YAML转JSON工具

入门小站

工具

在线CSV转XML工具

入门小站

工具

架构训练营 - 模块 3- 作业

kenlu

Spring核心流程分析

IT巅峰技术

一文读懂Seek Tiger推出创世节点的意义

西柚子

利用已有的数据库构建安全的分布式数据库集群_数据库_InfoQ精选文章