前端数据层高可用架构
前后端架构模式如下图
在这个架构下,客端数据可用率计算方式:
因此整体数据可用性分析表如下:
只有在客端和 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
下面分别详细说明几个部分的设计。