易仓跨境SaaS云原生数据库架构演进:PolarDB实践(一)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS SQL Server,基础系列 2核4GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 本文将介绍易仓跨境SaaS云原生数据库架构演进过程,并分享PolarDB MySQL引擎在易仓跨境SaaS实践经验。

本文将介绍易仓跨境SaaS云原生数据库架构演进过程,并分享PolarDB MySQL引擎在易仓跨境SaaS实践经验。


作者介绍:

程涵,高级DBA,主要负责易仓SaaS数据库架构设计,监控设计优化,性能调优以及新技术预研工作。


SaaS(Software as a Service,软件即服务)是指软件厂商将应用统一部署在其服务器上,客户根据实际需要向厂商订购及支付费用,并通过互联网最终获得服务的模式。相比于传统软件,SaaS最大的特点在于其多租户架构,包括容器、数据库等服务,对多租户的资源复用能够有效降低开发和运维成本,实现持续快速的升级迭代。早期SaaS软件服务商一般会使用Oracle或者SQLServer比较多,但因为生态、人才、成本的原因,国内厂商趋势慢慢转向MySQL及MySQL生态兼容的数据库。除了数据库选型外,还有一个必须要谨慎考虑的问题是,怎么隔离租户数据?早期一般采用按字段区分租户,所有的租户共享一套库表结构,数据隔离性会比较差,租户数据拆分困难,所以头部SaaS厂商慢慢转向按库分租户,每个租户一套表结构,并期望单实例可以支持更多租户,降低租户资源成本,同时实现更好的租户资源隔离,所以单实例往往会有几百上千租户,单实例要支持数百万表。


01 SaaS场景海量表


对于小租户,为了给租户提供更好的数据隔离性,易仓采用的是按库分租户的模式,数百租户共享一个MySQL数据库实例,单实例会有数百万张表,这对数据库是一个巨大的挑战。在MySQL实例海量表场景下,数据库实例在版本升级,参数变更,或者故障时,需要快速重启数据库恢复服务,但由于表结构太多,MySQL实例启动过程中,需要加载所有表文件,读取文件头页获取文件的meta数据,当表数百万时,表文件也有数百万,要读取的文件太多,每个头文件一次IO,重启时长甚至会长达数十分钟,对业务影响会非常大。另外,在海量表场景,热点表数量也会相应陡增,不仅系统要支持更大句柄数,而且需要更多内存资源缓存热点表的元数据和表文件句柄信息,DBA需要结合业务场景,不断优化参数来提升数据库性能。


以我们重点优化的两个场景为例:

首先,针对易仓跨境SaaS单实例数百万表单场景,易仓运维团队联合PolarDB MySQL团队做了专项快速重启优化,将表的文件meta数据下沉到⽂件系统superblock,一次IO可读大批量文件的meta,bypass所有的⽂件操作,单实例100万表的重启时间提速到30 ~ 60s,200万张可以控制在120秒内。重启时间大幅缩减到原来的1/10,大幅降低实例重启时的服务中断时间,保障易仓跨境SaaS服务可以提供高水平可用性。


image.png


其次,针对易仓跨境SaaS海量表场景,热点表徒增的问题,使用PolarDB默认参数配置,往往不能同时满足性能和稳定的要求。我们对部分核心参数进行了调优:


  • 调大参数open_definition_cache和open_table_cache,缓存更多热点表的元数据,提高打开表的效率,同时适当调低参数innodb_buffer_pool_size,让出一些内存给到open_definition_cache和open_table_cache,使得数据库的性能达到一个性能比较均衡状态。
  • 调大参数table_open_cache_instances,那么实例会创建更多open_table_cache对象,相当于增加了锁的分桶数目,降低了锁的粒度,减少高并发时锁冲突的等待时间,提升PolarDB数据库性能。


下表是我们跨境ERP在实践过程中,形成的一个PolarDB参数配置最佳实践。


image.png


02 快速DDL+并发控制


在SaaS场景多租户架构背景下,我们数百小租户共享一个数据实例,按库分租户,每个库一套相同的表。由于业务快速发展,版本迭代变更频繁,经常要给表加索引,给表新增、修改字段,删除表,truncate表数据等操作,这种一般都是由系统自动批量下发数据库,一次数百个DDL操作。


官方MySQL的实现里,很多DDL操作都是有锁变更,DDL会对表加MDL锁,会长时间堵塞数据库影响业务运行,导致业务变更效率太低,耗时不可控。其次针对很多涉及到数据拷贝的DDL操作,如建索引,修改主键等,MySQL的原生实现都是单线程穿行,对一些大表往往耗费数小时甚至数天的时间,进而导致失败概率高对业务的影响时间也长。


PolarDB MySQL支持Parallel DDL,利用并行 scan/build Index,和深度优化的并行merge sort,可以帮助我们大幅度提升加索引效率,将DDL的速度提升了10倍,极大的减小了发版变更对业务影响的时间窗口,进而减轻了运维团度的工作量。


image.png


另外,还有一个一直困扰我们的问题,怎样可以快速对表新增、修改和删除字段?在多租户架构下,虽然可能只能对一张表新增一个字段,但乘以租户数,DDL的数量动辄达到数百个,所以我们十分需要数据库支持快速DDL。上线PolarDB MySQL引擎后,现在可以秒级新增表字段,而且PolarDB即将推出秒级修改和删除字段的能力,在变更操作时只需修改表定义信息,无需修改底层数据,非常适合我们这种按库分租户的SaaS场景。


--使用秒级加字段功能,ddl操作加上algorithm=instant即可

alter table test.t add column test_column int, algorithm=instant;


下面对一张47亿行数据的表操作增加列,耗时仅0.02秒:


image.png


我们使用了PolarDB秒级加字段后,由于涉及到表元数据变更,还是会有短暂的MDL锁。这在PolarDB实例负载过高的情况下,对数据库实例中所有库一起加字段或者做其它DDL操作,还是可能会堵塞实例,所以我们希望可以分批次操作。基于PolarDB提供的语句并发控制CCL(Concurrency Control)功能,可以控制语句的并发数,避免堵塞数据库。比如,系统一次下发300个alter表语句,可以通过CCL限制一次并发执行30个,分10次执行,这块可以保证不会阻塞数据库实例。


  • 增加ccl规则

-- 限制表名为ec_product的alter语句,每次只能并发执行10个

dbms_ccl.add_ccl_rule('alter','','ec_product', '10', '');


• 查看ccl规则

dbms_ccl.show_ccl_rule(); -- 显示当前正在生效的限流规则


image.png


• 删除ccl规则


dbms_ccl.del_ccl_rule(75792); -- 删除编号为75792的限流


03 大量短连接优化

易仓应用开发语言主要是PHP,应用层面没有使用连接池,在数据库中会产生大量短连接。对每一个短连接,传统上MySQL都会创建一个独立的线程来响应请求。当MySQL数据库有大量的连接存在时,会出现频繁线程切换消耗CPU导致性能下降。同时大量的系统线程调度和缓存失效,也会导致数据库性能急剧下降。所以,我们期望数据库内核层面可以提升处理效率,在大量短链接场景保证性能不下降。

经过调研和测试,在应用端存在PHP大量短连接的场景,我们选择使用了PolarDB数据库代理层面自带事务级连接池功能,其大幅减少了短连接场景下频繁创建短连接给数据库带来的负载。PolarDB开启事务级连接池后,当客户端发送请求时,会先与PolarDB代理建连,代理不会马上将其与后端数据库建连,而是先从事务级连接池里查找是否存在可用的连接(库名、用户名、客户端IP三要素可以链接复用)。若不存在,代理会与数据库创建一个新连接;若存在,则从连接池里直接拿出并使用,并在当前事务结束后将该连接放回事务级连接池,方便下个请求继续使用。数据库层面支持连接复用,可以无缝地解决我们PHP大量短连接场景遇到的问题,业务无需做任何代码调整,极大的降低了业务开发成本。


image.png


04 计算快弹 + 存储按量付费

易仓主要做跨境电商业务,租户(卖家)会经常搞大促,特别在黑5、双11等节日,业务流量会徒增,MySQL数据库计算资源存储需要支持快速扩容,应对业务洪峰。租户业务也有生命周期,当租户停用下线时,如果数据库存储资源不能自动回收,会导致存储资源浪费,增加资源成本。传统上面对这种问题,一般通过迁移新实例或合并实例方式来回收存储资源,但耗时太长,运维成本会比较高。

PolarDB MySQL采用存储和计算分离的架构,所有计算节点共享一份数据,扩容时不需要迁移底层数据,增减节点可以在分钟级完成,可以满足我们跨境电商大促时,快速升配的需求。PolarDB存储采用分布式块存储设计和文件系统,使得存储容量不限制于单节点的规格,扩展比较容易,可以支持100TB级别的数据规模,我们不用担心会有存储容量瓶颈。而且存储空间无需手动配置,根据数据量自动伸缩,按实际使用量计费。租户停用下线清理后,存储会自动回收,节约资源成本。

基于共享存储架构的数据库完美解决了传统本地盘部署时,DBA需要面对的扩缩容及容量管理的挑战。极大降低了运维负担。

image.png


结语

一直以来,我们也有尝试各种类型的数据库,期望可以解决易仓在跨境SaaS遇到的独特问题和挑战。从早期自建MySQL,然后到RDS,再到TiDB…,中间我们也踩过很多坑,但一直没有找到一个完美的解决方案。

直到最后使用了PolarDB, 因为PolarDB在海量表支持、计算存储资源快速弹性伸缩、快速稳定DDL、海量短链接支持等方面的能力,完美的解决了我们SaaS场景遇到的各种极端问题。最终我们的业务在PolarDB的支持下持续稳定的进行迭代,更好的服务了我们的客户!

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
20天前
|
运维 Cloud Native 测试技术
极氪汽车云原生架构落地实践
随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。
|
1月前
|
人工智能 前端开发 JavaScript
代码采纳率从 22% 到 33%,通义灵码辅助数据库智能编码实践
通义灵码本质上是一个AI agent,它已经进行了大量的优化。然而,为了更完美或有效地调用模型的潜在能力,我们在使用时仍需掌握一些技巧。通常,大多数人在使用通义灵码时会直接上手,这是 AI agent 的一个优势,即 zero shot 使用,无需任何上下文即可直接使用通义灵码的能力。
|
18天前
|
弹性计算 负载均衡 网络协议
阿里云SLB深度解析:从流量分发到架构优化的技术实践
本文深入探讨了阿里云负载均衡服务(SLB)的核心技术与应用场景,从流量分配到架构创新全面解析其价值。SLB不仅是简单的流量分发工具,更是支撑高并发、保障系统稳定性的智能中枢。文章涵盖四层与七层负载均衡原理、弹性伸缩引擎、智能DNS解析等核心技术,并结合电商大促、微服务灰度发布等实战场景提供实施指南。同时,针对性能调优与安全防护,分享连接复用优化、DDoS防御及零信任架构集成的实践经验,助力企业构建面向未来的弹性架构。
161 76
|
3天前
|
存储 人工智能 开发框架
MCP 实践:基于 MCP 架构实现知识库答疑系统
文章探讨了AI Agent的发展趋势,并通过一个实际案例展示了如何基于MCP(Model Context Protocol)开发一个支持私有知识库的问答系统。
MCP 实践:基于 MCP 架构实现知识库答疑系统
|
18天前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
103 12
|
1月前
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
90 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
1月前
|
人工智能 运维 Cloud Native
2025年国内工单系统推荐:技术架构、场景适配与行业实践
分析了智能化升级、大数据驱动、云原生架构及全渠道融合四大技术趋势,从功能适配性、易用性、集成能力、安全性和性价比五个维度指导企业选型,并推荐合力亿捷等三家系统的优劣对比,结合电商和制造行业的实际案例,帮助企业提升客户服务水平与竞争力。
120 11
2025年国内工单系统推荐:技术架构、场景适配与行业实践
|
1月前
|
运维 安全 弹性计算
基于阿里云的开源应用智能管理架构设计与工程实践
本文以Websoft9技术方案为例,探讨企业级应用管理的范式。通过解析开源应用管理面临的部署复杂性、运维低效性和知识碎片化三大挑战,提出基于阿里云的三层架构:智能应用管理门户、核心功能层和基础设施层。文章详细阐述了应用编排标准化(IaC实践)、智能运维体系构建及知识资产数字化的技术实现路径,并结合金融与制造行业的案例,展示解决方案的实际效果。最后提供开发者资源与工具链支持,助力企业高效管理应用。
122 1
|
1月前
|
存储 消息中间件 缓存
支持百万人超大群聊的Web端IM架构设计与实践
本文将回顾实现一个支持百万人超大群聊的Web端IM架构时遇到的技术挑战和解决思路,内容包括:通信方案选型、消息存储、消息有序性、消息可靠性、未读数统计。希望能带给你启发。
56 0
支持百万人超大群聊的Web端IM架构设计与实践

相关产品

  • 云原生数据库 PolarDB
  • 下一篇
    oss创建bucket