一种多场景通用备份容灾方案

news2024/9/24 6:01:15

a72c46d57a74c324731f902460b06016.gif

导购链路中,因为业务对SLA的要求和下游无法保持一致,导致很多业务场景需要使用备份容灾。如当业务依赖的下游偶现异常或者超时的情况,在下游无法提供强依赖的数据时,为保证不空窗且当前业务对数据实时性要求不高时,可以使用备份数据来展示。

f59336a4a43dabb01a4f42f3b4a524ae.png

背景

针对以上情况,需要一份通用的备份容灾方案,能够适用于不同的场景的备份容灾,同时有分页,分桶的能力。即某个场景下可以备份多页数据,每页有多个分桶数据,避免在个性化推荐场景出现大面积异常时,消费者感知的容灾数据一致的问题。

a927cd81334d3e43148db6b83ac781bc.png

系统架构

  整体设计

系统架构图如下所示,其中业务层分为三部分,备份数据,容灾获取备份数据,清理脏数据。备份分为手动备份和定时备份,清理脏数据分为定时清理和手动清理。底层通用能力包括备份数据的处理,数据的备份方式和相关日志监控。

98a15dd81c9f562532ca8118cd003a9e.jpeg

结构化流程架构图如下:

6349d8aa0d388a68f50bbfed2cc484e2.jpeg

备份容灾分为3部分,以下分为三部分分别介绍

  备份数据

  • 自动备份

备份分为自动备份和手动备份,当容灾场景较为简单且可枚举,或者在部分推荐场景下,不适用于将某个用户浏览的历史数据作为备份数据,而需要一份通用的数据源作为备份数据,则使用自动备份通过定时任务请求服务数据作为备份数据。当容灾场景较多,无法枚举时,可使用手动备份,即使用用户旧的历史数据作为备份数据即可。当备份数据较大时,可以使用分片,分片的逻辑由业务方实现,在获取备份数据时,如果是分片数据也是由业务方实现组装。

自动备份

时序图如下所示:

33f4029fd09366ecc8a85da05f8c071a.jpeg

业务方需要在handler中实现以下内容:

  1. 获取下游数据的方法

  2. 如果当前备份数据需要分片,实现分片逻辑

定时备份的任务参数需要以下的配置信息

  1. 场景名称

  2. 获取下游备份数据相关的配置信息,如最大分页数等

  3. 分桶需要的参数

  4. 备份数据需要的参数,备份策略有多种,以下是常用的两种

cache备份,需要在配置中加入备份时间。

cdn备份,当服务端接口异常时,前端可以获取cdn数据作为备份数据,需要在配置中加入cdn地址。

  • 手动备份

时序图如下所示:

ddc3b849909ca7b9eec5dbd5179f7ab8.jpeg

手动备份时,业务方需要传入以下内容:

  1. 场景名称

  2. 备份策略(cache,cdn或者其他方式)以及备份需要的相关参数

  3. 备份频率(如5%,计算当前是否命中备份概率,防止频繁刷新备份数据)

  4. 需要备份的数据

业务方需要在handler中实现以下内容:(不分片则不需要实现任何handler)

  1. 如果分片,需要实现数据分片逻辑和分片对应的标识key

  备份数据中脏数据清理

数据清理分为自动清理和手动清理,自动清理可用于某些时效性数据,在失效时,设置定时任务进行自动清理。手动清理用于当备份数据出现了部分脏数据时,手动清理这些脏数据以免影响线上容灾效果。

  • 自动清理

时序图如下所示:

d5b95e294a41b690d9dc93fbb31d1edb.jpeg

自动清理的任务参数需要以下的配置信息:

  1. 自动清理的场景名称列表

  2. 自动清理任务开始时间

  3. 本次清理后是否需要自动生成新的备份数据

  4. 本次清理的唯一标识,以防重复清理

  • 手动清理

时序图如下所示:

df9228cbad729b0eacec14cfa513a799.jpeg

脏数据清理提供当备份数据清理,需要由业务方调用接口,接口入参需要有以下内容:

  1. 卡片id,由业务场景定义卡片id,如卖家id等

  2. 清理备份数据类型 ,如对cache/cdn多种备份数据清理哪些备份数据

  3. 场景名称:由此找到业务方自定义的清理类

业务方需要实现handler的逻辑:

  1. 根据入参id,将备份数据的卡片id和入参对比实现过滤

  容灾

时序图如下所示:

74246fd616d4126c3f7d1140e540defe.jpeg

以下是自定义不同场景容灾配置:

  1. 是否降级

  2. 场景名称

  3. 分桶相关的配置,如分桶数,分桶策略

  4. 过滤链策略

  5. 容灾使用的备份策略(默认为全部可用备份策略)

其中业务方需要实现handler的逻辑:

  1. 如果需要曝光去重,对传入曝光列表,将备份数据过滤,得到过滤后的数据

  2. 如果需要分片,对分片数据,组装分片逻辑

容灾中使用了如下的分桶策略:

  1. 强不同分桶策略,获取该场景下用户未浏览的分桶id,随机random一个,如果

  2. 没有未浏览,直接返回空

  3. 弱不同分桶策略,获取该场景下用户未浏览的分桶id,随机random一个,如果没有未浏览,则从已浏览的分桶id列表中,random出一个

  4. 相同分桶策略,获取该场景下用户浏览的分桶id,如果有多个,则random一个

  5. 如果业务需要,容灾也提供了备份数据的过滤逻辑:

  6. 时间过滤,即当前备份数据的时间如果是清理脏数据的时间之前,则认为是失效数据,直接过滤。

  7. 曝光过滤,卡片id由业务定义(如卖家id)

强去重策略,将备份数据的每张卡片id和已经曝光id比对,去除已经曝光的

弱去重策略,将备份数据的每张卡片id和已经曝光id比对,去除已经曝光的,如果剩下的结果为空,则放弃去除,直接透出所有的备份数据

0d9c82d4dec8fe6dc718daedeb445dbd.png

小结

本备份容灾有以下优点:

主动备份方式:

大部分备份兜底场景使用了用户的历史数据,本方案除了通过历史数据做兜底数据,也提供了主动备份的方式,可以获取当前实时数据作为兜底数据。

多种定制化的能力:

提供了曝光过滤的能力,当某个场景需要曝光过滤的时候,传入曝光过滤列表,即可筛选出非曝光过滤的备份数据,且提供了多种曝光过滤策略。

提供了分桶能力,可以实现当前场景下用户浏览不同分桶数据,提升用户体验。

提供了分片能力,当某个场景下每一页备份数据较大时,可以分片为多片数据存储,在容灾时,获取备份数据时,会自动组装数据形成原数据。

提供脏数据清理能力:

提供手动清理和自动清理,手动清理可以避免黑名单数据进入备份数据中,自动清理可以定时清理具有时效性的备份数据。

490ac2497e9d87b57d7396fab2a14e7d.png

团队介绍

我们是大淘宝用户平台技术部私域用户运营技术团队,主要用技术和产品能力,构建支撑商家持续经营的基础设施,数据化的为商家带来新的增长。在技术上,我们精益求精,用端到端的技术平台,直面百万级别的QPS,为商家生意的爆发保驾护航;在业务上,我们勇于突破,带领和支撑集团战略级的产品(店铺、订阅、商家会员等),从而推动整个淘宝天猫的增长;在人才上,我们渴望怀揣着有技术梦想的同学加入我们团队,一起为阿里巴巴零售体系的未来布局。感兴趣的小伙伴欢迎发送简历至lyj261018@alibaba-inc.com。

¤ 拓展阅读 ¤

3DXR技术 | 终端技术 | 音视频技术

服务端技术 | 技术质量 | 数据算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/376825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】单链表的C语言实现--万字详解介绍

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 文章目录1.链表1.1 链表的概念…

基于MSAM-YOLOv5的内河航道船舶识别方法

摘 要 针对内河航道上无人船识别目标时受背景复杂性和分布多样性影响而存在漏检的问题,提出了一种基于YOLOv5(you only look once)的算法。首先,提出了一种注意力模块MSAM(multiscale attention module,多尺度注意力模块),MSA…

【新型密集采样网络:遥感超分】

Remote Sensing Image Super-Resolution Using Novel Dense-Sampling Networks (基于新型密集采样网络的遥感图像超分辨率) 超分辨率技术在提高遥感数据的空间分辨率、克服星载成像系统的物理限制等方面发挥着重要作用。基于卷积神经网络(C…

可视化技术第一节课

主要内容通过echarts实现在网页上显示图表实现不同类型图表的转换实际操作&#xff08;1&#xff09;安装echarts如果想要安装echarts可以参考&#xff1a;安装步骤当然我们可以直接在我们的代码里面添加连接直接引用<script src"http://cdn.bootcss.com/echarts/4.8.0…

buu [BJDCTF2020]rsa_output 1 SameMod 1

[BJDCTF2020]rsa_output 1&#xff1a; 题目描述&#xff1a; {210583393373542878475341075446136053050154410905089240941988166912191033995268001128024163830889952539088574602667269256158268953033778016148293640346244751958599979431463055883159391307774504851…

2.27日报

情报上传接口添加字段&#xff1a;问题分配 调试手机号登录接口 解决困惑已久的bug&#xff1a;解析不到token; 问题描述&#xff1a; 在局域网下&#xff0c;前端页面请求时在请求头里携带token信息&#xff0c;后台获取不到header里的token参数&#xff0c;但是使用postma…

阶段八:服务框架高级(第六章:ElasticSearch3)

阶段八&#xff1a;服务框架高级&#xff08;第六章&#xff1a;ElasticSearch3&#xff09;Day-第六章&#xff1a;ElasticSearch分布式搜索引擎30.学习目标1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法&#xff08;桶聚合&#xff09;1.2.2.聚合结果排序1.2…

软件测试面试题 —— 整理与解析(2)

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;&#x1f30e;【Austin_zhai】&#x1f30f; &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xf…

python学生信息管理系统

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;python学生信息 免费获取完整源码源文件配置教程说明等 在IDLE中运行《学生信息管理系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时&#xff0c;有两种方…

SpringBoot2入门 第一个HelloWorld(参考尚硅谷SpringBoot2零基础入门教程)

文章目录0 官方文档1 系统要求2 maven设置3 HelloWorld3.0 需求3.1 创建Maven工程3.2 引入依赖3.3 创建主程序3.4 编写业务3.5 测试3.6 简化配置3.7 简化部署0 官方文档 https://docs.spring.io/spring-boot/docs/2.3.4.RELEASE/reference/html/index.html 1 系统要求 想要运…

RFS自动化测试工具安装与使用总结

一&#xff0c;调试 1&#xff0c;在调试时&#xff0c;总时提示“无法打开浏览器” 解决办法&#xff1a; 1&#xff0c;把浏览器的代理关闭 2&#xff0c;把浏览器的显示比例调到100% 3&#xff0c;在IE设置的安全选项中&#xff0c;把启用保护模式开启 4&#xff0c;去除进…

layui框架学习(12:进度条)

进度条是应用系统中的常见元素&#xff0c;无论是上传文件、下载文件、加载内容时都会显示进度条&#xff0c;Layui支持设置线条形进度条的样式&#xff0c;同时支持通过element模块动态操作进度条。   进度条样式分为两级结构&#xff0c;顶层一般为div元素&#xff0c;其cl…

【Opencv项目实战】背景替换:动态背景移除与替换(cvzone)

文章目录一、项目思路二、环境布置2.1、cvzone安装2.2、MediaPipe安装2.3、常见问题2.4、注意事项三、算法详解3.1、segmentor.removeBG()&#xff1a;去除背景&#xff08;抠出图像中的人&#xff09;3.2、cvzone.stackImages()&#xff1a;堆叠图像3.3、fpsReader.update()&a…

Hot Chocolate 构建 GraphQL .Net Core 服务

Hot Chocolate 是 .NET 平台下的一个开源组件库, 您可以使用它创建 GraphQL 服务, 它消除了构建成熟的 GraphQL 服务的复杂性, Hot Chocolate 可以连接任何服务或数据源&#xff0c;并创建一个有凝聚力的服务&#xff0c;为您的消费者提供统一的 API。 我会在 .NET 应用中使用…

mysql一两种索引方式hash和btree

1. Hash索引&#xff1a; Hash 索引结构的特殊性&#xff0c;其检索效率非常高&#xff0c;索引的检索可以一次定位&#xff0c;不像B-Tree 索引需要从根节点到枝节点&#xff0c;最后才能访问到页节点这样多次的IO访问&#xff0c;所以 Hash 索引的查询效率要远高于 B-Tree 索…

FFmpeg 编译和集成

背景FFmpeg 是一款知名的开源音视频处理软件&#xff0c;它提供了丰富而友好的接口支持开发者进行二次开发。FFmpeg 读作 “ef ef em peg” &#xff0c;其中的 “FF” 指的是 “Fast Forward”&#xff0c;“mpeg” 则是 “Moving Picture Experts Group” &#xff08;动态图…

隧道代理的工作原理是什么,为何爬虫使用起来更高效?

在网络爬虫领域&#xff0c;使用HTTP代理是非常普遍的一种技术手段。而隧道代理则是HTTP代理中的一种&#xff0c;它是指将请求通过隧道传输到代理服务器上&#xff0c;并由代理服务器向目标服务器发送请求&#xff0c;从而达到隐藏真实IP的目的。那么&#xff0c;隧道HTTP代理…

告别空指针让代码变优雅,Optional使用图文例子源码解读

一、前言 我们在开发中最常见的异常就是NullPointerException&#xff0c;防不胜防啊&#xff0c;相信大家肯定被坑过&#xff01; 这种基本出现在获取数据库信息中、三方接口&#xff0c;获取的对象为空&#xff0c;再去get出现&#xff01; 解决方案当然简单&#xff0c;只…

华为OD机试模拟题 用 C++ 实现 - 最优资源分配(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明最优资源分配题目输入输出描述备注示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注

2023 Java 分布式 面试 大纲

前段时间 &#xff0c;公司部门的HR找到我&#xff0c;说来了几份简历 &#xff0c;都是三年所有的开发 让我面一下&#xff0c; HR那边 一面核对了基本的信息 二面技术&#xff0c;是由我来接手&#xff0c;然后问了 一些分布式的问题 &#xff0c;大部分都是在围绕着SpringCl…