业务定制型异地多活架构设计

news2025/1/10 17:44:07

1个原理

大道至简-异地多活核心原理

异地多活本质上是 CAP 中的AP

大道至深-CAP

粒度

CAP 关注的粒度是数据,而不是系统,需要根据不同业务的数据特点来设计异地多活

延迟

CAP 是忽略网络延迟的 ,但工程落地不可能做到零延迟

分区容忍

C和A只能取1个是在发生分区的时候,正常运行情况下,可以同时满足 CA

补救

放弃 != 无为,需要为分区恢复后做准备,包括人工修复数据

3大原则

原则1-只保证核心业务

在这里插入图片描述

不同业务的数据特性不同,无法全部做到异地多活

原则2-只能做到最终一致性

在这里插入图片描述

复制肯定有时间窗,抛弃实时一致性的幻想,PACELC 理论

原则3-只能保证绝大部分用户

在这里插入图片描述

不要为了0.01%的用户,而影响了99.9%的用户

4个步骤

业务分级

将业务按照某个维度进行优先级排序,优先保证TOP3 业务异地多活

维度说明
访问量登录>注册>修改密码
核心场景聊天>朋友圈>摇一摇
收入来源订单>搜索>编辑

数据分类

分析 TOP3 中的每个业务的关键数据特点,将数据分类

维度说明
数据修改量数据被修改的数量和频率,包括新增、删除、修改
一致性数据的一致性要求,例如:强一致性(余额、库存),最终一致性(动态)
唯一性数据的唯一性要求,例如:全局唯一(用户ID)、可重复(昵称)
可丢失性数据是否可丢失,例如:不可丢失(账户余额)、可丢失(微博、密码)
可恢复性数据是否可恢复,例如:用户恢复(微博)、系统提供恢复(密码找回)、内部恢复(编辑和运营重发)

数据同步

针对不同的数据分类设计不同的数据同步方式

在这里插入图片描述

多管齐下,“不择手段”,不要局限于存储系统同步

数据同步技巧

数据修改量一致性唯一性可丢失可恢复同步技巧
账号强一致性全局唯一数据库同步+消息队列同步
密码最终一致性不涉及数据库同步
余额强一致性不涉及数据库同步
库存强一致性不涉及数据库同步
微博、资讯、朋友圈动态最终一致性可重复是,用户或运营重发存储系统同步
Session最终一致性全局唯一是,系统重新生成重新生成+回源读取

异常处理

针对极端异常的情况,考虑如何处理,可以是技术手段或非技术手段

业务兼容

体验不好 优于 无法体验

  1. 数据短时间不一致:业务有损,例如微博、朋友圈
  2. 数据无法获取:转账申请,支付核对中

事后补偿

少量用户损失,用钱解决

  1. 礼包、红包
  2. 礼物、物品(暴雪炉石回档补偿)
  3. 保险赔偿

人工修正

尽力而为,减少损失

  1. 人工订正数据,达到最终一致性
  2. 重要事情说三遍:日志、日志、日志

5个技巧

消息队列同步

在这里插入图片描述

适合全局唯一的数据,因为可以覆盖;不适合余额之类的数据,因为数据修改无法做到幂等性

库存拆分

在这里插入图片描述

事务合并

在这里插入图片描述

例如:游戏玩家异地充值100,消费60,即使 IDC-B 的业务服务器不知道玩家的实际余额(在 IDC-A 的数据库中),业务也是可以继续处理的,具体实现逻辑如下:

  1. 正常情况下通过数据库同步来同步余额,对应上图的 IDC-A 到 IDC-B 的“余额同步”
  2. 异常情况下,IDC-A 机房挂掉,余额同步中断,可能会导致 IDC-A 和 IDC-B 的数据不同步,例如图中两个余额表的余额,IDC-A 是 30,IDC-B 是65
  3. 玩家到 IDC-B 想消费60块,无论 IDC-B 的余额表中是大于还是小于60,都不能直接消费,因为无法判断这个余额数据是否一致
  4. 玩家到 IDC-B 先充值100块,再消费60块,无论 IDC-B 的余额表中是大于还是小于60,都是允许的,此时 IDC-B 在临时事务表中记录两个事务
  5. IDC-A 恢复后,IDC-B 将临时事务表中的事务发给 IDC-A,IDC-A 进行合并,合并后的真实余额是70元,然后再通过“余额同步”这个通道将70元余额同步给 IDC-B 的余额表

实时改异步

在这里插入图片描述

适当容忍

在这里插入图片描述

业务上稍微放开一些约束,例如:电话会议系统允许欠费也能发起会议

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

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

相关文章

【Linux】linux中你不得不爱的命令集(上)

Linux命令集 我们将要介绍的命令并不是linux中所有的命令,是我们常见的和经常要使用的命令。 我们所用的linux版本是centos7,我们的linux搭建是在腾讯云服务器上搭建的,借助Xshell登录服务器,在root下进行命令行的操作。 目录 L…

[附源码]java毕业设计社区生鲜仓库管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

异地多活架构的3种模式

业务定制型异地多活 按照业务的优先级进行排序,优先保证核心业务异地多活 基于核心业务的流程和数据,设计定制化的异地多活架构 优点 对基础设施无强要求,例如机房部署、存储系统、时延等,一般部署在远距离的两个城市&#xff…

经济师报考专业选择及难度分析!这三个专业每年报考人数超10万!

经济师 经济师考试报考专业设有10个专业,含工商管理、农业经济、财政税收、金融、保险、运输经济、人力资源管理、旅游经济、建筑与房地产经济、知识产权。那么,哪些专业是经济师报考的热门专业?哪些专业前景较好?哪个又更好考呢…

SAP 物料分类账配置详解Part 2( 基于SAP S/4HANA1909 版本)

1.12 检查物料会计科目的结算 1.13 激活在制品实际成本计算 1.14 定义并分配评估策略 1.15 定义实际成本核算/物料分类帐的访问 1.16 分配成本核算码到物料类型 1.17 将评估范围设置为生产 1.12 检查物料会计科目的结算 1.12.1 概念说明 为物料分类账的结账配置自动…

C++模拟OpenGL库——图片处理及纹理系统(二):图片Alpha值混合操作

目录 Alpha值混合操作 更改一些类接口设置,实现Alpha值设定 Alpha值混合操作 先上图,其实原理和ColorLerp的原理一样,一种线性插值的方法来实现Alpha通道的混合。 Alpha通道就是对RGB三个值的一种表现约束,比如Alpha0.5&#x…

使用keytool生成Tomcat证书

一、HTTPS原理 1、HTTP、HTTPS、SSL、TLS介绍与相互关系 (1)HTTP:平时浏览网页时候使用的一种协议。HTTP协议传输的数据都是未加密的(明文),因此使用HTTP协议传输隐私信息非常不安全。 (2&am…

人工智能学习相关笔记

文章目录留出法(hold-out)Artifact (error)理解交叉熵损失函数(CrossEntropy Loss)信息量信息熵相对熵(KL散度)交叉熵交叉熵在单分类问题中的应用回顾知识蒸馏公式对抗学习随机投影(Random Projection)概述基本实现sklearn中的随机投影独立成分分析(ICA)ICA算法ICA 应用sklearn…

tslib库编译与移植

tslib库编译与移植 1.tslib库简介 tslib 是电阻式触摸屏用于校准的一个软件库,是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。 2…

数据结构——顺序表

目录 一.简介 线性表 顺序表 二.结构体与初始化 1.创建 2.初始化 三.功能实现 1.打印 2.销毁 3.扩容 4.尾插 5.尾删 6.头插 7.头删 8.查找元素 9.下标位置的插入与某一数据前的插入 10.下标位置的删除与某一数据的删除 11.头插、头删、尾插、尾删的常态化 一.简…

模块电路选型(1)----电源模块

系列文章目录 1.电源模块 2.主控模块 3.传感器模块 4.通信模块 5.电机驱动模块 6.存储模块 7.人机交互模块 文章目录前言一、DCDC电源模块1、LM2596 DCDC降压模块设计二、LDO电源模块1、1117芯片前言 送给大学毕业后找不到奋斗方向的你(每周不定时更新&#x…

Spring Data JPA之Spring boot整合JPA进行CRUD

Spring boot整合JPA进行CRUD前言系列博客本博客的实现demo环境配置1.POM依赖2.application.yml文件完整的项目结构代码实现实体类启动类创建数据访问层使用Spring Data JPA 创建带条件的CRUD编写业务层创建UserController类运行测试插入用户数据删除用户数据修改数据查询数据根…

kubernetes(K8S)学习笔记P2:搭建K8s集群2种方式

搭建K8s集群:2种方式2.搭建K8s集群--->kubeadm2.1环境准备2.1.1关闭防火墙2.1.2关闭seliux2.1.3关闭swap分区2.1.4设置主机名称2.1.5将桥接的IPv4流量传递到iptables的链2.1.6时间同步2.2三台虚拟机都安装Docker2.3添加阿里云YUM软件源2.4安装/kubeadm/kubelet2.…

dubbo:从零理解及搭建dubbo微服务框架(一)【附带源码】

0.引言 dubbo作为阿里巴巴开源的微服务框架,提供了高性能的RPC调用。同时因为有阿里的背书,在国内市场得到了广泛应用,dubbo的开源工作在2018年2月阿里将项目捐献给apache基金会后,得到了更加广大的发展。 之前我们讲解了spring…

【图像分割】2021-Swin-Unet CVPR

【图像分割】2021-Swin-Unet CVPR 论文题目:Swin-Unet: Unet-like Pure Transformer for Medical Image Segmentation 论文链接:https://arxiv.org/abs/2105.05537 论文代码:https://github.com/HuCaoFighting/Swin-Unet 发表时间&#xff1a…

财政政策与货币政策

财政政策与货币政策 – 潘登同学的宏观经济学笔记 文章目录财政政策与货币政策 -- 潘登同学的宏观经济学笔记中国财政状况中国的财政盈余乘数效应还是李嘉图等价“乘数效应”还是“挤出效应”(crowding out)——“破窗理论”的启示货币政策中国货币的状况…

GreaalVM编译springboot编译springboot

GreaalVM编译springboot编译springboot 原文转自:https://lingkang.top/archives/greaalvm%E7%BC%96%E8%AF%91springboot https://lingkang.top/archives/greaalvm%E7%BC%96%E8%AF%91springboot window下使用GreaalVM编译springboot存在很多坑,主要是…

IfcOpenShell - Python 2022最新安装步骤 兼谈IFC的理解与认识

前言 我之前2020年写了一个IfcOpenShell - Python的安装教程,相信不少对IFC感兴趣的朋友已经看过。两年多以后发生了很多事情,我的工作重心也不再是IFC IFCXML。目前我对IFC的理解就是“底层数据库”,以他为数据库我可以做很多尝试&#xff…

P1113 杂务

分析:可以把每个任务看成都一个节点,如果有2个任务a,b,如果a是b的准备工作,那么就在a,b之间连一条有向边。由于互相没有关系的杂务可以同时工作,所以发现所有杂务都被完成的最短时间取决与最晚被完成的那个任务,于是需要找到最晚被完成任务的时间。 因为题目中有一…

万字详解C++避坑指南总结

前言 C是一门古老的语言,但仍然在不间断更新中,不断引用新特性。但与此同时C又甩不掉巨大的历史包袱,并且C的设计初衷和理念造成了C异常复杂,还出现了很多不合理的“缺陷”。 本文主要有3个目的: 1. 总结一些C晦涩难懂…