葛天萌(智云)1.业界盛传的全链路压测是什么?全链路压测诞生于阿里巴巴备战双11过程中,如果说双11大促是阿里业务的“期末考试”,那么全链路压测就是大考前的“模拟考试”。诞生后,被誉为双11稳定的“核武器”,全链路压测对生产环境中的大流量业务场景进行高仿真模拟,获得最真实的线上实际承载能力,执行准确的容量规划,确保系统可用性。分布式架构和快速的业务发展给业务系统带来了不确定性。分布式环境中的任何节点都可能成为瓶颈/短板/问题。同时,随着业务的快速增长,系统可用性面临着更加严峻的挑战和不确定性。例如,单链路压测缺乏外部干扰和各种资源竞争,单链路压测结果普遍乐观,不能反映真实的系统承载能力。有些问题只有在真正的大流量下才会暴露出来,比如网络带宽、跨系统影响、基础依赖等等。全链路压测不仅仅是压测,更是一次真正的大促预演,预案演练、限流验证、破坏性演练等高可用方案的统一验收。其中,全链路压测的通病是如何在生产环境实现数据隔离:在生产环境编写压测时,需要保证压测期间不影响在线服务的正常运行测试,因此需要考虑将压力测试产生的数据与实际生产数据分开存储,避免脏数据对线上业务的影响。除了影子表方案,阿里云全链路压测平台还提供了影子库的数据隔离方案。在生产环境实现全链路压测的过程中,我们面临着为上述两种方案选择数据隔离方案的问题。本文首先对影子数据库和影子表两种方案进行了介绍和比较,然后针对常见的场景给出了方案选择的建议。2、全链路压测数据隔离方案选择目前,全链路压测平台提供影子库、影子表等解决方案。您应该如何选择适合您的解决方案?本文首先对两种方案的原理进行说明,然后从性能、稳定性、成本三个方面进行比较。1、方案一:影子库如图1所示,对于影子库方案,在同一个实例上创建对应的影子库。挂载在用户服务上的全链路压测探针在获取到流量指标后,会进行相应的旁路处理。如果是影子流量,会从影子连接池中获取影子连接,供业务方使用,从而产生压测流量。将数据旁路到对应的影子数据库,从而达到与生产数据库数据隔离的效果,从而避免压测流量产生的数据对生产数据库的污染。图1:影子数据库方案的基本原理二、方案二:影子表如图2所示,与影子数据库方案类似,对于影子表方案,在同一个实例的同一个数据库上创建一个对应的影子表.挂载在用户服务上的全链路压测探针在获取到流量指标后,会进行相应的旁路处理。如果是影子流量,那么探针会对这个DB调用进行SQL解析和替换,从而将压测流量产生的数据旁路到对应的影子表中。图2:影子表方案III的基本原理。方案对比本文主要从性能、稳定性、成本三个方面阐述两种方案的优缺点。图3:方案对比1.性能机器规格:4c8g并发规格:需要同时模拟两种流量,正常流量和压测流量。这里采用2:8的比例来模拟业务流量低峰期的生产环境。全链路压测。正常流量:200并发压测流量:800并发这里主要从服务所在主机和使用的数据库实例的监控来分析。其中,应用监控主要通过CPU、内存和平均RT这三个指标来分析。数据库实例监控从连接数和QPS两个维度来分析。从上述两种方案不同维度的指标对比可以看出,影子表方案对CPU的消耗略多,这与方案的实现有关。2.稳定性说到稳定性,可以从数据源实例的连接数规格、容量规格、IOPS、网络流量等方面进行分析。以上指标在此以连接数为例进行说明,具体如下:针对影库解决方案。由于不同的数据库是在同一个实例上创建的,如果数据库实例能够达到最大连接数的上限,理论上影子连接和普通连接是相互独立的,在执行过程中不会相互影响。对于影子表方案,由于在同一个实例的同一个数据库上创建了不同的数据表,所以这里必须考虑业务侧的连接池配置,因为影子流量和正常流量涉及的DB操作都涉及到DB操作和使用的数据库连接都来自同一个连接池,所以如果压测级别高,比较容易出现连接池连接瓶颈。3.成本根据表中内容,这里主要说明冗余成本和数据迁移成本,具体如下:冗余成本针对影子数据库方案。为了保证全链路压测评估结果的准确性,我们需要在一个实例上做全量的库迁移操作,包括表结构和表数据,会带来一个明显的问题,成本相对较低高的。所有基本的只读表(这类表不会有写操作)都必须有冗余副本,无法达到复用的目的,所以对于中大型企业来说是不能接受的。对于影子表解决方案,影子表是在同一个实例的同一个数据库上创建的。然后就可以复用生产库中的基本只读表,只需要为写表创建影子表即可。影子表方案在一定程度上减少了数据冗余带来的成本消耗。数据迁移成本从压测的主要流程来看,分为压前测试、压测和压后测试。其中,数据准备处于压力测试之前的阶段,压力测试的成功与数据准备密切相关。数据迁移的过程需要同时迁移与某个数据表关联的其他表字段。这个过程相对复杂且劳动强度大。因此,选择哪种方案需要结合业务数据的复杂程度进行评估。04小结综上所述,以上两种方案任选其一是不够的,单靠一个指标来判断是不够的。需要结合以上指标和具体的业务场景进行综合评价。下面通过两个典型场景来说明如何选择适合自己的方案。以下意见仅供参考。场景一:当涉及的读表比例高于写表比例,且整个数据库迁移成本较高时,建议选择影表方案,可以将复杂数据迁移的成本降低到一定程度程度。场景二:当涉及的写表比例高于读表比例,且生产数据库实例容量相对充足时,建议选择影子库方案,降低梳理和配置成本一定程度。
