云场景实践研究第70期:秦苍科技

2023-10-28 15:30

本文主要是介绍云场景实践研究第70期:秦苍科技,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

更多云场景实践研究案例,点击这里: 【云场景实践研究合集】联合不是简单的加法,而是无限的生态,谁会是下一个独角兽
本文主要为大家分享了秦苍信息科技HTPA型数据库产品在现实中的落地应用,企业级数据库架构设计中遇到的问题以及基于云数据库运维的思考。

采用的阿里云产品
阿里云HTPA型数据库
阿里云云效(RDS)
阿里云HybirdDB
阿里运数据管理的工具DMS
阿里云DRDS
阿里云DTS
阿里云云监控

为什么使用阿里云
使用阿里云RDS可以开箱即用并且可以弹性扩容。随着秦苍业务量的增加,可以轻松地升级,比如硬件上的升级,以及外围辅助的升级等。

关于秦苍 
上海秦苍信息科技成立于2014年3月,目前大概遍布了全国的300个城市。秦苍科技的两个主要产品,一个是买单侠,主要针对的是年轻蓝领客户群体,提供一些消费场景下的分期金融服务。另一个产品主要目标用户群体是年轻的女性白领,主要为她们提供一些医疗美容的消费分期金融服务。目前秦苍科技公司的用户数大概为400多万,每个月新增大概20万用户,每天日活用户大概是在百万左右。秦苍科技目前做单的模式并没有完全放在线上,还是偏传统一点,会与线下的手机门店、医院、电动车销售商等这些商家合作,通过线下入口而不是直接通过APP进行操作可以说秦苍科技的商业模式还是比较偏传统的。

秦苍科技的技术栈主要是用的后台技术是基于Spring Cloud的微服务架构,部署则采用的是Docker技术,当然用的是阿里云的容器服务。系统最开始的数据库是单体架构的,所有东西都放到一起。而现在数据库有将近200个,并且对于数据库也做了拆分,目前线上的数据量已经达到了3 TB。 目前所使用的数据库架构主要采用了阿里云RDS。

面临的问题
数据库架构演变的过程当中遇到了很多问题,最初因为设计的问题,所有的数据是放在同一个实例库下,所以当出现比较高的并发时就会导致实例的CPU爆掉,进而导致数据库服务不可用。这就是所面临的问题,也是这两年时间秦苍一直在做的事情——迁移、解耦和拆分。在这个过程中,秦苍遇到了异构数据迁移的问题。另外随着公司业务的发展,规模的不断变大,在整个数据库运维当中出现了效率上的问题,主要是现在有大量的SQL审核工作要做,而且有频繁的生产发布,而每次发布都要等到比较晚的时间比如业务的低谷期来发布。还有一些高频的数据查询和变更需求。主要是研发人员需要去定位Bug要获取一些数据。在开始数据规模比较小的时候使用的是比较粗暴的做法也就是人肉支撑。当发展到现在的量级,现在有3个研发中心,300多个研发人员,而DBA只有四个人,需要从DevOps角度考虑如何去支撑这么多的用户。 
f07b678b06d69f0790bb5d9d679440466cbd037a

为什么选择阿里云?
秦苍科技的所有的技术全部选择放在阿里云,包括了对于数据库的选择。使用阿里云RDS比较直接的好处就是它可以开箱即用并且可以弹性扩容。随着业务量的增加,可以轻松地升级,比如硬件上的升级,以及外围辅助的升级,还可以非常方便地实现数据迁移,后来阿里云还提供了DTS服务,可以轻松实现异构数据迁移。

使用阿里云后的数据库架构之路
秦苍科技最早数据库的架构设计,是一个比较简单的单体架构,all in one,所有数据全部放在一个库里。而且随着数据量的增加,OLTP都达到千万级,对于数据可用性无法保障。随着业务的发展,后台服务要进行微服务化架构,进行服务改造。数据库应该尽量配合后台进行微服务化的改造,那么如何进行微服务拆分呢?最后采取分组分层的方法,对于整个数据库进行架构的调整。
分层就是根据业务的需求特征进行分类划分主题域,与仓分析建模的概念相似。将数据库分成不同的层次,分组就是对主题域数据进行进一步抽象和归纳,这可能会包含多个实例或者多个库。而针对一些业务量特别大的场景,也有使用阿里云DRDS实现水平的分表分库方案。
在分组分层时,为了节省资源和方便管理,把不同的数据库暂时放在同一个实例上,但数据库的账号却是完全隔离的,只拥有访问某些数据库的权限。随着业务量的增加,出现性能问题,就可以基于阿里云DTS数据迁移服务,把数据拆分开迁入到性能比较好的实例上去。
秦苍科技同时引入了阿里运数据管理的工具——DMS,主要解决线上实时数据的查询问题,能够做到安全的管控。另外对大数据平台计算之后的数据也做了集中的管控,可以为线上提供一些数据支撑。
微服务分布式架构演变过程中少不了数据迁移,数据迁移必然会涉及到对老模型分析、新模型设计以及新老模型之间的映射和转码等问题,所以迁移之前要做好充分准备。首先要制定迁移总体方案,包括迁移准备、实施步骤、关键点控制、应急预案等。秦苍科技借助阿里云DRDS中间件实现对核心表的水平拆分。在上线过程当中, 借助阿里云DTS数据迁移和订阅服务大大降低了停机时间并实现了应急预案。 

基于云数据库运维的思考
将所有的东西放在阿里云上使秦苍科技的工作发生了本质变化。第一个是工作前置化成为可能,使DBA向DA转变成为了可能,从之前数据库运维管理到数据的应用。向数据生命周期管理的方向靠拢是目前一个工作重心,系统有生命周期,数据一样也应该有生命周期。数据的生命周期从最初的设计到发布、维护,再到下线。而现在好多数据在设计时没有考虑它的生命周期,数据很难产生最大价值,如果把一个比较小的系统设计成高并发或者高可用的方案,会造成额外的运维和经济成本。
下图对整个DBA行业做了分类,大概分为运维DBA、应用DBA以及业务DBA。每个角色的工作重点各不一样,运维DBA更加偏重于数据库的安装和配置、HA高可用、备份容灾以及升级扩容等,这些已经被云做掉了;应用DBA是秦苍当前所处的阶段,主要偏重于数据库相关技术选型、容量规划、性能优化和运维自动化等,其实阿里云也在将该部分工作实现自动化和智能化,包括CloudDBA、DMS、DTS等外围增值服务, 推动秦苍从应用DBA转向业务DBA。目前秦苍也在向这方面去靠拢和思考,后面的工作重心会更多地放在数据库的架构以及数据的应用上,让数据产生更多的价值,为业务提供数据支持。 
c40711be3a83c9553718f6d48c7d18dbee445a92

关于上海秦苍信息科技的更多实践详情: 买单侠数据库架构之路 
原文发布日期:2017-11-02
云栖社区场景研究小组成员:董黎明,仲浩。

这篇关于云场景实践研究第70期:秦苍科技的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/294172

相关文章

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

java中Optional的核心用法和最佳实践

《java中Optional的核心用法和最佳实践》Java8中Optional用于处理可能为null的值,减少空指针异常,:本文主要介绍java中Optional核心用法和最佳实践的相关资料,文中... 目录前言1. 创建 Optional 对象1.1 常规创建方式2. 访问 Optional 中的值2.1

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解