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

浅析分布式理论的CAP

大家好,我是易安!

今天让我们来聚焦于分布式系统架构中的重要理论——CAP理论。在分布式系统中,可用性和数据一致性是两个至关重要的因素,而CAP理论就是在这两者之间提供了一种权衡的原则,帮助我们在设计分布式系统时进行决策。同时,CAP理论的出现也深刻影响着分布式系统的发展和设计。但是在当今这个时间点,业界对于CAP理论的理解和应用也在不断地发生变化,我们一起探讨下这些新的思考和认识

什么是 CAP 理论

CAP 理论是加州理工大学伯克利分校的 Eric Brewer 教授在 2000 年 7 月的 ACM PODC 会议上首次提出的,它是 Eric Brewer 在 Inktomi 期间研发搜索引擎、分布式 Web 缓存时得出的关于数据一致性( C:Consistency )、服务可用性( A:Availability )、分区容错性( P:Partition-tolerance )的一个著名猜想:

It is impossible for a web service to provide the three following guarantees : Consistency, Availability and Partition-tolerance.

alt

在这个猜想提出的 2 年以后,来自麻省理工学院的 Seth Gilbert 和 Nancy Lynch 从理论上证明了 Eric Brewer 教授的 CAP 猜想是成立的,从此,CAP 理论在学术上正式成为了分布式领域公认的定理,并深刻影响着分布式系统的发展。

CAP 理论告诉我们, 一个分布式系统不可能同时满足数据一致性、服务可用性和分区容错性这三个基本需求,最多只能同时满足其中的两个。为什么会这样呢?我们先来了解一下 CAP 理论对于数据一致性、服务可用性和分区容错性是怎么定义的。

一致性( C )

CAP 理论中的一致性是指强一致性( Strong Consistency ),又叫线性一致性( Linearizable Consistency ),它要求多节点组成的分布式系统,能像单节点一样运作,如果一个写操作返回成功,那么之后的读请求都必须读到这个新数据;如果返回失败,那么所有的读操作都不能读到这个数据。

一致性中除了强一致性之外,还有其他的一致性级别,比如序列一致性( Sequential Consistency )和最终一致性( Eventual Consistency )等,这个在后面的课程“一致性与共识(一)”中会有详细的介绍。

可用性( A )

CAP 理论对可用性的定义,指的是要求系统提供的服务必须处于 100% 可用的状态,对于用户的每一个操作请求,系统总能够在有限的时间内返回结果。 下面我们重点来讨论可用性定义中的三个关键点:“100%可用”、“有限时间内”和“返回结果”

  • 第一点,100% 可用,既不是 99% 可用,也不是99.99% 可用,它说的是系统必须完全可用,不允许任何不可用的情况出现,这是一个非常理想的模型。
  • 第二点,有限时间内,它指的是对于客户端的一个请求,系统必须在指定的时间内返回对应的请求结果,如果超过了这个时间,系统就被认为是不可用的。一般来说,“有限时间内”是系统在设计的时候,就设定好的系统运行指标,不同的系统之间会有非常大的差别。

例如,对于一个服务在线业务的 OLTP 数据库 MySQL ,它的“有限时间”一般不会超过 1 秒,但是对于服务离线分析的 OLAP 数据库 Hive ,它的“有限时间”可能会超过 30 秒,甚至更长。

虽然不同的系统对于“有限时间”的设定差别非常大,但是对于一个给定的系统来说,在设定了这个“有限时间”之后,只要对一个请求的响应超过了这个时间,我们就认为这个系统是不可用的。

  • 第三点,返回结果,这是指系统在完成对客户端请求的处理后,必须返回一个正常的响应结果。客户端可以根据这个响应结果,来明确判断这个请求执行成功还是失败,而不是返回一个让用户无法判断的不正常的响应结果。

比如客户发起一个请求,从用户 A 的账户转 50 元到用户 B 的账户,“转账成功”和“余额不足”都是正常的响应结果,而“服务不可达”和“服务器内部错误”等就是不正常的响应结果。

分区容错性( P )

分区指的是在整个分布式系统中,因为各种网络原因,系统被分隔成多个单独的部分,它不仅包含我们通常说的网络分区,也包含因为网络丢包导致的网络不通的情况。并且,这里说的因为网络丢包导致网络不通的情形,还包含节点宕机的场景,由于系统的其他机器不知道某个节点宕机了,只知道与宕机节点的网络是不通的,所以当节点宕机发生时,其他节点发往宕机节点的包也将丢失。

在现实的分布式系统中,我们面对的就是一个不可靠的网络和有一定概率宕机的设备,这两个因素都会导致分区出现,因此在分布式系统实现中,分区容错性 P 是一个必须项,而不是可选项。

在分布式系统中,如果我们的设计放弃分区容错性,就相当于我们认为节点之间的网络通信永远是好的,那么我们对节点之间的远程调用的结果,就不需要处理超时、网络地址不可达等网络层错误了。但是这样一来,看似是简化了系统设计,实际却忽视了超时等网络错误的情况。当它们出现后,系统的行为就是未定义的了,可能会出现崩溃,或者是脏数据的问题。

因此,对于分布式系统工程实践来说, CAP 理论更合适的描述是:在满足分区容错的前提下,没有算法能同时满足数据一致性和服务可用性。

CAP 理论争论

关于数据一致性和可用性之间的争论由来已久,当时主要表现为 ACID 与 BASE 之间的争论。

基于 BASE 理论支撑的 NoSQL 运动坚持创造各种可用性优先、数据一致性其次的方案,而传统数据库则坚守 ACID 特性(原子性、一致性、隔离性、持久性),优先数据一致性,在必要的时候,可以放弃系统可用性。当时 BASE 理论还没有被广泛接受,人们还是不愿意放弃 ACID 的优点。

当 CAP 理论提出后,我们明白了在分布式系统中,只能在强一致性和 100% 的可用性之间二选一,不能两个都要。从此 BASE 理论也逐渐被人们所接受,在大规模存储的场景中广泛应用,并且开创了从 2000 年到 2010 年, NoSQL 运动的黄金十年。这十年里,工业界产生了大量优秀的 NoSQL 系统,比如 BigTable 、 HBase 、 MongoDB 、 Cassandra ,解决了人们当时遇到的大规模数据存储的问题。

CAP 理论的重新思考与理解

CAP 理论的出现是有历史使命的,让人们能够在分布式系统中,放弃以关系数据库为代表的 ACID 强一致性系统,接受以 NoSQL 为代表的 BASE 理论,并且暂时解决了人们在 2000 年前后对于分布式系统中,数据一致性和可用性之间的争论,让人们能够更加务实地解决当时由于互联网爆发式发展,产生的海量用户和数据的分布式计算与存储的问题。

一个有历史使命的事物,在使命完成后,要么就过时了,人们不再提起它,要么就会对它有新的解释,让它跟随时代一起发展下去。而 CAP 理论显然属于后者,因为直到现在,人们还在对它不断地重新思考与理解。

在 2000 年的时候,CAP 理论通过一个简单但是精确定义的模型,论证了在一个满足分区容错的分布式系统中,当我们进行系统设计时,只能在数据一致性和服务可用性之间二选一。其中, 数据一致性( C )指的是数据的强一致性,服务的可用性( A )指的是服务100 % 的可用性,这才是 CAP 理论论证模型的关键点

对可用性的重新思考与理解

首先,我们对服务的可用性( A )进行分析,你会发现在我们的日常工作中,几乎没有见过 100% 可用的服务。可用性指标是在 0 到 100% 之间连续分布的,其实一个 100% 可用性的服务和一个 99.9999% 可用性的服务之间并没有多大的差别,如果我们的服务能实现 99.9999% 的可用性,哪怕它不符合 CAP 理论的可用性,也是符合我们工作中对可用性的要求的。

所以,在我们的系统选择了 CP 模型的时候,对于可用性( A ),我们永远无法达到 100%,但是按业务要求不断优化,是我们努力的目标。

关于具体的实践,我认为基于 Raft 算法实现的 etcd 就是一个非常好的,对可用性进行重新思考的实践。如果依据 CAP 理论来划分的话,etcd 属于 CP 模型。

而在 etcd 系统的实现中,如果网络没有出现分区,整个系统是 100% 可用的;就算网络出现分区了,也不会有整个etcd 系统都不可用的情况。在这时,超过半数 etcd 实例所在的网络分区一侧,系统是正常可用的,虽然网络分区的另一侧是不可用的,但是整个 etcd 系统的可用性依然可能超过 50% 。

对一致性的重新思考与理解

对于数据的一致性( C ) ,除了 CAP 理论要求的强一致性外,还有单调一致性、会话一致性和最终一致性等。如果我们的系统设计选择了 AP 模型, 在数据一致性方面,虽然我们无法实现强一致性,但是我们也不要全部放弃,可以努力去实现更高的一致性级别,为系统的服务提供更好的抽象

这里我们通过一个例子来说明,假设我们设计一个 AP 模型的分布式系统,正常情况下,如果依据 CAP 理论,在系统设计时,我们需要放弃数据的一致性。但是,我们可以从另一个思路来设计,在系统没有出现网络分区的时候,这个分布式系统应该设计为强一致性的。

如果出现网络分区了,我们可以根据系统情况,有选择并且精心设计地降低系统的一致性级别。比如,从强一致性降低到单调一致性或会话一致性等,这样的设计,既符合 CAP 理论依据,也为系统提供了更好的一致性级别,特别是在网络分区的时候。

对分区容错性的重新思考与理解

最后,我们来分析一下分区容错性 P 的问题。在分布式系统中,节点之间必须通过网络来通信,可是网络可能会丢包和中断,节点也可能会宕机,这样的情况就要求我们在系统设计的时候,必须做好系统的分区容错处理。

但是,系统出现分区的情况非常少见,所以我们可以来试想一下,在网络不出现分区的时候,我们将数据强一致性和 100% 的可用性都选择,等到网络出现分区的时候,系统再选择放弃部分的可用性或者降低数据一致性的级别,这种处理方式是否可行呢?

其实这样的处理方式是可以的,在上面对可用性和一致性的重新思考与理解中,所举的例子都是按这个方式来处理的, 它实际是将 CAP 理论的选择,推迟到出现网络分区的时候,而不是系统一启动就进行 CAP 的选择。这样可以大大提高系统的可用性和数据一致性,并且系统依然能容忍网络分区。

另外,关于 CAP 理论的重新思考,特别需要说明的一个例子是 Google 的 Spanner ,我们都知道 Spanner 是一个全球分布式数据库,但是 Google 却宣称 Spanner 是一个 CA 系统,这是不是和 CAP 理论的说法产生了矛盾呢?

其实并不矛盾,Spanner 虽然是一个分布式系统,但是它运行在 Google 的内部网络中,并且拥有大量冗余的网络链路、处理相关故障的架构规划、以及非常细致的运维,以此来确保系统的可用性超过了 99.999%。虽然不能达到 100%,但是对于使用者来说,和可用性 100% 几乎没有任何区别,所以Spanner 就是一个 CA 系统。

而且,在网络出现分区的时候,Spanner 会选择一致性而不是可用性,这个时候 CAP 理论依然会生效。所以对于 CAP 理论的重新思考,总而言之就是一句话: CAP 理论给我们定义了系统的设计边界,虽然想要设计出超过边界的系统是徒劳的,但是我们却可以无限逼近边界,并且把它作为我们设计系统的目标。---

总结

今天,我们一起讨论了什么是 CAP 理论,它是指分布式系统中,在满足分区容错的前提下,没有算法能同时满足数据一致性和服务可用性,只能在数据一致性和服务可用性之间二选一。

紧接着,我们讨论了 CAP 理论产生的影响,可以说 CAP 理论的出现,让人们接受了 BASE 理论,并且推动了 NoSQL 运动的发展,开启了它的黄金十年。

最后,我们探讨了现在人们对于 CAP 理论的新理解。对于 AP 模型的系统,我们会努力去提升数据一致性的级别,而对于 CP 模型的系统,我们会努力去提升系统可用性的级别。在网络不出现分区的时候,我们可以将 A 和 C 都选择上;在网络出现分区的时候,通过推迟 CAP 选择来提高系统的可用性和数据一致性。

综上所述,CAP 理论对于分布式系统的设计和实践具有重要意义,让人们在处理数据一致性和服务可用性之间的权衡时,有了更加明确的思路和指导原则。而对于未来的发展,我们相信人们会不断地探索和挑战 CAP 理论的极限,以期创造出更加高效、稳定、可靠的分布式系统。

最后推荐你去读一下周志明老师的<<凤凰架构>>,相信你能有更加深刻的认识。

如果本文对你有帮助的话,欢迎点赞分享,这对我继续分享&创作优质文章非常重要。感谢 !

本文由 mdnice 多平台发布

相关文章:

浅析分布式理论的CAP

大家好&#xff0c;我是易安&#xff01; 今天让我们来聚焦于分布式系统架构中的重要理论——CAP理论。在分布式系统中&#xff0c;可用性和数据一致性是两个至关重要的因素&#xff0c;而CAP理论就是在这两者之间提供了一种权衡的原则&#xff0c;帮助我们在设计分布式系统时进…...

使用 TensorFlow 构建机器学习项目:6~10

原文&#xff1a;Building Machine Learning Projects with TensorFlow 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#x…...

使用 LXCFS 文件系统实现容器资源可见性

使用 LXCFS 文件系统实现容器资源可见性一、基本介绍二、LXCFS 安装与使用1.安装 LXCFS 文件系统2.基于 Docker 实现容器资源可见性3.基于 Kubernetes 实现容器资源可见性前言&#xff1a;Linux 利用 Cgroup 实现了对容器资源的限制&#xff0c;但是当在容器内运行 top 命令时就…...

SQL LIMIT

SQL LIMIT SQL LIMIT子句简介 要检索查询返回的行的一部分&#xff0c;请使用LIMIT和OFFSET子句。 以下说明了这些子句的语法&#xff1a; SELECT column_list FROMtable1 ORDER BY column_list LIMIT row_count OFFSET offset;在这个语法中&#xff0c; row_count确定将返…...

OpenCV实战之人脸美颜美型(六)——磨皮

1.需求分析 有个词叫做“肤若凝脂”,直译为皮肤像凝固的油脂,形容皮肤洁白且光润,这是对美女的一种通用评价。实际生活中我们的皮肤多少会有一些毛孔、斑点等表现,在观感上与上述的“光润感”相反,因此磨皮也成为美颜算法中的一项基础且重要的功能。让皮肤变得更加光润,就…...

Java技术栈—重装系统后不重新安装也能正常使用的设置方式

声明&#xff1a; 最近在重装电脑&#xff0c;重装完后&#xff0c;开发工具会有些功能使用不了&#xff0c;在这做个记录&#xff01;这里是 JAVA 技术栈 问题描述&#xff1a; git 右键无菜单 111 git git 右键无菜单 参考文章&#xff1a;注册表修复git右键无菜单 git …...

智驾升级!ADB+AFS「起势」

目前&#xff0c;乘用车前大灯已经完成从传统卤素、氙气到LED的转型升级&#xff0c;高工智能汽车研究院监测数据显示&#xff0c;2022年中国市场&#xff08;不含进出口&#xff09;乘用车前装标配LED前大灯搭载率达到75.99%&#xff0c;同比2021年提高约7个百分点。 而相比而…...

算法记录 | Day27 回溯算法

39.组合总和 思路&#xff1a; 1.确定回溯函数参数&#xff1a;定义全局遍历存放res集合和单个path&#xff0c;还需要 candidates数组 targetSum&#xff08;int&#xff09;目标和。 startIndex&#xff08;int&#xff09;为下一层for循环搜索的起始位置。 2.终止条件…...

性能测试总结-根据工作经验总结还比较全面

性能测试总结性能测试理论性能测试的策略基准测试负载测试稳定性测试压力测试并发测试性能测试的指标响应时间并发数吞吐量资源指标性能测试流程性能测试工具JMeter基本使用元件构成线程组jmeter的分布式使用jmeter测试报告常用插件性能测试的计算1.根据请求数明细数据计算满足…...

类型断言[as语法 | <> 语法

TypeScript中的类型断言[as语法 | &#xff1c;&#xff1e; 语法] https://huaweicloud.csdn.net/638f0fbbdacf622b8df8e283.html?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.none-task-blog-2~default~CTRLIST~activity-1-107633405-blog-122438115.2…...

barret reduction原理详解及硬件优化

背景介绍 约减算法&#xff0c;通常应用在硬件领域&#xff0c;因为模运算mod是一个除法运算&#xff0c;在硬件中实现速度会比乘法慢的多&#xff0c;并且还会占用大量资源&#xff0c;因此需要想办法用乘法及其它简单运算来替代模运算。模约减算法可以利用乘法、加法和移位等…...

NLP / LLMs中的Temperature 是什么?

ChatGPT, GPT-3, GPT-3.5, GPT-4, LLaMA, Bard等大型语言模型的一个重要的超参数 大型语言模型能够根据给定的上下文或提示生成新文本&#xff0c;由于神经网络等深度学习技术的进步&#xff0c;这些模型越来越受欢迎。可用于控制生成语言模型行为的关键参数之一是Temperature …...

c#快速入门~在java基础上,知道C#和JAVA 的不同即可

☺ 观看下文前提&#xff1a;如果你的主语言是java&#xff0c;现在想再学一门新语言C#&#xff0c;下文是在java基础上&#xff0c;对比和java的不同&#xff0c;快速上手C#&#xff0c;当然不是说学C#的前提是需要java&#xff0c;而是下文是从主语言是java的情况下&#xff…...

nginx--基本配置

目录 1.安装目录 2.文件详解 2.编译参数 3.Nginx基本配置语法 1./etc/nginx/nginx.conf 2./etc/nginx/conf.d/default.conf 3.启动重启命令 4.设置404跳转页面 1./etc/nginx/conf.d/default.conf修改 ​2. 重启 5.最前面内容模块 6.事件模块 1.安装目录 # etc cd …...

R语言中apply系列函数详解

文章目录applylapply, sapply, vapplyrapplytapplymapplyR语言系列&#xff1a; 编程基础&#x1f48e;循环语句&#x1f48e;向量、矩阵和数组&#x1f48e;列表、数据帧排序函数&#x1f48e;apply系列函数 R语言的循环效率并不高&#xff0c;所以并不推荐循环以及循环嵌套…...

红黑树探险:从理论到实践,一站式掌握C++红黑树

红黑树揭秘&#xff1a;从理论到实践&#xff0c;一站式掌握C红黑树引言为什么需要了解红黑树&#xff1f;红黑树在现代C编程中的应用场景树与平衡二叉搜索树树的基本概念&#xff1a;二叉搜索树的定义与性质&#xff1a;平衡二叉搜索树的特点与需求&#xff1a;红黑树基础红黑…...

CDH6.3.2大数据集群生产环境安装(七)之PHOENIX组件安装

添加phoenix组件 27.1. 准备安装资源包 27.2. 拷贝资源包到相应位置 拷贝PHOENIX-1.0.jar到/opt/cloudera/csd/ 拷贝PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel.sha、PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel到/opt/cloudera/parcel-repo 27.3. 进入cm页面进行分发、…...

【C++要笑着学】搜索二叉树 (SBTree) | K 模型 | KV 模型

C 表情包趣味教程 &#x1f449; 《C要笑着学》 &#x1f4ad; 写在前面&#xff1a;半年没更 C 专栏了&#xff0c;上一次更新还是去年九月份&#xff0c;被朋友催更很久了hhh 本章倒回数据结构专栏去讲解搜索二叉树&#xff0c;主要原因是讲解 map 和 set 的特性需要二叉搜索…...

微信小程序开发 | 小程序开发框架

小程序开发框架7.1 小程序模块化开发7.1.1 模块7.1.2 模板7.1.3 自定义组件7.1.4插件7.2 小程序基础样式库—WeUI7.2.1 初识WeUI7.2.2【案例】电影信息展示7.3 使用vue.js开发小程序7.3.1 初识mpvue7.3.2 开发工具7.3.3 项目结构7.3.4【案例】计数器7.4 小程序组件化开发框架7.…...

气候系统设计

基础概念 一个星球&#xff08;例如地球&#xff09;的气候系统主要是一些基本参数基于公转周期&#xff08;年&#xff09;和自转周期&#xff08;日&#xff09;的变化&#xff0c;这其中会有两个变化因素&#xff1a;地理位置&#xff08;经纬度&#xff09;和天气变化&…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...