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

前端数据层高可用架构

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

因此整体数据可用性分析表如下:
工况	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

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

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

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

相关文章

Python Linux环境(Centos8)安装minicoda3+jupyterlab

文章目录 安装miniconda安装python环境启动 最近服务器检查,我下面的服务器有漏洞,不得已重装了,正好记录下怎么从零到python写代码。 安装miniconda miniconda是anconda的精简版,就是管理python环境的得力助手。 # 创建一个名…

C语言 do while循环语句练习 下

猜数字游戏实现 //猜数字游戏 //电脑产生 一个随机数&#xff08;1-100) //猜数字 //猜大了 //猜小了 //直到猜对了&#xff0c;结束 #include <stdlib.h> #include <time.h> void menu() {printf("********************************\n");printf("…

【Redis7】高阶篇

1 Redis单线程 VS 多线程(入门篇) 1.1 面试题 redis到底是单线程还是多线程&#xff1f; IO多路复用听说过吗&#xff1f; redis为什么快&#xff1f; 1.2 Redis为什么选择单线程&#xff1f; 1.2.1 是什么 这种问法其实并不严谨&#xff0c;为啥这么说呢? Redis的版本…

怎么将图片插入excel单元格中

首先选中单元格选择插入 在图片位置选择插入图片的位置 然后就插入成功了&#xff0c;一开始会觉得图片是附在表格上面的&#xff0c;并不在单元格里面&#xff0c;但是右边有一个小图片的图标&#xff0c;点击它可以缩小到单元格里面&#xff0c;再点击就是放大&#xff1b;

【无人值守】对数据中心电力分配系统发展的影响

数据中心在现代信息发展中承载着巨量数据的计算、存储、挖掘、分析和应用等多个方面的功能&#xff0c;是国计民生各行业的多样化的信息化的资产。对稳定的运行与安全运维是基本需求也是重要的保障。 数据中心属于高能耗产业&#xff0c;对用电负荷大且要求极度稳定。除了对电力…

ROS、pix4、gazebo、qgc仿真ubuntu20.04

一、ubuntu、ros安装教程比较多&#xff0c;此文章不做详细讲解。该文章基于ubuntu20.04系统。 pix4参考地址&#xff1a;https://docs.px4.io/main/zh/index.html 二、安装pix4 1. git clone https://github.com/PX4/PX4-Autopilot.git --recursive 2. bash ./PX4-Autopilot…

华为od 100问 持续分享4-目标院校及分数线

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2024年5月份开始&#xff0c;考的都是OD统一考试&#xff08;D卷&#xff09;&#xff0c;题库已经整…

TikTok账号矩阵运营怎么做?

这几年&#xff0c;聊到出海避不过海外抖音&#xff0c;也就是TikTok&#xff0c;聊到TikTok电商直播就离不开账号矩阵&#xff1b; 在TikTok上&#xff0c;矩阵养号已经成为了出海电商人的流行策略&#xff0c;归根结底还是因为矩阵养号可以用最小的力&#xff0c;获得更大的…

RTI DDS大数据碎片

有两种类型的碎片&#xff1a;IP级碎片和DDS级碎片。 当传输层&#xff08;通常是UDP或TCP&#xff09;提供的有效载荷超过适合链路帧的最大有效载荷大小&#xff08;也称为链路最大传输单元或链路MTU&#xff09;时&#xff0c;就会发生IP级碎片。如果网络是以太网&#xff0…

【大模型】FAISS向量数据库记录:从基础搭建到实战操作

文章目录 文章简介Embedding模型BGE-M3 模型亮点 FAISS是什么FAISS实战安装faiss加载Embedding模型创建FAISS数据库搜索FAISS数据删除FAISS数据保存、加载FAISS索引 总结 本人数据分析领域的从业者&#xff0c;拥有专业背景和能力&#xff0c;可以为您的数据采集、数据挖掘和数…

通用图形处理器设计GPGPU基础与架构(二)

一、前言 本系列旨在介绍通用图形处理器设计GPGPU的基础与架构&#xff0c;因此在介绍GPGPU具体架构之前&#xff0c;需要了解GPGPU的编程模型&#xff0c;了解软件层面是怎么做到并行的&#xff0c;硬件层面又要怎么配合软件&#xff0c;乃至定出合适的架构来实现软硬件协同。…

15- 微分方程

对三角函数不敏感

Linux - 基础开发工具(yum、vim、gcc、g++、make/Makefile、git、gdb)

目录 Linux软件包管理器 - yum Linux下安装软件的方式 认识yum 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式各命令汇总 vim底行模式各命令汇总 vim的简单配置 Linux编译器 - gc…

提高记忆力7种自然(高效)的方法

你的记忆力如何?你的认知功能是否如你所希望的那样强大? 如果没有,那么你肯定会对将在本文中与你分享的记忆改善技巧感兴趣的。 不管你怎么想,或者别人怎么说,提高你记忆信息的能力是完全有可能的。只要知道正确的方法即可。(别担心,你并不需要做出任何重大的生活方式改…

10 个 OKR 提示将改变您执行 OKR 的方式

我们都喜欢好的表情包&#xff0c;因为它们很有趣&#xff0c;可以分享&#xff0c;非常适合与同事们一起开怀大笑。表情包可以为工作场所带来一种友情和轻松的感觉&#xff0c;从而建立一种健康的团队文化&#xff0c;这一点很重要。然而&#xff0c;我们都知道它们也会分散注…

怎么减少pdf格式的内存,怎么减少pdf文件大小

在数字化时代&#xff0c;pdf文件因其格式稳定、兼容性强等特点&#xff0c;成为工作与学习中的常用文档格式。然而&#xff0c;较大的pdf文件往往给存储和传输带来不便。本文将为你详细介绍如何巧妙减小pdf文件内存&#xff0c;助你轻松解决文件传输和存储的烦恼。 让我们来看…

基于SpringBoot的招生管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Eclipse、Navicat、Maven 系统展示 首页 个人中心 学生管理 专…

[C/C++入门][ifelse]19、制作一个简单计算器

简单的方法 我们将假设用户输入两个数字和一个运算符&#xff08;、-、*、/&#xff09;&#xff0c;然后根据所选的运算符执行相应的操作。 #include <iostream> using namespace std;int main() {double num1, num2;char op;cout << "输入 (,-,*,/): &quo…

OWASP 移动应用 2024 十大安全风险

1. OWASP 移动应用 2024 十大安全风险 开放全球应用程序安全项目 &#xff08;OWASP&#xff09; 是一个非营利性基金会&#xff0c;致力于提高软件的安全性。自 2014、2016 年两次发布了移动应用的十大风险后&#xff0c;今年再次发布2024版。这对移动应用软件的检查工具有着…

xcode下swift .infinity报Invalid frame dimension (negative or non-finite)错误

xcode又报错了&#xff1a;Invalid frame dimension (negative or non-finite) 报错原因 xcode升级后&#xff0c;调整frame的时候不建议使用width: .infinity或者height: .infinity 解决办法 1.使用 maxWidth 属性&#xff1a; 通过将 frame 的宽度属性更改为 maxWidth&am…