cover_image

端侧如何实现自动容灾

栖柒 闲鱼技术
2021年08月12日 04:14

前言

对前端开发来说,如何保障用户访问的前端页面正常展示是我们需要关心的事情。影响页面是否正确展示主要依赖静态资源(css/html/js)数据和接口请求数据是否可靠。
前端开发都知道,其中最容易出问题的页面数据是接口请求的数据。因此,端侧的容灾重点也是对接口数据的容灾方案。具体介绍可查看
《端侧如何做容灾》文章。

容灾的基本流程

当接口请求失败的时候返回容灾的数据,保证前端页面的正常交互以及展示。

图片

我们将,容灾整体逻辑封装成一个前端npm工具,开发同学使用的时候能实现简单的调用;同时也提供了可视化的后台,对容灾的数据进行管理与分析。

开发使用接入流程

总体上,我们的方案在接入和使用的成本上是非常低的,但是容灾数据的备份还是依赖开发同学主动操作。

图片

手动备份数据的问题

一个接口(api+版本+参数)对应一条备份数据,如果是有限数量的接口,手动备份是可行的。但是对于类似商品详情数据接口,一个api,千变万化的入参,对应着千万级别的数据这类数据。这种情况,如果去手动备份数据就太废开发了。那么,是否有一个自动生成备份数据的方案呢?

对端侧来说要做自动容灾,要考虑清楚

•如何判断哪些请求数据需要自动备份?

•如何保障备份数据的准确性?

•如何管控哪些接口需要自动备份?

等一系列问题。

方案

做这个自动备份方案时,遇到最大的问题就是,如何触发自动备份数据。无非就是以下几种方法:

•遍历在线的接口数据,然后生成备份数据

  • 问题:1、线上接口数据过于庞大,定期定时去监控线上接口,资源开销过大

•端侧发起请求同时,也发起数据备份请求逻辑进行数据备份

  • 问题:1、需将数据备份的逻辑在C端暴露,有安全性问题
    2、无法感知接口是否存在备份数据,每次都需要去请求备份生成接口。

•当请求容灾数据发现未备份的时候,再去生成备份数据

  • 问题:只有异常发生的时候才会触发备份,第一次异常是兜不住的。

  • 优点:资源开销小,安全稳定,没有多余的接口请求。

对比优点来说,只牺牲一次的异常兜底失败这个缺点完全是可以接受的。所以我们就采用了这个方案去实现

自动容灾基本流程

图片

在这个基本流程上,为了保障自动容灾数据的准确性和可控性,还做了很多优化

一、通过可视化平台对需要自动容灾的接口进行管理
配置的白名单的接口就是自动生成容灾数据的目标接口

图片
二、通过对静态参数的设置来减少不必要的备份
如上如中所示的静态参数配置:即用来生成的备份数据固定参数;必要参数配置:影响备份数据准确性的参数
这样的目的可以收敛生成容灾数据,减少不必要的备份数据的生成
比如上面这个例子,接口静态参数为 {"pageSize":20,"pageNumber":1} ;
如果实际接口请求参数是 {"pageSize":20,"pageNumber":5};
那么生成的备份数据的请求的参数还是{"pageSize":20,"pageNumber":1} ;
三、将备份结果同步通知给对应的开发同学
通过建立页面和开发的对应关系,来讲对应的页面接口自动备份结果推送给开发同学进行确认。来保证容灾流程的正确性。
四、提供一键容灾能力
不符合自动容灾条件的接口,当出现异常的时候通知给对应的开发,同时提供一键注册容灾功能;
综上,在整合以上能力后,整理的自动容灾流程如下:

图片

一些收获和感想
自动容灾上线后,我们前端页面的容灾接入率从30%左右上涨到70%;容灾数据80%都是通过自动容灾生成的;极大的提高了容灾的覆盖率;当然在持续的运行中,这个覆盖率是会持续上涨的。在做容灾这个整体方案的时候,一开始就会有一个担心,像这种底层的稳定性保障技术方案。对于开发同学来说接不接日常影响不大,就算出线上相关问题了,主要的责任方也不是前端同学。所以,在做方案的时候想要极致的降低开发接入成本,包括自动容灾方案,默认接入,无感接入,低码接入等等,让相关的技术被真正的落地使用起来。最后在实际运行中,容灾兜住了几次线上接口的异常,为终端稳定性提供了保障。
后续展望
容灾项目上线运行的时候,我们也发现了很多接口数据上的问题。这些异常是服务端同学没有关注到的,比如接口状态返回200,但是实际返回的是异常数据。这类问题,我们将建立一个良性的监控反馈机制,补充健全服务端接口的监控能力,也给服务端同学对接口优化提供方向。同时,本地容灾的数据的实时性和准确性还是比较高的。那么在数据预取或者页面性能优化方面能提供怎么样的帮助呢?
关于以上两点,也是我们正在做的事情,如果有兴趣可以持续关注我们的公共号哦。有什么建议和问题也欢迎大家留言交流,期待下次的分享

图片


继续滑动看下一个
闲鱼技术
向上滑动看下一个