ShardingSphere 在金融支付场景下的实践与调优

Apache ShardingSphere 团队先前应邀到海科融通北京总部,PMC Chair 张亮与海科融通的技术同学在异构数据库关联查询、分布式事务、两地三中心、系统高可用等方面展开了交流。

作为一家专业面向中小微商户、为行业提供完整支付解决方案及综合金融服务的高新技术企业,海科融通通过深耕支付行业与自我创新的紧密结合,目前已经打造出了符合行业需求的”支付+互联网”金融生态圈,用现代支付赋能传统商业。海科融通深耕金融领域二十多年,频繁交易产生的巨量数据以及多元数据库并存的状态,使得后台架构面临的挑战愈发严峻。因此海科融通选择 Apache ShardingSphere,为未来在处理支付生态里海量的多元化数据方面引进新思路。

ShardingSphere 是否支持异构数据库的关联查询

在执行了数据库分片操作后,由于事务不在同一个实例下,许多用户会关注跨节点状态下数据查询的能力。作为 Apache ShardingSphere 的功能特性之一,联邦查询能够解决跨节点查询的问题。但与此同时,跨节点查询会带来非常高的性能损耗,这对于性能、反应要求较高的场景下是不可接受的。

为此,Apache ShardingSphere 在联邦查询体系中引入了查询优化模块。通过优化模型,Proxy 能够计算出相对高效的执行方案,将数据分为必要与不必要两类,在各自的分片中对必要的数据进行跨节点计算,不必要的数据即留在本地处理,进而减少因跨节点查询所带来的性能浪费。

ShardingSphere 如何应对针对复杂事务的统计分析工作?

ShardingSphere 可以承载一部分实际业务的聚合查询工作,不过面对复杂业务或数据体量较大的情况下,一般选择将分析的工作下推。因为 ShardingSphere 本身在实现查询时也需要下推之后再做聚合。如果要实现 AP 计算,ShardingSphere 最后对接的一定是像 Hbase、ClickHouse 等此类数据库,而并非 MySQL 此类数据库。

ShardingSphere 在两地三中心方面是如何实现的?

两地三中心,本质上是技术+管理的综合性方案。目前 ShardingSphere 的两地三中心策略分为三个层面:

  • 计算节点,由于 ShardingSphere 是无状态的,因此可以根据业务需要任意部署;
  • 存储节点,即数据库,维持用户使用的原状;
  • 治理节点,只要将 ShardingSphere 治理节点部署成两地三中心的形式即可。

目前 ShardingSphere 的治理节点是通过 ZooKeeper 或 ETCD 实现的。如果要部署五个治理节点,将三个 ZooKeeper 部署在同一节点下,将另外的两个 ZooKeeper 分别部署在另外两个节点中。如果其中一个机房出现问题,ZooKeeper 依然可以正常运作。

至于网络消耗问题,ShardingSphere 的线上流量分为两部分,只有管理流量才会走 ZooKeeper,真正的线上流量是不会经过 ZooKeeper 的。因此即使是 ZooKeeper 挂掉了,ShardingSphere 也不会受影响,只是不能去改变 ZooKeeper 的配置。ShardingSphere 的大部分流量是不用经过治理中心的,只有管理流量才会经过治理中心。同时 ShardingSphere 本地也缓存一份治理中心的源数据,因此即便外部出现不可用的问题,ShardingSphere 本身也不会受到影响。

负责分布式事务开发人员使用 ShardingSphere 是否会产生额外成本?

是没有额外成本的。目前 Apache ShardingSphere 提供 XA 及柔性事务集成方案。在 ACID 事务中对隔离性的要求很高,在事务执行过程中,必须将所有的资源锁定。柔性事务的理念则是通过业务逻辑将互斥锁操作从资源层面上移至业务层面,通过放宽对强一致性要求,来换取系统吞吐量的提升。不过在使用过程中,由于性能没有 XA 高,使用柔性事务的感受不如使用 XA 的感受好,因此用户大多比较熟悉 XA。

这里以 XA 为例。作为 ShardingSphere 分布式事务管理中的一部分,XA 本身分为 AP、TM 以及 RM 三部分。其中 AP 即应用程序,TM 为事务管理器,RM 为资源管理器。ShardingSphere 是将 AP 和 TM 融合在了一起,通过将本地事务转换成为 AP 和 TM,然后再和 RM 进行交互,进而完全屏蔽用户使用 XA 的感知。

欢迎点击链接,了解更多内容:

Apache ShardingSphere 官网:https://shardingsphere.apache.org/

Apache ShardingSphere GitHub 地址:https://github.com/apache/shardingsphere

SphereEx 官网:https://www.sphere-ex.com

欢迎添加社区经理微信(ss_assistant_1)加入交流群,与众多 ShardingSphere 爱好者一同交流。

ShardingSphere 在金融支付场景下的实践与调优

Original: https://www.cnblogs.com/sphereex/p/16309444.html
Author: SphereEx
Title: ShardingSphere 在金融支付场景下的实践与调优

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621482/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Dubbo源码(八)-负载均衡

    前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)…

    数据库 2023年6月11日
    080
  • 数据库死锁分析(行锁、间隙锁)

    分享因遇到缝隙锁而导致的死锁案例。文章最后有一个知识总结,以供参考。 [En] Share a deadlock case caused by a gap lock encount…

    数据库 2023年5月24日
    094
  • neo4j数据库数据转移,从阿里云转移到windows服务器

    neo4j数据库数据从阿里云转移到windows 1.从阿里云迁移neo4j时需停掉neo4j数据库,在neo4j的bin目录下输入 ./neo4j stop 2.将数据备份到一个…

    数据库 2023年6月6日
    074
  • 定时调度的线程池

    定时调度线程池 当我们需要定时进行线程的调度 @Slf4j public class Test5 { public static void main(String[] args) …

    数据库 2023年6月11日
    083
  • 解决:阿里云服务器添加安全组端口映射后仍无法访问

    “忘记了不该忘的人,我的内心满是伤痕…….” “呸,渣女,什么人?那是配置!配置!配置!” 问题: 阿里云服…

    数据库 2023年6月6日
    080
  • Java 多线程共享模型之管程(下)

    共享模型之管程 wait、notify wait、notify 原理 Owner 线程发现条件不满足,调用 wait 方法,即可进入 WaitSet 变为 WAITING 状态 B…

    数据库 2023年6月16日
    0114
  • 普通 Docker 与 Kubernetes 对比

    Docker提供基本容器管理 API 和容器镜像文件格式Kubernetes 管理运行容器的(物理或虚拟)主机群集,如果 Docker 是 OCP 的”内核&#8221…

    数据库 2023年6月14日
    076
  • 线程池系列二:一张动图,彻底懂了execute和submit

    ​我们知道线程池通过execute方法执行提交的Runnable任务,但Runnable只是执行任务,没有返回任何信息。 【线程池原理:线程池原来是个外包公司,打工人我悟了】 若是…

    数据库 2023年6月6日
    0113
  • MyBatis(三)-动态SQL

    1、if 注意:test里面使用的参数,可以是mybatis的默认参数,也可以是实体属性名,但是不能是没有指定别名的参数名(尤其是单个参数,也必须起别名,否则异常); 单独使用if…

    数据库 2023年6月16日
    092
  • 私人菜谱

    红烧排骨食材:排骨一斤半 花椒葱姜蒜 豆瓣酱 生抽 耗油 白糖 两个大土豆步骤:少量油 花椒葱姜蒜(大块儿)爆香 一大勺豆瓣酱 倒入排骨翻炒一会儿 倒入一锅铲生抽 一小撮耗油撒一撮…

    数据库 2023年6月6日
    091
  • oracle 怎么查看用户对应的表空间

    oracle 怎么查看用户对应的表空间? 查询用户: 查看数据库里面所有用户,前提是你是有 dba 权限的帐号,如 sys,system: select * from dba_us…

    数据库 2023年6月14日
    078
  • Vscode配置安装Golang开发环境

    1.下载安装Golanghttps://golang.google.cn/dl/ 一路下一步即可 2.下载安装Vscodehttps://visualstudio.microsof…

    数据库 2023年6月16日
    0101
  • MySQL学习笔记-day03

    唯一性约束修饰的字段具有唯一性,不能重复。但可以为NULL。 drop table if exists t_user; create table t_user( id int, u…

    数据库 2023年5月24日
    072
  • pytest中pytest_cache文件夹作用

    跑自动化时经常会出现这样一个情况,一轮自动化跑完后零星出现了几个失败case,无法断定失败的原因,所以需要重新跑一下失败的case去debug,那我们要做的是就去修改脚本把那几个c…

    数据库 2023年6月11日
    060
  • Linux下的ssh、scala、spark配置

    注:笔记旨在记录,配置方式每个人多少有点不同,但大同小异,以下是个人爱好的配置方式. 平台:win10下的ubuntu虚拟机内 所用到的文件:hadoop-2.7.3.tarjdk…

    数据库 2023年6月16日
    0118
  • 汇编语言学习记录一

    0x00——什么是汇编语言? 汇编语言:早期实现程序员和机器进行交互的汇编指令集。 汇编指令,通过编译器,转换成机器码,从而使 机器 理解其指令。 0x01——汇编语言的组成 汇编…

    数据库 2023年6月11日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球