首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

谈谈跑批系统容量控制

背景

在公司初搭建一套主要用于跑批的系统,系统主要在T+1根据日新增交易和存量交易状态跑出结果,每日数据10G,每日全量数据20G;

采用技术为spring batch partition进行分片处理,按3-10万每片处理,片线程数没做限制,系统运行前几个月无异常,在数据量达到5G以上后导致跑批性能下降并出现部分分片跑批失败。如下图:

原因分析

数据库

在跑批失败日志中有很大部分由于数据库ltocktimeout错误,分析由于并行任务过大导致读写数据库非常大,导致数据库拿锁失败。

公共变量操作

由于跑批过程中需要对部分公共变量进行读写操作,在读写过程也会出现加锁或操作失败。

任务并行

在跑批过程中有多个并行任务,导致数据库、io(达到290M/s)资源竞争很大,很多任务处理等待,操作冲突等情况。

解决

经分析跑批系统可分解成任务、step、partition执行chunk,如图:

出现资源竞争主要是发生在并行上,只要控制了并发就可以控制资源强占,上图有两个地方可以并行,多个job和多个partition;

这两个并行的数量需根据资源数量进行计算;如一个job执行单step使用单片处理所占用的cpu、内存、共享变量访问、数据库读写、io读写流量,在多job并分片处理下,所占资源就是以n*n的流量,需控制流量就得控制job和分片的partition数量;

为了更好控制和业务对处理时效性要求不高的特点,系统采用job池和partition处理池,如果池内满了就把任务等候状态,待处理池空闲时继续加入处理直至处理完成。如下图:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190329A0PK0300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券