花 200 元测试 1300 个实时数据同步任务

原创
2023/11/17 08:50
阅读数 30

背景

对于将数据作为重要生产资料的公司来说,超大规模的数据迁移同步系统(1k、5k、10k 条同步任务)是刚需。

本文以此为出发点,介绍近期 CloudCanal 所做的一个容量测试:在单个CloudCanal集群上创建 1300 实时任务,验证系统是否健康。

这个健康度主要包括同步任务是否运行正常页面功能操作是否顺畅容灾能力是否可靠三个方面。

当然这个测试也带给我们一些新的思路和改进点,让产品更加健壮。

资源与环境

本次测试资源以云资源为主,详单如下:

资源用途 资源规格
console 2 个 2core8GB 虚拟机 (阿里云 ecs.u1-c1m4.large)
元数据库 1 个 8core16GB MySQL 8.0 (阿里云 RDS mysql.n2m.xlarge.2c)
sidecar 8 个 12core96GB 虚拟机 (阿里云 ecs.u1-c1m8.3xlarge)
业务库 2 个 4core8GB MySQL 8.0 (阿里云 RDS mysql.n2m.large.2c)
负载均衡 1 个 4 层负载均衡 (sidecar->console 7007 端口,阿里云 NLB)
1 个 7 层负载均衡 (CloudCanal 页面操作,console 8111 端口,阿里云 ALB)  

测试步骤

安装 console

安装节点

  • 机器管理>机器列表>添加机器,选择自动安装auto_install

  • 等待节点安装完成

    auto_install_result

业务数据库准备

  • 两个 RDS 分别创建源端 src_test_a 和 src_test_b 库,以及target_db_0~target_db_999 1000个目标库
  • 一个任务源端和目标分别是 src_test_a/src_test_b -> target_db_(i)target_1target_2
  • 源端各创建 1 张表,并各生成 1000 条数据source_1source_2

基于 OpenAPI 创建任务

  • 设置任务参数模版LE_256MB_TASK,以便生成任务时自动调整task_config_template

  • 获取 AccessKey 和 SecretKey 以便调用 API 创建任务ak_sk_fetch

  • 向元数据库插入128MB 规格数据prepare_spec_data

  • 编写调用 OpenAPI 代码,1 次 100 个任务创建,代码参考data_job_create_base_api

健康状况

  • 任务正常运行,任务查看/新建/启停/删除、任务调度、监控告警、页面功能查看均表现正常顺滑

    datajob_status

  • 控制台负载偏高,因为只用了 2 core 节点,需提升为 4 core

    console_status

  • 节点负载正常

    worker_status

  • 元数据库负载正常,qps 偏高,需要优化任务数据(状态、位点等)上传频率和方式

    db_status

可改进点

  • 任务数据(状态/位点等)上报频率、种类需要优化,对元数据库压力较高
  • 监控指标依赖的 promethus 需要进行调优

总结

本次容量测试是 CloudCanal 针对单集群 1000 个以上任务的场景验证,从中找到一些可能存在的问题并逐步改进,为大型客户大规模使用做好基本的验证与后续优化。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部