关于运维:实时数仓混沌演练实践

4次阅读

共计 5748 个字符,预计需要花费 15 分钟才能阅读完成。

一、背景介绍

目前实时数仓提供的投放实时指标优先级别越来越重要,不再是独自的报表展现等性能,特地是提供给上游规定引擎的相干数据,间接对投放经营的广告投放产生间接影响,数据提早或者异样均可能产生间接或者间接的资产损失。

从投放治理平台的链路全景图来看,实时数仓是不可或缺的一环, 能够疾速解决海量数据,并迅速剖析出无效信息,同时反对投放治理平台的手动控盘。实时节点事变,将可能导致整个投放链路无奈失常运行,另外,投放规定引擎是自动化操作,服务须要 24 小时运行,所以须要配置及时无效的数据品质监控预警,能疾速辨认到稳定异样或者不合乎业务的数据,从而打算引入混沌工程,心愿能够通过被动注入故障的形式、尽可能提前感知危险、发现潜在问题,并针对性地进行防备、加固,防止故障产生时所带来的严重后果,进步实时数仓整体抗危险能力。

二、演练范畴

为了能更粗疏反馈出混沌演练状况,依据演练的内容不同,将实时数仓混沌分为两局部:技术侧和业务侧

技术侧混沌:基于中间件、数据库、JVM、根底资源、网络、服务等注入常见的异样,依据理论业务中梳理的利用外围场景进行混沌演练,测验零碎的脆弱性和应急响应能力,从而晋升团队的稳定性保障解决能力。

业务侧混沌:对于电商流动密集型的公司来说,各种达到率、曝光率,以及更加宏观的 GMV、用户拉新数、用户号召数等,都能体现出业务的衰弱水平,在理论生存中,为了形容一种稳固状态,咱们须要一组指标形成一种模型,而不是繁多指标。无论是否采纳混沌工程,辨认出这类指标的衰弱状态都是至关重要的,所以要围绕它们建设一整套欠缺的数据采集、监控、预警机制,当业务指标产生稳定较大时,咱们能搞疾速感知、定位、修复止血。

过往数仓混沌工程均是技术侧,此次在投放链路已搭建实现主备链路的前提下,冀望通能够通过多轮业务侧混沌,进步零碎整体的数据异动感知能力。

三、演练打算

工欲善其事,必先利其器,在执行混沌演练前,须要筹备好前置工作,制订正当的演练 SOP、计划、打算,对演练环境、脚本、数据、工具,场景及爆炸半径等进行可能性评估,在确认可行性 ok 的状况下,约好关联方工夫,再进行实际操作。

本篇次要和大家分享基于业务侧的实时数仓混沌演练过程:

1. 编写演练 SOP

SOP 是一种规范的作业程序,就是将某一事件的操作步骤和要求,进行细化、量化及优化,造成一种规范的操作过程,对于业务侧混沌,尤其是实时数仓数据相干的演练,咱们也是第一次做,目前在业界也没有找到相干的演练领导参考,处于摸索阶段,为了不便我的项目进度的顺利进行及后续演练操作更加标准、高效,在演练后期大家通过沟通、探讨后,项目前期梳理的 SOP 演练模板,如下:

2. 演练计划调研

先收集实时数仓投放链路外围指标范畴,在此基础上,拉取一段时间内的历史数据进行剖析,找到每个指标对应的衰弱稳定阀值,从而在配置相应的 DQC 规定监控,对于稳定不在衰弱阀值的异样指标,在分钟级别(预期 15min)内及时告警,并疾速排查响应。为此,在演练后期,咱们经验过一系列的计划调研、摸索,如下:

「下文提供的计划,指标数据都是以设施激活数为例进行剖析」

  • 计划一: 依照天维度,收集最近一段时间,同一天每个整点设施激活数,占当天大盘占比,统计出最小值、最大值,作为该指标的衰弱稳定阀值;
  • 计划二: 依照天维度,收集一段时间内,同一天相邻整点指标稳定 数据找法则,比方每天上午 9 点到 10 点的稳定数据,而后别离通过一系列的数学散布办法进行数据统计,从而心愿找一个绝对稳固的稳定区间;
  • 计划三: 依照天维度,收集一段时间内,相邻天整点指标稳定 数据找法则,比方昨天上午 9 点到前天上午 9 点的稳定数据,而后别离通过一系列的数学散布办法进行数据统计,从而心愿找一个绝对稳固的稳定区间;
  • 计划四: 在后面三种计划的根底上,指标在工作日和周末的稳定可能不一样,所以咱们在日维度统计的根底上,咱们也调研了 周维度同比稳定 散布状况,比方每周一上午 9 点到上午 10 点的稳定数据,而后别离通过一系列的数学散布办法进行数据统计,从而心愿找一个绝对稳固的稳定区间;
  • 计划五: 同理,咱们也调研了 周维度环比稳定 散布状况,比方本周一上午 9 点到上周一上午 9 点的稳定数据,而后别离通过一系列的数学散布办法进行数据统计,从而心愿找一个绝对稳固的稳定区间;
  • 计划六:基于主备链路,在 source 源雷同的状况下,通过实时数仓计算出的指标,在同一段时间两条链路 sink 进去的后果数据,失常应该是保持一致,或者稳定较小,比方 10 分钟提早的主备链路,稳定不超过 10%,均匀差别做到一致性做到 90% 以上。

计划 1 到 5,都尝试过一遍,每个计划场景数据通过最大值、最小值、平均值、各百分位散布、方差、标准差等统计进去的数据分析,很难找到一个相当稳固的稳定法则,也无奈框定指标具体的阀值区间,理论演练过程,如果设置的稳定告警阀值过大,实在生产上业务数据稳定异样时,无奈及时告警发现;设置过小,将导致告警频繁,对其准确性、有效性可能存在质疑,而且,实时投放的外围指标有几十个,每个指标对应的衰弱阀值都不一样,要收集、剖析老本十分高,从演练的成果上看,也不是很显著。

整体评估下来,演练次要采纳的是计划六:波及到的实时投放外围指标数共收集 29 个,一段时间内(15min),主备链路指标稳定差别不超过 10%。

3. 演练形式

红蓝反抗演练,将团队分为红(防)蓝(攻)两组。

测试人员组成蓝军:负责制订混沌演练计划,执行指标零碎故障注入,具体记录演练过程;

实时数仓开发为红军:负责发现故障、应急响应、排除故障,同时验证零碎在不同故障场景下的容错能力、监控能力、人员响应能力、恢复能力等可靠性能力。

四、演练流程

整体演练过程,大抵分为三个阶段:筹备阶段、攻防阶段及复盘阶段。

1. 筹备阶段

  • 计划筹备完评审通过后,确认好链路打算;
  • 蓝军按计划依据当时制订的攻打计划,提前准备好相应的测试数据、脚本;
  • 红军按计划依据当时制订的攻打计划,在演练前,提前确保环境可用,并进行监控进攻、应急响应措施。

2. 攻防阶段

  • 蓝队依据当时制订的攻打计划,模仿实在的攻击行为,依照约定的工夫在演练链路(备用链路)进行攻打,进行故障注入,同时记录好相应的操作步骤,不便后续报告梳理;
  • 红队在蓝军攻打后,通过飞书 / 邮件告警等告诉形式实时关注监控零碎运行状况,如有异样告警,需第一工夫进行问题排查定位,在评估修复计划;
  • 在攻防反抗的过程中,蓝军可依据红军的进攻措施进行调整和改良攻打策略,尽力冲破零碎的进攻并达到既定目标,同时红军也可剖析蓝军的攻打手法和行为模型,不断改进进攻措施来增强进攻。

3. 复盘和改良阶段

  • 在混沌演练完结后,进行总结和评估,剖析红队和蓝队的体现,评估零碎的安全性和抗攻击能力;
  • 总结经验教训,总结胜利的进攻措施和失败的攻打手法,以便于改良零碎的安全策略;
  • 依据评估后果和总结经验,制订改良打算,修补零碎中的破绽和薄弱点,晋升零碎的抗危险能力。

五、攻防实战

本次演练共计有 29 个指标稳定 case,整体演练操作大同小异。

以其中 case17“召回商品珍藏 uv 在某个渠道下整点稳定异样”为例,具体的演练操作流程如下。

1. 数据筹备

  • 通过后盾数据库,拉出生产主 (备) 链路,某个渠道(如media_id = ‘2’)下某个整点(如hour = 10)下,召回商品珍藏 uv 对应的整体统计值 N。
-- 渠道小时整点维度下,商品珍藏 uv 汇总数据
    select
      ` 指标名称 `,
      ` 日期 `,
      '2' as ` 指标 ID`,
      ` 小时段 `,
      sum(` 指标值 `)
    from table_a
    where
      date = date_format(now(), '%Y%m%d')
      and ` 指标名称 ` in ('商品珍藏 uv')
      and ` 小时段 ` = 10
      AND ` 指标 id` = '2'
    GROUP BY
      ` 指标名称 `,
      ` 日期 `,
      ` 小时段 `
    order by
      指标名称;
  • 拉出备用链路,某个渠道(如media_id = ‘2’)下某个整点(如hour = 10)下,具体的一条明细数据,记录商品珍藏 uv 对应的值为 n, 把 n 改为 n +0.1N, 后续注入进备用链路,从而使得主备稳定差别在 10%。
-- 明细数据
    select
      t. 指标名称,t. 账户 id,t. 打算 ID,t. 设施类型,t. 指标值
    from
      (
        select
          ` 账户 id`,
          ` 打算 id`,
          ` 指标名称 `,
          ` 指标值 `,
          ` 设施类型 ` ,
          row_number() over (partition by 指标名称 order by 指标值 desc) as rn
        from  table_a
        where
          date = date_format(now(), '%Y%m%d')
          and ` 指标名称 ` in ('商品珍藏 uv')
          and ` 设施类型 ` = '召回'
          and ` 小时段 ` = 10
          AND ` 指标 id` = '2'
      ) t
    where
      t.rn = 1
    ORDER BY 指标名称;
  • 整顿后失去须要注入的数据数据,见标黄局部。

2. 故障注入 odps

  • 将须要注入的数据导入 odps。

导入前,须要在 datawork 空间中新建测试表 du\_qa\_dw\_dev.hundun\_case,用于导入演练数据

-- drop table if  EXISTS du_qa_dw_dev.hundun_case;
CREATE TABLE IF NOT EXISTS hundun_case
(message  STRING COMMENT '音讯内容')
COMMENT '混沌演练'
;
  • 往 du\_qa\_dw\_dev.hundun\_case 表里灌数。

  • 验证数据导入是否胜利。

3.odps 同步到 kafka

执行 flink 同步脚本,将 odsp du\_qa\_dw\_dev.hundun\_case 表表数据同步到对应的 kafka topic 中。

flink 工作脚本:

--SQL
--********************************************************************--
--odps 同步到 kakfa 脚本,用于实时数仓混沌演练异样注入应用
--********************************************************************--
-- 根本函数
CREATE FUNCTION JsonParseField AS 'com.alibaba.blink.udx.log.JsonParseField';
CREATE FUNCTION jsonStringUdf AS 'com.alibaba.blink.udx.udf.JsonStringUdfV2';
--- 同步账号表
CREATE TABLE `source` (message                        VARCHAR) WITH (
   'connector' = 'du-odps',
  'endPoint' = '***',
  'project' = '***',
  'tableName' = 'hundun_case_01',
  'accessId' = '*******',
  'accessKey' = '*******'

);

CREATE TABLE `kafka_sink` (
  `messageKey`  VARBINARY,
  `message`  VARBINARY,
  PRIMARY KEY (`messageKey`) NOT ENFORCED
) WITH (
  'connector' = 'du-kafka',
  'topic' = '********',
   'properties.bootstrap.servers' = '*******',
  'properties.compression.type' = 'gzip',
  'properties.batch.size' = '40960',
  'properties.linger.ms' = '1000',
  'key.format' = 'raw',
  'value.format' = 'raw',
  'value.fields-include' = 'EXCEPT_KEY'
);

INSERT INTO kafka_sink
SELECT
cast(MD5(message) as VARBINARY),
cast(message as VARBINARY)
FROM source
;

4.kafka 平台查问数据

执行完 flink 同步工作后,可通过后盾查问,对应的数据是否同步胜利。

5. 异样注入告诉

在异样注入实现后,能够通过飞书群告诉,告知红军,如收到告警,需第一工夫群告知。

蓝军:蓝军已实现数据筹备,请红军在演练前确保环境 OK 且已实现规定配置,另外务必将演练工夫打算及时同步告诉到上游关联方;

蓝军:已实现注入。

6. 告警触发告诉

  • 红军在演练前,可通过监控平台提前配置好进攻规定。
  • 在异样注入后,如合乎预期,在 15min 内发现指标稳定异样,红军需及时同步到演练群中。

中危 ** 双链路主备统一监控

服务名:**** 环境:****** 告警工夫:****** 触发条件:** 双链路比对稳定异样,继续 10 分钟 告警详情:指标:prd\_collect\_uv 主比照备降落:[-10%] 主:1066 备:956

业务域:实时数仓

利用负责人:***

  • 如不合乎预期,未在 15min 内发现指标稳定异样,红军需及时定位、跟进问题,并在修复后,沟通后续演练验证修复后果。

红军:15min 内未收到告警,定位中

红军:起因已找到,因为 *** 造成,导致告警数据没有及时收回,正在修复解决

红军:已修复,请红军从新发动攻打

7. 演练过程记录

收集、汇总记录演练过程中的每个操作,含工夫点、执行人、操作等,如下:

六、演练总结

七、将来瞻望

实时数仓业务侧的混沌演练,从 0 到 1,在通过一系列的摸索实际后,通过主备链路比对形式,演练期间对于异样稳定的指标,能够疾速辨认感知,从演练后果上,获得了不错的功效,但也存在肯定的局限性,如:

  • 演练期间,通过人工注入的异样数据,如无奈疾速革除,可能影响到备用链路应用。
  • 对于没有备链路的实时指标稳定,须要制订更精细化的可行计划,找寻指标衰弱稳定范畴。

这些都须要团队进一步去摸索、解决,同时在演练的过程中,咱们将一直积攒、丰盛演练 case、欠缺演练库,后续打算通过引入工具(平台)、建设演练帮助机制、定期定时演练等伎俩,使混沌演练更加自动化、规范化、常态化,进步实时数仓整体数据稳固。

* 文 / 袁宵

本文属得物技术原创,更多精彩文章请看:得物技术官网

未经得物技术许可严禁转载,否则依法追究法律责任!

正文完
 0