云场景实践研究第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

相关文章

Java中Runnable和Callable的区别和联系及使用场景

《Java中Runnable和Callable的区别和联系及使用场景》Java多线程有两个重要的接口,Runnable和Callable,分别提供一个run方法和call方法,二者是有较大差异的,本文... 目录一、Runnable使用场景二、Callable的使用场景三、关于Future和FutureTa

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

Spring Retry 实现乐观锁重试实践记录

《SpringRetry实现乐观锁重试实践记录》本文介绍了在秒杀商品SKU表中使用乐观锁和MybatisPlus配置乐观锁的方法,并分析了测试环境和生产环境的隔离级别对乐观锁的影响,通过简单验证,... 目录一、场景分析 二、简单验证 2.1、可重复读 2.2、读已提交 三、最佳实践 3.1、配置重试模板

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

Spring Boot 3 整合 Spring Cloud Gateway实践过程

《SpringBoot3整合SpringCloudGateway实践过程》本文介绍了如何使用SpringCloudAlibaba2023.0.0.0版本构建一个微服务网关,包括统一路由、限... 目录引子为什么需要微服务网关实践1.统一路由2.限流防刷3.登录鉴权小结引子当前微服务架构已成为中大型系统的标

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内