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

前端数据层高可用架构

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

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

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

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 为了实现 Nginx、Django、MySQL 和 Redis 的高可用架构,您可以使用以下步骤: 1. Nginx 集群:通过使用 Nginx 的负载均衡功能,您可以将多台服务器组合在一起,从而实现高可用性。 2. Django 集群:通过在多台服务器上运行 Django 应用程序,并使用 Nginx 对请求进行负载均衡,您可以实现 Django 的高可用性。 3. MySQL 集群:通过使用 MySQL 的主从复制功能,您可以将多个数据库服务器组合在一起,从而实现数据高可用性。 4. Redis 集群:通过使用 Redis 的分布式存储功能,您可以将数据存储在多台服务器上,从而实现高可用性。 通过实施这些技术,您可以实现 Nginx、Django、MySQL 和 Redis 的高可用架构。 ### 回答2: 要实现nginx, django, mysql, redis的高可用架构,可以按照以下步骤进行设计与配置。 第一步,搭建负载均衡 使用nginx来实现负载均衡,可以配置多个nginx服务器组成一个集群,采用轮询或者IP hash等负载均衡算法,将流量均匀分配给后端的django服务器。 第二步,配置django高可用 可以通过使用uwsgi或者gunicorn等工具将django应用部署为多个实例,并将它们放在不同的服务器上。通过配置nginx反向代理,将请求通过负载均衡方式分发给这些实例。当有实例出现故障时,负载均衡将请求自动切换到健康的实例上。 第三步,设置mysql高可用 数据库是应用的核心组件,可以通过使用主从复制来实现mysql的高可用性。将一台mysql服务器配置为主服务器,多台配置为从服务器,主服务器负责写操作,从服务器进行读操作。当主服务器发生故障时,可以通过自动切换将从服务器提升为主服务器,确保数据库的可用性。 第四步,配置redis高可用 可以使用redis的主从复制或者redis集群来实现高可用性。主从复制中,将一台redis服务器配置为主服务器,多台配置为从服务器。主服务器负责写操作,从服务器进行读操作。在主服务器发生故障时,可以将从服务器提升为主服务器。在redis集群中,将多个redis节点组成一个集群,每个节点保存部分数据,通过使用一致性哈希算法将数据均匀分布在不同的节点上,当有节点出现故障时,集群会自动进行恢复。 通过以上步骤的配置与设计,可以实现nginx, django, mysql, redis的高可用架构,确保系统能够在单个组件出现故障时继续提供服务。 ### 回答3: 要实现nginx django mysql redis高可用架构,可以采用以下步骤: 1. 配置负载均衡:使用nginx作为反向代理服务器,通过配置upstream来实现负载均衡。将多个django应用部署在不同的服务器上,且这些服务器的IP都添加到upstream中。这样,nginx将根据负载均衡算法将请求分发到不同的django应用服务器中。 2. 数据高可用:使用MySQL的主从复制或者主从集群来实现数据库的高可用。在主从复制中,将一个MySQL服务器配置为主服务器,其他服务器配置为从服务器。主服务器负责写操作,从服务器负责读操作。在主从集群中,使用多个MySQL实例进行复制,并通过主服务器自动选举机制来保证高可用性。这样,当其中一个数据库服务器出现故障时,其他服务器仍然可以提供服务。 3. 缓存高可用:使用redis的主从复制或者redis集群来实现缓存高可用。在主从复制中,将一个redis服务器配置为主服务器,其他服务器配置为从服务器。主服务器负责写操作,从服务器负责读操作。在redis集群中,使用多个redis节点进行数据分片,同时实现数据复制和故障转移。这样,当其中一个redis节点出现故障时,其他节点仍然可以提供服务。 4. 监控和故障转移:使用监控系统对nginx、django、mysql和redis进行监控,及时发现并处理故障。使用自动化工具来实现故障转移,当一个节点或服务器故障时,自动将请求切换到其他正常的节点或服务器上。 通过以上的架构设计,可以实现nginx django mysql redis的高可用性,提高系统的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值