一种虚拟机业务快速恢复方法、系统、装置及存储介质与流程

文档序号:16781157发布日期:2019-02-01 19:08阅读:131来源:国知局
一种虚拟机业务快速恢复方法、系统、装置及存储介质与流程

本申请涉及故障节点恢复领域,特别涉及一种虚拟机业务快速恢复方法、系统、装置及计算机可读存储介质。



背景技术:

在当今信息化时代,支撑人们完成一项项任务的便利服务都由其产品或服务商提供,这些服务或业务的可用性也由提供商来进行保障,根据受众的量级,提供商可有选择的选用单台服务器或复数的服务器集群来提供业务和保障业务的高可用性。

为提升服务器设备的可用性,在一台物理机性能富余的情况下,还可以利用虚拟化技术将一台物理机虚拟为多台虚拟机,通过为每台虚拟机设置不同的虚拟硬件参数,使得一台物理机可承载多种不同业务,得以显著提升设备性能的利用率,在由复数物理机构建的业务集群中,会存在更多的虚拟机。

在承载某一业务或专为某一固定区域用户提供业务的虚拟机因故障掉线时,会造成该业务或该区域内所有用户在此业务上的使用中断,在此种情况下,业务提供商为了充分保有用户流量和使用体验,最着急的就是如何恢复该业务,传统的方式是将原先出现故障的虚拟机的备份数据通过拷贝的方式转移至另一台可用虚拟机的虚拟机镜像中,待完整数据转移后,该可用虚拟机将替代故障虚拟机再次提供该业务。

若备份数据中的数据量较大,会导致整个数据转移过程耗时极长,顺带导致替换虚拟机基于此量级的数据在开机自检的过程也相应延长,这也就意味着用户会出现长时间的业务终端,这将是大部分用户难以忍受的,同时也会加深用户对该业务提供商的不信任和怀疑程度。

因此,如何克服现有业务恢复方式中存在的各项技术缺陷,提供一种无论备份数据中数据量多少均可快速恢复业务的虚拟机业务快速恢复方法是本领域技术人员亟待解决的问题。



技术实现要素:

本申请的目的是提供一种虚拟机业务快速恢复方法,出于尽可能精简的考虑,备份数据通常不能像位于虚拟机镜像中的原始数据一样被外界正常访问,只提供了进行数据备份的相关功能组件来在原始数据无法被访问时进行数据转移使用,本申请通过为备份数据添加数据通讯组件,使其可作为一个被访问的对象正常接收读请求来对原先就存在的数据进行处理,而新写入的数据可直接写入替换虚拟机的虚拟机镜像中,由于无需等待数据转移完成,且通讯组件的添加并不与数据量相关,耗时极短,可显著减少业务恢复耗时,用户使用体验更佳、满意度更高。

本申请的另一目的在于提供了一种虚拟机业务快速恢复系统、装置及计算机可读存储介质。

为实现上述目的,本申请提供一种虚拟机业务快速恢复方法,包括:

为故障虚拟机的备份数据增加数据通讯组件,得到可通讯备份数据;

接收所述故障虚拟机的数据访问请求,并确定所述数据访问请求的类型;

当所述数据访问请求为写请求时,将所述写请求对应的新数据写入替换虚拟机的虚拟机镜像;

当所述数据访问请求为读请求时,从所述可通讯备份数据中选取与所述读请求对应的目标数据,并返回所述目标数据。

可选的,该虚拟机业务快速恢复方法还包括:

以预设同步速度将所述备份数据同步至所述替换虚拟机的虚拟机镜像中。

可选的,该虚拟机业务快速恢复方法还包括:

当所述备份数据全部同步至所述替换虚拟机的虚拟机镜像中后,通过预设路径返回替换虚拟机同步完成信号;

根据所述替换虚拟机同步完成信号将所述读请求的发送路径修改为所述虚拟机镜像。

可选的,该虚拟机业务快速恢复方法还包括:

创建预设数量的备份空白虚拟机,并控制所述备份空白虚拟机处于低功耗待机状态,得到备份虚拟机池;

当原业务虚拟机故障时,从所述备份虚拟机池中任选一个备份空白虚拟机,得到所述替换虚拟机;

建立并记录所述原业务虚拟机与所述替换虚拟机间的替换关系。

为实现上述目的,本申请还提供了一种虚拟机业务快速恢复系统,包括:

可通讯处理单元,用于为故障虚拟机的备份数据增加数据通讯组件,得到可通讯备份数据;

请求接收及类型确定单元,用于接收所述故障虚拟机的数据访问请求,并确定所述数据访问请求的类型;

写请求处理单元,用于当所述数据访问请求为写请求时,将所述写请求对应的新数据写入替换虚拟机的虚拟机镜像;

读请求处理单元,用于当所述数据访问请求为读请求时,从所述可通讯备份数据中选取与所述读请求对应的目标数据,并返回所述目标数据。

可选的,该虚拟机业务快速恢复系统还包括:

数据同步单元,用于以预设同步速度将所述备份数据同步至所述替换虚拟机的虚拟机镜像中。

可选的,该虚拟机业务快速恢复系统还包括:

同步完成信号发送单元,用于当所述备份数据全部同步至所述替换虚拟机的虚拟机镜像中后,通过预设路径返回替换虚拟机同步完成信号;

读请求发送路径修改单元,用于根据所述替换虚拟机同步完成信号将所述读请求的发送路径修改为所述虚拟机镜像。

可选的,该虚拟机业务快速恢复系统还包括:

备份虚拟机创建单元,用于创建预设数量的备份空白虚拟机,并控制所述备份空白虚拟机处于低功耗待机状态,得到备份虚拟机池;

替换虚拟机选取单元,用于当原业务虚拟机故障时,从所述备份虚拟机池中任选备份空白虚拟机,得到所述替换虚拟机;

替换关系建立及记录单元,用于建立并记录所述原业务虚拟机与所述替换虚拟机间的替换关系。

为实现上述目的,本申请还提供了一种虚拟机业务快速恢复装置,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上述内容所描述的虚拟机业务快速恢复方法的步骤。

为实现上述目的,本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述内容所描述的虚拟机业务快速恢复方法的步骤。

显然,本申请所提供的一种虚拟机业务快速恢复方法,出于尽可能精简的考虑,备份数据通常不能像位于虚拟机镜像中的原始数据一样被外界正常访问,只提供了进行数据备份的相关功能组件来在原始数据无法被访问时进行数据转移使用,本申请通过为备份数据添加数据通讯组件,使其可作为一个被访问的对象正常接收读请求来对原先就存在的数据进行处理,而新写入的数据可直接写入替换虚拟机的虚拟机镜像中,由于无需等待数据转移完成,且通讯组件的添加并不与数据量相关,耗时极短,可显著减少业务恢复耗时,用户使用体验更佳、满意度更高。本申请同时还提供了一种虚拟机业务快速恢复系统、装置及计算机可读存储介质,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例提供的一种虚拟机业务快速恢复方法的流程图;

图2为本申请实施例提供的另一种虚拟机业务快速恢复方法的流程图;

图3为本申请实施例提供的一种虚拟机业务快速恢复方法的原理示意图;

图4为本申请实施例提供的一种创建虚拟机的流程图;

图5为本申请实施例提供的一种hypervisor处理读请求的流程图;

图6为本申请实施例提供的一种虚拟机业务快速恢复系统的结构框图。

具体实施方式

本申请的核心是提供一种虚拟机业务快速恢复方法、系统、装置及计算机可读存储介质,出于尽可能精简的考虑,备份数据通常不能像位于虚拟机镜像中的原始数据一样被外界正常访问,只提供了进行数据备份的相关功能组件来在原始数据无法被访问时进行数据转移使用,本申请通过为备份数据添加数据通讯组件,使其可作为一个被访问的对象正常接收读请求来对原先就存在的数据进行处理,而新写入的数据可直接写入替换虚拟机的虚拟机镜像中,由于无需等待数据转移完成,且通讯组件的添加并不与数据量相关,耗时极短,可显著减少业务恢复耗时,用户使用体验更佳、满意度更高。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。

实施例一

以下结合图1,图1为本申请实施例提供的一种虚拟机业务快速恢复方法的流程图,其具体包括以下步骤:

s101:为故障虚拟机的备份数据增加数据通讯组件,得到可通讯备份数据;

本步骤旨在使得原先可能不具有被访问能力的备份数据具有像原始数据所在的虚拟机镜像一样的能力,以便于可以直接基于可通讯备份数据实现对已有数据的访问。

备份数据本身就是为了防止因异常导致原始数据无法访问现象给出的一种解决方案,通常情况下,备份数据的存放位置区别于原始数据的存放位置,尤其在由多台物理机、多个硬盘构成的集群中,备份数据与原始数据会分别存在与两个不同的硬盘中,以防止因故障导致整个硬盘损坏时出现的备份数据也不可用的情况。

同时,为了精简设计,通常备份数据仅是原始数据的镜像,并不具有像原始数据一样的实际外部请求并进行相关读写操作的能力,其最多只具有数据同步、增量同步、一致性判别等用于实现数据备份的最基本功能,在原虚拟机因故障掉线时,备份数据的正常使用方法就如同背景技术部分所描述的那样:寻找一个替换用虚拟机,将备份数据通常拷贝的方式转移至替换虚拟机的虚拟机镜像中,再通过常规开机的自检程序后即可承载之前故障虚拟机的业务,此种方式下,随着备份数据中数据量的增大,从业务故障点到业务恢复点的时间跨度(rto)极大,且造成用户较差的使用体验。

区别于现有技术,本步骤旨在将备份数据进行一些处理,使其无需必须通过拷贝至替换虚拟机的虚拟机镜像中才得以发挥作用,即通过进行一些组件配置或调整,使其可以像虚拟机镜像一样正常承接来自外部的访问请求,由于不同实际场景下对备份数据的功能定义不尽相同,所以可能无法确定具体需要哪些处理,可根据实际情况,在进行抽象处理(抽象为一种可被访问的虚机镜像)、增添通讯组件以及其它辅助处理方式中进行灵活选择,此处并不做具体限定,目的在于使得经过处理后的备份数据可像虚拟机镜像一样正常承接来自外部的访问请求,使得故障虚拟机所承载的业务得以快速恢复。

s102:接收故障虚拟机的数据访问请求,并确定数据访问请求的类型;

在s101的基础上,本步骤旨在接收应由故障虚拟机处理的数据访问请求,并进一步确定各数据访问请求的类型,以便于根据数据访问请求类型的不同采取不同的方式实现数据访问目的,具体的,数据访问请求可分为读请求和写请求两大类,其中,读请求主要基于已有数据进行查询、索引等操作,通常会要求返回目标数据,而写请求通常包括对已有数据的修改、新数据的增添等,这正是因为两类数据访问请求对已有数据的需求不同,后续将分别采用替换虚拟机的虚拟机镜像和可通讯备份数据来分别实现两种不同的需求,以快速、完整的恢复故障虚拟机所承载的业务。

s103:当数据访问请求为写请求时,将写请求对应的新数据写入替换虚拟机的虚拟机镜像;

本步骤建立在s102中数据访问请求的类型具体为写请求的基础上,旨在将与该写请求对应的写数据写入替换虚拟机的虚拟机镜像中,其中,替换虚拟机为用于替换故障虚拟机的一个可用虚拟机。

s104:当数据访问请求为读请求时,从可通讯备份数据中选取与读请求对应的目标数据,并返回目标数据。

本步骤建立在s102的数据访问请求的类型具体为读请求的基础上,旨在从可通讯备份数据中选取与该读请求对应的目标数据,并原路返回该读请求想要的目标数据。

需要说明的是,从图1和对s103、s104的描述可以看出,s103和s104是基于s104具体给出的两个并行分支,此处虽然使用s103和s104的表述,但两者之间并不存在先后顺序。

还需要明确的是,虽然经过了上述处理,使得基于备份数据存储的已有数据可用于实现对读请求的正常处理,但毕竟不是替换虚拟机的正常使用方法,且由于诸多差异的存在,使得上述方式仅适用于短期内业务快速恢复,为了使得完整的数据访问请求均可基于替换虚拟机的虚拟机镜像实现,还可以在后台以缓慢同步的方式,将备份数据中存储的数据慢慢同步至虚拟机镜像中,以在完成数据同步后可真正实现同一业务的虚拟机替换作业。

其中,数据的同步速度可根据实际情况下处理读请求对可通讯备份数据的影响程度、可用带宽等因素灵活设置,此处并不做具体限定。

进一步的,还可以在数据同步完成后,反馈一个通知信号,以在接收到该通知信号后,断开与可通讯备份数据间的连接,并收回原交由可通讯备份数据处理的读请求,统一由完成数据同步的替换虚拟机镜像进行处理。

另外,为了进一步加快在承载业务的虚拟机突然故障时的业务恢复速度,还可以预先创建好一些拥有空白虚拟机镜像的备份可用虚拟机,并出现需要替换的情况时,可基于某种选取规则选取相应数据的可用虚拟机作为替换虚拟机使用,此种情况下,由于不像拷贝有原备份数据的虚拟机镜像,其开机自检的过程也会大大加快。其中,选取规则包括但不限于:就近规则、基于优先级的选取规则、按编号选取规则等等,此处也不做具体限定,可根据实际情况灵活选择。

基于上述技术方案,本申请实施例提供的一种虚拟机业务快速恢复方法,出于尽可能精简的考虑,备份数据通常不能像位于虚拟机镜像中的原始数据一样被外界正常访问,只提供了进行数据备份的相关功能组件来在原始数据无法被访问时进行数据转移使用,本申请通过为备份数据添加数据通讯组件,使其可作为一个被访问的对象正常接收读请求来对原先就存在的数据进行处理,而新写入的数据可直接写入替换虚拟机的虚拟机镜像中,由于无需等待数据转移完成,且通讯组件的添加并不与数据量相关,耗时极短,可显著减少业务恢复耗时,用户使用体验更佳、满意度更高。

实施例二

以下结合图2,图2为本申请实施例提供的另一种虚拟机业务快速恢复方法的流程图,本实施例在实施例一的基础上,通过s205、s206以及s207还提供了一种可仅通过虚拟机镜像完成所有类型数据访问请求的处理的方法,在实施例一提供的适用于短期内完成业务快速恢复的方法的基础上,还得以使业务持久化,具体实施步骤如下:

s201:为故障虚拟机的备份数据增加数据通讯组件,得到可通讯备份数据;

s202:接收故障虚拟机的数据访问请求,并确定数据访问请求的类型;

s203:当数据访问请求为写请求时,将写请求对应的新数据写入替换虚拟机的虚拟机镜像;

s204:当数据访问请求为读请求时,从可通讯备份数据中选取与读请求对应的目标数据,并返回目标数据;

s205:以预设同步速度将备份数据同步至替换虚拟机的虚拟机镜像中;

s206:当备份数据全部同步至替换虚拟机的虚拟机镜像中后,通过预设路径返回替换虚拟机同步完成信号;

s207:根据替换虚拟机同步完成信号将读请求的发送路径修改为虚拟机镜像。

本实施例通过在接收到备份数据全部同步至替换虚拟机的虚拟机镜像中后返回的替换虚拟机同步完成信号,将读请求的发送路径修改为虚拟机镜像,即从原先需要由存储有已有数据的可通讯备份数据实现,此时可通过虚拟机镜像完成所有类型的数据访问请求的处理。

在申请的另一实施例中,还提供了一种如何创建替换备份用虚拟机,并在上述实施例提供的各步骤中发挥作用的方法,具体实施步骤包括:

创建预设数量的备份空白虚拟机,并控制备份空白虚拟机处于低功耗待机状态,得到备份虚拟机池;当原业务虚拟机故障时,从备份虚拟机池中任选一个备份空白虚拟机,得到替换虚拟机;建立并记录原业务虚拟机与替换虚拟机间的替换关系。

其中,记录替换关系是用于明确业务的交接,以便于后续追溯。

实施例三

请参见图3,本实施例结合具体的虚拟机创建过程以及具体用于实现业务恢复的工具,给出了一种较为具体的实现方式,图3为本实施例提供的实现方式的原理示意图:

以下首先对将设计的术语进行解释:

空镜像:没有任何数据的虚拟磁盘镜像;

虚拟机镜像:在虚拟机化环境中建立虚拟机后其所拥有的用于存放数据的虚拟磁盘镜像;

副本镜像:本文中数据代理服务对备份数据进行抽象后对外呈现的和虚拟机镜像大小完全一样的虚拟磁盘镜像,使得备份数据可如正常虚拟机镜像一样处理数据访问请求;

hypervisor:虚拟机监视器,用于计算机系统的虚拟化。

数据代理服务将目标备份数据对外抽象呈现为一个虚拟机镜像的副本镜像,副本镜像的大小和虚拟机镜像的大小完全一样,在恢复的初始化状态下虚拟机所有的数据都在副本镜像(即备份数据)中,实际的虚拟机镜像仅仅是一个没有数据的空镜像。数据代理服务进程通过网络对外提供访问副本镜像的能力,提供网络版的读取副本镜像文件裸数据的接口(参数主要为文件偏移地址及数据量),而数据代理服务内部寻址以及映射备份数据的过程外界不需感知。

hypervisor中有一个访问虚拟机镜像的驱动程序,通过驱动程序通过网络访问副本镜像的过程对hypervisor而言是透明,hypervisor仅仅认为其访问的就是一个普通的虚拟磁盘,当块设备驱动层发起读取副本镜像文件数据的调用时则会走网络调用而不是本地文件系统调用;hypervisor运行时恢复备份数据的过程通过写时拷贝、读时拷贝以及持续的数据搬运任务三种手段来实现影子镜像数据(即备份数据)到虚拟机镜像的搬运。

以下还提供了一种替换用虚拟机的创建方法和数据读取方法,分别对应图4和图5,其中替换用虚拟机的创建方法如图4所示,具体步骤如下:

1、向数据代理服务发起恢复指定备份数据的请求,数据代理服务会将指定备份点相关的数据抽象成为一个副本镜像;

2、创建空镜像作为替换用虚拟机的虚拟机镜像,里面没有任何数据;

3、hypervisor建立副本镜像和虚拟机镜像的映射关系;

初始化状态下,步骤2创建的虚拟机镜像实际上是空镜像,所以要建立两者的关联关系,这样就能访问到副本镜像中的备份数据,访问过程见如图5所示的数据读取流程。

4、执行开机操作,替换用虚拟机在进行完常规自检操作后便运行起来。

以hypervisor为执行主体的数据读取方法如图5所示,具体步骤如下:

1、hypervisor发起磁盘数据读取请求;

2、判断目标数据是否在虚拟机镜像中,如果在虚拟机镜像中转步骤3,否则转步骤5;

3、虚拟机镜像中已存在目标数据,直接读取即可;

4、返回读取到的目标数据;

5、虚拟机镜像中不存在目标数据,说明目标数据在备份数据中,所以从副本镜像中读取目标数据;

6、将读取到的目标数据写入到虚拟机镜像中,这个操作完成了目标数据从备份数据到虚拟机镜像的搬运;

7、返回读取到的目标数据。

下面还提供了一种持续转移备份数据中存储的已有数据至虚拟机镜像的方法,具体如下:

1、判断是否已经完成整个备份数据的搬运,如果已完成则结束流程,否则跳转至步骤2;

2、选择未拷贝的目标数据,发起拷贝操作,将目标数据拷贝至虚拟机镜像,循环步骤2,直至完成所有数据的拷贝操作。

相比于传统业务恢复方法,本实施例将所恢复虚拟机的运行建立在备份数据之上,对备份数据的访问模式是只读模式,虚拟机只能从备份数据中读取所需的数据,而新的数据更改则写入到虚拟机自身的虚拟机镜像中,并在虚拟机运行的过程中,逐渐将备份数据拷贝到虚拟机实际的镜像中,以最终达到恢复备份数据的目的。

基于上述操作,可使得恢复虚拟机的rto非常短,1分钟恢复业务虚拟机的运行成为可能,且恢复运行的耗时不会随着备份数据量增大而增大,而在备份数据被抽象为磁盘镜像的过程中,备份数据的组织形式及存放格式对于hypervisor而言是透明的,hypervisor无需感知备份的细节,两者实现了清晰的隔离,维护性和扩展性更佳。

因为情况复杂,无法一一列举进行阐述,本领域技术人员应能意识到根据本申请提供的基本方法原理结合实际情况可以存在很多的例子,在不付出足够的创造性劳动下,应均在本申请的保护范围内。

下面请参见图6,图6为本申请实施例提供的一种虚拟机业务快速恢复系统的结构框图,该系统可以包括:

可通讯处理单元100,用于为故障虚拟机的备份数据增加数据通讯组件,得到可通讯备份数据;

请求接收及类型确定单元200,用于接收故障虚拟机的数据访问请求,并确定数据访问请求的类型;

写请求处理单元300,用于当数据访问请求为写请求时,将写请求对应的新数据写入替换虚拟机的虚拟机镜像;

读请求处理单元400,用于当数据访问请求为读请求时,从可通讯备份数据中选取与读请求对应的目标数据,并返回目标数据。

进一步的,该虚拟机业务快速恢复系统还可以包括:

数据同步单元,用于以预设同步速度将备份数据同步至替换虚拟机的虚拟机镜像中;

同步完成信号发送单元,用于当备份数据全部同步至替换虚拟机的虚拟机镜像中后,通过预设路径返回替换虚拟机同步完成信号;

读请求发送路径修改单元,用于根据替换虚拟机同步完成信号将读请求的发送路径修改为虚拟机镜像。

更进一步的,该虚拟机业务快速恢复系统还可以包括:

备份虚拟机创建单元,用于创建预设数量的备份空白虚拟机,并控制备份空白虚拟机处于低功耗待机状态,得到备份虚拟机池;

替换虚拟机选取单元,用于当原业务虚拟机故障时,从备份虚拟机池中任选备份空白虚拟机,得到替换虚拟机;

替换关系建立及记录单元,用于建立并记录原业务虚拟机与替换虚拟机间的替换关系。

基于上述实施例,本申请还提供了一种虚拟机业务快速恢复装置,该装置可以包括存储器和处理器,其中,该存储器中存有计算机程序,该处理器调用该存储器中的计算机程序时,可以实现上述实施例所提供的步骤。当然,该装置还可以包括各种必要的网络接口、电源以及其它零部件等。

本申请还提供了一种计算机可读存储介质,其上存有计算机程序,该计算机程序被执行终端或处理器执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

本文中应用了具体个例对本申请的原理及实施方式进行了阐述,且各个实施例间为递进关系,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,可参见对应的方法部分说明。以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1