从 Oracle 到 TiDB,国有大行打造本地生活 APP 新体验

导读

本文介绍了某国有大行推出的本地生活服务类 APP 在数字时代的创新应用实践。该 APP 利用金融科技和互联网平台模式,打造“金融+非金融”的线上生态服务平台,满足了用户多样化的生活需求。为应对用户增长和数据量增加带来的挑战,该 APP 决定采用新一代 HTAP 数据库 TiDB 替换原系统中的 Oracle RAC,以提升整个系统的处理能力、扩展能力和服务能力。 文章介绍了 TiDB 带来的优势和应用价值,包括灵活的扩展能力、无需分库分表、金融级高可用能力等,帮助该平台提升了用户体验,增强了业务竞争力。

创新的本地生活服务平台

数字时代,用户行为线上化、场景化趋势日益明显。为积极响应国家扩大内需、拉动消费的号召,某国有大行顺应时代潮流,于 2021 年推出了一款本地生活服务类 APP。该 APP 依托金融科技手段与互联网平台模式,创新打造“金融 + 非金融”的线上生态服务平台,满足用户多样化的生活需求。这款本地生活 APP 自上线以来, 注册用户数已达到千万级别 ,成为了各地政府拉动本地消费的密切合作伙伴,平台特色包括:

  • 丰富的生活场景服务 :涵盖美食、外卖、充值、打车、电影演出、缴费、家装生活、车生活等多个方面,满足用户衣食住行娱等全方位需求。
  • 开放共享的合作模式 :为商家提供快速入驻通道,以线上平台推广提升商家曝光度,助力商家品牌宣传、活动集客和流量变现。
  • 免佣的银行系交易平台 :为用户提供安全可靠的交易环境,并依托银行资源提供更多优惠福利。

数据架构面临新的挑战

这款本地生活 APP 的业务功能涵盖基础服务、门面服务、抢券服务、订单服务、商户管理服务等多个方面,具体职能如下:

  • 门面服务 :提供商家信息展示、店铺导航、评价管理等功能;
  • 抢券 服务 :提供优惠券上架、发放、核销全流程管理服务,前端服务按渠道分成 4 个抢券通道,采用业务垂直分库和集中库存储的方式来提升性能和可靠性;
  • 订单服务 :提供订单生成、维护、查询、评价和推送等功能,应用层采用分表设计来应对大流量的冲击;
  • 订单历史查询服务 :提供针对各类订单按照用户、日期、交易渠道等多维度的查询功能;
  • 商户管理服务 :提供商品类目及标签管理,商品上下架,KA 品牌商户维护等功能。

图 1:改造前基于分库分表的数据架构

该生活 APP 上线后迅速推广,日活跃用户达到数百万,日订单量突破百万。 目前,存量表中数据记录行数超过亿行,20 多张表每天新增数据超过千万条。面对如此迅猛的业务发展和数据量增长,原有的技术架构(主要采用集中式数据库以及抢券服务的分库分表的技术架构)已经无法满足业务需求,无法做到对应用透明的快速弹性扩展。因此,需要找到一种新的技术架构或产品来解决现有架构的痛点:

  • 处理能力受限 :集中式数据库受限于单机服务器资源限制,无法满足快速发展的生活类业务场景对数据容量和并发处理能力的需求。
  • 高可用能力不足 :集中式数据库存在单点故障的风险,故障转移时会影响业务的连续性。
  • 业务处理能力下降 :订单业务随着客户交易量的增加,部分业务需要在多个数据库或数据表中进行,增加了查询的时间和成本。当历史库也无法满足存储容量要求时,需要考虑继续拆分。

为了解决上述问题,抢券业务采用分库分表模式来提升并发处理能力,但当业务发生变更时,需要对所有分库进行修改和调整,增加了业务变更的难度和风险。DBA 需要对多个数据库或数据表进行管理和维护,进而增加了系统故障排查和维护的难度。

使用原生分布式数据库 TiDB 替换 Oracle

为缓解生活 APP 业务的高 TPS 并发访问以及海量数据带来的性能压力,经过对市场主流分布式数据库的调研,并结合自身业务场景实践,最终决定采用新一代 HTAP 数据库 TiDB 替换原系统中的 Oracle RAC,从而提升整个系统的处理能力、扩展能力和服务能力。TiDB 分布式数据库带来的优势主要体现在以下几个方面:

图 2:改造后的分布式数据架构

  • 灵活的扩展能力 :快速横向扩展可以满足业务持续发展带来的数据量增长问题;
  • 无需分库分表 :原生分布式架构解决了分库分表原设计带来的痛点;
  • 金融级高可用能力 :Multi-Raft 自选主和 TiCDC 提供主备数据的实时复制,提供了 7*24 不间断的服务保障;
  • 节约存储空间 :TiKV 采用 LSM Tree 存储引擎,通过编码压缩大幅减少存量、增量数据所需磁盘空间;
  • 快速响应业务的要求 :分区表动态裁剪配合领域缓存设计满足大表对高并发、高性能查询的要求,Online Schema Change 保证在线 DDL 的快速执行。

图 3:分布式数据库 TiDB 高可用部署示意图

应用价值

该生活服务类 APP 是国有大行重点推出的线上生态平台,面向海量用户提供多样化的生活服务。 为了满足高并发场景下高性能、高可用及大容量存储等处理能力,平台采用了分布式数据库 TiDB。 TiDB 凭借弹性扩展、实时 HTAP 等优势,帮助平台提升了用户体验, 增强了业务竞争力。

  • 快速释放业务能力 :TiDB 具有弹性扩展和自动负载均衡能力,可以根据业务需求进行灵活扩容,简化应用开发,让应用更聚焦于业务功能的实现,企业无需考虑客户及交易量增加可能带来的架构改变。在抢券业务场景下,对现有集群进行动态扩容就能满足接入渠道及流量增长时对处理能力的要求。
  • 提供实时数据处理 :TiDB 具有行列存互相隔离的能力,可以在不影响在线业务运行的情况下进行实时的数据分析,利用这个特性可以实现历史订单更多维度的实时分析能力,从而丰富客户画像及开展个性化的用户营销活动。
  • 降低架构复杂度,有效节约成本 :避免随着业务增长进行复杂的分库分表处理,从而简化应用开发与运维工作,实现了高效降低成本的目标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/619206.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

地表净辐射通量数据、太阳辐射量数据、降雨量数据、气温数据、日照时长、水汽压分布、风速风向数据、地表温度

引言 地表净辐射作为驱动大气运动的主要能量,它是气候变化乃至全球变化的重要驱动力。由地表净辐射可反演比辐射率、地表温度、地表反照率等地表特征参数,是提高天气预报质量和大气环流模式研究的一个重要参数。多种卫星遥感数据反演地表净辐射通量信息产…

发表在期刊PRB和JAP上文章的说明及引用

文章目录 前言一、磁畴壁波导的能带调控研究(in PRB)文章简介:关键词:文章引用: 二、具有固定旋转轨道的自旋转矩纳米振荡器(in JAP)文章简介:关键词:文章引用&#xff1…

LeetCode-460. LFU 缓存【设计 哈希表 链表 双向链表】

LeetCode-460. LFU 缓存【设计 哈希表 链表 双向链表】 题目描述:解题思路一:一张图秒懂 LFU!解题思路二:精简版!两个哈希表,一个记录所有节点,一个记录次数链表【defaultdict(new_list)&#x…

kafka安装配置及集成springboot

1. 安装 单机安装kafka Kafka对于zookeeper是强依赖,保存kafka相关的节点数据,所以安装Kafka之前必须先安装zookeeper dockerhub网址: https://hub.docker.com Docker安装zookeeper 下载镜像: docker pull zookeeper:3.4.14创建容器 doc…

SeetaFace6人脸活体检测C++代码实现Demo

SeetaFace6包含人脸识别的基本能力:人脸检测、关键点定位、人脸识别,同时增加了活体检测、质量评估、年龄性别估计,并且顺应实际应用需求,开放口罩检测以及口罩佩戴场景下的人脸识别模型。 官网地址:https://github.co…

【CSP CCF记录】数组推导

题目 过程 思路 每次输入一个Bi即可确定一个Ai值,用temp记录1~B[i-1],的最大值分为两种情况: 当temp不等于Bi时,则说明Bi值之前未出现过,Ai必须等于Bi才能满足Bi是Ai前缀最大的定义。当temp等于Bi时,则说…

后端开发之用Mybatis简化JDBC的开发快速入门2024及数据库连接池技术和lombok工具详解

JDBC 简化JDBC的开发 JDBC仅仅是一套接口 是一套规范 Mybatis是持久层框架 用于简化JDBC的开发 使用Java语言操作关系型数据库的一套API 原始的JDBC程序 package com.bigdate.mybatis;import com.bigdate.mybatis.mapper.UserMapper; import com.bigdate.mybatis.pojo.Use…

(二)Jetpack Compose 布局模型

前文回顾 (一)Jetpack Compose 从入门到会写-CSDN博客 首先让我们回顾一下上一篇文章中里提到过几个问题: ComposeView的层级关系,互相嵌套存在的问题? 为什么Compose可以实现只测量一次? ComposeView和…

【JVM】感觉弗如...类加载机制

【JVM】感觉弗如…类加载机制 在Java开发过程中,从源代码(.java文件)到字节码(.class文件)再到运行时的类加载,会经历几个关键步骤,我们先简单过一遍大体的过程。再介绍今天这篇博客的重点内容—…

几个字符串函数的使用和模拟实现(2)

strcop的使用和模拟实现 strcpy函数的使用事项: 源字符串时不需要修改的,在定义前加上const 源字符串被拷贝到目标字符串上时终止字符\0也被拷贝进去 目标数组的大小要相对于源数组的大小足够大,并且不应该在内存中重叠 函数的返回值是一个字…

【Unity】Unity项目转抖音小游戏(二)云数据库和云函数

业务需求,开始接触一下抖音小游戏相关的内容,开发过程中记录一下流程。 抖音云官方文档:https://developer.open-douyin.com/docs/resource/zh-CN/developer/tools/cloud/develop-guide/cloud-function-debug 1.开通抖音云环境 抖音云地址&a…

软件体系结构风格

目录 一、定义 二、.经典软件体系结构风格: 1.管道和过滤器 2.数据抽象和面向对象系统 3.基于事件系统(隐式调用) 4.分层系统 5.仓库 6.C2风格 7.C/S 8.三层C/S 9.B/S 题: 一、定义 软件体系机构风格是描述某一特定应用…

C#泛型委托

在C#中,delegate 关键字用于声明委托(delegates),委托是一种类型安全的函数指针,允许你传递方法作为参数或从方法返回方法。有时我们需要将一个函数作为另一个函数的参数,这时就要用到委托(Dele…

java项目之车辆管理系统(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的车辆管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 车辆管理系统的主要使用者分…

Deckset for Mac:让演示文稿制作更轻松

还在为繁琐的演示文稿制作而烦恼吗?Deckset for Mac来帮您解决!它支持Markdown语言,让您只需专注于内容的创作,无需在排版和设计上耗费过多精力。丰富的主题和布局选项,让您能够轻松打造出专业级的演示文稿。快来体验D…

云计算第十二课

安装虚拟机 第一步新建虚拟机 选择自定义安装 下一步 选择稍后安装操作系统 选择系统类型和版本 选择虚拟机文件路径(建议每台虚拟机单独存放并且路径不要有中文)点击下一步 选择bios下一步 选择虚拟机处理器内核数量 默认硬盘或者自行调大硬盘 选择虚…

软件测试的分类

1.用户分类 2.查看代码分类 3.阶段分类

云计算十三课

centos安装 点击左上角文件 点击新建虚拟机 点击下一步 点击稍后安装操作系统,下一步 选择Linux(l)下一步 设置虚拟机名称 点击浏览选择安装位置 新建文件夹设置名称不能为中文,点击确定 点击下一步 设置磁盘大小点击下一步…

4.1 编写程序,从键盘接收一个小写字母,然后找出他的前导字符和后续字符,再按顺序显示这三个字符

方法一: 运行效果: 输入B,输出显示ABC;输入A,输出显示AB 思路: 1、通过键盘输入接收一个字母。 2、将输入的字母减去1,得到前导字符,然后输出。 3、将输入的字母加上1,得…

【python量化交易】qteasy使用教程07——创建更加复杂的自定义交易策略

创建更加复杂的自定义交易策略 使用交易策略类,创建更复杂的自定义策略开始前的准备工作本节的目标继承Strategy类,创建一个复杂的多因子选股策略策略和回测参数配置,并开始回测 本节回顾 使用交易策略类,创建更复杂的自定义策略 …