当前位置: 首页 > news >正文

保定清苑住房和城乡建设局网站/免费企业黄页查询官网

保定清苑住房和城乡建设局网站,免费企业黄页查询官网,动漫制作专业概念,开发者模式打开有什么影响Smark-Link技术 Smark-Link(灵活链路or备份链路,华为/华三 私有用) Smark-Link定义 Smark-Link,又叫备份链路。一个Smark Link由两个接口组组成,其中一个接口作为另一个的备份。Smark-Link常用于双上行组网,提供可靠高效的备份与…

Smark-Link技术

Smark-Link(灵活链路or备份链路,华为/华三 私有用)

Smark-Link定义

Smark-Link,又叫备份链路。一个Smark Link由两个接口组组成,其中一个接口作为另一个的备份。Smark-Link常用于双上行组网,提供可靠高效的备份与高速的切换机制。

Smark-Lin的目的

下游设备连接到上游设备,当采用单上行方式时,若出现单点故障,会造成业务中断。若采用双上行方式,将一台下游设备同时连接到两台上游设备,可降低单点故障对网络的影响。(有点像VRRP,但VRRP是网关冗余,Smartlink是链路的冗余)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-htnZROZu-1682930522581)(./图库/Smark-Link图库/smart-link示意图.png)]

如图所示,SwitchD采用双上行方式连接到SwitchB和C,这样SwitchD到达SwitchA的链路就可以有两条(SwitchD–>SwitchB–>SwitchA和SwitchD–>SwitchC–>SwitchA),但是网络中的环路会产生网络风暴。在SwitchA上配置Smark Link,正常情况下,可实现Interface2所在的链路作为Interface1所在链路的备份。若实例1所在链路发生故障,SmartLink会自动将数据流量切换到实例2所在链路,保证业务不中断。

在此类组网中采用SmarkLink技术有以下优点:

1、能够实现在双上行组网的两条链路正常情况下,一条链路处于转发,而另一条处于堵塞待命状态,从而避免环路的不利影响。

2、配置和使用更为简洁,便于用户操作。

3、当主用链路发生故障后,流量会在毫秒级的时间内迅速切换到备用链路上,极大限度的保证了数据的正常转发。

Smark-Link基本概念

SmarkLink通过两个端口互相配合工作来实现功能。这样的一对端口组储层了一个SmarkLink组。为了区别一个SmarkLink组中的两个端口,我们将其中的一个叫做主端口,另一个叫做从端口。同时利用Flush报文、SmarkLink实例和控制VLAN等机制,以更好地实现SmarkLink的功能(包括负载)

SmarkLink组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WHT80fiP-1682930522582)(./图库/Smark-Link图库/smart-link示意图.png)]

SmarkLink组

SmarkLink组中,一个组内最多可包含两个接口,其中一个为主接口,另一个为从接口。正常情况下,只有一个接口处于Active转发状态,另一个接口被堵塞,处于待命Inactive状态。

看图一(上图)可以发现,SwitchD中interface1为SmarkLink的主接口,Interface2被配置为从接口(也叫Slave接口)

主接口/从接口

当SmarkLink组中的两个接口都处于UP状态时,主接口将由优先进入转发状态,而从接口将保存待命状态。当主接口所在的链路发生过故障时,从接口将切换为转发状态。在发生链路切换后若主链路恢复正常,但此时为了保证链路的稳定是不会主动进行抢占,我们可以通过配置抢占或链路回切功能进行切换。

正常转发情况

链路故障情况

回切时间配置

抢占配置

主接口并不一直处于转发状态,发生链路切换后,如果从接口已经处于转发状态那么此时尽管主链路恢复正常,也只能处于待命状态,直到下次链路发生切换(当然可以配置抢占功能

Flush报文

当链路组发生故障链路切换时,原有的转发表项将不适用于新的拓扑网络,需要整网进行MAC表项和ARP表项的更新。这时,SmarkLink组就要通过FLUSH来告知其他设备进行MAC和ARP和ND(ipv6)表项的刷新操作,如图SmarkLink示意图,当链路发生切换时,SwitchD会发送组播FLUSH报文通知SwitchA,B,C进行MAC和ARP表项的更新。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mzq783do-1682930522583)(./图库/Smark-Link图库/smart-link示意图.png)]

控制VLAN(Control VLAN)

1、控制VLAN的发出

发送控制VLAN是链路备份组用于广播FLUSH报文的VLAN。如图SmarkLINK所示,如果在SwitchD上开启了FLUSH报文发送功能,当发生链路切换时,设备会在发送控制VLAN内广播发送FLUSH报文

2、控制VLAN的接收

接收控制VLAN时上游设备用于接收并处理FLUSH报文的VLAN。如图Smark所示,如果上游设备ABC能够识别FLUSH报文,并开启了FLUSH报文接收处理功能,当发生链路切换时,上游设备会处理收到的属于接收控制VLAN的FLUSH报文,进而刷新MAC和ARP表。

当上游设备收到FLUSH报文时,判断该FLUSH报文的发送控制VLAN是否在收到报文的接口配置的接收控制VLAN列表中,上游设备才会接受并刷新MAC和ARP表。

总结:

发送

控制VLAN就是配合着FLUSH报文,将某某VLAN配置成控制VLAN,那么FLUSH报文将会在该VLAN内发送。

接收

下游端口发送过来的控制VLAN是多少,还要看我本机也就是上游设备,中的接收控制VLAN中,有没有添加这个VLAN,有,那么就接收这个报文,做对应的ARP和MAC地址表项处理,如果没有,那不做处理,直接转发。

SmartLink基本原理

如图所示,分别介绍SmarkLink运行的基本原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hjvKMFnq-1682930522583)(./图库/Smark-Link图库/smart-link示意图.png)]

链路正常

在正常情况下,Interface1为主接口,Interface2为从接口。双上行链路都正常的情况下,主接口出于转发情况,所在的链路是主用链路,从接口处于待命状态,所在链路是备份接口。

数据正常工作时,数据沿着主链路进行传输。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iHsafqjB-1682930522583)(./图库/Smark-Link图库/链路正常工作时流量示意图.png)]

链路故障

当主链路故障时,主接口Interface1切换到待命状态,从接口Interface2切换到转发状态。此时,网络中相关设备上的MAC和ARP表项不再正确了,需要提供一种MAC及ARP更新的机制,目前更新机制有以下两种。

1、通过FLUSH报文通知设备,更新表项,这种方式适用于上游设备均支持Smart-link功能的设备之间(ABC)。为了实现快速链路切换,需要在D上开启FLUSH报文发送功能,在上游设备上所有处于双上行链路上的接口开启接收处理FLUSH报文的功能。

​ (1)SwitchD进行链路切换后,会从新的主用链路上发送该FLUSH报文,即通过Interface2来发送FLUSH。

​ (2)当上游设备收到FLUSH报文时,判断该FLUSH的发送控制vlan,是否在收到报文的接口,所配置的接收控制VLAN列表中。IF:不在,设备对该FLUSH报文不做处理,直接转发;IF:在,设备会处理收到的FLUSH报文,进而执行MAC地址转发表项和ARP转发表项的刷新操作。

注:当主链路故障,从接口接替后。此时,主链路恢复,不进行抢占。如果需要切换,那么要手动切换过去。用以保障网络稳定性

2、自动通过流量更新表项(适用于与不支持Smark-Link功能的设备之间)

这种方法适用于 和不支持SmarkLink功能的设备(包括其他厂商设备)对界的情况,需要有上行流量触发。(其就依靠STP正常的工作原理进行流量切换,收敛时间很慢)

处理:如果没有收到SwitchD的上行流量(TC bpdu)去触发SwitchA的MAC及ARP表项更新,那么当SwitchA收到目的设备为SwitchD的数据报文时,A仍会通过接口3转发出去,但此时报文已经不能到达SwitchD,这样就会造成流量丢失,直到其MAC或ARP表项自动老化。(MAC老化300s,ARP老化1200s)

老化了之后,就需要重新广播ARP报文后,流量才能被发送过去。

总结:

通过FLUSH报文通知设备更新的机制,无需等待表项老化。可以极大程度减少更新所需时间。

链路恢复

当原 主用链路故障恢复时,为了保证网络稳定,不会进行抢占,将继续维持在拥塞状态。但如果希望流量切换回原主用链路,那就通过如下机制进行。

1、使用SmarkLink组回切功能,需要在SwitchD上开启回切功能。当原主用链路故障恢复后,经过回切定时器设定的时间,SmarkLink会自动将流量切换回原主用链路上。

2、通过配置命令,强制让SmarkLInk立即将流量切换到原主用链路上。

Smart-link

Smart-Link组存在2个接口,主和从接口互相协同工作

Smart Link & Monitor Link

介绍

双上行组网是目前常用组网之一,一般情况下通过开启STP来实现网络中的链路冗余备份,但STP不适用于对收敛时间要求很高的用户。Smart Link和Monitor Link可以满足用户快速收敛链路的需求,可以实现主备链路的冗余备份及快速迁移。Smart Link的主要特点是:专用于双上行组网;收敛速度快(达到亚秒级);配置简单,便于用户操作。

Monitor Link通常与Smart Link配合使用,以扩展Smart Link的应用范围。Monitor Link通过监控上行链路对下行链路进行同步设置,达到上行链路故障迅速传达给下行设备,从而触发下游设备上的拓扑协议进行链路的切换,防止长时间因上行链路故障而出现流量丢失。

协议

部署双上行组网时我们就需要采用该协议来进行高速的收敛,SmartLink具体原理如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YD7Vpwbe-1682930522583)(D:\Aa_重要文件\图库\smart-link示意图.png)]

Smark-Link,又叫备份链路。一个Smark Link由两个接口组组成,其中一个接口作为另一个的备份。Smark-Link常用于双上行组网,提供可靠高效的备份与高速的切换机制。

Smark-Lin的目的

下游设备连接到上游设备,当采用单上行方式时,若出现单点故障,会造成业务中断。若采用双上行方式,将一台下游设备同时连接到两台上游设备,可降低单点故障对网络的影响。(有点像VRRP,但VRRP是网关冗余,Smartlink是针对上行组网的链路冗余)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pzcGn8vl-1682930522584)(./图库/Smark-Link图库/smart-link示意图.png)]

如图所示,SwitchD采用双上行方式连接到SwitchB和C,这样SwitchD到达SwitchA的链路就可以有两条(SwitchD–>SwitchB–>SwitchA和SwitchD–>SwitchC–>SwitchA),但是网络中的环路会产生网络风暴。在SwitchA上配置Smark Link,正常情况下,可实现Interface2所在的链路作为Interface1所在链路的备份。若实例1所在链路发生故障,SmartLink会自动将数据流量切换到实例2所在链路,保证业务不中断。而且若采用STP来提供链路冗余切换功能的话,我们采用Smart-link一个很重要的原因是其亚秒级别的收敛。

在此类组网中采用SmarkLink技术有以下优点:

1、能够实现在双上行组网的两条链路正常情况下,一条链路处于转发,而另一条处于堵塞待命状态,从而避免环路的不利影响。

2、配置和使用更为简洁,便于用户操作。

3、当主用链路发生故障后,流量会在毫秒级的时间内迅速切换到备用链路上,极大限度的保证了数据的正常转发。

介绍

基本概念

负载分担

一般情况下,Smart Link的备份链路处于空闲状态,不承担业务数据流量的转发。如希望提高链路的利用率,可以配置负载分担实例,备份链路转发指定负载分担实例内所映射的VLAN数据流量,即允许指定实例对应的VLAN数据通过备份链路进行转发(主链路此时不会对这些VLAN数据进行转发),从而使主链路和备份链路承载不同VLAN数据流量的转发,达到负载分担的目的。

smartlink组配置即可

[load-balance instance { instance-id1 [ to instance-id2 ] } &<1-10> slave,用来配置该实例绑定的VLAN报文从备用接口发送,实现负载分担方式

SmarkLink用于双上行组网,能够提供亚秒级别的快速链路链路切换,SmarkLink组通过2个接口相互配合实验功能,其中一个端口为主端口为转发状态,另一个端口处于从端口备份状态,同时还通过在控制VLAN中发送FLUSH报文方式实现当链路故障时的MAC,ARP,ND表现刷项刷新,链路故障后恢复时我们还有2个功能,一个是回切,回切功能定义了原主链路故障恢复后所经过回切定时器所定义的时间后,那么流量就会切换回原主上,或也可以使用命令强制切换回原主

配置命令


相关文章:

【华为】Smart-Link基础知识

Smark-Link技术 Smark-Link(灵活链路or备份链路&#xff0c;华为/华三 私有用) Smark-Link定义 Smark-Link&#xff0c;又叫备份链路。一个Smark Link由两个接口组组成&#xff0c;其中一个接口作为另一个的备份。Smark-Link常用于双上行组网&#xff0c;提供可靠高效的备份与…...

分享24个强大的HTML属性 —— 建议每位前端工程师都应该掌握

前期回顾 是不是在为 API 烦恼 &#xff1f;好用免费的api接口大全呼之欲出_0.活在风浪里的博客-CSDN博客APi、常用框架、UI、文档—— 整理合并https://blog.csdn.net/m0_57904695/article/details/130459417?spm1001.2014.3001.5501 &#x1f44d; 本文专栏&#xff1a;…...

NIO基础 - 网络编程

non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c;而之前的 stream 要么是输入…...

06.toRef 和 toRefs

学习要点&#xff1a; 1.toRef 和 toRefs 本节课我们来要了解一下 Vue3.x 中的 ref 两个周边 API 的用法&#xff1b; 一&#xff0e;toRef 和 toRefs 1. toRef 可以将源响应式对象上的 property 创建一个 ref 对象&#xff1b; const obj reactive({ name : Mr.Lee, age : 10…...

RabbitMq、Kafka、RocketMq整理

MQ的主要作用:异步提高性能、解耦提高扩展性、削峰。 一、常见中间件对比 Kafka、RocketMq和RabbitMq最大的区别就是:前两个是分布式存储。 1.1、ActiveMq 优点:1)完全支持jms规范的消息中间件 ,2)提供丰富的api, 3)多种集群构建模式。 缺点:)在高并发的场景下,性能可…...

Python多元线性回归预测模型实验完整版

多元线性回归预测模型 实验目的 通过多元线性回归预测模型&#xff0c;掌握预测模型的建立和应用方法&#xff0c;了解线性回归模型的基本原理 实验内容 多元线性回归预测模型 实验步骤和过程 (1)第一步&#xff1a;学习多元线性回归预测模型相关知识。 一元线性回归模型…...

C#基础 变量在内存中的存储空间

变量存储空间&#xff08;内存中&#xff09; // 1byte 8bit // 1KB 1024byte // 1MB 1024KB // 1GB 1024MB // 1TB 1024GB // 通过sizeof方法 可以获取变量类型所占的内存空间&#xff08;单位&#xff1a;字节&#xff09; 有…...

你最关心的4个零代码问题,ChatGPT 帮你解答了!

作为人工智能&#xff08;AI&#xff09;新型聊天机器人模型 ChatGPT&#xff0c;刚上线5天就突破100万用户&#xff0c;两个多月全球用户量破亿&#xff0c;不愧为业界最炙热的当红炸子鸡。 ChatGPT 是一种语言生成模型&#xff0c;由 OpenAI 开发和训练。它是基于 Transform…...

linux的环境变量

目录 一、自定义变量和环境变量的区别 二、自定义变量 三、环境变量 四、查看所有变量&#xff08;自定义变量、环境变量&#xff09; 五、记录环境变量到相关的系统文件 &#xff08;1&#xff09;为什么要这样做&#xff1f; &#xff08;2&#xff09;环境变量相关系统…...

openQA----基于openSUSE部署openQA

【原文链接】openQA----基于openSUSE部署openQA &#xff08;1&#xff09;下载 openqa-bootstrap 脚本并执行 cd /opt/ curl -s https://raw.githubusercontent.com/os-autoinst/openQA/master/script/openqa-bootstrap | bash -x&#xff08;2&#xff09;配置apache proxy…...

正则表达式基础一

BRE(basic regular expression)&#xff1a;匹配数据流中的文本字符 普通文本匹配 特殊字符 正则表达式存在一些特殊字符&#xff0c;如需当成普通文本来匹配&#xff0c;必须加上转义&#xff0c;即反斜杠\&#xff0c;如下所示 .*[]^${}?|() 指定出现位置的字符 ^ 指定行首…...

Java中的内存泄露、内存溢出与栈溢出

内存泄露、内存溢出与栈溢出 1、概述2、内存泄漏、内存溢出和栈溢出2.1、内存泄漏2.2、内存溢出2.3、栈溢出 2、总结 1、概述 大家好&#xff0c;我是欧阳方超。本次就Java中几个相似而又不同的概念做一下介绍。内存泄漏、内存溢出和栈溢出都是与内存相关的问题&#xff0c;但…...

时序预测 | Matlab实现SSA-GRU、GRU麻雀算法优化门控循环单元时间序列预测(含优化前后对比)

时序预测 | Matlab实现SSA-GRU、GRU麻雀算法优化门控循环单元时间序列预测(含优化前后对比) 目录 时序预测 | Matlab实现SSA-GRU、GRU麻雀算法优化门控循环单元时间序列预测(含优化前后对比)预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现SSA-GRU、GRU麻雀算法…...

Java+springboot开发的医院HIS信息管理系统实现,系统部署于云端,支持多租户SaaS模式

一、项目技术框架 前端&#xff1a;AngularNginx 后台&#xff1a;JavaSpring&#xff0c;SpringBoot&#xff0c;SpringMVC&#xff0c;SpringSecurity&#xff0c;MyBatisPlus&#xff0c;等 数据库&#xff1a;MySQL MyCat 缓存&#xff1a;RedisJ2Cache 消息队列&…...

【前端面经】Vue-Vue中的 $nextTick 有什么作用?

Vue.js 是一个流行的 JavaScript 框架&#xff0c;它提供了许多实用的功能&#xff0c;其中之一就是 $nextTick 方法。 在 Vue.js 中&#xff0c; $nextTick 方法可以确保我们在更新 DOM 之后再去执行某些操作&#xff0c;从而避免由于 DOM 更新而导致的问题。这个方法非常实用…...

基于STATCOM的风力发电机稳定性问题仿真分析(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

如何写出高质量的代码

背景说明&#xff1a; 你是否曾经为自己写的代码而感到懊恼&#xff1f;你是否想过如何才能写出高质量代码&#xff1f;那就不要错过这个话题&#xff01;在这里&#xff0c;我们可以讨论什么是高质量代码&#xff0c;如何写出高质量代码等问题。无论你是初学者还是资深开发人…...

15.基于主从博弈的智能小区代理商定价策略及电动汽车充电管理

说明书 MATLAB代码&#xff1a;基于主从博弈的智能小区代理商定价策略及电动汽车充电管理 关键词&#xff1a;电动汽车 主从博弈 动态定价 智能小区 充放电优化 参考文档&#xff1a;《基于主从博弈的智能小区代理商定价策略及电动汽车充电管理》基本复现 仿真平台&#…...

ChatGPT实现多语种翻译

语言翻译 多语种翻译是 NLP 领域的经典话题&#xff0c;也是过去很多 AI 研究的热门领域。一般来说&#xff0c;我们认为主流语种的互译一定程度上属于传统 AI 已经能较好完成的任务。比如谷歌翻译所采用的的神经机器翻译(NMT, Neural Machine Translation)技术就一度让世人惊…...

volatile关键字原理的使用介绍和底层原理解析和使用实例

文章目录 volatile关键字原理的使用介绍和底层原理解析和使用实例1. volatile 关键字的作用2. volatile 的底层原理3. volatile 的使用案例4. volatile 的原子性问题5. 如何解决 volatile 的原子性问题6. volatile 的实现原理7. 小结8. volatile的最佳实践9. 案例:使用volatile…...

【软件下载】换新电脑记录下下载的软件时所需地址

1.idea https://www.jetbrains.com/zh-cn/idea/download/other.html 2.oracle官方&#xff08;下载jdk时找的&#xff09; https://www.oracle.com/ 3.jdk8 https://www.oracle.com/java/technologies/downloads/ 下拉找到jdk8 切换windows &#xff08;需要注册个oracle账…...

【10.HTML入门知识-CSS元素定位】

1 标准流&#xff08;Normal Flow&#xff09; 默认情况下&#xff0c;元素都是按照normal flow&#xff08;标准流、常规流、正常流、文档流【document flow】&#xff09;进行排布  从左到右、从上到下按顺序摆放好  默认情况下&#xff0c;互相之间不存在层叠现象 1.1…...

LeetCode_贪心算法_简单_455.分发饼干

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的…...

HashMap

目录 HashMap是什么&#xff1f; 为什么要使用HashMap&#xff1f; HashMap存储元素原理&#xff08;put⽅法&#xff09; 扰动函数 前置知识 异或运算 &运算 为什么使用扰动函数 实验验证扰动函数 常见问题 HashMap的默认长度是多少&#xff1f; HashMap是先扩…...

数据结构初阶 —— 树(堆)

目录 一&#xff0c;堆 堆的概念 向下调整法&#xff08;数组&#xff09; 向上调整法&#xff08;数组&#xff09; 堆的创建&#xff08;建堆&#xff09; 堆的实现 一&#xff0c;堆 堆的概念 如有个关键码的集合K{&#xff0c;&#xff0c;&#xff0c;...&#xf…...

一文看懂低代码,5分钟从入门到原理全搞定

全球低代码市场已经走过了近20年&#xff0c;中国低代码市场近5年经历了百花齐放的广泛探索阶段&#xff0c;更旺盛的市场需求逐步在被激发。现在&#xff0c;让我们按下暂停键&#xff0c;看看这些产品给我们呈现了低代码市场一幅怎样的百景图。 低代码平台简介 广义上的低代…...

MetaERP系统主要干什么的,华为自研ERP的路子是否可以效仿?

近日&#xff0c;华为成功研发出自主可控的MetaERP系统&#xff0c;并完成了对旧有ERP系统的替换。该系统采用全栈自主可控技术&#xff0c;基于华为欧拉操作系统、GaussDB等根技术&#xff0c;采用云原生架构、元数据多租架构、实时智能技术等&#xff0c;提高业务效率&#x…...

自动驾驶——离散LQR的黎卡提方程Riccati公式推导与LQR工程化

1.LQR Question Background 之前写过连续系统的黎卡提方程Riccati推导&#xff0c;但是考虑到实际工程落地使用的是离散系统&#xff0c;于是又进行了离散黎卡提方程Riccati的公式推导。 2.Proof of Riccati Equation Formula for Discrete Systems 工程化落地&#xff0c;就…...

28.Mybatis的入门

目录 一、Mybatis的入门。 &#xff08;1&#xff09;Mybatis的简介。 &#xff08;2&#xff09;Mybatis的快速入门。 &#xff08;2.1&#xff09;快速入门。 &#xff08;2.2&#xff09;UserMapper.xml文件。 &#xff08;2.3&#xff09;sqlMapConfig.xml文件。 …...

Android Jetpack 从使用到源码深耕【ViewModel从实践到原理 】(三)

上文,我们通过简单的ViewModel使用源码入手,对其源码进行阅读,原理进行了简单总结,简单来说,ViewModel是通过Activity的onRetainNonConfigurationInstance 与 getLastNonConfigurationInstance的自动调用,实现了 ViewModel数据的存储和恢复,数据存储在ViewModelStore的m…...