数据推送方案要点因素

大批量数据推送屡见不鲜,今天讲讲数据推送中需要考量和注意的因素

拉齐目标

  • 明确目的
  • 商定时间
  • 拉齐人员

评估量级

  • 数据量
  • 万条数据均耗时
  • 可用实例个数
  • RPC调用的QPS限制
  • 预估时长

数据源

  • 数据源的选择(slave、hive)
  • 读取逻辑(注意慢查)
  • 加解密
  • 数据组装

监控

  • DB压力
  • 连接情况
  • RPC调用的QPS、成功率
  • 异步推送消息监控
  • 任务进度显示
  • 线程池的监控(core/max/active/pool)
  • 读写速率控制(可参考使用ratelimiter)
  • 紧急暂停控制
  • 失败重试逻辑?(注意区分可重试与不可重试的,防止死循环)
// 发生异常时
	private void recordErrorNum(Long num) {
		totalError.incrementAndGet();
		errorNumList.add(num);
		if (errorNumList.size() > 1000) {
			synchronized (errorNumList) {
				if (errorNumList.size() > 1000) {
					LOGGER.warn("PrepareRetryRecordErrorNum:{}", errorNumList);
					List tmpErrorNumList = new CopyOnWriteArrayList<>(errorNumList);
					errorNumList.removeAll(tmpErrorNumList);

					// 重新投递
					retry(tmpErrorNumList);
				}
			}
		}
	}

// 手动触发补偿
	public Object doRetry(boolean resetTotalNum) {

		synchronized (errorNumList) {
			List tmpErrorNumList = new CopyOnWriteArrayList<>(errorNumList);
			errorNumList.removeAll(tmpErrorNumList);
			if (resetTotalNum) {
				totalError.set(0);
			}

			// 重新投递
			retry(tmpErrorNumList);

			int size = tmpErrorNumList.size();
			return "RetryCount=" + size;
		}

	}

执行

  • 小步快跑

1条、5条、10条测试链路连通性,数据的正确性

  • 逐步加量

100 /1000 / 10000 / 5w / 10w /…
推送后 等几分钟,注意监控系统状况,防止对其他服务造成影响

  • 快速调整

发现链路错误、不足,及时调整,快速修正

收尾

  • 推送情况检查
  • 资源回收释放
  • 总结复盘

你可能感兴趣的:(Java,java,数据推送)