小编了解到某家大型社交电商公司在 2020 年底完成了云迁移的动作,有幸与他们的性能测试负责人张哥(化名)进行了深入交流,为大家带回了一线情报。
1 次云迁移,每年可以节省 500 万的硬件成本投入,做么?
先别急着回答,迁移的成本、新平台的可靠性、过程的安全性些都是需要深思熟虑的。
企业可以运用云计算技术推动业务创新,实现敏捷、灵活管理,降低 IT 成本,以提高企业在新常态下的发展动力和竞争力。企业上云不再是新事物,但随着自身业务发展以及云计算服务产品的不断变化,为了以更低成本获得更好的服务,越来越多的企业需要面对云平台之间的迁移挑战。
该如何安全高效地进行云迁移呢?
小编了解到某家大型社交电商公司在 2020 年底完成了云迁移的动作,有幸与他们的性能测试负责人张哥(化名)进行了深入交流,为大家带回了一线情报。出于信息保护,以下我们简称该电商公司为 A。
敲定迁移方案,功能测试验证
2020 年底,A 公司做出了一项重大决策,要将公司业务从阿里云平台迁移至华为云平台。公司现有业务包含上百个应用以及数十 PT 的数据都要进行迁移,如何安全高效地完成迁移成了大家最关心的问题。若迁移之后业务在云上无法正常开展,那损失将不可估量,所以首先要做的就是敲定迁移方案。为了更好地检验迁移方案的可行性,测试一次肯定是不够的,更不可能直接上生产环境进行测试。A 公司测试团队先在华为云上搭建了一套最小单元的测试环境,用来测试不同方案的可行性以及完成华为云的中间件和阿里云中间件的对比验证。
先迁服务再迁数据的方案行不行?
涉及跨云功能测试,测试团队将数据库、redis 缓存这些保留在阿里云上,将应用服务先迁移至华为云。业务上需要跨云调用,由于两个云端访问时延较大,响应时间是正常的三倍以上。结果显而易见,先迁服务再迁数据方案是不可行的。
所以最终采用停机全量迁移的方案。
测试团队将所有服务、测试环境的数据同步上去,开始进行整个业务流程的功能测试。测试覆盖了像商品能不能新建活动,能不能正常下单,下完单后订单、资金、客服售后等全场景的流程能否跑通。业务流程正常跑通,功能实现上没有问题,那么接下来要做的就是系统性能测试,验证系统能不能达到高可用性,高稳定性及预期的性能指标。
挑选最优性能测试方案
“我们当时得出的结论是,用跟阿里云同一套应用代码和同一套数据来做压测,方便做数据对比,得到的性能测试结果也是最准确的。”正式开展性能测试前,测试团队针对多种测试方案展开了详细讨论。在这里遇到整个项目中最为核心的问题——如何处理压测数据?我们来看看在当时主要讨论的 3 种方案有何区别。
方案一:将阿里云的业务与数据 1:1 搬迁至华为云,在生产环境直接利用现有数据进行性能压测,完成后只对压测过程产生的测试数据数据进行清理处理。
方案二:同样是将阿里云的业务与数据 1:1 搬迁至华为云,在生产环境直接利用现有数据进行压测, 不同的是压测数据的清理更加简单粗暴,将数据层的数据库,文件,缓存,消息中间件等全部清理掉,重新全量同步一份。
方案三:第一步依旧是将阿里云的业务与数据 1:1 搬迁至华为云,然后引入生产环境全链路压测技术,对压测数据做标识,压测过程中对压测数据做隔离,达到压测数据不污染业务数据的效果。
方案被提出和讨论,必定是有其对应的优势和劣势,项目组在做决定前,也做了多次对比和论证。
先看方案一。这个方案的挑战点是复杂度极高,并且很容易对正式数据产生污染,具体有如下几点:
-
压测涉及数据表很多,很容易漏清理或者错清理,清理脚本的调试和清理后的验证也是一大工作量;
-
除了数据表里的压测数据,消息队列,缓存也会有压测数据,都给清理带来了极大的复杂度;
-
对于主键自增型的表还会影响后期增量数据的同步;
-
即使清除了压测数据,报表类应用仍会受到压测数据干扰,除非对报表类应用做些硬改造。
![](https://img2020.cnblogs.com/blog/1958490/202106/1958490-20210615163957565-1840254006.jpg)
再来看方案二。这个方案虽然也可行,但是这里面有两个问题,一是二次同步后没经过测试仍然存在风险,还是需要再进行次回归测试;二是数据迁移周期比较长,要完成数 PT 数据、文件迁移、缓存迁移预热等动作,动辄几周。这期间需要同时租用两边云环境的 1:1 机器,硬件成本投入是笔不小的开支,此外数据迁移需要各个业务线配合,二次迁移造成的人力资源的重复投入与浪费不容忽视。
最后我们来看看方案三。生产环境全链路压测技术的引入使得迁移新云环境性能测试这件事情变得很简单了。在压测前将所有业务的调用链路梳理出来,不用更改业务代码,利用数列科技的探针 agent 进行生产环境数据隔离,就能放心大胆地在生产环境去做压测,不必担心数据污染问题。
数列的 ForceCop生产压测数据隔离能力,现在支持数百款中间件,也包括云原生的中间件,能够让生产环境压测数据流入提前配置好的影子缓存,影子消息队列,影子库表里,不用担心影响业务数据。配合流量施压平台,压测控制台,能够在生产环境模拟海量用户进行操作,跑所有业务调用链路,测试结果自然真实可靠。经过综合考量,最终选定方案三进行性能测试,成本投入最少也最为安全。
1 个人的生产环境全链路压测实践
基于以上方案的讨论,兼顾 A 公司人员配置,最终项目组决定,完成性能压测这个光荣的任务就交给了性能测试工程师张哥。
影响着 200 万商家生意和 1500 万用户体验的大工程,之前也没有可复制的经验,1 个人如何扛起这支大旗?有遇到什么特别棘手的问题吗?在聊到这些问题时,张哥神色轻松。
第一步就是制定合理的压测目标,为保障业务的顺利开展,华为云的性能起码要与阿里云不相上下。为此张哥以 2020 年的大促性能目标为基准,将流量慢慢递增来做压测。参考之前做过的全链路压测性能表现数据,在同等流量条件下对比阿里云和华为云的响应时间,以此为依据去找寻网关、连接池、带宽、数据库等一些可以优化的地方。
1 个人肯定无法完成所有的工作,那最棘手的就是内部人员协作的问题。为了方便配合全链路压测结果及时进行性能优化调整,张哥特意将性能压测时间定在技术团队发版后的 1-2 个小时。这时大部分的技术人员都在,可以及时配合起来解决相关问题进行性能优化。
测试工作在张哥的调配下按计划进行,耗时十多天,完成了几轮生产环境全链路压测后,确实发现了不少的问题。
![](https://img2020.cnblogs.com/blog/1958490/202106/1958490-20210615164044577-2059199904.jpg)
出于信息保护内容做了打码处理
作为电商企业,高并发是业务的突出特性,加上 A 公司对 Redis 的依赖比较重,很多 Redis 接口都是循环调用的,所以对 Redis 连接数的要求就比较高。测试到一半的时候,突然出现 Redis 连接上不去的现象,通过排查发现是华为云的 Redis 的最大连接数配置有问题,无法满足其使用场景。
除此之外最让人印象深刻的就是华为云网关负载均衡问题,测试结果显示为曲线。华为云上有 3 套主 ELB 和 8 个子 ELB,可是压力永远只会在第 1 个 ELB 上,这个 ELB 打满了才会到第二个 ELB 上,单台服务器 cpu 65%其他服务器 15%,负载严重不均衡。
这俩典型的配置和环境问题如果不通过全链路压测是很难找出来的。A 公司技术团队联合华为云的驻场工作人员一起根据压测结果进行调试整改,最终成功完成所有性能优化。
经过前面的测试验证之后,就可以放心大胆地开展正式云迁移了。由于前期准备充分,主体迁移实际耗时仅 2 天,上线后业务正常开展,0 性能故障发生。
企业云迁移的趋势不可逆转,现今企业需要考虑的不仅仅是要不要进行云迁移,还要考虑如何安全地进行云迁移。我想生产环境全链路压测技术已经给出了自己的答案。
如果对全链路压测技术比较感兴趣的,可以加【小树】企业微信,邀您进群交流;如果对文中提到的压测平台感兴趣也可以私聊小树申请产品免费试用哦~