对话首席架构师|阿里云迁云实战解析(二):零售上云全解析(下)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 本文整理自驻云科技首席架构师,阿里云MVP苏炎的分享。本文将与大家分享苏炎对云架构师在阿里云迁云实践案例中碰到和解决的一系列问题。

以下内容根据演讲视频以及PPT整理而成。

直播回顾,请点击这里。
回顾阿里云迁云实战解析(一):全面上云拐点已到,云架构师get 何种技能?,请点击这里。
回顾阿里云迁云实战解析(二):零售上云全解析(上),请点击这里。

优化方案:通过对该客户线下应用相关虚拟机配置与近期平均负载峰值进行统计,计算出集群总体的CPU和内存。另外在峰值的基础上预先配置了20%的容忍度,这在应用业务压力比较大的情况下可以自动帮助用户进行应用的扩容,同时也可以在某台主机发生故障的时候可以保证业务的稳定。这种方式不仅可以解决资源配置的问题,同时可以降低成本。

因为云资源是可弹性伸缩的,即使前期资源配置在正常情况下是满足,但是针对一些峰值情况如促销活动,通过合理规划、临时资源扩容可以快速满足用户的需求。而对于不使用容器化的用户,阿里云提供了专用宿主机的服务,通过CPU超分,轻松提升部署密度,类似于vSphere的超额预定,来帮助用户在资源规划的时候最大化降低成本。

screenshot

云上数据库设计:云上数据库如果全部按照1:1的模式来设计,成本会很高。因此该案例用户最终在云端只对主数据库创建了高可用的RDS实例,实现云数据库主备;另外实现了分库分表,一旦涉及到读写要求比较高或者并发要求较高的场景,可以通过只读实例,满足数据库读写分离需求,来提高应用的并发性能;对于HR系统、会员系统和报表系统,由于线下集群只有单台MySQL,上云之后采用的是单机基础版,虽然使用的是单机基础版,但是仍然可以使用DBS的数据库备份机制对数据进行秒级备份。下图是云上数据库的设计方案,具体是能否能够真正满足业务需求还需要看后面迁移完成后的压测结果,数据库包括架构设计也将会基于压测结果来做进一步的调整。

screenshot

数据库设计问题:上云过程中,即使前期进行了数据库设计,实施过程中还是可能会遇到一系列问题,如部分报表、数据库云上的执行速度比线下慢;同一执行的执行结果不一致;部分数据库的同步时间较长等等。

导致这些问题的原因主要有:
1) 出于成本考虑,使用单机基础版RDS,使得MySQL数据库版本需要从5.6升级到5.7,升级后导致最终的执行计划不一致,进一步导致数据库在一些特定的场景尤其是OLAP场景下执行变慢,需要通过参数调整和索引优化来解决;
2) 对于执行结果不一致问题,是因为单机基础版本RDS对于MySQL用的是SSD云盘,而SSD云盘本身的数据块是被打散的,数据读写到云盘上存在网络开销,由于网络抖动问题,读写到盘上的数据可能会存在不一致的情况;
3)针对第三个问题,一方面数据库同步主要是基于数据库分表机制,如果分库键的选择不合理,将会导致明显的数据倾斜,即一大部分数据集中在其中一个物理数据库实例上,这种情况下相对于其他数据库,该数据库的同步会比较慢。另一方面,目前在云上可以通过DTS对MySQL进行迁移,不同规格的DTS会对任务进行相应的限流,如果是因为这个原因所导致的数据迁移比较慢,则需要调整DTS的规格,比如从Medium调整到Large。

screenshot

应用改造
应用改造的关键在于对于云服务的适配性改造,这是建立在深度了解使用场景的基础上的,同时需要进行相应的代码改造。具体来讲,主要分为以下四方面:

• 分布式微服务框架:客户由于外包的原因同时使用了Spring Cloud和Dubbo,为了使基于Spring Cloud和Dubbo的服务可以同时被服务注册和服务发现,阿里云的EDAS是一个很好的选择,它可以兼容Spring Cloud和Dubbo;线上使用的EDAS公有云版后期出现了一些小问题,比如EDAS和阿里云容器服务之间的打通存在一定的限制,举个例子,作为容器化最核心的一个特点HPA,其前期设置一直无效,因为无法获得Pod的负载情况。最终发现导致该问题的原因是EDAS的某些部署方式,如灰度发布和批量发布,与HPA的设置是不兼容的,这种情况下需要重新部署Pod来解决该问题;另外如果使用阿里云的公有云服务,尤其需要注意Jar包冲突的问题。大家都知道,在导入共有云的时候,有些Jar包是相同的,以用于日志输出的Log4j的Jar包为例,公有云导入的是最新Log4j的Jar包,而原来的应用可能使用的是Log4j旧的Jar包,当通过Maven进行构建,导入公有云的时候可能旧的Jar包先被加载,这种情况下就会导致因为Jar包冲突而找不到某个方法的问题。因此在引入新的Maven Jar包依赖时,须进行必要的梳理,从而将一些可能会存在冲突的问题提前解决。

• 消息中间件:消息队列的修改相对来讲比较容易,由于线下原本使用的是私有输出的消息队列RocketMQ,到云上之后要做的主要是云服务适配性的改造,因为公有云有别于私有云,其上任何一个服务的使用都需要进行鉴权,即绑定云账号下的AK/SK;另外和线下不同,线上消息队列Topic数量可能会对成本产生很大的影响,因此除了生产阶段,开发和测试阶段可以通过通用Topic的使用来降低总体Topic的数量;还有一个问题是线下已经建好的Topic如何批量迁移到云上,为了保证正确性,具体实践中可以将建好的Topic导入Excel文件中,自研工具通过OpenAPI的调用将线下已有的Topic批量迁移的云上。
• OSS替换FastDFS:FastDFS本身并不存储原始的文件名,它上传的文件名是根据自定义的规则随机生成的。一般情况下,客户会将随机生成的文件名和文件名的随机路径相应地存储到一张表中,以记录该文件名对应的是FastDFS中的文件路径。这种情况下OSS替换FastDFS的具体实践是:首先将原有的文件批量迁移到同一bucket下;然后将bucket读写权限设置为Public,并设置Referer防盗链;另外新增的文件保存到单独设置的bucket下,并按月区分。目前OSS有OssImport工具来帮助用户实现文件的批量迁移。

• 容器化改造:容器化改造本身并不困难,因为它只是一个Dockerfile添加的过程,但是客户线下的应用存在一系列的问题,会阻碍容器化改造。首先是线下应用间依赖严重的问题,同一个Maven项目有很多依赖关系复杂的子项目,如果通过GitLab提交的方式、用GitLab CI触发编译的话,往往会失败,解决方法是用Jenkins替代GitLab CI;还有一个问题是Maven私有仓库很多jar包太旧,或者已经不存在,针对这个问题驻云科技对客户的jar包和私有仓库进行了梳理;另外该阶段也遇到了前面提到的Jar包冲突的问题,问题和解决方案在此就不再赘述。

screenshot

代码改造:上云的过程中涉及到代码改造,为此,驻云科技向客户提供了迁云改造代码分支管理的方式(如下图所示)。首先建立一个迁云改造代码分支,原来的代码分支正常使用,以保证客户应用的稳定,当迁云改造分支完成后,会合并到Develop分支,再从Develop分支拉出Release分支,通过Release分支的测试后发布云上应用版本。这种方式可以帮助客户提升迁云效率。

screenshot

全链路性能压测:全链路端到端的性能压测是整个迁云过程中非常重要的一环,它用于检验迁云改造后的应用是否真正满足业务的需要。因此,在迁云完成后,驻云科技对该客户的零售系统和报表系统进行了全链路性能压测,来查看相应业务场景主要业务流的运行情况(如并发量、响应时间和资源使用率),并将测试结果反馈给客户,由客户来判断当前的运行情况是否能满足其业务需求。针对该零售客户的系统压测,驻云科技选择了其中五个对并发要求比较高的场景,整个过程花费了大约两周时间,部分压测结果如下图所示。压测工具使用的是阿里云的PTS服务,同时结合了其云监控服务和驻云科技自有的监控平台。

screenshot

目录
相关文章
|
12天前
|
数据采集 消息中间件 监控
Flume数据采集系统设计与配置实战:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入探讨Apache Flume的数据采集系统设计,涵盖Flume Agent、Source、Channel、Sink的核心概念及其配置实战。通过实例展示了文件日志收集、网络数据接收、命令行实时数据捕获等场景。此外,还讨论了Flume与同类工具的对比、实际项目挑战及解决方案,以及未来发展趋势。提供配置示例帮助理解Flume在数据集成、日志收集中的应用,为面试准备提供扎实的理论与实践支持。
25 1
|
16天前
|
Linux 编译器 开发者
Linux设备树解析:桥接硬件与操作系统的关键架构
在探索Linux的庞大和复杂世界时🌌,我们经常会遇到许多关键概念和工具🛠️,它们使得Linux成为了一个强大和灵活的操作系统💪。其中,"设备树"(Device Tree)是一个不可或缺的部分🌲,尤其是在嵌入式系统🖥️和多平台硬件支持方面🔌。让我们深入了解Linux设备树是什么,它的起源,以及为什么Linux需要它🌳。
Linux设备树解析:桥接硬件与操作系统的关键架构
|
22天前
|
监控 前端开发 JavaScript
实战篇:商品API接口在跨平台销售中的有效运用与案例解析
随着电子商务的蓬勃发展,企业为了扩大市场覆盖面,经常需要在多个在线平台上展示和销售产品。然而,手工管理多个平台的库存、价格、商品描述等信息既耗时又容易出错。商品API接口在这一背景下显得尤为重要,它能够帮助企业在不同的销售平台之间实现商品信息的高效同步和管理。本文将通过具体的淘宝API接口使用案例,展示如何在跨平台销售中有效利用商品API接口,以及如何通过代码实现数据的统一管理。
|
2天前
|
存储 开发工具 对象存储
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
8 0
|
2天前
|
前端开发 Java
SpringBoot之三层架构的详细解析
SpringBoot之三层架构的详细解析
12 0
|
10天前
|
SQL API 数据库
Python中的SQLAlchemy框架:深度解析与实战应用
【4月更文挑战第13天】在Python的众多ORM(对象关系映射)框架中,SQLAlchemy以其功能强大、灵活性和易扩展性脱颖而出,成为许多开发者首选的数据库操作工具。本文将深入探讨SQLAlchemy的核心概念、功能特点以及实战应用,帮助读者更好地理解和使用这一框架。
|
11天前
|
Java 数据库 Spring
切面编程的艺术:Spring动态代理解析与实战
切面编程的艺术:Spring动态代理解析与实战
25 0
切面编程的艺术:Spring动态代理解析与实战
|
14天前
|
JavaScript API UED
Vue3.0新特性解析与实战:Composition API、Teleport与Suspense
【4月更文挑战第6天】Vue3.0引入了颠覆性的Composition API,通过函数式方法提升代码可读性和复用性,例如`setup()`、`ref`等,便于逻辑模块化。实战中,自定义的`useUser`函数可在多个组件中共享用户信息逻辑。另外,Teleport允许组件渲染到DOM特定位置,解决模态框等场景的上下文问题。再者,Suspense提供异步组件加载的延迟渲染,使用fallback内容改善用户体验。这些新特性显著优化了开发和性能,适应现代Web需求。
19 0
|
30天前
|
Ubuntu JavaScript 关系型数据库
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
在阿里云Ubuntu 20.04服务器上部署Ghost博客的步骤包括创建新用户、安装Nginx、MySQL和Node.js 18.x。首先,通过`adduser`命令创建非root用户,然后安装Nginx和MySQL。接着,设置Node.js环境,下载Nodesource GPG密钥并安装Node.js 18.x。之后,使用`npm`安装Ghost-CLI,创建Ghost安装目录并进行安装。配置过程中需提供博客URL、数据库连接信息等。最后,测试访问前台首页和后台管理页面。确保DNS设置正确,并根据提示完成Ghost博客的配置。
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
|
1月前
|
存储 分布式计算 网络协议
阿里云服务器内存型r7、r8a、r8y实例区别参考
在阿里云目前的活动中,属于内存型实例规格的云服务器有内存型r7、内存型r8a、内存型r8y这几个实例规格,相比于活动内的经济型e、通用算力型u1实例来说,这些实例规格等性能更强,与计算型和通用型相比,它的内存更大,因此这些内存型实例规格主要适用于数据库、中间件和数据分析与挖掘,Hadoop、Spark集群等场景,本文为大家介绍内存型r7、r8a、r8y实例区别及最新活动价格,以供参考。
阿里云服务器内存型r7、r8a、r8y实例区别参考

推荐镜像

更多