【前端数据层高可用架构】

前端数据层高可用架构

前后端架构模式如下图
在这里插入图片描述
在这个架构下,客端数据可用率计算方式:
在这里插入图片描述

因此整体数据可用性分析表如下:
工况	BFF 工作正常	BFF 工作异常
客端网络正常	数据可用	数据不可用
客端网络异常	数据不可用	数据不可用

只有在客端和 BFF 都正常的情况下数据才能可用,而这种情况占比不是很高,因此整体的用户体验就不是很好。

本次建设目标

本文的设计方案就是要解决这个问题,确保在目标链路上达成如下可用性:
在这里插入图片描述

前端架构设计方案

整体策略:DataDriven + OfflineFirst。

MVI 架构模式

当代最流行的客端程序架构方式,在 MVVM 基础至上演进而来,解决了 MVVM 数据追踪困难的问题,同时在 MVVM 的基础至上大大提升了架构的可测试性和可维护性。
在这里插入图片描述
在这个思想和架构之下,UI 作为用户交互门户,它的形式化表达如下:
在这里插入图片描述

什么是 DataDriven

数据在当代业务中的地位是十分重要的,客端程序作为接触用户的门户和唯一入口,数据在后台扮演决定性作用。
从某种程度上讲,客端程序可以用如下公式来表达:
在这里插入图片描述
app 的本质就是将企业的运营数据展示给用户,并且接受用户的交互来实时更新数据。
在这个抽象前提之下,数据启动(DataDriven)的架构设计思路就应运而生了。
DataDriven 的设计核心就是 app 总是展示能够获取到的最新数据,当数据有变更的时候,及时刷新数据展示给用户。

什么是 OfflineFirst?

移动设备网络的可用性并不一定总是能得到保证。设备往往免不了会遇到网络连接不稳定或速度缓慢的问题。用户也可能会遇到以下情况:
1.互联网带宽有限;
2.连接短暂中断,例如在电梯或隧道中;
3.偶尔才能访问数据。例如,使用的平板电脑仅支持 Wi-Fi 连接。
不管原因如何,应用通常可以在上述情况下正常运行。
为了确保应用可在离线状态下正常运行,它应该具备以下能力:
1.在没有可靠网络连接的情况下仍可使用;
2.立即向用户提供本地数据,而不是等待第一次网络调用完成或失败;
3.提取数据的方式考虑到电池和数据状态。例如,仅在理想情况下(例如充电或有 Wi-Fi 连接时)请求提取数据。
满足上述标准的应用通常称为离线优先(OfflineFirst)应用。

方案整体设计

OfflineFist 策略确保任何时候用户都能看到数据,而不是一个错误提示或者无数据界面。
Data Driven 策略确保界面总是展示最新的数据,当后台有数据更新的时候,会及时通过该机制通知上层业务进行界面或者逻辑更新。
OfflineFirst + DataDriven 的客户端架构整体示意图如下:
在这里插入图片描述
整体方案分为 4 部分
1.data flow:可监听的、可更新的、持续的、响应式的数据流,上层业务通过这个流来获取、感知底层数据变化
2.repository:负责策略的调度,和最终数据的提供,是数据层的门户入口
3.local data source:本地数据源,负责缓存数据到本地,并且提供数据给 repository,以供外部访问
4.net data source:网络数据源,负责拉取网络远端数据,并且提供数据给 repository,以便 repository 将数据更新到 local data source 并且更新到业务层

值得注意的是:
1.data 层会存在多个 repository,每一个 repository 负责一部分高度内聚的数据,多个 repository 将数据管理分散开

2.每一个 repository 背后至少有一个 data source,可以是 local 也可以是 net

3.repository 和 data source 都可以嵌套使用,比如 repository 内部可以包含其他 repository,data source 内部可以包含其他的 data source,但是 data source 内部不能包含任何 repository

下面分别详细说明几个部分的设计。

相关推荐

  1. 企业核心架构(可用 ,并发 ,复用)

    2024-07-18 11:24:04       55 阅读
  2. 【RabbitMQ可用集群架构

    2024-07-18 11:24:04       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 11:24:04       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 11:24:04       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 11:24:04       62 阅读
  4. Python语言-面向对象

    2024-07-18 11:24:04       72 阅读

热门阅读

  1. oracle 经营范围 设计

    2024-07-18 11:24:04       26 阅读
  2. VDI 和 DaaS 的区别

    2024-07-18 11:24:04       22 阅读
  3. react + pro-components + ts完成单文件上传和批量上传

    2024-07-18 11:24:04       25 阅读
  4. MongoDB 基本查询语句

    2024-07-18 11:24:04       22 阅读
  5. ubuntu 源码安装postgresql16.0

    2024-07-18 11:24:04       24 阅读
  6. 【Tomcat9正确配置server.xml请求头信息】

    2024-07-18 11:24:04       21 阅读
  7. MYSQL设计索引一般需要考虑哪些因素?

    2024-07-18 11:24:04       25 阅读
  8. 华为OD机考题(典型题回顾)

    2024-07-18 11:24:04       21 阅读
  9. 手写实现简单Redis命令客户端功能

    2024-07-18 11:24:04       18 阅读
  10. Leetcode 238. 除自身以外数组的乘积

    2024-07-18 11:24:04       23 阅读
  11. qt listview 列表文字显示不全,如何用悬浮显示?

    2024-07-18 11:24:04       18 阅读